吴军博士在《浪潮之巅》一书中写道:在2000年前后,由于对互联网发展过度乐观,美国超前建设了大量互联网基础设施,包括数据中心和铺设的光缆。到了2003年,生存下来的大型互联网公司的业务恢复乃至超过了2000年以前的水平,原来留下的基础设施面临饱和。由于互联网泡沫的殷鉴不远,敢于大规模投资数据中心和网络等基础设施建设的公司不多,这类基础设施建设的事情就落到了这些大互联网公司自己身上。Google比其他公司更早的看到互联网基础设施的重要性,而负责工程的高级副总裁Urs H lzle在其中发挥了关键性的作用,贡献主要体现在以下三个方面:
第一,在全球租用和收购已铺设的光缆,以及铺设新光缆,保证网速不会成为Google业务发展的瓶颈;
第二,抢先在全球布局,占据建设数据中心的最佳点;
第三,设计节能高效的服务器机柜,大大降低运营成本。
爱荷华州康瑟尔布拉夫斯(Council Bluffs, Iowa)的巨大天线,为Google的访问服务(Access Services)装置接收信号,通过光纤送往全球的家庭。这些天线也是Google Fiber的TV服务上百个电视频道的主要信号源
作为较早期的Google员工,吴军博士提到Google的人和事时,难免有一些溢美之词。不过,没有基础设施先行,2004年推出的Gmail不可能一炮而红(初期仍然需要通过邀请来控制用户数量,换言之,限制服务的规模),而近些年来,Google在数据中心建设及相关技术上的领先地位,已是业界公认。从投入和规模上,堪与Google相提并论的,惟微软与亚马逊耳。
Google在俄克拉何马州梅斯郡(Mayes County, Oklahoma) 的数据中心内景,每个服务器机架配备4台交换机,采用不同颜色的线缆,便于故障后更换
难称巧合的是,微软与亚马逊的数据中心建设,都与同一人有密切关系。
2006年,Sun发布了基于船运集装箱的模块化数据中心原型“Project Black Box”(黑箱项目),掀起了集装箱数据中心的热潮。微软成为集装箱数据中心的早期用户之一,时任微软Windows Live核心团队架构师的James Hamilton认为基于集装箱的商品化数据中心(Commodity Data Center)是数据中心基础设施的未来。
集装箱数据中心具有便于运输和室外部署等优势
James Hamilton在IBM工作了11年,任至DB2首席架构师。来到微软后,历任SQL Server架构师和Exchange托管服务总经理。2007年1月中旬,James Hamilton出席亚马逊内部开发者会议时介绍,在他领导Exchange托管服务团队时,为220万个坐席提供电子邮件反垃圾信息、防病毒和归档服务,带来2700万美元收入,约700台服务器分布于全球的数据中心。
2008年12月,James Hamilton加入亚马逊,担任AWS(Amazon Web Services,亚马逊网络服务)副总裁兼杰出工程师至今。作为亚马逊基础设施领域的代言人,2011年James Hamilton在演讲中透露,AWS每天增加的容量相当于公司第一个五年Amazon.com全球的基础设施(当时还没有AWS),即支撑一个年收入近28亿美元的企业——到2014年,这一表述发展至“AWS每天新增的服务器容量可以支持亚马逊作为一个年收入70亿美元企业时的全球基础设施”。
作为平台型的互联网公司,基础设施乃核心及命脉所系,必须掌握在自己手里,不断随着业务的发展而追加投入,才能继续参与竞争,而不被判出局。作为一个诞生在互联网时代之前的“老派”企业,持续的基础设施建设则是微软从PC时代的平台型公司,转变为互联网时代的平台型公司的必要保障。
就在2015年2月初,Google公布的财报显示,2014年第四季度在基础设施上的花费达到创纪录的35亿美元,全年更接近110亿美元;
Amazon第四季度超过11亿美元,全年约49亿美元;
微软同一季度近15亿美元,全年约53亿美元;
Facebook全年超过18亿美元,只相当于三巨头一个季度的水平,但也已经比2013年高出34%……
Google每季度在基础设施(资产和设备)上的花费从2012年的不到10亿美元,一路攀升至2014年的超过30亿美元,2014年全年超过亚马逊与微软之和
数据中心是IT设备(服务器、网络、存储等)的“家”,因而服务器数量是估算互联网巨头们基础设施投入的另一参照,理论上也更直观。但是,大到如此的规模,服务器数量几乎每时每刻都在增长,精确数字只有自家才可能统计出来,偶尔会为了公关宣传的需要透露大致的数量级。
Google视其服务器总量为机密,即使业内人士也只能推算。2007年1月初,James Hamilton估计Google在30个数据中心里有约50万个系统(服务器)。2010年,有猜测说Google的服务器总量大约有90万台。总之,突破百万大关只是个时间问题。
Google在Council Bluffs的数据中心超过11.5万平方英尺(接近1.1万平方米),以很高的空间利用率支持搜索和YouTube等服务
微软的服务器数量也在快速增长。仅以Xbox为例:
2002年Xbox Live上线时有500台服务器;
随着Xbox 360推出,这一数字超过3000;
2013年5月,为Xbox Live服务的服务器已经达到15000台,微软宣称Xbox One将推动服务器用量超过30万台。
2013年7月8日,时任CEO Steve Ballmer在微软2013全球合作伙伴大会上宣布,在微软数据中心基础设施中有超过100万台服务器,比Google少,略多于亚马逊("Google is bigger than we are. Amazon is a little bit smaller.")。此时,通过用电量等指标推算,人们认为Google拥有的服务器数量已超过200万台。
微软在德州圣安东尼奥的数据中心,注意看右边路上汽车的大小,不难想象这个数据中心的占地面积之大,风格似与都柏林的数据中心不同
Bigger than bigger是2014年第四季度的流行词,11月10日下午,James Hamilton向参加AWS re:Invent 2014大会的全球分析师们委婉地“明示”,AWS所拥有的服务器总量,早已超过100万台。至于何时超过,现在大约是多少,James Hamilton笑言公司的政策是不透露服务器总量……
很快,微软云计算相关人士在面对中国媒体的采访中,以同样的手法予以回击:微软现在全球有19个区域,最大的一个有16个数据中心,60万台物理机。那么,总量有没有200万?也没有答案。倒是2015年5月的消息说,由于在印度增加了2个区域,区域总数达到21个。
这就自然而然的引出了一个问题:百万量级的服务器意味着什么?如何使用及管理遍布全球的数据中心?
数据中心即计算机(Datacenter as a Computer)
2009年,Urs H lzle与Luiz André Barroso合著的《The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines》(数据中心即计算机:仓库规模机器设计简介)出版,简要介绍了仓库级计算机(Warehouse-Scale Computer,WSC)的方方面面。Google早期托管服务器(计算机)的场所不是那种对设备精心呵护的商业化数据中心,更像是有较充足电力供应和空调的大型仓库,这一点也会在下一章有所讨论。
截至2015年5月初,Google分布在全球13处的数据中心
2013年,这本书更新到第二版, Urs H lzle从第二作者变成第三作者,两个版本总体上都更偏设计原则和数据中心基建(风火水电)部分,较少提及Google的工程实践。要形象的理解Datacenter as a Computer,James Hamilton在AWS re:Invent 2014上的演讲披露了更多的细节。
从大机(Mainframe)到Unix服务器(小型机),再到x86服务器,潮流的转变周期至少以十年计。以Google、微软、亚马逊、Facebook为代表的超大规模(hyper-scale或web-scale)数据中心,可以说都是基于x86服务器的分布式计算体系——ARM的成规模应用尚需时日。
具体到亚马逊,我们知道AWS有区域(Region)和可用区(Availability Zone,AZ)的概念。选择区域可以靠近用户、数据或满足监管等需求,目前AWS在全球有11个区域,28个AZ。除了仍处于有限预览阶段的中国北京(截至2015年5月初),所有区域都由2个或以上的AZ组成。
AWS在全球的分布,北京即将拥有其第29个AZ?
从“可用区”这个名字上就能看出以高可用性(high availability,HA)为目标,AZ组成区域的根本原则是“就近”,相距小于2毫秒(ms)则可以在至少2个AZ之间进行同步复制,能够故障切换(failover)而没有数据丢失或不影响应用;还可以在不同AZ的EC2实例之间弹性负载均衡(Elastic Load Balancing,ELB),多AZ的EC2应用也相对容易;挑战则在于DynamoDB、S3和Multi-AZ RDS(多可用区关系数据库服务)等对持久化状态(特别是存储)有要求的应用。
AWS中多AZ的RDS实例比例呈逐年上升之势
距离太远,就只能采用异步复制了。譬如,提交到一个SSD需要1-2毫秒,但是洛杉矶到纽约(美国西南到东北,3982.9公里)的往返就要74毫秒,显然不能等待这么久来提交这个交易。故障发生时,要么切换而丢失交易,要么不切换而丧失可用性,两难的选择。实际上,洛杉矶属于美西(北加州)区域,纽约属于美东(北维州)区域。私有的AWS光纤链路互连所有主要区域。
区域内的AZ之间可以无需管理员参与的(自动)故障切换,能够与区域间的复制联合使用,提供非常高的可用性。毕竟,距离近也意味着容易受同一自然(天气或地质性等)或人为灾害影响。
以一个包含5个AZ的区域(目前只有美东有这么多,其他最多3个)为例:区域内有多达82864个光纤束(fiber strand),AZ之间为城域DWDM(Dense WaveLength Division Multiplexing,密集波分复用)链路,延迟小于2ms,通常小于1ms,峰值流量达25Tbps。AZ通过冗余路径连接到2个转接中心,转接中心通过私有链路连接到其他AWS区域、Direct Connect(AWS的一项服务,后面软件定义存储的章节有简要介绍)客户,Internet传输为对等付费方式。
从右上至左下,依次为AWS的全球分布、区域、可用区、数据中心之间的关系
每个AZ由1个或更多的数据中心构成,有些AZ的数据中心达到6个,数据中心不能跨AZ。AZ内的数据中心间相距不到四分之一毫秒(0.25ms),不必有AZ内的独立性,但需要低延迟和全部带宽。
亮点来了:单个数据中心通常超过5万台服务器,经常超过8万台!演讲结束,我特意向James Hamilton确认,5年前AWS建设的数据中心就有这样的能力。这样,即使以最保守的每个数据中心5万台,每个AZ只有1个数据中心,28个AZ(北京短期内恐怕达不到此水平),AWS的服务器总量也明显超过了100万台(140万+),实际上应该不止此数(考虑一下6个数据中心的AZ)。
提供给一个数据中心的带宽可达102Tbps。AWS不需要更大的数据中心(譬如,10万台及以上),也不希望数据中心之间距离太近。据未经证实的消息,AWS最初在宁夏的规划,是3个相互间距离50公里的数据中心。
无论AWS在宁夏的发展如何,北京还会继续增加数据中心以形成AZ,因为从前面的介绍不难看出,以北京和宁夏之间的距离,不能是同一个区域,更不会是同一个AZ。按照同样的原则,如果上海有数据中心,也应该是另一个区域。北京区域要增加AZ,必须在北京周边解决。往坏的方面说,宁夏帮不上北京的忙;往好的方面说,AWS在中国的正式商用,不必等宁夏的进度。
多可用区MySQL RDS的同步复制(左)与Amazon Aurora RDS的3可用区6路复制(右)
互联网巨头们自研(或部分自研)的数据库应用很好的体现了跨多个数据中心的基础设施优势,AWS在re:Invent 2014大会上公布的MySQL兼容RDBMS(Relational Database Management System,关系数据库管理系统)Aurora,作为AWS RDS(Relational Database Service,关系型数据库服务)家族的新成员,宣称以云服务的价格提供企业级数据库软件的功能,支持多达16路读副本(RDS MySQL为5路)、可达64TB的表(RDS/MySQL为3TB) ,跨3个可用区的6路复制(即使2个数据中心不可用仍不会丢失数据),为11个9(99.999999999%)的耐久性设计,近即时故障切换,能够从存储故障中自动恢复……均与基础设施的支持紧密相关。在Google F1和阿里巴巴OceanBase这两个旨在替代MySQL的分布式关系型数据库的描述中,也都可以看到基础设施支持的表达。