文 / 林昊
互联网已经发展多年,其中不乏脱颖而出者,这些网站多数都已存在了接近10年或10年以上,在如此长时间的发展过程中,除了业务上面临的挑战,在技术上也面临了很多的挑战。我挑选了一些Alexa排名较前的网站(排名截止到2012年4月21日),看看它们在技术上是如何应对业务发展过程中的挑战的。
Google目前Alexa 排名第1。它诞生于1997年,当时是一个研究性项目,每个月build一次索引,build出来的索引通过sharding(shard by doc)的方式分散到多台服务器(Index Server)上,具体的网页数据同样通过sharding的方式分散到多台服务器(Doc Server)上,当用户提交请求时,通过前端的一台服务器将请求提交给Index Server获得打了分的倒排索引,然后从Doc Server提取具体的网页信息(例如网页标题、搜索关键词匹配的片段信息等),最终展现给用户。
随着索引的网页增加,这个结构可通过增加Index Server以及Doc Server来存储索引以及网页的数据,但仍然会面临其他很多方面的问题,于是在这之后的十多年的时间里,Google做了很多事情来改进上面的结构。
1999年,Google增加了一个Cache Cluster,用来Cache查询的索引结果和文档片段信息,同时将Index Server和Doc Server通过Replicate的方式变成了Cluster。这两个改造带来的好处是网站的响应速度、可支撑的访问量以及可用性 (Availability)得到了提升。这个变化造成了成本的增加,Google在硬件方面的风格始终是不用昂贵的高端硬件,而是在软件层面来保证系统的可靠性及高性能,于是同年,Google开始采用自行设计的服务器来降低成本。2000年,Google开始自行设计DataCenter,采用了各种方法(例如采用其他的制冷方法来替代空调)来优化PUE(能源利用率),同时对自行设计的服务器也做了很多化。2001年,Google对Index的格式进行了修改,将所有的Index放入内存, 这次改造带来的好处是网站的响应速度以及可支撑的访问量得到了极大的提升。2003年,Google发表了文章Google Cluster Architecture,其Cluster结构组成为硬件LB+Index Cluster+Doc Cluster+大量廉价服务器(例如IDE硬盘、性价比高的CPU等),通过并行处理+sharding来保证在降低对硬件要求的同时,响应速度仍然很快。同年Google发表了关于Google文件系统的论文(GFS在2000年就已经上线),这篇论文很大程度也体现了Google不用昂贵硬件的风格,通过GFS+大量廉价的服务器即可存储大量的数据。2004年,Google再次对Index的格式进行了修改,使得网站的响应速度继续提升。同年 Google发表关于MapReduce的论文,通过MapReduce+大量廉价的服务器即可快速完成以前要使用昂贵小型机、中型机甚至是大型机才能完成的计算任务,而这显然对于Google快速地构建索引提供了很大的帮助。2006年,Google发表了关于BigTable的论文(2003年开始上线),使得海量数据的分析能够达到在线系统的要求了,这对于Google提升网站的响应速度起到了很大的帮助。
以上3篇论文彻底改变了业界对于海量数据的存储、分析和检索的方法(小道消息:Google内部已完成了GFS、MapReduce、BigTable的替换),也奠定了Google在业界的技术领导地位。
在一些场景中,Google也采用MySQL来存储数据。同样,Google对MySQL也做了很多修改,它使用的MySQL信息可以从https://code.google.com/p/google-mysql/了解。
2007年,Google将 build索引的时间缩短到分钟级,当新网页出现后,几分钟后即可在Google搜索到,同时将Index Cluster通过Protocol Buffers对外提供Service,以供Google各种搜索(例如网页、图片、新闻、书籍等)使用,除了Index Cluster提供的Service外,还有很多其他的Service,例如广告、词法检查等。Google的一次搜索大概需要调用内部50个以上的 Service,Service主要用C++或Java来编写。2009年,Google的一篇《How Google uses Linux》文章,揭示了Google在提升机器利用率方面也做了很多的努力,例如将不同资源消耗类型的应用部署在同一台机器上。
在之后,Google又研发了Colossus(下一代类GFS文件系统)、Spanner(下一代类BigTable海量存储和计算架构)、实时搜索(基于Colossus实现),主要都是为了提升搜索的实时性以及存储更多数据。除了在海量数据相关技术上的革新外,Google也不断对业界的传统技术进行创新,例如提高TCP 的初始拥塞窗口值、改进HTTP的SPDY协议、新的图片格式WebP等。
在Google的发展过程中,其技术的改造主要围绕在可伸缩性、性能、成本和可用性4个方面,Google不采用昂贵硬件的风格以及领先其他网站的数据量决定了其技术改造基本都是对传统的软硬件技术的革新。