在过去十年里,信息基础设施领域的头羊(头牛?)逐渐从主要面向消费者(2C)的互联网公司转为服务企业客户(2B)的云计算服务提供商。
IDC的2017年第二季度全球服务器市场追踪报告可以列为这个转折过程中的标志性事件之一:亚马逊(Amazon)的服务器采购量达25万台,超过当季服务器市场总出货量(245万台)的10%——据悉,在此两年前,亚马逊每季度的采购量已有15万台左右。
互联网和云计算领域的头部企业很少对外披露服务器保有量,但可以确定的是,作为业界排名第一的云计算服务提供商,AWS(Amazon Web Services,亚马逊云服务)不仅服务器采购量全球领先,也运营着规模最大的信息基础设施。
譬如,为了达到2025年亚马逊的基础设施100%使用可再生能源的目标,亚马逊在2020年向35家风力和太阳能发电厂购买了超过4GW(gigawatts,吉瓦/千兆瓦)发电能力,是该公司在可再生能源上投资最大的一年,“将使亚马逊成为有史以来最大的可再生能源采购商”。
2020年,亚马逊在中国支持的第一个可再生能源项目落户山东,这个100兆瓦的太阳能项目完成后,预计每年将产生12.8万兆瓦时(MWh)的清洁能源。
亚马逊目前已经投资了6.5GW(650万千瓦)的风能和太阳能项目,每年将为其运营提供超过1800万MWh(兆瓦时)的可再生能源,供给亚马逊的办公室、交付中心和AWS数据中心——如果全部用于数据中心,可以满足大几百万台服务器使用。
虽然这些可再生能源并没有全部用于AWS的数据中心,但是考虑到数据中心的用电密度远高于写字楼(以单位面积计算,可达50~100倍),所以实际占比会相当之大。何况时下可再生能源只是亚马逊基础设施总用电量中的一部分,数据中心的年用电量很可能已经高于1800万MWh,这也比较符合外界对AWS信息基础设施规模的推测。
规模:节流开源,由内到外
公有云业务的发展高度依赖基础设施能力,AWS的净销售额在2020年第一季度首次突破100亿美元,随后持续攀升,全年达454亿美元。要支撑起这个量级的业务,确实需要不间断的GW级电力供应——如果不是更高一个数量级的话。
当然,随着AWS业务规模的继续扩大,在数据中心消耗的电力肯定还会增长,但是有必要通过优化数据中心的用电效率,来减少不必要的电力支出。在巨大的规模下,哪怕是一点点的效率提升,都可以带来显著的社会效益。
以前面提到的1800万MWh可再生能源为例,足够170万美国家庭一年之用。也就是说,如果浪费1%,1.7万美国家庭的年用电量就没有了。而据AWS全球基础架构和客户支持资深副总裁Peter DeSantis介绍,通过在数据中心设计上移去集中式UPS、优化机柜上的供电单元以减少最后转换的能量损失等手段,整个电能转换环节中的损失降低了约35%。
中间的配电和UPS环节涉及多次电能转换,是数据中心能效优化的重点
更大范围内的可持续发展就是通过采用可再生能源(renewable energy),降低碳排放。亚马逊设定了在2040年实现其全部业务的净零碳排放的目标,这一承诺的一部分是为亚马逊的基础设施提供100%的可再生能源——最初的时间点设定为2030年,为了提前5年达成这一里程碑,亚马逊在风能和太阳能发电上投入的范围和力度逐年增长:
- 2018年,在美国新增了超过900MW(兆瓦)的风能和太阳能,可再生能源的总量达到1036MW,并在世界各地的分拣中心和配送中心的屋顶铺设了光伏板;
- 2019年,通过14个新的风能和太阳能项目增加了约1300MW(1.3GW),包括首次在美国以外的爱尔兰、瑞典、英国、西班牙和澳大利亚设立的可再生能源项目;
- 2020年,新增的近4200MW(4.2GW)不仅比之前的总和多一半以上,还包括首次在中国、意大利、法国、南非和德国设立的可再生能源项目……
Peter DeSantis表示,综合减少电能损耗、使用可再生能源、更高效的数据中心和服务器设计,以及提高服务器利用率等手段,AWS数据中心涉及的碳排放可以比企业数据中心减少88%之多。
可靠:“破坏半径”由大到小
不难看出,上面提到的可再生能源项目,大多跟随着AWS区域(Region)分布全球的脚步;但也有少部分后发区域,可再生能源的布局能够基本同步,甚至先行一步。
譬如,(意大利)米兰、(南非)开普敦都是2020年推出的区域;西班牙作为AWS在欧洲的第7个区域,计划在2022年底或2023年初开放,有三个可用区(Availability Zone,AZ)。同属欧洲的(瑞士)苏黎世区域和亚太的(澳大利亚)墨尔本区域将于2022年下半年推出,预计稍晚于(印度)海得拉巴区域。
位于大阪的日本第二个区域(之前是Local Zone)已于本月初推出,使得AWS全球的区域数量从24个变为25个,可用区从77个增至80个
目前AWS在全球的25个地理区域共有80个可用区,已公布的5个新区域(上段提到的印度、瑞士、澳大利亚、西班牙加上印尼)还将新增15个可用区。看来,AWS可用区总数突破100的日子,很有可能在100%可再生能源的目标实现之前到来。
不难理解,AWS的每个区域都由至少3个AZ组成,能做到这一点的公有云服务提供商并不多。AWS开创的“数据中心→可用区→区域”基础设施层级架构已成为公有云行业的通行做法,但友商们往往是每个区域有1个可用区(具体叫法可能有所区别)就可以开服了,运行了数年之后可用区数量仍不超过2个的区域也比比皆是。
1个标准的AWS区域由至少3个可用区(AZ)构成
每个区域至少3个可用区意味着更大的投入,更重要的是提供了足够的冗余。譬如AWS的第一个产品S3(的标准版本)就是多副本跨可用区部署的(至少3个AZ),数据库产品如DynamoDB甚至可以跨区域部署,保障用户的数据和应用获得足够高的可用性。
Peter DeSantis特别指出,不要把机房和AZ混为一谈:“大家都在谈的是所谓的多机房,而不是多AZ的概念……很多人的所谓可用区,其实就是两个墙挨着墙的机房,挨得非常近。”这样的两个机房虽然可以拥有独立的配套设施如冗余电源、冷却系统和网络接入,但是无法同时免疫雷电、雨雪、地震等自然灾害。“我们去年看到过一个很现实的例子,在得克萨斯州(又是德州)有两个数据中心,因为雷电把两个AZ都伤害到了,如果相距有若干英里是绝对不可能的事情,没有一个雷可以打几英里宽的范围。但是两个挨在一起的数据中心,整个系统都有可能被它干扰。”
规避天灾要远,降低时延要近……两相权衡
AWS在设计之初就综合考虑了火灾、雷电、龙卷风、海啸、地震等所有的(自然)因素,除了彗星撞击地球之类的极端状况,这些事件(天灾)的破坏半径会有多大,据此来确定数据中心的位置,以减少破坏半径的影响。但是,考虑到数据访问时延的限制,数据中心之间的距离又不能太远。最终确定的AZ间距离大概在若干英里到几十英里的范围,既拉开足够的距离,又保证数据中心之间的时延在一毫秒(ms)之内。
天灾的破坏半径是不可控的,而数据中心内部的一些潜在故障点,破坏半径可以尽量减小。以UPS(Uninterrupted Power Supply,不间断电源)系统使用的铅酸电池为例,1MW的电池重达5吨多,需要专门的房间来管理和维护。这一个房间就像一个地雷一样,很危险,一旦出事会造成很大的破坏,所以UPS需要非常复杂的控制逻辑。
业界通行的做法是设置冗余的UPS系统以提供更高的可用性,譬如AWS可以达到99.99997%,非常接近7个9。但是,这并不能缓解集中式电池间的破坏半径问题,甚至还有可能加剧。
AWS采用分布式的思路解决,把电池分散放到机柜里,和机柜里安装的冗余电源搭配起来,用自己开发的控制系统来管理这种独特的“微型UPS”——小到5KW(千瓦)的级别,体量只有1MW的200分之一,破坏半径大为缩减,而且更换时间缩短到秒级,最多到分钟级,而不是在大房间里更换铅酸电池的若干小时。
相应的,标准UPS中大量复杂的逻辑也被去掉,只保留了对AWS有用的那些功能。
精简:由下至上,从软到硬
AWS基础设施的巨大规模和体量,使其可以摆脱供应商的种种限制,自行整合供应链,乃至撸起袖子下场干活:直接采购可再生能源节能减排;自由选址建设数据中心更加贴近用户,并提高安全性和效率;“魔改”配电系统,自主设计CPU……
Peter DeSantis直接将(潜在事故的)破坏半径与自己的睡眠质量关联起来
在数据中心基础设施层面,也就是俗称“风火水电”的领域,AWS作为超大规模(hyperscale)用户,有能力根据自己的实际需要对所使用的设备做出相应的调整,譬如功能的增加和减少。以数据中心里的中低压配电系统为例,几家特别大的公司做了几十年,非常稳定,大家也都很了解它们。问题在于,这些设备的控制系统是一套类似于嵌入式的软件系统,写在整个控制系统的硬件里(软硬一体,没有解耦),并不是用户能够管理的。这就带来下面一系列问题:
- 已经做好的功能适用于全世界绝大部分的数据中心,里面有很多并不适合像AWS这么大规模、有自己这么多运营经验积累的公司,既有很多冗余的功能是AWS不需要的,也有一些AWS想要的功能却没有,或者设备的功能与AWS的用法不匹配;
- 发现控制系统的软件bug之后,设备商可能几个月都不能改好,发现的问题没法及时解决,让AWS这样有大量软件人才、能够快速修理bug的公司很不习惯;
- AWS经常优化自己的管理系统、管理手段和流程,但是没法修改别人“写死”在设备里的控制软件……
所以,AWS自己写了配电系统的软件,由一套控制系统来管理所有的配电系统,上面几大问题迎刃而解。不论是发现问题,还是改变了工作流程,控制系统都可以迅速响应改变。而且AWS尽量做到极简,因为越简单就越不容易出故障,更为可靠。
往上在IT业务层面,AWS向数以百万计的用户提供云服务,也比硬件厂商更了解IT工作负载(workload)的特性,可以通过定制和设计芯片来更好的满足应用需求。
2014年11月中旬召开的AWS re:Invent 2014大会上,AWS介绍了基于定制版英特尔至强处理器的C4类型实例。
2015年,亚马逊收购以色列公司Annapurna Labs之后,发展出自己的芯片设计能力,起始就是Nitro。去年底把基于ARM的Mac Mini搬进数据中心、变成EC2 Mac实例对外提供服务,也是Nitro的杰作。
现在Nitro已经发展到第四代,与AWS的第二代ARM处理器Graviton2结合的成果是EC2 C6gn实例,也使得AWS领先成为能同时提供基于Intel、AMD、ARM处理器的实例的公有云服务商。同样基于AWS Graviton2处理器的M6g、C6g和R6g实例已在由光环新网运营的AWS中国(北京)地区和由西云数据运营的AWS中国(宁夏)区域推出。
Graviton2充分体现了AWS对云上工作负载的理解,典型的例子就是对多核与SMT(Simultaneous Multi-Threading,同时多线程)的取舍。
SMT在x86平台上已有近20年的历史,Intel的超线程(Hyper-Threading,HT)技术就是其代表。服务器CPU领域的后起之秀ARM并不看重SMT,譬如AWS Graviton2所采用的64位Arm Neoverse内核。
超线程的本质是充分利用CPU核心中的资源,将一个物理核心虚拟为2个逻辑核心(vCPU),优点当然是软件可用的核心数量直接翻倍,但毕竟不是独立的物理核心,存在资源争用和隔离导致的一系列问题:
性能:(同一个物理核心中的)2个vCPU共享L1和L2 Cache等资源,在多数情况下都不可能达到2个物理核心的性能,在某些应用场景下,打开超线程反而会导致性能下降;
安全:两个线程之间的共享资源有可能导致数据泄露,这在前几年Meltdown与Spectre引发的一轮轮漏洞危机中已有体现。所以AWS一直坚持任何一个(物理)核心不能共享给两个客户,vCPU都是双数;
能耗:关掉超线程,闲置的晶体管仍会继续耗电。
所以,Graviton2采用单纯增加物理核心的方式,可以提供1~64个vCPU,而且性价比很高,也更为节能。北京大觥科技有限公司是一家专注AI影像处理领域科研和应用的企业,他们的测算数据显示,同样处理250万张图片,使用C6g实例与使用当前C5实例相比,成本节省近40%。全球化AI+IoT领军企业涂鸦智能的首席架构师陈亚焱也表示,“通过使用AWS Graviton2实例来处理我们在MQTT网关服务的协议解析和长连接状态上,整体的性价比提升了2.5倍。”
除CPU之外,亚马逊还设计了AI加速芯片,2019年推出的Inferentia是AWS云上性价比最高的专业推理芯片,名为Trainium的训练芯片也将于2021年下半年正式推出。
大,自然有大的难处,关键在如何转化成大的好处。