现在的位置: 首页 > 综合 > 正文

架构师接龙:黄冬&邓毅

2017年11月15日 ⁄ 综合 ⁄ 共 2613字 ⁄ 字号 评论关闭
 

提问嘉宾:

黄冬,多年软件开发、系统架构、系统运营的经验。长期关注高可用性、高可扩展性的系统架构设计。主持设计和运行过多个大型高容量产品和系统。是中国FreeBSD

Python
社区的发起者和积极参与者,也是国内啄木鸟(
http://www..woodpecker.org.cn
)社区的创始人之一。现在北京从事系统架构咨询及系统运营外包的的创业。

 

回答嘉宾:

邓毅,网易有道技术总监,负责新技术与应用研究团队的工作,带领很多有道核心技术的开发。清华大学计算机系博士学位,在模式识别、计算机视觉等领域有丰富的研究经验。

 

 

黄冬:
互联网在过去的数年中发展迅速,交换带宽已经从10M
迅速提升到了万
M
,而计算机的总线、
CPU
计算能力出现了很多瓶颈。经常会发现一台服务器的带宽有千
M
甚至更高,而使用的却不足,在架构上有什么考虑,让一台服务器能更多用起这样的带宽来?

邓毅:
网络技术的高速发展的确使得单台服务器的带宽有了很大的提高,这可以使得一些以前不太好做的事情更容易的实现。

一方面,对于后台计算服务部分,高速的带宽使得我们可以把更多的服务器通过以太网连接起来,进行大规模的分布式运算,让不同的机器处理大数据的不同部分,再通过网络把数据进行汇总,从而得到以前需要大型机才能获得的超大规模的计算能力,这让我们可以从海量的数据中分析出更加有用的信息。此外,通过网络,我们可以把多台机器联合起来组成分布式的存储系统,从而提高系统的存储容量、访问带宽以及可靠性。

另一方面,在前端与用户直接接触的部分,由于带宽的提升、网速的变快,用户的客户端程序可以更加频繁的与服务器进行通讯,传输更多的数据,“云计算”或者“软件加服务”的模式,使得原来单机服务无法实现的功能或者服务质量得以实现。例如有道的词典,当存在网络连接的时候,客户端的软件会把查询需求发送到服务器端,服务器端可以在一个非常大的词库中进行查询,还可以做一些智能分析的操作,从而在不占用用户本地资源的情况下,大大提升用户的体验。另一个例子是类似“云杀毒”之类的应用,通过网络把数据传回服务器进行杀毒,也是充分利用当今互联网的带宽。

 

 

黄冬:
作为负载均衡的一种方式,基于四层、七层的负载均衡交换在很长的时间里都是一种非常简单和常用的解决方案,随着服务器计算能力的提升,这种解决方案会发现越来越像是一个瓶颈点,有什么更好的考虑来解决这样的问题?

邓毅:
当网站的流量不断变大的时候,负载均衡交换的方法是一个较为简单的扩展系统容量的办法,但是它毕竟是一个通用的解决方案,有一定的局限性。所以,当这个方案遇到瓶颈的时候,就需要对业务流程和用户访问行为进行更细致的分析,找到可能的瓶颈。通常,解决这一些瓶颈的办法来源于对一些冗余运算或 I/O 
的优化。例如,负载均衡有可能导致一些重复的运算(可能被均衡到不同的机器上去了),此时通过优化均衡方法、优化系统结构,可能可以在某个地方放入一个合适的缓存,保存中间结果,从而避免重复的运算,最终提高系统的吞吐。再进一步,如果还存在瓶颈,就可能需要在系统架构的层次做妥协,比如通过牺牲一定程度上事务的一致性换取更高的性能。

 

 

黄冬:
互联网的即时计算越来越多,而这样的计算越来越多的依赖大量的数据存储,比如依据数千万甚至更多的用户使用习惯和用户自身的使用历史,得出该次搜索的排充。在这样的计算面前是否有什么巧妙的方法?

邓毅:
使用大量的用户行为数据进行智能的分析,的确能够得到一些非常有用的数据,从而提升用户的体验。当然,这里需要大量的计算资源。

对于一些即时计算的场合,如果想享受这些数据带来的好处,一个办法就是把一些计算模型进行划分:对于规模较大且较长时期不会变化从而可以预处理的部分,在后台花费一些计算资源预先计算好,然后通过分布式的只读系统提供快速的读取服务;中等规模变化较快的数据,可以建立快速计算流程,定时计算,并立即可以访问;而与本次操作直接相关的数据,如用户特征、搜索词等,才是真正的即时计算,这时候需要考虑到足够短的响应时间。

把计算模型分解成这样的三个层次并不总是一件特别容易的时候,有时候甚至需要对计算模型进行必要少量的修改,在不大幅度牺牲准确度的情况下做一些简化,从而可以让不同类型的数据分开计算,最后再综合一起处理。

 

 

黄冬:
垂直搜索引擎已经成为各个网站及业务系统的必备功能,在这方面是否有一些良好的现成产品和架构方案?

邓毅:
随着互联网用户对于搜索这个概念的认识,垂直搜索日益成为各个网站的一个重要功能。当用户不知道某个东西在哪里的时候,可能不愿意一层层的去找,而会去搜。

相比通用搜索引擎,垂直搜索首先需要保证较低的开发成本,因为网站最大的技术力量需要花在其自身的核心价值上;其次,这样的引擎需要满足一定的性能和质量要求,虽然不必与通用过的搜索引擎那样快、那样准;最后,网站通常有自己特有的一些东西,比如一些结构较为特殊的数据需要搜索或者影响搜索排序,这就要求一个结构和功能可以方便定制的引擎。

互联网上有不少优秀的开源项目, 我个人比较了解的有 Apache 
的分布式存储与计算软件
Hadoop
、搜索索引软件 
Lucene 
等。

 

 

黄冬:
大量的用户使用行为记录需要留存,而留存下的数据量非常大,对于相关的数据也要进行频繁和复杂的业务计算,对于这样的存储有什么解决方案吗?对于这样的分析型计算有什么有效的架构 ?

邓毅:
首先存储方面,根据计算对于数据的读写需求,可以有两种方案:

一种方式是采用适合流式处理的分布式文件系统,如 HDFS

GFS
,通过自动数据块的备份等技术,可以保证数据的可靠存储,同时利用大数据块的存储保证流式顺序数据读写的高性能。当一些数据需要经常性的全量访问,且这样的访问较容易流式的处理的时候,可以把这些数据存在这类文件系统中。

另一种方式是采用分布式的 Key-Value 
结构,如 
HBase

BigTable 
等,他们的特点是可以支持随机读写,而简化的操作限制又使得它比数据库更容易实现大规模的分布式结构,因而适合计算中只需要读写海量数据中随机一部分条目的情况。

运算框架只要是支持大规模分布运算的都可以,例如前面提到的基于 Map/Reduce 
的分布式计算框架 
Hadoop

(本文来自《程序员》杂志0911期,更多精彩内容敬请关注0911期)

《程序员》杂志官方网站:http://www.programmer.com.cn/

抱歉!评论已关闭.