按:此为客座博文系列。投稿人吴朱华曾在IBM中国研究院从事与云计算相关的研究,现在正致力于研究云计算技术。
本文是基于现有的公开资料和个人的经验来对Google的整体架构进行总结和猜想。
在软件工程界,大家有一个共识,那就是"需求决定架构",也就是说,架构的发展是为了更好地支撑应用。那么本文在介绍架构之前,先介绍一下Google所提供的主要产品有哪些?
产品
对于Google和它几个主要产品,比如搜索和邮件等,大家已经非常熟悉了,但是其提供服务的不只于此,并主要可分为六大类:
- 各种搜索:网页搜索,图片搜索和视频搜索等。
- 广告系统:AdWords和AdSense。
- 生产力工具:Gmail和Google Apps等。
- 地理产品:地图,Google Earth和Google Sky等。
- 视频播放:Youtube。
- PaaS平台:Google App Engine。
设计理念
根据现有的资料,Google的设计理念主要可以总结出下面这六条:
- Scale,Scale,Scale Scale:因为Google大多数服务所面对的客户都是百万级别以上的,导致Scale也就是伸缩已经深深植入Google的DNA中,而且Google为了帮助其开发人员更好地开发分布式应用和服务,不仅研发了用于大规模数据处理MapReduce框架,还推出了用于部署分布式应用的PaaS平台Google App Engine。
- 容错:一个分布式系统,就算是构建在昂贵的小型机或者大型机之上,也会不时地出现软件或者硬件方面的错误,何况Google的分布式系统还是浇筑在便宜的X86服务器之上,即使其设备标称的MTBF(平均故障间隔时间)很高,但是由于一个集群内的设备极多,导致其错误发生的几率非常高,比如李开复曾经提过这样一个例子:在一个拥有两万台X86服务器的集群中,每天大约有110台机器会出现宕机等恶劣情况,所以容错是一个不可被忽视的问题,同时这点也被Google院士Jeffrey Dean在多次演讲中提到。
- 低延迟:延迟是影响用户体验的一个非常重要的因素,Google的副总裁Marissa Mayer曾经说过:"如果每次搜索的时间多延迟半秒的话,那么使用搜索服务的人将减少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全球数据中心分布图
根据 Jeffrey Dean 在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实际的运行情况没有任何联系。
本篇结束,下篇将对Google App Engine及其主要组成部分进行介绍。
--EOF--
相关推荐
标题中的"appengine-java-sdk-1.3.1"指的是Google App Engine的Java版本SDK,这是一个用于在Google云平台上开发和部署Java应用程序的工具包。这个SDK包含了运行和测试Google App Engine应用所需的所有组件,包括开发...
appengine-tools-api.jar中文乱码, 修改appengine-tools-api.jar 以实现以UTF-8文件,编译. 使用方法: ...用你下载的包中Application.class替换om.google.appengine.tools.admin包里的Application.class文件
- 对于需要快速构建和扩展Web应用的开发者,App Engine提供了开箱即用的服务,减少了基础架构的维护成本。 - 教育环境中,App Engine可以帮助学生学习云计算和分布式系统,因为它提供了真实的云环境。 - 对于小型...
**谷歌AppEngine与Java SDK详解** 谷歌AppEngine(Google App Engine)是一款强大的云计算平台,它允许开发者使用Java、Python、Go或PHP等语言构建并运行Web应用。AppEngine提供了全面的后端服务,包括数据库存储、...
google-appengine-java-sdk-1.9.3 固实压缩, 带恢复记录 总共三个分卷, 此为, part1
google-appengine-java-sdk-1.9.3 固实压缩, 带恢复记录 总共三个分卷, 此为part3
标题中的"appengine-java-sdk-1.5.0.1.zip"表明这是一个关于Google App Engine Java SDK的压缩包,版本号为1.5.0.1。App Engine是由Google提供的一个平台,允许开发者使用Java或Python等语言创建并运行web应用程序。...
标题中的"appengine-tools-sdk-1.9.17.zip"指的是Google App Engine SDK的一个特定版本,1.9.17。Google App Engine是一个由Google提供的云服务平台,它允许开发者构建、部署和运行Web应用程序。SDK(Software ...
标题“google-appengine-docs-20110211”指的是Google App Engine的文档集合,这是一个特定日期(2011年2月11日)的版本。Google App Engine是Google提供的一个云服务平台,它允许开发者在Google的基础设施上构建、...
利用免费的GAE(Google App Engine)建立强大的Blog(micolog)网站
《Google App Engine应用开发详解——基于2010年12月02日更新的官方文档》 Google App Engine(GAE)是Google提供的一项云计算服务,它允许开发者在Google的基础设施上运行自己的Web应用程序。2010年12月02日更新的...
Google App Engine的架构设计主要分为以下几个部分: 1. 应用程序代码:开发者可以直接在Google提供的环境中运行代码,代码可以是Python、Java等语言编写的。 2. 数据存储:Google App Engine提供了一个名为...
【标题】"gradle-appengine-plugin-1.9.4.zip" 涉及的是Gradle App Engine插件的版本1.9.4,这是一个用于部署Google App Engine应用程序的工具。Gradle是一款强大的构建自动化系统,它允许开发者通过声明式的方式...
### Google App Engine for Java中文API知识点详解 #### 一、Google App Engine for Java概览 - **背景介绍**: - Google App Engine最初是专为Python开发者设计的平台,但随着时间的发展,为了满足更广泛开发者...
appengine for java sdk,需要jdk1.7或jdk1.8,javac compiler 设置为jdk1.7,一共包含3个部分。
在“google-appengine-docs-20081003”这个压缩包中,可能包含了早期版本(2008年10月3日)的Google App Engine开发指南、API参考、最佳实践和示例代码等内容。这些文档帮助开发者了解如何利用Google App Engine构建...
2. **appengine-tools-api**: 这是一个用于与Google App Engine交互的开发工具集,包括管理应用部署、数据存储操作、远程API访问等功能。 3. **本地开发环境配置**: 如何设置和优化本地开发环境,以更好地利用app...
google-app-engine-ranklist-ndb google-app-engine-ranklist-ndb是来自的分支项目 对原始代码进行了以下更改 使用ndb代替原始数据存储 带有播放器名称的get_score函数 基本测试代码 该项目包括原始存储库中的示例...