在技术领域里,2021 年是特殊的一年。这一年是亚马逊云科技成立的第 15 周年,这一切始于亚马逊云科技的对象存储解决方案 Amazon S3。在这过去的 15 年里,我们可以看到云计算改变了整个世界。并且有越来越多的客户将业务迁移到公有云,开启了企业数字化之旅。
未来十年,云计算发展将是一个持续扩张和不断迭代的过程。与此同时,“可持续发展”已成为全球、全国以及各个企业必须考虑的主题之一。作为全球领先的科技企业亚马逊云科技也在技术的可持续发展性上不断探索,从基础设施到软件设计,有一整套自下而上的具有前瞻性的解决方案实现它。
作为亚马逊云科技可持续发展架构副总裁,Adrian Cockcroft 在 9 月 11 日的亚马逊云科技中国峰会 Dev Day 上发表了主题演讲,讲解了亚马逊云科技的可持续发展战略,更重要的是,他从开发者的角度阐述了亚马逊云科技如何进行可持续软件工程实践,我们可以从中得到非常多的启发。
我们为什么要关注“可持续发展”
可持续网络宣言:如果互联网是一个国家,那么它制造出来的二氧化碳排放量,排在全球第七位。
联合国于 2015 年制定了一个全球框架《巴黎协定》,随后各缔约国纷纷制定了“碳中和”路径和目标,对地球环境的健康发展做出承诺。今年两会,中国也将“碳中和”和“碳达峰”写入政府工作报告,目标在2030年前实现“碳达峰”,2060 年前实现“碳中和”。毋庸置疑,可持续发展已经成为不言而喻的社会共识。但在社会共识之下,还需要个人、企业、政府等各类社会主体的参与——其中体量庞大的科技企业是至关重要的参与者。
目前全球互联网用户超过 46 亿,随着互联网普及率的上升,互联网很快将产生近 10亿吨二氧化碳,用电量相当于全球的 10%。其中为数据中心供电所需的能源量大约每四年翻一番,就碳排放而言,ICT 行业自 2007 年以来一直贡献了 2-6%,几乎与航空业持平。
好消息是,虽然 ICT 和云采用呈指数级增长,但能源使用和碳排放却能相对保持不变,因为主流云提供商的超大规模数据中心正显著地提高效率。埃森哲的分析表明,倘若采用绿色方法迁移至公有云,全球二氧化碳排放量每年可减少 5,900 万吨,这相当于动动手指就能减少 2,200 万辆汽车的碳排放量!
在中国,互联网科技企业也都在不断加大力量投入到碳中和改造中。今年 8 月国际环保组织绿色和平 (Greenpeace) 发布了中国科技巨头《绿色云端 2021》排行榜,从能源信息披露、节能减碳表现、可再生能源方面合梳理了中国互联网科技企业的气候行动,相比去年,中国互联网科技企业整体平均得分上升 11%。在 9 月 11 日的亚马逊云科技中国峰会 Dev Day 上,Adrian Cockcroft 表示亚马逊云科技取得的成绩非常显著:亚马逊云科技的基础设施能源效率比普通美国企业数据中心高出 3.6 倍。同时,亚马逊云科技在执行相同任务时,可以减少 88% 的碳足迹。
这是多种因素促成的结果,Adrian Cockcroft讲述了亚马逊云科技探索出来的构建绿色云服务的几条有效路径。
- 第一是水资源的保护,亚马逊云科技使用蒸发冷却,循环用水,并尽可能在现场处理水。
- 第二是采购可再生能源,亚马逊云科技现在是美国和欧洲最大的可再生能源买家。
- 第三是移除了传统的不间断电源(UPS),转而采用了集成在每个机架的小型电池组合自定义电源。以往,每次在电压和直流电 / 交流电转换当中都会有一些功率损失,通过移除传统的 UPS,优化机架电源,减少最终转换等措施让能量损失降低约 35%。
- 第四是探索创新的服务器设计。中央处理器是现代计算机最耗电的部分,亚马逊云科技自研、基于ARM 架构的 Amazon Graviton 2 处理器每瓦特性能比其他业界标准流程高 2 ~ 3.5 倍。
- 第五是在新数据中心建设中增加使用低碳混凝土,它能够减少新建筑碳排放量的25%。
可持续软件工程实践
很多人可能认为迁移到云就足够了,以至于忽视了优化内部效率。实际上,迁移到云上的每个工作负载都会消耗能源,有一些任务还尤其耗电,比如有计算密集的 AI 或 ML 业务。一项对自然语言处理模型的研究说明了问题的严重性,研究表明训练一个 NLP 模型产生的碳排放量相当于从纽约到北京的航班往返 125 趟。
另一项研究量化了观看 YouTube 视频所产生的碳足迹,它等同于一个小城市的二氧化碳排放量。这项研究同时指出,如果让 25% 的音乐视频改进为后台播放,那么一年可以节省 323,000 吨二氧化碳当量,这等同于每年 50,000 辆汽车的排放量。研究团队的成员之一 Chris Preist 教授强调:“一个人对环境的影响很小,但把全球服务加起来时,它们可能会产生明显的影响”。
对于我们技术人来说也是一样,当手下的那一份“绿色”代码部署到成千上万、甚至过亿设备上时,所产生的节能效应将是巨大的,所以大家有责任确保我们的技术能更加“可持续发展”。
那么作为开发者,我们到底能做些什么呢?
可持续软件工程是一个新兴的领域,但亚马逊云科技的探索能给我们一些启示,Adrian Cockcroft 在演讲中,从代码效率、平台部署、软件应用设计等方面讲述了该如何实施可持续工程,InfoQ 摘取了其中一些开发者相关的部分以飨读者。
发挥开源的作用
如果我们考虑在云上进行优化,开源是一个很好的方式。现在很多我们正在使用的算法其实不是很高效,但幸运的是,还存在每个开发人员都可以使用的、更为高效的开源替代方案。
JSON 文档在互联网上无处不在,服务器花费大量时间来解析这些文档。开发者们希望在进行完全验证(包括字符编码)的同时尽可能使用常用的 SIMD 指令来加速 JSON 的解析。
GitHub 上有一个开源 JSON 解析器 simdjson,通过与其他常用解析器的对比实验,结果显示,simdjson 的解析速度达到 2.2 GB/s。与其它解析器相比,simdjson 只使用四分之一或更少的指令,并且可用于许多不同的平台和语言。
这个解析器是 2019 年开源的,但亚马逊云科技已经使用 simdjson 处理了大量的 JSON,Adrian Cockcroft 总结说效果是惊人的。
另一个例子是关于压缩的。很多时候,我们需要压缩日志文件,以压缩的格式存储千兆字节或万兆字节的数据。gzip 和类似算法作为广泛使用的格式流行了很长一段时间,但现在有了一个新的、由脸书开发的叫做 Z-Standard 的算法。这种算法不仅可以使用更少的 CPU 来进行压缩,而且能获得更高的压缩率,压缩后的文件最终只有 gzip 文件大小的 60%。对于单独一个小文件来说,压缩到这个程度可能可有可无,但是当你要处理千或万兆字节的数据时,这就有了很大的不同,你可以通过遍历和重新压缩来释放大量的数据空间。
这就是开发者可以做的一些简单的事情:寻找其他更有效的算法,来替代程序中的低效算法。
在峰值和碳足迹之间多加权衡
工作负载运行时通常会出现尖峰,所以需要我们提供高于期望峰值的容量,但是碳足迹不依赖于系统的平均使用量,甚至不依赖于系统的峰值使用量,碳足迹取决于系统预留的容量。而我们常常需要为一些这样的“尖峰”时刻准备大量的资源。
因此,减少碳足迹的方法之一是确保负荷峰值分散开来,避免产生这样的尖峰。即使平均利用率是相同的,所完成的工作量也相同,但通过减少峰值,就能减少预留容量。
另外就是配置定时任务的运行。如每天午夜运行的 Crontab 任务,很多人通过它来设置批处理作业,或进行数据仓库的日常汇总。当每个客户同时运行同步工作负载时,这些同步作业会增加峰值工作负载。这实际上提高了对亚马逊云科技的需求,因为我们必须提供更大的容量来处理这些并发任务造成的高峰。
但如果能避开整点、适当的安排偏移或抖动,就能避免并发产生的高峰。而且还不需要额外付出,因为你的工作量并没有变化。因为在高峰时点的可用资源更为紧张,如果能避开高峰,在资源不那么紧张的时候,可能你的任务也因此会运行得更快一点。
总的来说,减少碳足迹的方法之一是在服务水平协议和可持续性承诺之间进行权衡,比如说可以稍微降低期望值。我们知道二八定律,如果需要提升 20% 的性能,那么这 20% 的性能提升涉及的努力通常会占据整体工作量的 80%。有相当多的算法或业务都存在这样的权衡比较。例如当服务水平协议中规定响应时间为 500 毫秒,只要仍然符合服务水平协议的要求,就没必要用 100 毫秒的响应时间来超额完成工作。
还有高可用性配置,如果你有一个等待故障转移的热备系统,你就可以在服务级别协议内采用冷备或是温备系统进行故障转移,从冷备启动所需的时间实际上可能不会比温备或热备所需的时间长很多。高可用性总是要付出额外的成本和额外的碳代价,所以,我们可以利用这些权衡来减少碳足迹。
利用无服务器架构
无服务器是另一个减少碳足迹的极好的方式。
无服务器计算指应用在远程托管的执行环境中按需运行。过去几年中,构建有弹性的无服务器系统一直是系统管理员和 SaaS 公司的主要关注点。该架构提供的关键优势在于:无服务器模型无需用户自身去维护操作系统,只需生成通用的代码,上传到无服务器框架,看着它运行就好了。
因此,用户可以选取托管服务,使用 Amazon Lambda 执行计算资源的所有管理工作,可以关联平台配置伸缩这样的工作。比如即时调度这样的程序,当不使用时可以关闭计算机休眠所有测试环境,仅在需要的时候进行唤醒。这是一种极其强大的可以减少能源消耗和运行系统的成本的方式,能实现的事情之一就是释放闲置的硬件,让别人可以同时利用,可以降低亚马逊云科技运行所需的总体容量,也不会影响到用户的实际工作。
因此,构建更可持续的体系结构的一个强有力的方法是转向无服务器,将工作负载转移到云服务,然后选择最小化能源使用的服务和实例类型。
最后
实施可持续软件工程,我们可以自上而下进行,首先从管理的角度测量整个企业的碳足迹,将工作负载从数据中心转移到云区域,改变使用模式以避免产生肮脏能源开发,然后选择最小化能源使用的服务和实例类型。再深入到更多细节,优化工作负载以提高利用率,我们可以分散定时任务,降低负载峰值,达到调整 CPU 使用效率的目的。
重要的是,优化并不是只考虑某一个地方就可以,需要我们在架构和系统层面去思考,Adrian Cockcroft 还讲道,亚马逊云科技正在培训可持续发展解决方案架构师,以帮助大家进行可持续性架构评估。在可持续发展的共同责任模型的基础上开展工作,最大限度地减少能源消耗,最大限度地提高每项资源消耗的工作量,转向更省电的共享服务,并通过分享知识来持续改进。
在演讲的最后,Adrian Cockcroft 发出了一个“行动的号召”:每位开发者都可以从现在开始去理解“可持续性”相关的术语和原则,在工作中寻找优化负载的机会,开源自己的经验和方案,通过“分享”促进大家一起达成“可持续发展”的目标。
活动推荐:
在今年 10 月 22 日举办的 QCon 全球软件开发大会上海站,我们设置了亚马逊云科技专场,以可持续发展技术为核心,四位顶尖专家将分别从 “构建未来的大数据平台”、“利用无服务器架构”、“发挥开源的作用”、“云端机器学习助推”四个方面展开分享,带大家探索软件开发的下一站旅程。
快来扫码参加吧