woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

谷歌服务器架构浅析

Google,无疑是互联网时代最闪亮的新星。截止到2008122Google美国主站在Alexa排名第二,Alexa Top100中,各国的Google分站竟然霸占了超过20个名额,不得不令人感叹Google的强大。不论何时,不论何地,也不论你搜索多么冷门的词汇,只要你的电脑连接互联网,只要你轻轻点击“google搜索,那么这一切相关内容google都会在1秒钟之内全部搞定,这甚至比你查询我的文档都要快捷。这也就是为什么Google创业十年,市值超过1500亿美金的原因。

   
有人可能认为谷歌拥有几台蓝色基因那样的超级计算机来处理各种数据和搜索,事实是怎样的呢?下面我们就将详细解析神奇谷歌的神奇架构。

   
硬件:

   
截止到2006年,Google大约有45万台服务器,有超过200个计算机集群,处理不同地域的不同任务。可惜服务器的详细配置和最新集群的具体情况,在多个文献库里面都查询不到,我个人理解,这可能属于商业机密。大概也是因为机密的缘故,强大的Google计算机集群并没有递交Top500计算机的申请,多年来我们在Top500中都看不到Google的影子。(进入Top500需要提交并且公开自己计算机系统的详细配置)不过根据文献资料,可以肯定的是,这45万台服务器都不是什么昂贵的服务器,而是非常普通的PC级别服务器,其中的服务器硬盘在两年前还普遍是IDE接口、并且采用PC级主板而非昂贵的服务器专用主板。Google的集群也全部是自己搭建的,没有采用Myricom Myrinet或者Giganet cLAN等先进昂贵的集群连接技术,Google各个数据中心和服务器间不同的耦合程度都随需而定自行连接。

   
那么google的存储呢?Google存储着海量的资讯,近百亿个网页、数十亿张图片。早在2004年,Google的存储容量就已经达到了5PB。可能很多读者一开始都认为Google采用了诸如EMC Symmetrix系列磁盘阵列来保存大量的资讯,但是Google的实际做法又一次让我们大跌眼镜——Google没有使用任何磁盘阵列,哪怕是低端的磁盘阵列也没用。Google的方法是将集群中的每一台PC级服务器,配备两个普通IDE硬盘来存储。不过Google倒也不是都是什么设备都落后,至少这些硬盘的转速都很高,而且每台服务器的内存也还算比较大。最大的电脑DIY消费者是谁?恐怕Google又登上了这个DIY宝座。Google的绝大部分服务器甚至也不是采购什么大品牌,而是购买各种廉价零件而后自行装配的。有趣的是,Google非常不满意现存的各种PC电源的功耗,甚至还自行设计了Google专用服务器电源。

   
很快,我们就有了疑问。这样的一个以PC级别服务器搭建起来的系统,怎么能承受巨大的工作负载呢?怎么能保证高可用性呢?的确,这些低端的服务器经常出现故障——硬盘坏道、系统宕机这类的事故其实每天都在45万台服务器中发生。而Google的方法是设立镜像站。以Google主站为例,2003年就在美国硅谷和弗吉尼亚设立了多个镜像站。这些镜像站其实不是传统的镜像站。真正的镜像站是双机热备,当一台服务器宕机时,另一台服务器接管相关任务。而Google的镜像站其实真正的职责是DNS负载均衡,所以有的Google镜像站本身还有自己的镜像站。这里举例说明Google镜像站的作用:一个访问,DNS正常解析到A处,但当A处负载过大时,DNS服务就将域名解析到B处,这样既达到了冗余,也缩减了投资。由于不是双机热备,某一时间,镜像站的内容可能略有不同,不过对于精确度要求不那么高的普通检索而言,并不是问题。
平台:GFS/MapReduce/ BigTable/Linux

    GFS/MapReduce/ BigTable/这三个平台,是谷歌最引以为傲的平台,全部架构在Linux之上。

   
首先我们来看一看GFSGoogle File System)谷歌文件系统。我们知道,一般的数据中心检索时候需要用到数据库系统。但是Google的情况很特殊——Google拥有全球上百亿个Web文档,如果用常规数据库系统检索,那么检索速度就可想而知了。因此,当Crawlers采集到许多新的Web后,Google将很多的Web都汇集到一个文件里进行存储管理,而且GoogleWeb文件压缩成Chunk块,进一步减少占用空间(64MB一个chunk)。最后,Google只检索压缩后的部分。而GFS(Google File System)正是在这样的检索技术上构建的文件系统,GFS包括了GFS Master服务器和Chunk服务器。如下图所示,系统的流程从GFS客户端开始:GFS客户端以chunk偏移量制作目录索引并且发送请求——GFS Master收到请求通过chunk映射表映射反馈客户端——客户端有了chunk handlechunk 位置,并将文件名和chunk的目录索引缓存,向chunk服务器发送请求——chunk服务器回复请求传输chunk数据。

   
如果读者您读着有点迷糊,这很正常,因为只有少数搜索引擎企业才采用这样的技术。简单来说是这样:Google运用GFS大大简化了检索的难度。

    
除了GFSMapReduceGoogle也是功不可没。Google拥有不少于45万台服务器,看起来每台服务器的职能都非常明确,但是其中却有重要的协同问题有待解决:如何并发计算,如何分布数据,如何处理失败,如何负载均衡?我们可以预见,无数的代码将被用在协同问题上,而且很可能效率低下。这时候,MapReduce就派上用场了。MapReduceGoogle开发的C++编程工具,用于大规模数据集的并行运算。MapReduce主要功能是提供了一个简单强大的接口,可以将计算自动的并发和分布执行。这样一来,就可以通过普通PC的集群,实现高性能。MapReduce主要从两方面提升了系统:首先是失效的计算机问题。如果某一台计算机失效了,或者是I/O出现了问题——这在Google以廉价服务器组建的集群中极为常见,MapReduce的解决方法是用多个计算机同时计算一个任务,一旦一台计算机有了结果,其它计算机就停止该任务,而进入下一任务。另外,在MapReduce之间传输的数据都是经过压缩的,节省了很多带宽资源。至于BigTable,这是一个用来处理大数据量的系统,适合处理半结构化的数据。
Google
心经:

    Google
总是尝试用最少的钱,做最多的事情。不要小看那些便宜、不牢靠的PC级服务器,一台服务器也许确实不牢靠,但是45万台的有机集成却成为了全球最完善、最稳定的系统之一。在采购服务器方面,谷歌也从未一次性大量购买,都是有了需求再选购。另一个能够体现Google精打细算的方面是Google尽量压缩所有能够压缩的文件。

   
包括软件和硬件,Google的设计构想都很前卫,Google尝试过许多还在实验室里的萌芽技术,如上文所说,很多都取得了巨大成功。谷歌早先的目标是0.5秒钟做出搜索结果,但实际上目前的平均时间已经缩减到了0.25秒。而且,谷歌从来没有停止研究的脚步,现在还在测试OpenSoalris,观察OpenSoalris是否能够替代Linux

    Google
的行为非常踏实。不参加Top500评选,文献里也鲜有相关资料。可见谷歌不吹嘘、也没有过度宣传,只是勤勤恳恳的更新程序、优化集群。今天,google收录了绝大多数人类语言的网页,并且在多数国家都建立了Google分站,收录的网页也是与日俱增,全球影响力更是不言而喻。

   
向谷歌的架构学习,向谷歌的成就致敬。

posted on 2009-04-03 10:48 肥仔 阅读(828) 评论(1)  编辑 收藏 引用 所属分类: 其他经验

评论

# re: 谷歌服务器架构浅析  回复  更多评论   

"用最少的钱,做最多的事情"
向Google学习,呵呵!
2009-04-03 14:05 | Sunshine Alike

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理