PS:Google,无疑是互联网时代最闪亮的明星。截止到今天为止,Google美国主站在Alexa排名已经连续3年第一,Alexa Top100中,各国的Google分站居然霸占了超过20多个名额,不得不使人感叹Google的强大。不论什么时候,不论何地,也不论你搜索多么冷门的词汇,只要你的电脑链接互联网,只要你轻轻点击“google搜索”,那么这一切相关内容google都会在1秒钟以内所有搞定,这甚至比你查询“个人文档”都要快捷。这也就是为何Google创业12年,市值超过2000亿美圆的缘由。python
有人可能认为Google拥有几台“蓝色基因”那样的超级计算机来处理各类数据和搜索,事实是怎样的呢?下面咱们就将详细解析神奇Google的神奇架构。linux
硬件:git
截止到2010年,Google大约有100万台服务器,有超过500个计算机集群,处理不一样地域的不一样任务。惋惜服务器的详细配置和最新集群的具体状况,在多个文献库里面都查询不到,我我的理解,这可能属于商业机密。大概也是由于机密的缘故,强大的Google计算机集群并无递交Top500计算机的申请,多年来咱们在Top500中都看不到Google的影子。(进入Top500须要提交而且公开本身计算机系统的详细配置)不过根据文献资料,能够确定的是,这100万台服务器都不是什么昂贵的服务器,而是很是普通的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级别服务器搭建起来的系统,怎么能承受巨大的工做负载呢?怎么能保证高可用性呢?的确,这些低端的服务器常常出现故障——硬盘坏道、系统宕机这类的事故其实天天都在100万台服务器中发生。而Google的方法是设立镜像站。以Google主站为例,2003年就在美国硅谷和弗吉尼亚设立了多个镜像站。这些镜像站其实不是传统的镜像站。真正的镜像站是双机热备,当一台服务器宕机时,另外一台服务器接管相关任务。而Google的镜像站其实真正的职责是DNS负载均衡,因此有的Google镜像站自己还有本身的镜像站。这里举例说明Google镜像站的做用:一个访问,DNS正常解析到A处,但当A处负载过大时,DNS服务就将域名解析到B处,这样既达到了冗余,也缩减了投资。因为不是双机热备,某一时间,镜像站的内容可能略有不一样,不过对于精确度要求不那么高的普通检索而言,并非问题。数据库
平台:GFS/MapReduce/ BigTable/Linux编程
GFS/MapReduce/ BigTable/这三个平台,是Google最引觉得傲的平台,所有架构在Linux之上。缓存
首先咱们来看一看GFS(Google File System)Google文件系统。咱们知道,通常的数据中心检索时候须要用到数据库系统。可是Google的状况很特殊——Google拥有全球上百亿个Web文档,若是用常规数据库系统检索,那么检索速度就可想而知了。所以,当Crawlers采集到许多新的Web后,Google将不少的Web都聚集到一个文件里进行存储管理,并且Google将Web文件压缩成Chunk块,进一步减小占用空间(64MB一个chunk)。最后,Google只检索压缩后的部分。而GFS(Google File System)正是在这样的检索技术上构建的文件系统,GFS包括了GFS Master服务器和Chunk服务器。以下图所示,系统的流程从GFS客户端开始:GFS客户端以chunk偏移量制做目录索引而且发送请求——GFS Master收到请求经过chunk映射表映射反馈客户端——客户端有了chunk handle和chunk 位置,并将文件名和chunk的目录索引缓存,向chunk服务器发送请求——chunk服务器回复请求传输chunk数据。服务器
若是读者您读着有点迷糊,这很正常,由于只有少数搜索引擎企业才采用这样的技术。简单来讲是这样:Google运用GFS大大简化了检索的难度。网络
除了GFS,MapReduce对Google也是功不可没。Google拥有很多于100万台服务器,看起来每台服务器的职能都很是明确,可是其中却有重要的协同问题有待解决:如何并发计算,如何分布数据,如何处理失败,如何负载均衡?咱们能够预见,无数的代码将被用在协同问题上,并且极可能效率低下。这时候,MapReduce就派上用场了。MapReduce是Google开发的C++编程工具,用于大规模数据集的并行运算。MapReduce主要功能是提供了一个简单强大的接口,能够将计算自动的并发和分布执行。这样一来,就能够经过普通PC的集群,实现高性能。MapReduce主要从两方面提高了系统:首先是失效的计算机问题。若是某一台计算机失效了,或者是I/O出现了问题——这在Google以廉价服务器组建的集群中极为常见,MapReduce的解决方法是用多个计算机同时计算一个任务,一旦一台计算机有告终果,其它计算机就中止该任务,而进入下一任务。另外,在MapReduce之间传输的数据都是通过压缩的,节省了不少带宽资源。至于BigTable,这是一个用来处理大数据量的系统,适合处理半结构化的数据。架构
Google心经:
Google老是尝试用最少的钱,作最多的事情。不要小看那些便宜、不牢靠的PC级服务器,一台服务器也许确实不牢靠,可是100万台的服务器集成却成为了全球最完善、最稳定的系统之一。在采购服务器方面,Google也从未一次性大量购买,都是有了需求再选购。另外一个可以体现Google精打细算的方面是Google尽可能压缩全部可以压缩的文件。
包括软件和硬件,Google的设计构想都很前卫,Google尝试过许多还在实验室里的萌芽技术,如上文所说,不少都取得了巨大成功。Google早先的目标是0.5秒钟作出搜索结果,但实际上目前的平均时间已经缩减到了0.25秒。并且,Google历来没有中止研究的脚步,如今还在测试OpenSoalris,观察OpenSoalris是否可以替代Linux。
Google的行为很是踏实。不参加Top500评选,文献里也鲜有相关资料。可见Google不吹嘘、也没有过分宣传,只是勤勤恳恳的更新程序、优化集群。今天,Google收录了绝大多数人类语言的网页,而且在多数国家都创建了Google分站,收录的网页也是与日俱增,全球影响力更是不言而喻。
向Google的架构学习,向Google的成就致敬。
Google是伸缩性的王者。Google一直的目标就是构建高性能高伸缩性的基础架构来支撑它们的产品。
平台
Linux
大量语言:Python,Java,C++
状态
在2006年大约有450,000台廉价服务器,这个数量到2010年增长到了1,000,000台。
在2005年Google索引了80亿Web页面,如今没有人知道具体数目,近千亿并不断增加中。
目前在Google有超过500个GFS集群。一个集群能够有1000或者甚至5000台机器。成千上万的机器从运行着100PB以上字节存储的GFS集群获取数据,集群总的读写吞吐量能够达到每秒40万亿字节
目前在Google有6000个MapReduce程序,并且每月都写成百个新程序
BigTable伸缩存储几十亿的URL,几百千千兆的卫星图片和几亿用户的参数选择
堆栈
Google形象化它们的基础组织为三层架构:
1,产品:搜索,广告,email,地图,视频,聊天,博客
2,分布式系统基础组织:GFS,MapReduce和BigTable
3,计算平台:一群不一样的数据中内心的机器
4,确保公司里的人们部署起来开销很小
5,花费更多的钱在避免丢失日志数据的硬件上,其余类型的数据则花费较少
可信赖的存储机制GFS(Google File System)
1,可信赖的伸缩性存储是任何程序的核心需求。GFS就是Google的核心存储平台
2,Google File System – 大型分布式结构化日志文件系统,Google在里面扔了大量的数据
3,为何构建GFS而不是利用已有的东西?由于能够本身控制一切而且这个平台与别的不同,Google须要:
-跨数据中心的高可靠性
-成千上万的网络节点的伸缩性
-大读写带宽的需求
-支持大块的数据,可能为上千兆字节
-高效的跨节点操做分发来减小瓶颈
4,系统有Master和Chunk服务器
-Master服务器在不一样的数据文件里保持元数据。数据以64MB为单位存储在文件系统中。客户端与Master服务器交流来在文件上作元数据操做而且找到包含用户须要数据的那些Chunk服务器
-Chunk服务器在硬盘上存储实际数据。每一个Chunk服务器跨越3个不一样的Chunk服务器备份以建立冗余来避免服务器崩溃。一旦被Master服务器指明,客户端程序就会直接从Chunk服务器读取文件
6,一个上线的新程序能够使用已有的GFS集群或者能够制做本身的GFS集群
7,关键点在于有足够的基础组织来让人们对本身的程序有所选择,GFS能够调整来适应个别程序的需求
使用MapReduce来处理数据
1,如今你已经有了一个很好的存储系统,你该怎样处理如此多的数据呢?好比你有许多TB的数据存储在1000台机器上。数据库不能伸缩或者伸缩到这种级别花费极大,这就是MapReduce出现的缘由
2,MapReduce是一个处理和生成大量数据集的编程模型和相关实现。用户指定一个map方法来处理一个键/值对来生成一个中间的键/值对,还有一个reduce方法来合并全部关联到一样的中间键的中间值。许多真实世界的任务均可以使用这种模型来表现。以这种风格来写的程序会自动并行的在一个大量机器的集群里运行。运行时系统照顾输入数据划分、程序在机器集之间执行的调度、机器失败处理和必需的内部机器交流等细节。这容许程序员没有多少并行和分布式系统的经验就能够很容易使用一个大型分布式系统资源
3,为何使用MapReduce?
-跨越大量机器分割任务的好方式
-处理机器失败
-能够与不一样类型的程序工做,例如搜索和广告。几乎任何程序都有map和reduce类型的操做。你能够预先计算有用的数据、查询字数统计、对TB的数据排序等等
4,MapReduce系统有三种不一样类型的服务器
-Master服务器分配用户任务到Map和Reduce服务器。它也跟踪任务的状态
-Map服务器接收用户输入并在其基础上处理map操做。结果写入中间文件
-Reduce服务器接收Map服务器产生的中间文件并在其基础上处理reduce操做
5,例如,你想在全部Web页面里的字数。你将存储在GFS里的全部页面抛入MapReduce。这将在成千上万台机器上同时进行而且全部的调整、工做调度、失败处理和数据传输将自动完成
-步骤相似于:GFS -> Map -> Shuffle -> Reduction -> Store Results back into GFS
-在MapReduce里一个map操做将一些数据映射到另外一个中,产生一个键值对,在咱们的例子里就是字和字数
-Shuffling操做汇集键类型
-Reduction操做计算全部键值对的综合并产生最终的结果
6,Google索引操做管道有大约20个不一样的map和reduction。
7,程序能够很是小,如20到50行代码
8,一个问题是掉队者。掉队者是一个比其余程序慢的计算,它阻塞了其余程序。掉队者可能由于缓慢的IO或者临时的CPU不能使用而发生。解决方案是运行多个一样的计算而且当一个完成后杀死全部其余的
9,数据在Map和Reduce服务器之间传输时被压缩了。这能够节省带宽和I/O。
在BigTable里存储结构化数据
1,BigTable是一个大伸缩性、错误容忍、自管理的系统,它包含千千兆的内存和1000000000000000的存储。它能够每秒钟处理百万的读写
2,BigTable是一个构建于GFS之上的分布式哈希机制。它不是关系型数据库。它不支持join或者SQL类型查询
3,它提供查询机制来经过键访问结构化数据。GFS存储存储不透明的数据而许多程序需求有结构化数据
4,商业数据库不能达到这种级别的伸缩性而且不能在成千上万台机器上工做
5,经过控制它们本身的低级存储系统Google获得更多的控制权来改进它们的系统。例如,若是它们想让跨数据中心的操做更简单这个特性,它们能够内建它
6,系统运行时机器能够自由的增删而整个系统保持工做
7,每一个数据条目存储在一个格子里,它能够经过一个行key和列key或者时间戳来访问
8,每一行存储在一个或多个tablet中。一个tablet是一个64KB块的数据序列而且格式为SSTable
9,BigTable有三种类型的服务器:
-Master服务器分配tablet服务器,它跟踪tablet在哪里而且若是须要则从新分配任务
-Tablet服务器为tablet处理读写请求。当tablet超过大小限制(一般是100MB-200MB)时它们拆开tablet。当一个Tablet服务器失败时,则100个Tablet服务器各自挑选一个新的tablet而后系统恢复。
-Lock服务器造成一个分布式锁服务。像打开一个tablet来写、Master调整和访问控制检查等都须要互斥
10,一个locality组能够用来在物理上将相关的数据存储在一块儿来获得更好的locality选择
11,tablet尽量的缓存在RAM里
硬件
1,当你有不少机器时你怎样组织它们来使得使用和花费有效?
2,使用很是廉价的硬件
3,A 1,000-fold computer power increase can be had for a 33 times lower cost if you you use a failure-prone infrastructure rather than an infrastructure built on highly reliable components. You must build reliability on top of unreliability for this strategy to work.
4,Linux,in-house rack design,PC主板,低端存储
5,Price per wattage on performance basis isn’t getting better. Have huge power and cooling issues
6,使用一些collocation和Google本身的数据中心
其余
1,迅速更改而不是等待QA
2,库是构建程序的卓越方式
3,一些程序做为服务提供
4,一个基础组织处理程序的版本,这样它们能够发布而不用惧怕会破坏什么东西
Google未来的方向
1,支持地理位置分布的集群
2,为全部数据建立一个单独的全局名字空间。当前的数据由集群分离
3,更多和更好的自动化数据迁移和计算
4,解决当使用网络划分来作广阔区域的备份时的一致性问题(例如保持服务即便一个集群离线维护或因为一些损耗问题)
学到的东西
1,基础组织是有竞争性的优点。特别是对Google而言。Google能够很快很廉价的推出新服务,而且伸缩性其余人很难达到。许多公司采起彻底不一样的方式。许多公司认为基础组织开销太大。Google认为本身是一个系统工程公司,这是一个新的看待软件构建的方式
2,跨越多个数据中心仍然是一个未解决的问题。大部分网站都是一个或者最多两个数据中心。咱们不得不认可怎样在一些数据中心之间完整的分布网站是很须要技巧的
3,若是你本身没有时间从零开始从新构建全部这些基础组织你能够看看Hadoop。Hadoop是这里不少一样的主意的一个开源实现
4,平台的一个优势是初级开发人员能够在平台的基础上快速而且放心的建立健全的程序。若是每一个项目都须要发明一样的分布式基础组织的轮子,那么你将陷入困境由于知道怎样完成这项工做的人相对较少
5,协同工做不一直是掷骰子。经过让系统中的全部部分一块儿工做则一个部分的改进将帮助全部的部分。改进文件系统则每一个人从中受益并且是透明的。若是每一个项目使用不一样的文件系统则在整个堆栈中享受不到持续增长的改进
6,构建自管理系统让你不必让系统关机。这容许你更容易在服务器之间平衡资源、动态添加更大的容量、让机器离线和优雅的处理升级
7,建立可进化的基础组织,并行的执行消耗时间的操做并采起较好的方案
8,不要忽略学院。学院有许多没有转变为产品的好主意。Most of what Google has done has prior art, just not prior large scale deployment.
9,考虑压缩。当你有许多CPU而IO有限时压缩是一个好的选择。
Google主要以GFS、MapReduce、BigTable这三大平台来支撑其庞大的业务系统,我称他们为Google三剑客,网上也有说是Google的三架马车。
1、GFS(Google File System)
这是Google独特的一个面向大规模数据密集型应用的、可伸缩的分布式文件系统,因为这个文件系统是经过软件调度来实现的,因此Google能够把GFS部署在不少廉价的PC机上,来达到用昂贵服务器同样的效果。
下面是一张Google GFS的架构图:

从上图咱们可看到Google的GFS主要由一个master和不少chunkserver组成,master主要是负责维护系统中的名字空间、访问控制信息、从文件到块的映射以及块的当前位置等元素据,并经过心跳信号与chunkserver通讯,搜集并保存chunkserver的状态信息。chunkserver主要是用来存储数据块,google把每一个数据块的大小设计成64M,至于为何这么大后面会提到,每一个chunk是由master分配的chunk-handle来标识的,为了提升系统的可靠性,每一个chunk会被复制3个副本放到不一样的chunkserver中。
固然这样的单master设计也会带来单点故障问题和性能瓶颈问题,Google是经过减小client与master的交互来解决的,client均是直接与chunkserver通讯,master仅仅提供查询数据块所在的chunkserver以及详细位置。下面是在GFS上查询的通常流程:
一、client使用固定的块大小将应用程序指定的文件名和字节偏移转换成文件的一个块索引(chunk index)。
二、给master发送一个包含文件名和块索引的请求。
三、master回应对应的chunk handle和副本的位置(多个副本)。
四、client以文件名和块索引为键缓存这些信息。(handle和副本的位置)。
五、Client 向其中一个副本发送一个请求,极可能是最近的一个副本。请求指定了chunk handle(chunkserver以chunk handle标识chunk)和块内的一个字节区间。
六、除非缓存的信息再也不有效(cache for a limited time)或文件被从新打开,不然之后对同一个块的读操做再也不须要client和master间的交互。
不过我仍是有疑问,google能够经过减小client与master通讯来解决性能瓶颈问题,但单点问题呢,一台master挂掉岂不是完蛋了,总感受不太放心,多是我了解不够透彻,不知道哪位朋友能解释一下,谢谢:)
2、MapReduce,Google的分布式并行计算系统
若是上面的GFS解决了Google的海量数据的存储,那这个MapReduce则是解决了如何从这些海量数据中快速计算并获取指定数据的问题。咱们知道,Google的每一次搜索都在零点零几秒,能在这么短期里环游世界一周,这里MapReduce有很大的功劳。
Map即映射,Reduce即规约,由master服务器把map和reduce任务分发到各自worker服务器中运行计算,最后把结果规约合并后返回给用户。这个过程能够由下图来讲明。

按照本身的理解,简单对上图加点说明:
一、首先把用户请求的数据文件切割成多份,每一份(即每个split)被拷贝在集群中不一样机器上,而后由集群启动程序中的多份拷贝。
二、master把map和reduce任务交给相对空闲的worker处理,并阻塞等待处理结果。
三、处理map任务的worker接到任务后,把以key/value形式的输入数据传递给map函数进行处理,并将处理结果也以key/value的形式输出,并保存在内存中。
四、上一步内存中的结果是要进行reduce的,因而这些map worker就把这些数据的位置返回给master,这样master知道数据位置就能够继续分配reduce任务,起到了链接map和reduce函数的做用。
五、reduce worker知道这些数据的位置后就去相应位置读取这些数据,并对这些数据按key进行排序。将排序后的数据序列放入reduce函数中进行合并和规约,最后每一个reduce任务输出一个结果文件。
六、任务结束,master解除阻塞,唤醒用户。
以上是我的的一些理解,有不对的地方请指出。
3、BigTable,分布式的结构化数据存储系统?
BigTable是基于GFS和MapReduce之上的,那么google既然已经有了GFS,为什么还要有BigTable呢(也是我原先的一个疑问)?后来想一想这和已经有操做系统文件系统为什么还要有SQL SERVER数据库同样的道理,GFS是更底层的文件系统,而BigTable创建在其上面,不只能够存储结构化的数据,并且能够更好的管理和作出负载均衡决策。
如下是BigTable的架构图:

它彻底是一个基于key/value的数据库,和通常的关系型数据库不一样,google之因此采用BigTable,由于它在知足需求的同时简化了系统,好比去掉了事务、死锁检测等模块,让系统更高效。更重要的一点是在BigTable中数据是没有格式的,它仅仅是一个个key/value的pairs,用户能够本身去定义数据的格式,这也大大提升了BigTable的灵活性和扩展性。
4、总结
这篇随笔主要是一些总结性的内容,Google架构远远不止这些。
原文:Google Architecture
附:Google背后的IT架构策略揭秘
Google是不同凡响的。它的独特不只仅表现于革新的思惟和充满创意的应用 (好比那个大堂里的地球模型),更在于其有别常规的IT策略……
加利福尼亚州山景城(Mountain View)Google公司(Google,下称Google)总部有一个43号大楼,该建筑的中央大屏幕上显示着一个与Google地球(Google Earth)相仿的世界地图,一个转动的地球上不停地闪动着五光十色的光点,恍如罗马宫廷的千万烛灯,每一次闪动标志着地球的这个角落一名Google用户发起了一次新的搜索。
这同时意味着Google又一次知足了人们对未知信息的好奇与渴望。
Google是不同凡响的。它的独特不只仅表现于革新的思惟和充满创意的应用 (好比那个大堂里的地球模型),更在于其有别常规的IT策略。从人们的常理来看,简单的硬件商品和免费软件是没法构建出一个帝国的,可是Google作到了。在性能调整后,Google把它们变成一个无可比拟的分布式计算平台,该平台可以支持大规模的搜索和不断涌现的新兴应用。咱们本来认为这些应用都是我的消费级别的,可是Google改变了这一切。如今商业世界也在使用它们,这就令这家搜索公司显得那么不同凡响。
GoogleWeb 服务背后的IT架构对无数使用搜索引擎的用户来讲也许并非很是重要,但它是Google几百位致力于把全球信息组织起来,实现“随处可达,随时可用”目标的工程师们的最核心工做。这就须要一个在覆盖范围和野心上都与Google的商业愿景彻底相符的IT蓝图做为支撑。
Google 的经理们一直对公司的IT策略话题保持沉默,他们厌恶谈及特定的厂商或者产品,当被问到他们的服务器和数据中心时,他们老是闭口不谈。但与几位 Google的IT领导一块儿呆了一天后,咱们最终得以揭示该公司的IT是如何运做的,那可不只仅是一个运行在无数服务器集群上的、表面看来很是简单的搜索引擎。在其简单的外表下,蕴涵着许多内部研发软件、定制硬件、人工智能,以及对性能的执着追求和打破常规的人力管理模式。
IT理念方面,Google对同行有一条建议:尽可能避免那些人人都在使用的系统和软件,以本身的方式作事会更有独特的竞争优点。
“企业文化决定了你的作事方式。”道格拉斯”美林(Douglas Merrill),这位Google工程副总裁和事实上的首席信息官(CIO) 指出,“到了咱们这样的发展阶段,企业观念和文化很是不同凡响,这也反过来鞭策咱们必需要采用不同凡响的方式来运行那些他人看来很常规的系统。”
Google 最大的IT优点在于它能建造出既富于性价比(并不是廉价)又能承受极高负载的高性能系统。所以IT顾问史蒂芬”阿诺德(Stephen Arnold)指出,Google与竞争对手,如亚马逊网站(Amazon)、电子港湾公司(eBay)、微软公司(Microsoft,下称微软)和雅虎公司 (Yahoo,下称雅虎)等公司相比,具备更大的成本优点。Google程序员的效率比其余Web公司同行们高出50%~100%,缘由是Google已经开发出了一整套专用于支持大规模并行系统编程的定制软件库。据他估算,其余竞争公司可能要花上四倍的时间才能得到同等的效果。
打造服务器
Google 到底是怎样作到这点的呢?其中一个手段,美林认为,“是由于咱们本身动手打造硬件。”Google并不制造计算机系统,但它根据本身的参数定制硬件,而后像MTV的节目“靓车打造”(Pimp My Ride)那样本身安装和调整硬件系统。开源程序经理克里斯”迪博纳(Chris DiBona)评论道:“咱们很善于购买商业服务器,而且改造他们为咱们所用,最后把性能压榨和发挥到极致,以至有时候他们热得像要融化了似的。”
这种亲手打造的方式,来源于Google从车库诞生时与生俱来的节俭风格,更与Google那超大型的系统规模息息相关,良好的习惯一直延续至今。听说 Google在65个数据中心拥有20万~45万台服务器—这个数目会有误差(取决于你如何定义服务器和由谁来作这项统计)。可是,不变的是持续上升的趋势。
Google不会去讨论这些资产,由于它认为保密也是一种竞争优点。事实上,Google之因此喜欢开源软件也是由于它的私密性。“若是咱们购买了软件许可或代码许可,人们只要对号入座,就能够猜出Google的IT基础架构。”迪博纳分析说, “使用开源软件,就使咱们多了一条把握本身命运的途径。”
Google喜欢规模化的服务器运行方式。当有成百上千台机器时,定制服务器的优点也会成倍增长,效果也会更趋明显。Google正在俄勒冈州哥伦比亚河边的达勒斯市建造一个占地30亩的数据中心,在那儿它能够得到运算和降温须要的低价水力电力能源(参见边栏《Google数据中心自有一套》)。
Google以“单元”(Cell)的形式组织这些运行 Linux操做系统的服务器,迪博纳把这种形式比喻成互联网服务的“磁盘驱动器”(但别和一直谣传的Google存储服务Gdrive混淆了,“并无 Gdrive这回事。”一位Google女发言人明确表示。),公司的软件程序都驻扎在这些并不昂贵的电脑机箱里,由程序员决定它们的冗余工做量。这种由不少单元组成的文件系统代替了商业存储设备;迪博纳表示Google这些单元设备更易于建造和维护,他还暗示他们能处理更大规模的数据。
Google 不会漏过对任何技术细节的关注。多年来,公司的工程师就在研究微处理器的内部工做机制,随着Google规模的持续壮大,必然会用到特别定制和调节过的芯片。知名工程师路易斯”巴罗索(Luiz Barroso)去年在一篇发表在工业杂志上的论文中证明,近年来Google的主要负荷都由单核设计的系统承担着。但许多服务器端的应用,如 Google搜索索引服务,所需的并行计算在单核芯片的指令级别上执行得并很差。
曾在数据设备公司(Digital Equipment)和康柏公司(Compaq)当过芯片设计师的巴罗索认为,随着AMD公司、英特尔公司(Intel)、太阳计算机系统公司(Sun)开始制造多核芯片,必将会出现愈来愈多芯片级别的并行计算。
Google 也曾考虑过本身制造计算机芯片,但从业界潮流来看,这个冒险的举动彷佛不是很必要。“微处理器的设计很是复杂并且成本昂贵,”运营高级副总裁乌尔斯”霍尔茨勒(Urs Holzle)表示。Google宁愿与芯片制造商合做,让他们去理解本身的应用并设计适合的芯片。这是一种客户建议式的设计,其关注点在于整体吞吐量、效能,以及耗电比,而不是看单线程的峰值性能。霍尔茨勒表示,“这也是最近多核CPU的设计潮流与将来方向。”
裁缝般地定制软件
为了能尽可能压榨硬件性能,Google开发了至关数量的定制软件。创新产品主要包括用于简化处理和建立大规模数据集的编程模型MapReduce;用于存储和管理大规模数据的系统BigTable;分析分布式运算环境中大规模数据集的解释编程语言Sawzall;用于数据密集型应用的分布式文件系统的 “Google文件系统”(Google File System);还有为处理分布式系统队列分组和任务调度的“Google工做队列”(Google Workqueue)。
正是从Sawzall这些工具里体现出Google对计算效率的执著关注。并非每家公司都能从底层去解决效率问题,可是对Google来讲,为常规关系型数据库没法容纳的大规模数据集专门设计一种编程语言是彻底合理的。即便其余编程工具能够解决问题,Google的工程师们仍然会为了追求效率而另外开发一套定制方案。Google工程师认为,Sawzall能与C++中的MapReduce相媲美,并且它更容易编写一些。
Google 对效率的关注使它不可能对标准Linux内核感到满意;Google会根据本身的须要运行修改过的内核版本。经过调整Linux的底层性能,Google 工程师们在提升了总体系统可靠性的基础上,还一并解决了数据损坏和数据瓶颈等一系列棘手问题。对内核的修改也使Google的计算机集群系统由于通讯效率的提升而运行得更快。
固然,Google偶尔也会出现系统故障,状况一旦发生,无数的用户就会受到影响了。三年前一次持续30分钟的系统故障使20%的搜索流量受到影响。
Google 开发了本身的网站服务器却没有使用开源的Apache服务器,尽管它在网站服务器的市场占有率超过60%。迪博纳认为,Google的网站服务器能够运行在更多数量的主机上,对Google站点上内容庞大又彼此互相依赖的应用程序来讲,这种服务器的负载均衡能力远比Apache的能力更高。同时,在用标准公共网关接口(CGI)访问数据库动态网页方面,Google服务器的编程难度要比 Apache更高,可是最终运行速度却更快。“若是咱们可以压榨出10%~20%的性能,咱们就能够节省出更多系统资源、电量和人力了。”迪博纳在总结中指出。
Google还设计了本身的客户关系管理(CRM)系统用于支持本身基于竞价和点击的互联网广告收费业务。但对是否须要设计本身的工具,Google的态度也不是一成不变的。好比在财会软件上,它就使用了甲骨文公司(Oracle)的Financials软件。
美林拿着一只叉子举例说明现成的产品也能够带来价值。但在有些场合现成的软件产品就不必定适用了。“咱们的文化在各个层面对咱们的运做都有深远影响,”他表示,“因此咱们不想让购买所得的工具改变咱们的工做方式和文化层面。”
参考:http://highscalability.com/google-architecture