随着计算机各种硬件以及网络设备的不断更新换代,以及互联网上的 Web 2.0 形式的网站的出现,大型网站架构的设计和实现方面都有了很多新的变化,在《程序员》杂志官方网站发布的《架构师接龙:黄冬 & 邓毅》一文中,两位拥有丰富系统架构经验的架构师,国内啄木鸟社区的创始人之一黄冬和网易有道的 CTO 邓毅,以问答的形式对当前形势下对大型网站的设计和实现方面的问题进行了深入的讨论。
首先是针对如何充分利用服务器的带宽的问题。十年前的网络带宽还只是 10M,而现在的网络带宽已经扩展到千兆甚至更高,如果架构仍然采用旧的方法,那么就必然对带宽造成浪费,就好像是已经修好了高速公路,却只允许在上面骑自行车一样。但如何能够充分利用这些带宽呢?一种方法是将多台机器通过网络联合起来,组成分布式的存储系统。另一种方式是让客户端程序来更频繁地与服务器交互。之前的程序经常是让服务器一次完成尽可能多的工作,然后再将结果返回给服务器,采用这种方法的原因就在于网络带宽太窄,如果频繁地进行交互就会造成网络的阻塞。然而,不可避免,这经常会造成服务器的负担过重,而客户端的负载很小的情况。在网络带宽有了极大改善的现在,我们似乎可以尝试改变之前的做法,通过更频繁地在客户端和服务器之间进行数据交换来降低服务器的负担。
在很长的一段时间内,很多网站都是使用基于四层、七层的负载均衡交换作为负载均衡的解决方案,然而,现在随着硬件的发展,服务器的计算能力也有了很大的提升,从而使得这样的解决方案成为架构中的瓶颈,如何解决这个问题呢?这就需要对业务流程和用户访问行为做更细致的分析,先找到瓶颈,然后寻找解决的办法。一般来说,负载均衡带来最大的问题就是为了保证各个负载服务器上数据的一致性而做的运算,有些情况下,这些运算不仅不会提高性能,反而会降低系统的性能,此时可以试着把相关的数据放在缓存当中,从而避免重复、冗余的计算。但是这样的做法也不一定会解决瓶颈问题,在不得已的时候,文中提到了妥协的方法。
再进一步,如果还存在瓶颈,就可能需要在系统架构的层次做妥协,比如通过牺牲一定程度上事务的一致性换取更高的性能。
此外,由于当前的信息不再局限于文字,图片、音频、视频的数据使得当前网站服务器需要存储大量的数据,并且对于这些数据经常会进行复杂的计算,比方说对数据进行分析,以期对今后的形势进行预测。这些都对系统的架构提出了严峻的挑战,而针对具体的情况,也产生了很多优秀的解决方案,比方说最近兴起的 NoSQL 运动对于解决大数据量的存储和处理就是非常好的方案,它采用的是一种分布式的 Key-Value 结构,即使对 50G 的数据进行存取和处理,也能够在很短的时间内完成,而这正是大型网站所需要的。
另外,两位架构师还讨论了垂直搜索引擎的问题,越来越多的网站开始采用这样的搜索引擎来弥补传统搜索引擎的不足。但是它还不能成为网站的核心价值所在,因此可以直接使用网上的一些开源项目,那样就可以用最低的成本达到想要的目的。
随着各种环境的不断变化,系统的架构也必然会随之不断变化,让我们拭目以待。
评论