(译自 Timothy Prickett Morgan,原文:http://www.enterprisetech.com/2014/11/14/rare-peek-massive-scale-aws/)
8 年前,亚马逊发布了第一个云计算产品。亚马逊一直坚持云计算的目的,就是屏蔽底层的硬件,为开发者提供计算资源以运行应用程序。 对于 AWS,还有其母公司亚马逊,硬件都是一个竞争优势。亚马逊一向不大愿意过多谈论自己的数据中心和系统。 但是那些竞争对手们,包括 GOOGLE, MICROSOFT 和 IBM,则大肆宣传在云计算上的投入和创新。亚马逊也就不得不稍稍揭开一点自己的神秘面纱。
原因很简单。亚马逊的在线零售业务,是一个700亿美金的庞然大物,大虽大,但耗费现金并不多。 Jeff Bezos,亚马逊的创始人兼 CEO,对于利润的兴趣很小,对于改变世界的兴趣倒是很大。然而,云计算毕竟是这个世界上,资本最为密集的行业之一。Google 可以在数据中心上花费几百亿美金而毫不心痛,背后有垄断性业务“搜索引擎”的支撑。 Microsoft,则在桌面软件和数据中心软件方面有着垄断的地位,钱袋一样深不可测,自然也一样敢于一掷千金。
Google 和 Microsoft 在烧钱上的本事,无人能及。 但他们的基础设施和平台服务,面对亚马逊时的竞争力,还是令人生疑。 但若从长期来看,亚马逊能否跟得上 google 和 microsoft 的脚步,却很成问题了。 于是,AWS 的副总裁,卓越的工程师,James Hamilton 透露了AWS 云的规模和范围。目的自然为了告诉大家,亚马逊的领先地位以及对云计算的决心。
最重要的,永远是规模。做在线零售的亚马逊,当然清楚这个。 亚马逊很少谈及公有云,因为在亚马逊的理论中,云计算就不该是私有云。亚马逊认为,长期来看,公有云的巨大规模,意味着大部分的组织和机构都不需要运营自己的数据中心。
在 AWS 的 Re:Invent 大会上,jassy又一次强调,自云计算业务开始以来,他和亚马逊的 CTO Werner Vogels 就支持这个论点。(亚马逊为美国中央情报局建设过一个特殊的 AWS 私有云,签署了为期10 年,6.6 亿美金的合同。但那只不过是一个例外。云计算本质上还应该是公有的)。 Jassy and Vogels的信念很简单: 只有覆盖了全区域,具备大容量,提供最丰富功能的云,才能胜出。会有一些例外,比如说金融服务云,或者那种100%运行特殊硬件和软件的巨型计算中心。 公有云的资源不仅足够好,而且一定会超越大部分的私有云。
AWS 将底层的计算能力、存储和网络功能,抽象出来,这样开发者就可以专注于应用开发。抽象出来的资源,要么形成纯粹的基础设施,要么在其上继续抽象出一层平台服务,便于进一步实现自动化部署和对中间件、数据库和支持应用的其他服务的管理。但这并不是说底层的基础设施不重要。 实际上,亚马逊投入了巨大资金,用来设计和建设数据中心,并优化各方面的设施从内存条到数据中心的墙壁。基础设施确实重要,绝对能够形成竞争优势。
网络的事,比服务器还麻烦
和许多超级数据中心一样,亚马逊的服务器,刚开始也是从一线的服务器制造商那里购买。亚马逊成了rackable system(现在是 SGI 旗下公司)最大的客户。 后来,亚马逊决定自行制造系统,以便针对自己的工作性质进行精确调优。尤为重要的,是为了能够与其数据中心、电力、制冷系统严丝合缝的配合。数据中心在与时俱进的发展,系统也需要步调一致的前进。
过去,亚马逊在其基础设施的规模问题上,只含糊其辞,从不给出准确的数据。从2004年开始,AWS 每一天都要安装足够多的服务器以支撑亚马逊的在线零售业务。那个时候,亚马逊的收入规模,仅为70亿美金,仅为现在的1/10。
“去年发生的那些变化?”Hamilton反问道,然后开玩笑说:“我们都执行过365次了。”
换句话说,去年 AWS 增添了足够多的容量,以支撑2.55万亿的在线零售业务。
那么,AWS 到底容量多大? 答案是:比很多人想的还要大。
下面就是关于服务器的计算了。 亚马逊在全球11个地区拥有数据中心。 每一个地区拥有最少2个可用区,这样所有地区一共拥有28个可用区。 (包括两周前在德国法兰克福启动的新地区)这些可用区为本地的工作负荷,提供隔离的和冗余的能力。类似那种串联或者分层的容错系统,在数据中心和服务的层次上工作,而不是在两个系统之间严格步调一致。每个可用区最少有一个数据中心,有些则多达6个数据中心。 (2013年1月,Hamilton 在 Re:Invent 会议上说,仅只美东地区便有超过10个数据中心,但在2014年的Re:Invent 会议上他的演讲中,又说没有可用区拥有超过6个数据中心。)目的是为了让客户能够构建自己的应用,运行在不同的可用区上,以实现本地数据保护。更进一步,实现跨地区部署,达到更高层次的可用性。 亚马逊通过增加新的数据中心,以为每个可用区提升容量。
基本上,和企业客户增加的机架一样,数据中心实际上就是 AWS 的新机架。
好了,这一切都还是很有意思的。 Hamilton 说 AWS 的每一个区域都最少有两个可用区,每个可用区则最少有1个数据中心。然后他又补充说,一个典型的数据中心最少有5万台服务器,有的超过8万台。 另外,数据中心的规模效益在到达顶峰后便即下降。随着规模扩大,在某一个点,数据中心的边际成本开始上升,而不是下降。 更重要的是,在到达某一个数值后,一旦发生灾难型事故导致数据中心失效,则殃及的“爆炸半径”太大,使得过多的负载无法转移。
做一点计算吧。 假设 AWS 有28个可用分区,每一个数据中心只有5万服务器。这是 AWS 基础设施最小的容量了。这样,全球共有140万服务器。如果你不相信,说每个分区有8万台服务器(我们知道这不是真的,只不过设置一个错误的最高界线),那么就是224万机器。 为了更准确的猜测 AWS 基础设施的规模,你必须猜测可用区中,数据中心数量的分布情况。 我认为很少情况下,只有一个数据,大部分都是2个数据中心,拥有更多数据中心的情况则越来越少,直到到达最大值6个数据中心。我把数据摆弄来摆弄去,觉得28个分区,一共87个数据中心这样的估算还是靠谱的。 每个分区平均3个数据中心还要多一点。 如果假设每个可用区平均6万5千个服务器,那么你会看到数值很大:564万服务器。如果平均5万服务器,则降低到全球420万机器。如果假设每个可用区的数据中心少一些-比如平均2个-那么一共280万台机器。 由此,答案是 AWS 可能拥有280万到560万服务器。 我也意识到很可能误差很大,可是也只能这样猜测了。
总的来说,规模是巨大的。 还不止这些,亚马逊还投入了巨大资金,制造自有的网络设备,并建设了私有网络,从而把所有数据中心连接在一起形成一个巨大的全球集群。 这是 Hamilton 谈起来最兴奋的东西,因为网络是计算能力最大的瓶颈。
“对我们而言,网络互联是当前最大的危机” Hamilton解释道“网络建设的成本,与所有其它设备的成本都相关,不断攀升。在这方面是反摩尔定律的。我们所有的设备都在降低成本,我们也在压低价格,但网络成本则反向而行。这是个大问题。往前再看远几年,网络的问题越发严重。同时网络是反摩尔定律的,网络建设对计算能力的占比也在上升。”
Hamilton 说,部分原因,是由于每一代的cpu都带来更多的计算能力,而每单元计算能力的成本则在下降。 越来越多的人,做越来越多的数据分析,而数据分析工作对网络的需求巨大,给网络带来巨大压力。(这是因为数据分析,和超级计算机的运作一样,在节点之间要进行大量通信,也就是所谓的“东西流量”。而另一种“南北流量”则是 web 应用从服务器上请求一点数据并在互联网上显示出来。二者区别很大。)
所以约五年前,当问题刚刚出现时,AWS 设计了自己的网络路由器并去原厂制造硬件,并组建团队在硬件上开发网络软件。
亚马逊从定制网络设备中学习到的第一件事,和它很久以前从服务器和存储中学到的一样: 如果你用极简主义理念,自主制造所需的设备,那么就会便宜很多。“仅仅网络设备的服务合同,常常就要几千万美金。”
但即便对 Hamilton 而言,也是颇为惊奇的事:网络的可用性上升了,而不是下降。 这是因为 AWS 交换机和路由器只具备 AWS 在网络上所需的功能。 但商业网络操作系统,则必须覆盖所有可能需要的场景和协议,因而往往需要几千万行的代码,从而带来维护上的困难。 “我们的设备更可靠,因为我不需要面对那些更麻烦的问题。能完成任务的,就是好方法。”
另一件事,亚马逊,尤其是 AWS 热衷于测试并收集运行数据。 当亚马逊第一次测试自己的网络时,用了8000台服务器,容量3兆瓦的数据中心。而这个数据中心的建设成本约为4千万美金。任何一家最大的网络设备提供商都做不到,但 AWS 可以,而且做到了。 严格来说,亚马逊是从自己那里租了这巨大规模的数据中心用以测试,在几个月里花费了几十万美金。今天亚马逊所有网络都在使用这自有的网络软件。与拥有软件和详细测试一样重要的是,亚马逊持续开发代码并投入生产。 “也许开始的时候确实差一点,但确实越来越好。”
简单来说,这就是超级系统的独特之处。 总是从简陋,到还凑活,一直到完善状态。 走一条稳定、革新的路,当然这条路会时时被新的理念打断均衡的过程。
AWS 当前有11个地区,2年前是9个地区,还将增加更多以接近客户,并满足业务上对政府管辖权的需求。(德国地区就是因为德国的商业机构和政府机构,不能在爱尔兰存储数据而创建的)这是他们分布的位置:
所有的地区都连接在一起,通过私有光纤通道,而不是通过购买第三方的通道。原因很简单: 这样做,不会因为运营商的问题而导致网络带宽缺乏,而且网络是你自己的,你清楚知道网络的效率。也更加经济,对于亚马逊这么大的规模,自己拥有网络,在每个字节上的单位价格一定更便宜。 另外,自有的网络也比较快,亚马逊不会缓冲自己的流量。而运营商遇到过载的时候,就会对流量进行缓冲。 “更可靠、更经济、也更少延迟” Hamilton这样说。
美东地区,弗吉尼亚州的阿什本,共有5个可用区。这些可用区都是受保护的区域,各自分离并隔开几公里,由高速、低延迟网络连接。这样一来,同步的复制就是可能的,而且地理上的隔离足够远,两个可用区(存储数据和应用的多个版本)同时出现事故的可能性就很小。 可用区单元由光纤联接,使用密集型波分复用传送数据包。在美东地区,一共有82864条光纤。 可用区在延迟方面通常都小于1毫秒,绝对小于2毫秒;这个速度是可以进行同步数据复制的。要知道,固态硬盘的数据保存也要在1-2毫秒之间。
企业经常在关键应用上,通常都会进行跨区域复制。但在麻烦一些的场景中,比方说,一个数据中心在纽约,一个在洛杉矶,则延迟大约为74毫秒。这种情况下,就无法进行同步复制,这就意味着一次失败,数据就会在到达备份系统的传输途中丢失。这样一来,就只能使用日志恢复,而这则要花费数天时间了。
这就是为什么亚马逊在 2000 年要发明可用区。 这种方法一定程度上,更加昂贵,但灾难恢复更快。 可用区在美东地区有 25Tb/sec 的带宽,为了应用的可靠性,这个花费还是值得的。对于在线零售商来说,这肯定是必须的。 想像一下你开车去沃尔玛,而整个库存却都空了。如果发生了愚蠢的错误,例如负载均衡失效,则可用区中的一个就会承担负荷并继续工作,重建同步随即便可开始。
让我们进入一个可用区看看。 美东地区的可用区中,每个数据中心之间网络传输只需1/4毫秒,而且没有一个数据中心跨越2个分区。 实际上,如上所述,一个可用区可以有多个数据中心,美东看上去有10个数据中心,而据说有些可用区有多达6个数据中心。 可用区中有多个冗余交换中心。这样,即使亚马逊丢掉一个交换中心和多个可用区,一切都还可以正常运行。
进入一个可用区的数据中心,如上所述,有50000服务器,有时候还会多达80000机器。 一个aws数据中心大概在25兆瓦到30兆瓦之间,如果一共有87个数据中心,则总共有2.17吉瓦(2.17个十亿瓦)到2.6吉瓦电力消耗。 Hamilton 说亚马逊可以运行60兆瓦的数据中心,但问题是,从2000个机架到2500个机架,成本并不会降低很多,而且灾难范围,也就是他所说的“爆炸半径”,太巨大。 “从某个点开始,价值降低而成本升高。在我们看来,这大概就是正确的数字了”Hamilton这样评价亚马逊为数据中心定义的大小。
记下来吧,竞争对手们。
一个单独的数据中心,有高达102 Tb/sec 带宽的分配,这是美东地区的可用区之间的带宽的4倍。Hamilton补充说数据中心内部的带宽还要“远超” 102Tb/sec。
再到一个机架里看看,到一个服务器和虚拟网卡里看看。 网卡支持SR-IOV,这是PCI-Express协议的扩展。 PCI-Express 协议对物理网络设备的资源进行虚拟化。 SR-IOV绕过操作系统上运行的通常软件协议栈,以及网络驱动和支撑他们的hypervisor层。从应用到网卡,需要几毫秒。 通过网卡只需要微秒,而通过光纤到达另一个服务器的网卡接口则只需要几个纳秒(十亿分之一秒)。“这就是说最麻烦的就是两端软件上的延迟” Hamilton解释。 SR-IOV非常轻量,给虚拟机上的每一个客户分区一个自己的虚拟网卡。这些虚拟网卡来自物理网卡。
为什么亚马逊实现这些这么难? 因为需要为网络协议栈添加安全、隔离、计量、控制和效率衡量等去掉的功能。 这些都需要耗费时间。 AWS 的新实例类型都有SR-IOV功能,也将在所有实例类型中普及。