探索Google App Engine背后的奥秘Word格式.docx

上传人:b****6 文档编号:16186217 上传时间:2022-11-21 格式:DOCX 页数:24 大小:572.07KB
下载 相关 举报
探索Google App Engine背后的奥秘Word格式.docx_第1页
第1页 / 共24页
探索Google App Engine背后的奥秘Word格式.docx_第2页
第2页 / 共24页
探索Google App Engine背后的奥秘Word格式.docx_第3页
第3页 / 共24页
探索Google App Engine背后的奥秘Word格式.docx_第4页
第4页 / 共24页
探索Google App Engine背后的奥秘Word格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

探索Google App Engine背后的奥秘Word格式.docx

《探索Google App Engine背后的奥秘Word格式.docx》由会员分享,可在线阅读,更多相关《探索Google App Engine背后的奥秘Word格式.docx(24页珍藏版)》请在冰豆网上搜索。

探索Google App Engine背后的奥秘Word格式.docx

主要存储与数据文件相关的元数据,而不是Chunk(数据块)。

元数据包括一个能将64位标签映射到数据块的位置及其组成文件的表格,数据块副本位置和哪个进程正在读写特定的数据块等。

还有Master节点会周期性地接收从每个Chunk节点来的更新("

Heart-beat"

)来让元数据保持最新状态。

∙Chunk节点:

顾名思义,肯定用来存储Chunk,数据文件通过被分割为每个默认大小为64MB的Chunk的方式存储,而且每个Chunk有唯一一个64位标签,并且每个Chunk都会在整个分布式系统被复制多次,默认为3次。

下图就是GFS的架构图:

图1.GFS的架构图(参片[15])

接着,在设计上,GFS主要有八个特点:

∙大文件和大数据块:

数据文件的大小普遍在GB级别,而且其每个数据块默认大小为64MB,这样做的好处是减少了元数据的大小,能使Master节点能够非常方便地将元数据放置在内存中以提升访问效率。

∙操作以添加为主:

因为文件很少被删减或者覆盖,通常只是进行添加或者读取操作,这样能充分考虑到硬盘线性吞吐量大和随机读写慢的特点。

∙支持容错:

首先,虽然当时为了设计方便,采用了单Master的方案,但是整个系统会保证每个Master都会有其相对应的复制品,以便于在Master节点出现问题时进行切换。

其次,在Chunk层,GFS已经在设计上将节点失败视为常态,所以能非常好地处理Chunk节点失效的问题。

∙高吞吐量:

虽然其单个节点的性能无论是从吞吐量还是延迟都很普通,但因为其支持上千的节点,所以总的数据吞吐量是非常惊人的。

∙保护数据:

首先,文件被分割成固定尺寸的数据块以便于保存,而且每个数据块都会被系统复制三份。

∙扩展能力强:

因为元数据偏小,使得一个Master节点能控制上千个存数据的Chunk节点。

∙支持压缩:

对于那些稍旧的文件,可以通过对它进行压缩,来节省硬盘空间,并且压缩率非常惊人,有时甚至接近90%。

∙用户空间:

虽然在用户空间运行在运行效率方面稍差,但是更便于开发和测试,还有能更好利用Linux的自带的一些POSIXAPI。

现在Google内部至少运行着200多个GFS集群,最大的集群有几千台服务器,并且服务于多个Google服务,比如Google搜索。

但由于GFS主要为搜索而设计,所以不是很适合新的一些Google产品,比YouTube、Gmail和更强调大规模索引和实时性的Caffeine搜索引擎等,所以Google已经在开发下一代GFS,代号为"

Colossus"

,并且在设计方面有许多不同,比如:

支持分布式Master节点来提升高可用性并能支撑更多文件,Chunk节点能支持1MB大小的chunk以支撑低延迟应用的需要。

Chubby

简单的来说,Chubby属于分布式锁服务,通过Chubby,一个分布式系统中的上千个client都能够对于某项资源进行"

加锁"

或者"

解锁"

,常用于BigTable的协作工作,在实现方面是通过对文件的创建操作来实现"

,并基于著名科学家LeslieLamport的Paxos算法。

ProtocolBuffer

ProtocolBuffer,是Google内部使用一种语言中立、平台中立和可扩展的序列化结构化数据的方式,并提供Java、C++和Python这三种语言的实现,每一种实现都包含了相应语言的编译器以及库文件,而且它是一种二进制的格式,所以其速度是使用XML进行数据交换的10倍左右。

它主要用于两个方面:

其一是RPC通信,它可用于分布式应用之间或者异构环境下的通信。

其二是数据存储方面,因为它自描述,而且压缩很方便,所以可用于对数据进行持久化,比如存储日志信息,并可被MapReduce程序处理。

与ProtocolBuffer比较类似的产品还有Facebook的Thrift,而且Facebook号称Thrift在速度上还有一定的优势。

分布式大规模数据处理

MapReduce

首先,在Google数据中心会有大规模数据需要处理,比如被网络爬虫(WebCrawler)抓取的大量网页等。

由于这些数据很多都是PB级别,导致处理工作不得不尽可能的并行化,而Google为了解决这个问题,引入了MapReduce这个编程模型,MapReduce是源自函数式语言,主要通过"

Map(映射)"

和"

Reduce(化简)"

这两个步骤来并行处理大规模的数据集。

Map会先对由很多独立元素组成的逻辑列表中的每一个元素进行指定的操作,且原始列表不会被更改,会创建多个新的列表来保存Map的处理结果。

也就意味着,Map操作是高度并行的。

当Map工作完成之后,系统会先对新生成的多个列表进行清理(Shuffle)和排序,之后会这些新创建的列表进行Reduce操作,也就是对一个列表中的元素根据Key值进行适当的合并。

下图为MapReduce的运行机制:

图2.MapReduce的运行机制(参[19])

接下来,将根据上图来举一个MapReduce的例子:

比如,通过搜索Spider将海量的Web页面抓取到本地的GFS集群中,然后Index系统将会对这个GFS集群中多个数据Chunk进行平行的Map处理,生成多个Key为URL,value为html页面的键值对(Key-ValueMap),接着系统会对这些刚生成的键值对进行Shuffle(清理),之后系统会通过Reduce操作来根据相同的key值(也就是URL)合并这些键值对。

最后,通过MapReduce这么简单的编程模型,不仅能用于处理大规模数据,而且能将很多繁琐的细节隐藏起来,比如自动并行化,负载均衡和机器宕机处理等,这样将极大地简化程序员的开发工作。

MapReduce可用于包括"

分布grep,分布排序,web访问日志分析,反向索引构建,文档聚类,机器学习,基于统计的机器翻译,生成Google的整个搜索的索引"

等大规模数据处理工作。

Yahoo也推出MapReduce的开源版本Hadoop,而且Hadoop在业界也已经被大规模使用。

Sawzall

Sawzall可以被认为是构建在MapReduce之上的采用类似Java语法的DSL(Domain-SpecificLanguage),也可以认为它是分布式的AWK。

它主要用于对大规模分布式数据进行筛选和聚合等高级数据处理操作,在实现方面,是通过解释器将其转化为相对应的MapReduce任务。

除了Google的Sawzall之外,yahoo推出了相似的Pig语言,但其语法类似于SQL。

分布式数据库技术

BigTable

由于在Google的数据中心存储PB级以上的非关系型数据时候,比如网页和地理数据等,为了更好地存储和利用这些数据,Google开发了一套数据库系统,名为"

BigTable"

BigTable不是一个关系型的数据库,它也不支持关联(Join)等高级SQL操作,取而代之的是多级映射的数据结构,并是一种面向大规模处理、容错性强的自我管理系统,拥有TB级的内存和PB级的存储能力,使用结构化的文件来存储数据,并每秒可以处理数百万的读写操作。

什么是多级映射的数据结构呢?

就是一个稀疏的,多维的,排序的Map,每个Cell由行关键字,列关键字和时间戳三维定位.Cell的内容是一个不解释的字符串,比如下表存储每个网站的内容与被其他网站的反向连接的文本。

反向的URLn.www是这行的关键字;

contents列存储网页内容,每个内容有一个时间戳,因为有两个反向连接,所以archor的ColumnFamily有两列:

anchor:

和anchhor:

my.look.ca。

ColumnFamily这个概念,使得表可以轻松地横向扩展。

下面是它具体的数据模型图:

图3.BigTable数据模型图(参[4])

在结构上,首先,BigTable基于GFS分布式文件系统和Chubby分布式锁服务。

其次BigTable也分为两部分:

其一是Master节点,用来处理元数据相关的操作并支持负载均衡。

其二是tablet节点,主要用于存储数据库的分片tablet,并提供相应的数据访问,同时Tablet是基于名为SSTable的格式,对压缩有很好的支持。

图4.BigTable架构图(参[15])

BigTable正在为Google六十多种产品和项目提供存储和获取结构化数据的支撑平台,其中包括有GooglePrint、Orkut、GoogleMaps、GoogleEarth和Blogger等,而且Google至少运行着500个BigTable集群。

随着Google内部服务对需求的不断提高和技术的不断地发展,导致原先的BigTable已经无法满足用户的需求,而Google也正在开发下一代BigTable,名为"

Spanner(扳手)"

,它主要有下面这些BigTable所无法支持的特性:

∙支持多种数据结构,比如table,familie,group和coprocessor等。

∙基于分层目录和行的细粒度的复制和权限管理。

∙支持跨数据中心的强一致性和弱一致性控制。

∙基于Paxos算法的强一致性副本同步,并支持分布式事务。

∙提供许多自动化操作。

∙强大的扩展能力,能支持百万台服务器级别的集群。

∙用户可以自定义诸如延迟和复制次数等重要参数以适应不同的需求。

数据库Sharding

Sharding就是分片的意思,虽然非关系型数据库比如BigTable在Google的世界中占有非常重要的地位,但是面对传统OLTP应用,比如广告系统,Google还是采用传统的关系型数据库技术,也就是MySQL,同时由于Google所需要面对流量非常巨大,所以Google在数据库层采用了分片(Sharding)的水平扩展(ScaleOut)解决方案,分片是在传统垂直扩展(ScaleUp)的分区模式上的一种提升,主要通过时间,范围和面向服务等方式来将一个大型的数据库分成多片,并且这些数据片可以跨越多个数据库和服务器来实现水平扩展。

Google整套数据库分片技术主要有下面这些优点:

∙扩展性强:

在Google生产环境中,已经有支持上千台服务器的MySQL分片集群。

∙吞吐量惊人:

通过巨大的MySQL分片集群能满足巨量的查询请求。

∙全球备份:

不仅在一个数据中心还是在全球的范围,Google都会对MySQL的分片数据进行备份,这样不仅能保护数据,而且方便扩展。

在实现方面,主要可分为两块:

其一是在MySQLInnoDB基础上添加了数据库分片的技术。

其二是在ORM层的Hibernate的基础上也添加了相关的分片技术,并支持虚拟分片(VirtualShard)来便于开发和管理。

同时Google也已经将这两方面的代码提交给相关组织。

数据中心优化技术

数据中心高温化

大中型数据中心的PUE(PowerUsageEffectiveness)普遍在2左右,也就是在服务器等计算设备上耗1度电,在空调等辅助设备上也要消耗一度电。

对一些非常出色的数据中心,最多也就能达到1.7,但是Google通过一些有效的设计使部分数据中心到达了业界领先的1.2,在这些设计当中,其中最有特色的莫过于数据中心高温化,也就是让数据中心内的计算设备运行在偏高的温度下,Google的能源方面的总监ErikTeetzel在谈到这点的时候说:

"

普通的数据中心在70华氏度(21摄氏度)下面工作,而我们则推荐80华氏度(27摄氏度)"

但是在提高数据中心的温度方面会有两个常见的限制条件:

其一是服务器设备的崩溃点,其二是精确的温度控制。

如果做好这两点,数据中心就能够在高温下工作,因为假设数据中心的管理员能对数据中心的温度进行正负1/2度的调节,这将使服务器设备能在崩溃点5度之内工作,而不是常见的20度之内,这样既经济,又安全。

还有,业界传言Intel为Google提供抗高温设计的定制芯片,但云计算界的顶级专家JamesHamilton认为不太可能,因为虽然处理器也非常惧怕热量,但是与内存和硬盘相比还是强很多,所以处理器在抗高温设计中并不是一个核心因素。

同时他也非常支持使数据中心高温化这个想法,而且期望将来数据中心甚至能运行在40摄氏度下,这样不仅能节省空调方面的成本,而且对环境也很有利。

12V电池

由于传统的UPS在资源方面比较浪费,所以Google在这方面另辟蹊径,采用了给每台服务器配一个专用的12V电池的做法来替换了常用的UPS,如果主电源系统出现故障,将由该电池负责对服务器供电。

虽然大型UPS可以达到92%到95%的效率,但是比起内置电池的99.99%而言是非常捉襟见肘的,而且由于能量守恒的原因,导致那么未被UPS充分利用的电力会被转化成热能,这将导致用于空调的能耗相应地攀升,从而走入一个恶性循环。

同时在电源方面也有类似的"

神来之笔"

,普通的服务器电源会同时提供5V和12V的直流电。

但是Google设计的服务器电源只输出12V直流电,必要的转换在主板上进行,虽然这种设计会使主板的成本增加1美元到2美元,但是它不仅能使电源能在接近其峰值容量的情况下运行,而且在铜线上传输电流时效率更高。

服务器整合

谈到虚拟化的杀手锏时,第一个让人想到肯定是服务器整合,而且普遍能实现1:

8的整合率来降低各方面的成本。

有趣的是,Google在硬件方面也引入类似服务器整合的想法,它的做法是在一个机箱大小的空间内放置两台服务器,这些做的好处有很多,首先,减小了占地面积。

其次,通过让两台服务器共享诸如电源等设备,来降低设备和能源等方面的投入。

探索GoogleAppEngine背后的奥秘

(2)--Google的整体架构猜想

本文是基于现有的公开资料和个人的经验来对Google的整体架构进行总结和猜想。

在软件工程界,大家有一个共识,那就是"

需求决定架构"

,也就是说,架构的发展是为了更好地支撑应用。

那么本文在介绍架构之前,先介绍一下Google所提供的主要产品有哪些?

产品

对于Google和它几个主要产品,比如搜索和邮件等,大家已经非常熟悉了,但是其提供服务的不只于此,并主要可分为六大类:

∙各种搜索:

网页搜索,图片搜索和视频搜索等。

∙广告系统:

AdWords和AdSense。

∙生产力工具:

Gmail和GoogleApps等。

∙地理产品:

地图,GoogleEarth和GoogleSky等。

∙视频播放:

Youtube。

∙PaaS平台:

GoogleAppEngine。

设计理念

根据现有的资料,Google的设计理念主要可以总结出下面这六条:

∙Scale,Scale,ScaleScale:

因为Google大多数服务所面对的客户都是百万级别以上的,导致Scale也就是伸缩已经深深植入Google的DNA中,而且Google为了帮助其开发人员更好地开发分布式应用和服务,不仅研发了用于大规模数据处理MapReduce框架,还推出了用于部署分布式应用的PaaS平台GoogleAppEngine。

∙容错:

一个分布式系统,就算是构建在昂贵的小型机或者大型机之上,也会不时地出现软件或者硬件方面的错误,何况Google的分布式系统还是浇筑在便宜的X86服务器之上,即使其设备标称的MTBF(平均故障间隔时间)很高,但是由于一个集群内的设备极多,导致其错误发生的几率非常高,比如李开复曾经提过这样一个例子:

在一个拥有两万台X86服务器的集群中,每天大约有110台机器会出现宕机等恶劣情况,所以容错是一个不可被忽视的问题,同时这点也被Google院士JeffreyDean在多次演讲中提到。

∙低延迟:

延迟是影响用户体验的一个非常重要的因素,Google的副总裁MarissaMayer曾经说过:

如果每次搜索的时间多延迟半秒的话,那么使用搜索服务的人将减少20%"

,从这个例子可以看出,低延迟对用户体验非常关键,而且为了避免光速和复杂网络环境造成的延时,Google已在很多地区设置了本地的数据中心。

∙廉价的硬件和软件:

由于Google每天所处理的数据和请求在规模上是史无前例的,所以现有的服务器和商业软件厂商是很难为Google"

度身定做"

一套分布式系统,而且就算能够设计和生产出来,其价格也是Google所无法承受的,所以其上百万台服务器基本采用便宜的X86系统和开源的Linux,并开发了一整套分布式软件栈,其中就包括上篇提到的MapReduce,BigTable和GFS等。

∙优先移动计算:

虽然随着摩尔定律的不断发展,使得很多资源都处于不断地增长中,比如带宽等,但是到现在为止移动数据成本远大于移动计算的成本,所以在处理大规模数据的时候,Google还是倾向于移动计算,而不是移动数据。

∙服务模式:

在Google的系统中,服务是相当常用的,比如其核心的搜索引擎需要依赖700-1000个内部服务,而且服务这种松耦合的开发模式在测试,开发和扩展等方面都有优势,因为它适合小团队开发,并且便于测试。

整体架构的猜想

在整体架构这部分,首先会举出Google的三种主要工作负载,接着会试着对数据中心进行分类,最后会做一下总结。

三种工作负载

对于Google而言,其实工作负载并不仅仅只有搜索这一种,主要可以被分为三大类:

∙本地交互:

用于在用户本地为其提供基本的Google服务,比如网页搜索等,但会将内容的生成和管理工作移交给下面的内容交付系统,比如:

生成搜索所需的Index等。

通过本地交互,能让用户减少延迟,从而提高用户体验,而且其对SLA要求很高,因为是直接面对客户的。

∙内容交付:

用于为Google大多数服务提供内容的存储,生成和管理工作,比如创建搜索所需的Index,存储YouTube的视频和GMail的数据等,而且内容交互系统主要基于Google自己开发那套分布式软件栈。

还有,这套系统非常重视吞吐量和成本,而不是SLA。

∙关键业务:

主要包括Google一些企业级事务,比如用于企业日常运行的客户管理和人力资源等系统和赚取利润的广告系统(AdWords和AdSense),同时关键业务对SLA的要求非常高。

两类数据中心

按照2008年数据,Google在全球有37个数据中心,其中19个在美国,12个在欧洲,3个在亚洲(北京、香港、东京),另外3个分布于俄罗斯和南美。

下图显示其中36个数据中心在全球的分布:

图1.2008年Google全球数据中心分布图

根据JeffreyDean在2009年末的一次演讲和最近几期季报可以推测出Google并没有在2009年过多地增加全球数据中心的数量,总数应该还是稍多于36个,但很有可能在台湾、马来西亚、立陶宛等地增加新的数据中心。

虽然Google拥有数据中心数量很多,但是它们之间存在一定的差异,而且主要可以分为两类:

其一是巨型数据中心,其二是大中型数据中心。

巨型数据中心:

服务器规模应该在十万台以上,常坐落于发电厂旁以获得更廉价的能源,主要用于Google内部服务,也就是内容交付服务,而且在设计方面主要关注成本和吞吐量,所以引入了大量的定制硬件和软件,来减低PUE并提升处理量,但其对SLA方面要求不是特别严厉,只要保证绝大部分时间可用即可。

下图是Google巨型数据中心的一个代表,这个数据中心位于美国俄勒冈州北部哥伦比亚河畔的Dalles市,总占地面积接近30英亩,并占用了附近一个1.8GW水力发电站的大部分电力输出,当这个数据中心全部投入使用后,将消耗103兆瓦的电力,这相当于一个中小型城市的整个生活用电。

图2.Google在美国俄勒冈州哥伦比亚河畔的巨型数据中心近景图

大中型数据中心:

服务器规模在千台至万台左右,可用于本地交互或者关键业务,在设计方面上非常重视延迟和高可用性,使得其坐落地点尽可能地接近用户而且采用了标准硬件和软件,比如Dell的服务器和MySQL的数据库等,常见的PUE大概在1.5和1.9之间。

本来坐落于北京朝阳区酒仙桥附近的"

世纪互联"

机房的Google中国数据中心也属于大中型数据中心这类,其采用的硬件有DELL的工作站和Juniper的防火墙等,下图为其一角。

图3.Google前中国数据中心的一角(参[26])

关于两者的区别:

具体请查看下表:

 

巨型数据中心

大中型数据中心

工作负载

内容交付

本地交互/关键业务

地点

离发电厂近

离用户近

设计特点

高吞吐,低成本

低延迟,高可用性

服务器定制化

SLA

普通

服务器数量

十万台以上

千台以上

数据中心数量

十个以内

几十个

PUE估值

1.2

1.5

表1.巨型与大中型数据中心的对比表

总结

最后,稍微总结一下,首先,普通的用户当访问Google服务时,大多会根据其请求的IP地址或者其所属的ISP将这个请求转发到用户本地的数据中心,如果本地数据中心无法处理这个请求,它很有可能将这个请求转发给远端的内容交互中心。

其次,当广告客户想接入Google的广告系统时,这个请求会直接转发至其专业的关键业务数据中心来处理。

图4.总结

因为本文是基于现有的公开资料和个人的经验的总结和猜想,所以和Google实际的运行情况没有任何联系。

探索GoogleAppEngine背后的奥秘(3)-GoogleAppEngine的简介

通过前面两篇介绍,大家应该对Google强大的基础设施有一定的了解。

本篇开始介绍构筑在这强大基础设施之上的GoogleAppEngine。

GoogleAppEngine的介绍

由于发布S3和EC2这两个优秀的云服务,使得Amazon已经率先在云计算市场站稳了脚跟,而身为云计算这个浪潮的发起者之一的Google肯定不甘示弱,并在2008年四月份推出了GoogleAppEngine这项PaaS服务,虽然现在无法称其为一个革命性的产品,但肯定是现在市面上最成熟,并且功能最全面的Pa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1