Google提供全球大量的服务,几乎已经快横跨整个信息科技的服务,但是Google数据中心的内部运作一直都是秘而不宣,许多人可能都碰过Google的服务出状况,但是这些状况总能在可容忍的范围内解决,你可能发现你的Gmail的容量一直在改变,是什么架构让空间像捏橡皮糖一样越捏越大?前阵子Google的朋友Jeff Dean聊天中稍微揭开了公司基础设施的神秘面纱。
Google的神秘面纱包括了: (1)软件 (2)硬件 (3)丛集平行处理机置
Google软件的三个核心要素:GFS(Google档案系统)、BigTable和MapReduce算法。而硬件却是一般的服务器、处理器、硬盘、内存等等。另一方面服务器的丛集能在半秒之内响应700至1,000台服务器的搜寻请求。
根据Google的说法,GFS是"a scalable distributed file system for large distributed data-intensive applications. It provides fault tolerance while running on inexpensive commodity hardware, and it delivers high aggregate performance to a large number of clients". 就是这个GFS的分布式档案系统,让Google服务可以随时长出空间或是切去毁损的部分,而管理这个GFS的机置就是BigTable。目前有超过200个丛集在执行GFS,其中许多都包含数千台主机。
GFS把一块储存的数据(通常是64MB),至少放在三台称为chunkserver的主机内。
如果chunkserver发生故障,Master Server(主服务器)便负责把数据备份到一个新的地方。至少在储存层级,主机故障完全由GFS系统处理。
Google到底拥有多少台服务器?据Dean表示,每个机柜存放40台服务器。而根据某项估计,Google目前在全球有36个资料中心,以每个中心有150个机柜计算,Google的服务器至少超过20万台,并且每天都在增加中...下图就是Google最早期的server rack,当然目前的硬件比这个肯定更惊人了。
Google之所以成为Google,部分原因是他们推翻了计算机界的传统作法。当所有的超大型数据中心都使用主流服务器和软件,Google的数据中心绝大部分是靠本身的技术构建而成。Google把命运操纵在自己手中,共同创办人Larry Page鼓励员工"别太相信有什么不可能的事情"。
要维持如此大规模的运作,也许可以说全世界是卯起来操Google的架构,Google必须对每一台机器抱有一种随时可牺牲的态度。服务器制造商喜欢主打他们的高阶主机承受故障或当机的能力,但Google宁愿把钱投资在容错软件上。他们认为拥有两倍数量但较不可靠的硬件,胜过一半数量但较可靠的硬件。你必须在软件的层级提供可靠度,如果你有1万台主机在运作,每天一定会有一些东西挂掉。这个跟我们一般的认知确实有蛮大的差异,我们通常都希望有数量虽少,但功能稳定的机器,而不愿意有一大箩筐两光的机器。
每个新丛集上线的第一年,通常会发生1,000次个别主机的故障,数千次硬盘故障...
一次电力输送问题,导致500至1,000台主机失效约6小时...
20次机柜损坏,每次造成40至80台主机下线...
5次机柜摇晃,导致半数的网络封包在传送过程中遗失...
整个丛集至少一次重新上线,在两天之内的任何时间,影响5%的主机...
整个丛集还有一半的机率会过热,在5分钟之内让几乎所有服务器当机,并且花上1到2天的时间恢复...
虽然Google用一般硬件组件来组装其服务器,但却不用传统的封装,他们要求Intel提供特制的主机板。Google目前在每40台服务器的机柜外,包覆一层外壳,而不是每台服务器有个别的外壳。
Google在2004年开始设计的BigTable,用BigTable为所有数据提供若干结构,目前用在超过70个Google计划,包括Google Maps、Google Earth、Blogger、Google Print、Orkut和核心搜寻索引。最大的BigTable实用范例管理横跨数千台主机、约6 PT(petabytes)的数据。
Google在2003写出第一版的MapReduce,让该公司有办法实际发挥那些资料的用处。举例来说,MapReduce能找出某个特定字汇在Google的搜寻索引中出现的次数、列出所有特定字汇出现的网页,和连结到某个特定网站的所有网站。
利用MapReduce,Google能用相对迅速的时间,建立一个包含"digital"、"network"和"society"三个字的所有网页索引。"Dean说:「你必须能够依序地横跨数千台主机作业,才能在一个合理的时间内完成这项工作。」
MapReduce软件在Google内部的应用日渐增加,2004年8月,该软件执行2.9万项工作,到2007年9月,已经暴增到220万项。在这段期间,完成一项工作的平均时间也从634秒降至395秒,而MapReduce的工作产出则从193 terabytes上升到约1.4万terabytes。Dean说,Google在任何一天都要执行约10万项MapReduce工作,每一项工作占用400台服务器,且需要5到10分钟完成。
MapReduce就像GFS,是特别设计用来回避服务器问题的。Dean表示:「当某台主机故障,主服务器知道那台机器正在执行什么工作,将命令其它主机接手那项map工作。你可能影响到100个map工作,但会有100台主机接手那些工作。」
MapReduce的可靠度一度遭到严厉的试炼,当时一个1,800台服务器的丛集正进行维护作业,工作人员一次拔下80台主机的插头,同时另外1,720台主机必须接下停顿的工作。Dean说:「速度变得有点慢,但工作全部完成。」而在一次2004年的简报中,一个1,800台丛集的系统,承受了1,600台服务器同时故障。
所以,Google数据中心的运作似乎如鱼得水,一切顺利。但该公司还不满足,列出了一长串待改进的事项。大多数公司都试图找出如何平顺地将工作在服务器之间转移,但Google已经超越了那项挑战,他们要能够自由、平顺,且自动地,将工作在各个资料中心间转移。
Dean说:「我们下一代的基础设施要是一个能够横跨大区块主机转移,而非单一机器的系统。」目前,某些大型的档案系统具有不同的名称,如GFS/Oregon和GFS/Atlanta,但他们都是彼此的拷贝。他表示:「我们要一个单一的名称集。」
Google种种独创的系统替他们开创了天下,也建立了其它竞争者很难跨过的门坎,但是随着越来越复杂的环境,Google自己需要解决的问题,肯定挑战会越来越大。
转载请注明:
EHSY西域-SEM Jimmy's Blog http://www.sem-jimmy.cn