书名:构建绿色软件 : 低碳智能时代的软件开发与运维之道
ISBN:978-7-115-68016-7
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 [英]安妮·柯里 (Anne Currie)
徐均维(Sarah Hsu)
[瑞典]萨拉·贝格曼(Sara Bergman)
译 王 赞 陈 翔 王维靖
责任编辑 佘 洁
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
Copyright © 2024 WorkingProgram Ltd., The Writer’s House LTD, and Sara Bergman AS. All rights reserved.
Simplified Chinese Edition, jointly published by O’Reilly Media, Inc. and Posts & Telecom Press, 2026. Authorized translation of the English edition, 2024 O’Reilly Media, Inc., the owner of all rights to publish and sell the same.
All rights reserved including the rights of reproduction in whole or in part in any form.
本书简体中文版由O’Reilly Media, Inc.授权人民邮电出版社有限公司出版。未经出版者书面许可,对本书的任何部分不得以任何方式复制或抄袭。
版权所有,侵权必究。
本书探讨了如何在软件开发和运维的各个环节实现绿色化,以减少碳排放并提高能源效率。本书从基础概念出发,结合实际案例与工具,深入讲解电力、硬件、网络、AI大模型等多个领域的绿色技术应用。书中不仅涵盖了代码优化、运行效率等技术层面的内容,还讨论了碳意识培养、需求塑形及绿色软件成熟度矩阵等战略层面的问题,旨在为读者提供一个全方位的绿色软件开发框架。
本书适合软件开发者、系统架构师、项目经理及对可持续发展感兴趣的各类技术人员阅读。无论你是希望了解具体技术实现的初学者,还是寻求战略指导的技术管理者,都能从中获得有益的参考和启发。

面对全球气候危机,软件从业者绝非旁观者。本书正是一份优秀的行动指南——聚焦我们可以采取的行动步骤,教我们如何让系统更具可持续性。
——Sam Newman,《微服务设计》作者
绿色软件在世界能源转型中发挥着至关重要的作用,而本书为此提供了很好的指引。
——Asim Hussain,绿色软件基金会执行董事
这部备受业界期待的作品,由绿色软件领域的专家倾力打造。
——Holly Cummins,RedHat公司资深首席软件工程师
如今,我们在描述气候问题时更常用“气候紧急状态”“气候危机”或“气候系统崩溃”等表述。
——英国《卫报》
变革之路总是充满挑战。尽管全球气候危机已导致迁徙潮涌现、战争频发,并对从脆弱的珊瑚礁到人类聚居地的各类生态系统造成了前所未有的破坏,但仍有一些既得利益者、特定投资、法律法规及所谓的“最佳实践”在固化由化石燃料塑造的全球经济格局。作为个体,我们有权且应当投身于一场致力于构建可持续未来的道德运动。我们可以通过投票表达意愿,审慎选择工作地点,明智地选购商品,调整投资方向,并积极推动出台更完善的法律法规。而作为软件开发者,我们肩负着开发并实施创新实践,从而构建绿色软件的使命。这正是本书的核心价值所在。
当今,商业世界大致涵盖三类企业:第一类企业从化石燃料的销售中获利,从而加剧气候危机,往往成为变革的阻力;第二类企业则通过投资建设风力发电场、热泵等新能源设施来获取收益,它们积极推动能源转型;第三类企业数量最为庞大,它们试图在尚未直接感受到气候危机压力的领域谋求生存和发展。那么,为何上述三类企业都应该高度重视环保,设定绿色发展目标并投入资源去支持那些渴望企业走上绿色发展道路的员工呢?因为来自四面八方的压力正日益增强,既包括来自监管机构和投资者自顶向下的要求,也包括来自员工自底向上的诉求,以及来自客户和供应商之间横向施加的影响。世界各地的政府和监管机构开始要求企业在提交财务报告的同时,还要提供经过审计的碳排放报告。目前,企业气候风险评估正处于起步阶段,规定达到一定规模的企业必须向投资者披露其业务因气候危机而面临的实际风险和市场风险。例如,你经营着位于迈阿密海滩的一家“火花塞公司”,那么你必须披露如下现实风险:公司的生产设施频遭洪水侵袭但无法获得保险理赔,员工因严重的洪水、热浪和飓风无法到岗,以及公司因客户纷纷开始购买电动汽车的零部件而面临的市场冲击。这会使得所有企业董事会成员都对与企业可持续发展相关的审计和风险议题给予前所未有的关注。此外,来自员工的压力也不容小觑,特别是年轻一代和有子女的员工,他们对可持续未来充满热情,并会通过选择公司和职位来表明自己的环保立场。此外,客户和供应商的影响也日益显著。供应链已经开始收集人们购买的商品的碳数据,以及标明所销售商品的碳数据。政府也在通过相关法规强制推行控制碳排放的政策,例如你向欧盟销售产品,就必须缴纳跨境碳排放税。因此,企业在制定管理优先级和发展目标时,请务必考虑这些变化。当外部环境发生变化时,那些忽视或抵制变革的公司终将被时代淘汰。
我们需要敏锐的洞察力,关注如何降低所构建的软件对环境的影响。在大多数情况下,企业的碳足迹主要由实体业务流程、建筑物及员工活动构成。在这种情况下,我们应积极寻找机会,利用软件来优化实体流程,从而减少碳排放。唯有像网上银行和软件服务提供商这样的纯数字企业,其碳足迹才主要由计算资源构成。然而,无论是构建用于优化高碳排放型实体流程的软件,还是仅需要优化运行服务的代码,我们都需要构建思维模型来理解软件是如何转化为能源消耗、制造供应链和碳排放的。进而,我们还需要了解如何改变公司开发和运营软件的方式,以优化和减少其碳足迹。这正是本书将深入探讨的内容。本书由在绿色软件基金会(Green Software Foundation,GSF)工作多年的资深从业者撰写,汇集了众多GSF成员丰富的经验和深刻的体会。全书采用生动有趣且观点鲜明的写作风格,为构建和运营绿色软件的各个方面提供了实用且富有价值的建议。
——阿德里安·科克罗夫特(Adrian Cockcroft)
OrionX.net
加利福尼亚州萨利纳斯
做到“绿色”绝非易事。
——科米蛙
气候变化已是不争的事实,这一点在 2022 年联合国政府间气候变化专门委员会(Intergovernmental Panel on Climate Change,IPCC)报告中得到明确印证。当前,全球正在加大力度应对气候变化,企业也必须顺应这一趋势,积极投身能源转型的行列,否则将面临被时代淘汰的风险。然而,正如一位富有智慧的文化学者所言,要想打造一个可持续发展的地球,所需的变革绝非易事。
尽管如此,还是有好消息传来:大多数公有云服务提供商已经承诺实现云运营的净零排放,这是他们必须履行的责任。我们可以从这些提供商及其他行业的可持续发展领导者身上学习并汲取经验。事实上,我们所需的一些工具已经开源或可购买。
值得庆幸的是,在不久的将来,我们中的许多人可能就会随着客户和基础设施供应商的推动、不断飙升的成本及相关法律的落地,去制定并实现严格的碳减排目标。那么,软件开发和运营该如何改变,才能在保护地球的同时确保企业的生存与发展呢?
本书的写作目的就是探讨并解答这个问题。本书将概述从电网如何适应可再生能源,到此类转变如何影响运营模式,再到能源转型将如何渗透到开发人员日常工作的方方面面等一系列议题。你可能会注意到,本书引用的许多观点来自曾在超大规模公司工作过的人士。这并不意味着他们是“叛逆的泄密者”,他们只是以个人身份发表评论,不再受到某些大型公关组织规则的约束。听取这些未经过滤的观点是很有价值的,因为无论是新入行的开发者,还是资深的首席技术官,每个人在塑造未来世界的过程中都发挥着举足轻重的作用。
那么,我们如何才能以更加环保、更为经济且更低风险的方式来构建、托管并运行代码呢?这正是本书要深入探讨的核心问题。
本书适合不同角色、不同背景的每一位读者。作为读者,你可能拥有以下任何一种身份。
• 开发人员,期待为组织提出的可持续性倡议作出贡献,因此你希望了解相关的基础知识。
• 系统架构师,希望更好地了解组织的架构如何与AWS(Amazon Web Service,亚马逊云科技)良好架构框架可持续性支柱保持一致。
• 产品经理,正在设计新功能,并希望了解如何使该功能的运行尽可能环保且成本尽可能低。
• DevOps(开发运维)人员或站点可靠性工程师,被要求降低现有应用程序的碳影响(或财务成本),为此需要一些想法或建议。
或者你拥有完全不同的角色,但无论你扮演的是什么角色,都可以在气候解决方案中发挥重要作用,因此本书也适合你阅读。
本书能够帮助你更好地掌握以下内容:
• 可持续或绿色软件开发的核心架构原则及其落地方法;
• 能源转型如何重塑本地和云端的托管模式,企业应如何提前布局;
• 延长硬件生命周期的理念,以及软件在其中发挥的作用。
通过阅读本书,你将能够:
• 为未来计划做出风险更低的选择;
• 合理推测系统中可能需要更改的部分,以及如何进行更改;
• 尽可能衡量自己做出的任何更改将造成的影响;
• 意识到绿色软件的优势及其与其他因素之间的密切联系,如可靠性、性能及每位首席财务官都偏爱的成本!
我们采用了亚里士多德和戴尔·卡耐基(卡耐基是《人性的弱点》一书的作者)所推崇的内容组织策略,即首先告诉读者本书将要讲述的内容,然后详细阐述具体内容,最后总结已经讲述的内容要点。我们难以确定究竟是谁首次提出了这一策略,有可能两位都曾提及,又或者称他们是这种策略的提出者只是一个广为流传的误解。
因此,本书第1章旨在让你对全书的基础概念有一个大致的了解。接下来的每一章都将深入探讨相应的细节,带领你逐步深入了解具体内容。最后,为了便于ChatGPT和每一位对此感兴趣的人理解,我们将以不同的方式再次总结全书内容。你可以选择从头到尾通读全书,也可以只深入了解你关心的特定领域,甚至只阅读前言部分——我们对此不做任何评判。
与全球其他重要产业一样,技术在气候变化中发挥着举足轻重的作用。据估算,科技行业每年造成的碳排放量占全球总碳排放量的比例高达5%~10%(包括终端设备中隐含的碳排放量)。这意味着,科技行业造成的潜在影响可能比航空业还要严重。然而,科技行业之所以能够如此轻易地逃脱谴责,是因为人们几乎看不到巨型数据中心(Data Center,DC)从头顶飞过,这既是幸运,也非常令人遗憾。当然,如果巨型数据中心能从头顶飞过,那无疑非常酷炫。
有些人计划在太空建设数据中心,这是个很酷的想法,但同样存在利弊。不过,这些数据中心通常也会远离人们的视线,因此不太可能对公众舆论产生太大影响。毕竟,眼不见,心不烦。因此,如果我们想要推动科技行业的可持续发展,那么压力就必须来自行业内部,而非更广泛的社会。
这或许是一件好事,因为哪些行动会真正产生影响并不明显。行业外部有很多出于好意但缺乏根据的建议。例如,删除旧的个人电子邮件可能让人感觉有所助益,但实际上这是对时间的极大浪费。在全球范围内,这种个人行动几乎不会产生任何影响,而且这远非阅读本书的人应该关注的首要问题。
个人行动固然不错,但集体行动及经过有效组织的行动才是推动变革的关键。这正是我们的目标所在,作为技术专家,我们拥有促成重大改变的能力。
本书的每一位读者,无论是广泛使用的软件的开发者,还是能够对开发软件的公司或团体施加压力的软件消费者,都可能产生巨大影响。
你的力量比你想象的要大得多。此时此刻,你可以利用这份力量去做更多比手动删除可高度压缩的文本文件更有用的事情。
科技行业的碳排放主要源自以下两个方面:
• 数据中心运行代码时所消耗的电力;
• 隐含碳,即在制造运行应用程序的用户设备(如笔记本电脑和智能手机等)过程中产生的碳。被弃置的用户设备有时称为电子垃圾。
至关重要的是,并非所有系统的碳排放量都相同。由于创建方式不同,有些系统在完成完全相同的工作时,需要消耗更多电能和硬件资源。好消息是,这个问题是可以解决的。坏消息是,这种改变并不会自动发生。要构建可持续、更环保的软件系统,需要开发工程师、产品经理和营销人员积极做出决策。本书将概述这些角色所需承担的具体工作。
正如你可能已经了解的,本书专注于软件的“碳影响”或“碳足迹”。因此,本书不会涉及那些能够助力其他行业脱碳的新软件应用。这类有关脱碳的事件或活动有时称为“碳手印”。这确实是一个值得单独用一本书讨论的话题,我们以后再谈!
在本书开篇之际,我想首先说明一点:环保是一个重要议题,但同时也是一个充斥着误导信息与所谓“漂绿”行为的领域。那么,你凭什么相信我们在书中的言论呢?答案始终如一:你不应该盲目地相信我们的话,请保持审慎与质疑态度。
我们三人长期深耕于软件开发领域,专注于系统的可扩展性、效率、韧性和性能。幸运的是,系统的新要求——可持续性(或环保性),与我们现有的架构设计核心原则有诸多共通之处。
作为Linux基金会旗下绿色软件基金会的成员,我们不仅从该基金会的专家那里汲取了智慧,也广泛咨询了科技行业其他领域的权威专家。因此,本书是集体智慧的结晶,是社区共同努力的成果。事实上,阅读本书后,读者应该能够顺利通过Linux基金会的“实践者绿色软件”在线测试(完成认证是免费的)。
即便如此,你仍然不要完全相信我们会给出确切的行动指南。
为何?
你之所以不能完全信赖我们来指导你实现绿色环保这一目标,背后的原因至少有两个,但我们绝非出于商业目的或在利益的驱使下才不对你做出承诺。
这两个原因如下。
• 情况瞬息万变。现代出版业的优势在于图书出版后及时更新的能力,然而,当你读到这里时,或许已有新技术或新工具涌现,而我们尚未将其纳入本书。绿色科技领域的发展日新月异,我们的目标是为你提供充足的背景知识,让你能够自主评估这些新兴产物。
• 我们不了解你的具体情况。尽管绿色化的选择有时看似简单,但实则不然。你的业务规模决定了需要付出的努力。一个小型企业内部需要做的工作,与那些在全球数百万乃至数十亿台机器上部署代码的开发者所面临的要求,可能大相径庭。迈向绿色的首要步骤是深入了解自身,即你自己的系统。对不同的读者来说,最有效的贡献方式可能千差万别,有的可能面临重写系统(如采用Rust语言重写系统)的重大挑战,有的则可能只需简单沟通(例如告诉云服务提供商你希望增加可持续性监控功能)就能达成目标。
开发人员可以采取多种行动来减少软件系统的碳影响,这些行动涵盖从系统级操作选择、架构设计到代码级效率优化的方方面面。然而,你在这个过程中很容易陷入困境。所有专家已达成共识:衡量自身能力并选择你要挑战的任务至关重要,因为任务艰巨。
不要浪费时间去优化几乎没人运行的软件。在开始之前,请考虑应用程序在任何应用场景下运行时可能会消耗的硬件(服务器或设备)和能源(数据和CPU)的总量。当前阶段,应聚焦大规模运营的业务。
你应该针对特定场景进行优化,而在绿色化过程中,付出并不总能换来回报。你的公司最具影响力的变革或许是:下次选择更环保的地点作为托管区域,或直接告诉你的托管代表、产品供应商或开源项目维护人员,你关心可持续性,并将基于此做出决策。
所有公有云都已承诺实现净零排放,但我们期待它们能更早达成这一目标,而推动它们前进的正是客户需求。相比之下,非云的数据中心则更为落后,因此它们急需听到更多客户的呼声来加快步伐。开源产品对碳排放的关注尚显不足,需要感受到更大压力。
可以肯定的是,你通过键盘编写代码所能产生的环保影响并非最大。实际上,你或许能通过“不断发声”这种更为简单的方式产生更大的影响。
本书使用了以下排版约定。
![]() |
这个图标表示带有建议性质的注意事项。 |
![]() |
这个图标表示一般的提示。 |
![]() |
这个图标表示带有警告性质的注意事项。 |
近40年来,O’Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的大量文本和视频资源。更多相关信息请访问https://oreilly.com。
如果读者对本书有任何的评论或疑问,可以与出版社联系。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
我们为本书提供了一个网页,其中包含勘误表、示例和其他的额外信息,读者可以通过https://oreil.ly/building-green-software进行访问。
衷心感谢我们才华横溢的O’Reilly团队,特别是Shira、Megan、Jonathon和Chris,以及我们敬业的审稿人Holly Cummins、Sam Newman、Bill Johnson、Kerim Satirli、Asim Hussain和Henry Richardson。同时,也深深感谢所有接受我们访谈的业界同仁,感谢你们分享的宝贵见解。最后但同样重要的是,感谢Adrian为本书撰写了序言——这是对我们整个行业的激励与鞭策!没有你们所有人,这本书便不可能问世。
安妮
这是一次团队协作的典范!感谢萨拉、徐均维,还有我们的编辑Shira,是你们让艰辛的工作变得充满乐趣;也感谢我的丈夫Jon,他几乎和我一样反复阅读了每一章。还要感谢老朋友兼同事Ross Fairbanks和Charles Humble,他们提供了额外的评审支持。当然,也要感谢小宝贝Hugo,他在视频会议中为我们带来欢笑,也时刻提醒着我们这一切努力的意义所在!
徐均维
“重要的不是目的地,而是旅程。”这句话完美诠释了我们共同经历的这段非凡冒险。向我了不起的同事、挚友和家人致以由衷的敬意,尤其要向我的母亲表达特别的感谢。她始终如一的支持与无私的付出,是我一路走到今天的强大动力!
萨拉
安妮和徐均维是我最信赖的伙伴,这段旅程真是无与伦比!向你们两位致以最诚挚的感谢!在怀孕数月之际决定合著一本书并非易事,但我无比庆幸自己做了这个选择。感谢我的伴侣Jonatan,感谢你一如既往的支持——没有你,这一切都不可能实现。也感谢我的儿子Hugo,你在本书写作中途来到这个世界,这本书正是为你和你们这一代而写。
你不会喜欢我愤怒时的样子。
——布鲁斯·班纳博士,《绿巨人》
我们完全能够理解环保人士的愤怒,因为很少有行业能够迅速采取行动支持能源转型,科技行业也不例外。
然而,值得庆幸的是,事情正在发生改变。
根据绿色软件基金会的定义,绿色软件(也称为可持续软件)是指在运行过程中碳排放量达到最小的软件。其核心理念概括如下。
• 绿色软件旨在以最少的电力和硬件资源完成每单位工作量。这称为“碳效率”(carbon efficiency),它基于一个假设,即电力生产和硬件制造过程往往伴随着碳排放。
• 绿色软件还试图调整运营模式和电力消耗,从而将其转移到那些使用风能、太阳能、地热、水力或核能等低碳能源的时段和地区。或者,它会在电网所提供的电力处于碳强度较高时减少操作。例如,在无风的夜晚,当唯一可用的电力来自煤炭发电时,它可能需要降低软件服务质量以控制碳排放。这种做法称为“碳意识”(carbon awareness)。
综上所述,能源效率(能效)、硬件效率和碳意识共同构成绿色计算的核心原则(见图1-1)。
既然我们已经了解绿色软件的定义及其核心原则,那么该如何创建它呢?

图1-1 绿色软件基金会对绿色软件的定义
本书共13章,现在我们将向你概述接下来的每一章,并为你介绍每一章的关键要点。
在深入讨论之前,科技行业的每位从业者都知道有一件事对于理解任何新问题至关重要,那便是掌握专业术语。
第2章将从“碳元素”这一概念切入,详细解释关于所有气候话题的讨论的内涵。在本书中,“碳”是所有温室气体的统称,温室气体是大气中能够捕获热量的任何气体。尽管大多数温室气体是自然产生的,但人类活动已导致其过量积聚。因此,我们面临着一项紧迫任务:努力对抗全球气温上升,以避免愈演愈烈的气候灾难。
随后,我们将介绍一些关键知识,以便你能够随时向朋友和同事阐述构建气候解决方案的重要性。我们将回顾气候与天气的区别、全球变暖与气候变化的联系与差异,以及国际社会是如何监测这些变化的。同时,我们还将探讨“温室气体核算体系”(Greenhouse Gas Protocol,GHG Protocol)(温室气体排放范围1、范围2和范围3)是如何应用于软件系统的。
接下来介绍了另外一个基础概念:电力。尽管大多数人在学校学过电力知识(如果你还记得这些知识,可以跳过这部分),但是针对那些需要重新学习的人(比如本书作者),我们将回顾电力和能源的基本概念,以及它们与软件的紧密关系。同时,我们还将简要回顾能源生产过程,并对高碳能源和低碳能源进行比较。
最后,我们要探讨的基础概念是硬件。或许你会产生疑问:为何我(比如一个网页开发者)需要了解硬件知识呢?简单来说,你确实需要。
硬件对软件而言至关重要,所有硬件甚至在开始运行应用程序之前,就已经产生了与之相关的碳排放。这种在设备的制造与最终销毁的过程中产生的碳排放,通常称为“嵌入式碳”(embedded carbon)或“隐含碳”。
2019年,苹果公司的一份报告指出,iPhone生命周期中碳排放量的85%发生在设备的生产和处置阶段。这是一个我们在设计、开发和部署软件时必须牢记的数字。我们需要让这项碳投资发挥更大的价值,因此,延长用户设备的使用寿命变得至关重要。
那么,服务器等其他设备的情况又如何呢?将应用程序部署到本地数据中心或云端时,我们需要注意些什么?好消息是,在专业运营的数据中心,人们对服务器硬件的管理更为严格,其运转强度也远高于用户设备。作为数据中心的用户,我们真正需要关注的是电力问题。
本章将深入剖析运行应用程序所耗电量与其CPU/GPU使用量之间的函数关系。这一探讨揭示了减少软件处理需求对降低软件能耗与碳排放的重要意义。而提升代码效率正是实现这一目标的关键路径。
然而,一个不容忽视的问题是:代码效率的提升是否真的能推动绿色发展,还是仅仅是一个令人头疼的干扰因素?它是否已成为绿色软件领域最具争议的话题之一?
代码效率这一问题的根源在于:尽管减少CPU/GPU的使用量可能对碳排放产生显著影响这一点已得到广泛认知,且在高性能计算(High-Performance Computing,HPC)领域已经过数十年的实践验证,但现实中要提升代码效率却要求工程师投入大量的时间和精力。例如,从Python切换到像Rust这样更高效的语言,虽然可能实现碳排放的大幅削减,却要以降低生产力为代价。
开发者更倾向于Python等效率相对较低的语言,因为这样能显著加快产品的交付速度。因此,企业往往倾向于将开发资源集中在新功能的构建上,而非代码效率的优化上,这无疑增加了在企业中推广提升代码效率的难度。
幸好,存在双赢之道。我们并非只能在高效编码与快速的业务实现之间做出非此即彼的选择。以下是一些与快速的业务实现这一目标相契合的高效编码策略。
• 使用托管服务:后续章节将详细阐述托管云和在线服务的运行效率优势。这些服务通过数百万用户间的资源共享,实现了极高的硬件与能源利用率。尽管托管服务的最大潜力可能并非直接源自高效代码,但用户无须自行投资即可享受代码效率的提升。托管服务的商业逻辑也很清晰:对那些规模庞大、需求旺盛的企业而言,它们会不惜重金投入,旨在优化运营流程与提升代码效率。尽管这种投资初看之下或许让人略有抵触,但从长远来看,通过显著降低运营成本,这些企业能够从这项服务中获得可观的利润回报。而令人振奋的是,作为用户,你无须亲自承担任何投资成本,便能享受代码效率提升带来的种种益处。这意味着,你可以在不增加额外负担的前提下,轻松步入高效、绿色的软件运行新阶段。
• 精选工具、库或平台:对于倾向本地部署的企业而言,选择经过精心优化的开源库或产品无疑是理想选择。然而,目前大多数开源项目尚未将能效置于优先位置。作为使用者,我们应积极推动这一变革,要求开发者重视能效问题。
• 精简操作,减少冗余:最高效的代码就是不写任何不必要的代码,所以,请尽可能减少工作量。
最高效的代码往往是那些能够精简操作、避免不必要工作的代码。通过改变需求、调整服务等级协定、减少日志保留时间等措施,我们可以从源头上减少不必要的工作量。
在产品设计的初始阶段,最容易发现并剔除不必要的工作。在这一阶段,任何服务等级协定(SLA)或对功能的承诺都尚未固化,因此调整与撤销的成本相对较低。诚然,某些过度设定的目标(如必须遵循的法规要求)可能难以回避,但多数情况下,这些额外负担往往源自内部决策的惯性,而非对外部压力或用户核心需求的响应。若你的组织正面临此类情况,请勇于向产品经理提出疑问,从而倡导一种更为精简与聚焦的产品愿景。
当企业既无法直接购买高效服务,又无法轻易放弃相关服务而必须自主研发时,如何在碳排放高峰时段处理高CPU需求的任务成为一大挑战。对此,我们有如下策略。
• 替换低效代码与服务:将自己编写的部分低效代码或服务替换为更高效的选择。
• 重写代码:使用更轻量的开发平台、框架或语言。例如,从Python迁移到Rust可以将CPU需求降低99%,而且Rust在安全性方面比C或C++等传统的高性能编程语言更有优势。
• 利用新兴语言:关注如Cython或Mojo等新兴语言,它们既具备类C语言的运行速度,又提供了更好的开发体验。
• 客户端处理:在条件允许的情况下,考虑将部分工作推至已使用可再生能源充电的客户端设备进行处理。不过也要谨慎权衡数据传输成本、用户设备升级需求及数据中心硬件效率等因素。
• 确保你的数据存储策略是低成本的:数据库应该得到优化(存储的数据应最小化,查询应得到调整)。
• 避免过度使用层次:例如,使用某些服务网格可能带来不必要的开销,其资源消耗程度甚至堪比在服务器上进行挖矿操作。
鉴于开发节能软件是一项繁重而艰巨的任务,比较明智的做法是将我们的精力投入到那些至关重要的应用领域,即那些使用频繁且持续在线的服务。
正如气候活动家保罗·约翰斯顿(Paul Johnston)所强调的那样,“规模效应不容忽视”,他指出,当构建大型云服务时,我们应该充分发挥编程语言的优势,致力于代码的深度优化,实现效率最大化,从而显著降低能源消耗。相反,对服务于有限用户群体(如4人团队及办公室宠物狗)的小型内部工具而言,除非其电力消耗异常显著(例如达到惊人的10兆瓦时),否则能源优化不必成为首要考量。
软件系统的设计应当考虑更深层次的碳意识、能源效率及硬件效率。优秀的设计策略往往能够显著削弱编码方式本身对系统效能的潜在影响,为软件运行创造更加绿色、可持续的环境。但值得注意的是,这样的优化与革新需要我们投入时间与精力,持续不断地思考与审视。
因此,现在是时候掸去白板上的灰尘,找出那支绿色的笔了——幸运的是,它很可能也是唯一一支还有墨水的笔。
第 4 章将深入讨论运行效率问题,这一章无疑是本书的核心所在。运行效率,简而言之,指的是以更少的机器和资源消耗实现相同的产出。这一目标如果得以实现,系统整体的碳排放量有望大幅降低80%~90%,并且其实现途径相对清晰。因为正如后文将要详细阐述的,目前市面上已有诸多服务和工具专门用于提升运行效率,特别是在云计算领域。
即便是在本地管理环境中,也有众多优化策略可供采用。众多技术手段,比如提高设备利用率、采纳良好的运行实践,以及实施多租户策略,同样适用于本地管理场景。
要降低每单位有用工作所产生的碳排放量,关键在于减少资源闲置时间。为此,我们必须致力于提升处理器、内存、磁盘空间及网络的利用率,这种做法等同于以高服务器密度运行,能够显著提升能源效率及硬件效率。
谷歌在过去15年里,为提高内部系统利用率所做出的努力便是一个生动的例证。谷歌巧妙地运用容器化技术进行作业封装,同时结合详细的任务标签和一个名为“集群调度器”的工具,成功地将各种工作负载像玩《俄罗斯方块》游戏一样紧密地打包到服务器上。这一举措使谷歌所需的硬件和电力资源大幅减少,可能降至不到原来的1/3。
|
|
想要深入了解谷歌10年前在这一领域的全面探索,你可以阅读一篇极具吸引力的论文(https://oreil.ly/iVaP9)。论文作者还为这款集群调度器起了一个很棒的名字:Borg。这篇关于谷歌 Borg的论文,对本书作者之一安妮产生了深远的影响,甚至引领她踏上了追求运行效率的整个技术探索之旅。因此,在探索这一议题时,请务必做好心理准备,迎接一场思想的盛宴。 顺便说一句:Borg集群的研发最终催生了Kubernetes集群。 |
所有公有云服务提供商都在运行效率方面进行了大量投资。因此,当前可采取的一种最佳可持续措施可能是:将你的系统迁移到云端,并充分利用云服务。
他们通过高度的多租户架构,即多个用户之间的机器共享,使云端的机器利用率远超本地可达到的水平。他们可以实现超过65%的利用率,而本地的平均利用率通常仅为10%~20%。值得注意的是,即便只是简单地将系统“迁移”到专用的云服务器上,你也无法获得如此显著的好处。
超大规模企业通常会通过使用自己的智能编排器和调度程序,将不同的工作负载打包到大型服务器上,从而实现高利用率。当然,前提是这些工作负载没有被限定到指定专用服务器上。
值得注意的是,如果你采用的是设计精良的微服务架构,那么使用消费者集群调度器(例如Kubernetes调度器或HashiCorp的Nomad),本地部署环境下的机器利用率也可以得到显著提高。
优化机器利用率的集群调度器需要封装的作业(通常封装在虚拟机、容器或无服务器函数中),并在编排层之上运行。编排层能够启动或停止这些作业,或在机器之间迁移作业。
为了有效打包相关作业,编排器和调度器必须对工作负载具有充分的了解,这是制定合理调度决策的前提。调度器对工作负载的理解深度,直接关系到资源利用率的提升幅度。在云环境中,通过精心挑选实例类型来准确反映工作负载的特性至关重要,同时应避免资源或可用性要求的过度设定,比如在适用可突发实例的场合,就无须强求使用专用实例,以免造成资源浪费。
采用高度多租户的无服务器架构方案,如AWS的Lambda服务、Azure的无服务器功能或谷歌的无服务器服务,能够显著减少硬件资源的占用。此外,无服务器解决方案还带来了多项运行效率上的优势,包括自动扩展功能(确保仅在需求产生时激活硬件资源),以及自动调整资源规模,以适应不断变化的工作负载需求。虽然在本地系统上独立实现这种巧妙的操作也是可行的,但要达到同样的效果,需要在工程方面付出相当高的成本。对云服务提供商而言,这是他们的核心业务,值得投入时间和金钱。对你来说,是否同样值得呢?
更简单的运行效率示例包括避免过度配置系统(例如手动缩减那些不必要的大型机器的资源分配),或者利用自动扩展以避免在需要之前进行资源配置。
另一个更简单的策略是,关闭那些已经不再执行任何操作的应用程序和服务。可持续性专家、红帽工程师霍利·卡明斯(Holly Cummins)将它们形象地称为“僵尸工作负载”。不要仅仅因为“以防万一”的心态而保留它们。
如果你发现自己懒得将部分服务器的启动和停止过程自动化,这可能是一个信号,表明这些服务器已经不再具有实际价值。未经维护的僵尸工作负载不仅会对环境造成负担,还会带来安全风险。因此,请果断地将它们关闭。
即便你将工作负载部署于云端(即由第三方托管),你依然能够对部分运行效率配置施加控制。
• 利用Spot实例提升效率:AWS或Azure上的Spot实例(对应谷歌云平台上的抢占式实例)是提升公有云利用率的关键所在。Spot实例赋予了编排器和调度器更大的自主权,使它们能够灵活地决定作业的运行时间,从而实现资源的优化整合。短期来看,充分利用Spot实例不仅能够提高系统在硬件和电力资源方面的利用效率,还能显著降低成本。从长远来看,Spot实例有助于系统更加关注碳排放问题,因为它们使云服务提供商能够在当地电网电力碳排放较少的时段运行工作负载,这一点在谷歌最近关于碳意识数据中心运营的论文中得到了详细阐述。
• 优化配置,减少浪费:过度配置会降低硬件效率及能源效率。你可以借助AWS成本管理或Azure的成本分析工具优化机器配置,并通过简单审核发现并关闭那些不必要的僵尸服务,以进一步减少资源浪费。
• 合理规划冗余,降低硬件消耗:过度冗余同样会降低硬件效率。虽然跨区域复制对于故障的热切换是必要的,但在许多情况下,故障的冷切换结合GitOps策略足以保证服务的质量。
• 实施自动扩展以最小化资源使用:自动扩展机制支持根据CPU使用情况或网络流量水平动态调整运行系统所需的机器数量,甚至可以支持预测性配置。务必确保实施双向自动扩展,否则其效益仅限于初次使用!AWS提供了一个关于微服务驱动自动扩展的优秀入门指南。然而,过度增加微服务的数量会增加架构的复杂性,从而导致过度配置,因此你需要找到平衡点,并尽量保持架构的简洁性。萨姆·纽曼(Sam Newman)的《微服务设计》(Building Microservices)一书为此提供了最佳实践指导。
• 避免使用始终在线的模式或专用实例类型以减少对环境的影响:始终在线的模式或专用实例类型并不环保。选择那些能够为主机带来更多灵活性和能够提供更详细的工作负载信息的实例类型,将有助于提高机器的利用率,同时减少碳排放并节约成本。例如,AWS的T3实例、Azure的B系列和谷歌共享核心机型都提供了有趣的突发(bursting)能力,这可能成为自动扩展的一个更轻量的替代方案。
此外,值得注意的是,那些能够识别低优先级或可延迟任务的架构在机器利用率较高时更容易操作,并将在未来更有助于提高碳意识。这些架构包括无服务器架构、微服务架构和其他异步(事件驱动)架构。
正如绿色技术传播者保罗·约翰斯顿所言:“始终在线的模式是不可持续的。”这对某些重量级的传统单体应用来说,或许是个不好的消息。
长久以来,托管成本被视为碳排放的一个间接衡量指标。随着云计算的日益普及和商品化,电力消耗依然占据着云计算基础成本的核心地位。特别是在引入动态定价机制之后,那些碳排放量较高的电力(俗称“脏电”)的成本显著上升,这一变化可能进一步强化托管成本与碳排放之间的关联性。目前市面上已经出现很多专注于碳足迹的报告工具,尽管这些工具尚不成熟,但如果人们使用它们,它们就会得到持续优化与不断完善。因此,我们强烈建议大家积极使用这些报告工具。
在第5章中,我们将从碳意识的角度出发,探讨优秀设计的几个关键标识。
• 节能优先:设计时应确保系统避免或尽量减少“始终在线”的运行状态,以减少不必要的能耗。
• 异步计算与需求转移:对于非实时处理任务,如机器学习或批处理任务,我们建议通过拆分任务并实施异步计算来优化能源使用。这意味着这些任务可以在本地电网的碳强度较低时段(例如,在阳光明媚且电网负载较轻时)运行。这种策略通常称为“需求转移”,尤其适用于Spot实例或抢占式实例类型。
• 需求塑形:服务应根据本地电网的碳强度进行调整,这称为“需求塑形”。例如,在低碳电力生产期间提供完整功能,而在高碳电力期间对服务进行平稳降级。许多应用程序会采取类似的方法来应对带宽可用性的波动,如暂时降低图像质量以应对网络不佳的情况。
• 高效编码:对于真正时间紧迫、需要始终在线的任务,虽然不可避免地需要使用高碳强度的电力,但应编写高效代码以尽量减少电力消耗。
• 任务优先级管理:任务的运行不应超过其实际需求的优先级或紧急程度。如果任务可以等到有更清洁的电力时再完成,那么它们就应该等待。
• 边缘计算与设备优化:尽可能将计算任务推送到最终用户设备和边缘设备,以最小化网络流量,减少对数据中心即时算力的需求,并充分利用设备电池中存储的能源。这样做还有其他好处,如促进点对点(P2P)通信和离线优先的应用程序设计,有助于减少对高可用性集中式服务的需求,并提高应用程序对网络问题和延迟的适应性。
• 智能预计算与预缓存:使用算法进行预计算和预缓存,在需求产生之前完成并保存CPU或GPU密集型计算任务。虽然这有时可能看起来效率低下(计算结果可能在使用前被丢弃或取代),但除了缩短响应时间,智能预计算还可以提升硬件效率,并有助于将任务转移到电力碳强度较低的时段进行。
这些标识通常依赖于微服务或分布式系统架构,但并非绝对必要条件。
在第6章中,我们观察到,对于运行在用户设备上而不是在服务器上的软件而言,这些设备在生产过程中产生的碳排放量远超其在使用过程中产生的碳排放量,这一观察结果如图1-2所示。

图1-2 信息通信技术终端用户设备的二氧化碳排放影响(基于苏黎世大学的数据)
|
|
我们同样对FTP电视的具体含义感到困惑,推测其可能是一种智能电视。而这款设备的温室气体排放问题的严重程度远超我们的预期。 |
展望未来,在追求零碳排放的全球愿景中,用户设备的使用寿命急需得到显著延长。这一目标的实现,不仅在一定程度上受物理设计和制造环节的制约,而且深受设备过快淘汰的影响。设备淘汰往往源于操作系统和应用软件停止提供安全补丁,或是过度依赖新的硬件与功能。
随着摩尔定律(即芯片上可容纳的晶体管的数量每18个月翻一番)及其他技术进步的推动,设备功能持续升级,开发者也热衷于在新应用中充分利用这些新特性。以手机为例,其性能不断提升,配备了专门的图像处理单元(GPU)和机器学习芯片,并大幅扩展了内存容量。应用程序能够利用这些技术进展,这无疑值得肯定。然而,至关重要的是,这些应用程序同样需要能够在没有新功能的旧手机上运行,从而避免不必要的、由软件更新驱动的设备淘汰。
为了鼓励用户继续使用现有技术,开发人员必须开发与现有设备兼容的新软件。虽然手机操作系统确实提供了一定的支持信息和工具来协助解决这一问题,但开发人员的积极参与仍然是实现这一目标不可或缺的一环。
在防止软件导致的设备淘汰方面,苹果公司堪称行业内的佼佼者,其iOS 15系统仍然支持6年前的手机设备。然而,所有供应商都需要在这方面加大努力,将设备的预期寿命延长至6年甚至更久。Fairphone作为一家小众的手机供应商,已经提供长达8年的操作系统安全补丁,并将目标定为10年。这充分证明,防止软件导致的设备淘汰是完全可行的。
在耐用性方面,目前大多数手机难以与游戏机媲美。以Xbox One为例,其设计寿命长达10年,现在看来这一承诺已经兑现。游戏机的商业模式与手机截然不同,并不包含大量的产品计划性报废内容。这表明,如果生产商愿意,设备完全可以拥有更长的使用寿命。因此,我们强烈主张,从现在起,所有新设备的预期使用寿命至少应达到10年。
在第7章中,我们将深入讨论网络及互联网对碳排放的深远影响,并通过剖析实际案例来深入讨论:对于那些必须应对带宽波动挑战的产品,如视频会议服务,如何高效地实施需求转移和需求塑形策略?一直以来,网络工具和设备,如光纤电缆、路由器和交换机等,都将每比特传输功耗降至最低作为核心设计目标。相较于行业内的其他领域,网络在能源使用方面已经实现显著优化,其在现代数据中心的电力消耗和碳排放总量中所占比例甚小。
然而,值得注意的是,大多数应用程序在使用这些网络资源时,仍存在显著的改进空间。对这些应用程序而言,能源效率可能并未作为首要设计考量。
在此背景下,绿色软件这个新兴领域可以从电信行业的丰富实践中汲取诸多宝贵经验。
在第8章中,我们将深入探讨人工智能和机器学习这一蓬勃兴起的领域,它们正引领着CPU密集型任务的显著增长,并促使数据中心规模大幅扩张。鉴于此,制定一套绿色人工智能战略显得尤为关键且迫切。
我们将详细讨论如何利用一系列先进技术来加速并优化机器学习模型的训练过程,包括缩小模型规模,应用联邦学习,实施剪枝、压缩、蒸馏和量化等策略。
同时,机器学习还受益于专用硬件和芯片技术的迅猛发展,我们应该尽量使用最适合当前训练任务的硬件资源,以优化性能和效率。
尤为重要的是,机器学习模型是延迟不敏感型任务的典范。这意味着,我们无须依赖高碳强度电力来进行模型训练,从而为绿色人工智能的实现提供了更多可能。
绿色网络基金会的克里斯·亚当斯(Chris Adams)指出:“当前的高能耗问题,并非仅仅源于开发者不愿采用低碳解决方案,更深层次的原因在于他们缺乏必要的数据支撑,尤其是缺乏来自大型云服务提供商的实际数据,这些数据的缺失导致他们无法精确评估哪些节能措施能真正发挥作用。因此,在进行建模时,往往最终只能无奈地依赖于一系列假设。”
尽管在短期内我们可能只能做出最合理的猜测,但即便如此,也远比没有任何节能措施要好。一些通用的节能方法,如尽可能多地将内容迁移到多租户环境中,以及减少时间敏感型代码对CPU资源的占用等,都已被证明是行之有效的手段。然而,从长远来看,开发者必须依赖正确的可观察性和监控工具,以便能够持续不断地对能源的使用情况进行迭代和优化,从而实现更为显著的节能效果。
软件系统的碳排放监控尚处于发展的初级阶段,但展望未来,我们可以预见会有更多创新工具应运而生。伴随着这些新工具的出现,我们必须积极吸收技术行业过去十年在系统监控方面所积累的宝贵经验,并将这些成果巧妙地应用于绿色能耗的监控实践中。
在第10章中,我们还将深入讨论站点可靠性工程(Site Reliability Engineering,SRE)的相关知识,以及如何将这一工程理念应用于碳排放预算的制定过程中。
在第11章中,我们将深入讨论采用绿色软件方法所带来的连锁效益,这些效益涵盖了成本的有效缩减、安全性的显著提升,以及系统韧性的大幅增强。
在期待更好的报告工具问世之际,我们建议将成本作为一个切实可行的间接衡量指标,用以衡量碳排放的影响。因此,碳追踪和云金融运营(FinOps)这一新兴实践之间产生了交集。FinOps作为团队管理托管成本的一种方式,为每个团队赋能,并在中央最佳实践小组的支持下,通过IT、财务、产品等多职能团队的紧密协作,掌控自己的支出。
然而,与使用FinOps工具相比,使用碳足迹工具来衡量碳成本仍然具有显著的优势。我们热情期待(并希望这一愿景早日实现),这些工具能够全面考量实际为服务器供电的电力所产生的碳排放量。目前,选择在低碳电力区域,如法国(以核能为主)或斯堪的纳维亚半岛(主要依赖水电和风电)进行托管,与在德国等高碳电力区域托管所支付的费用相差无几。但显而易见的是,前者所产生的碳排放量明显低于后者。碳足迹工具能够准确反映这一差异,而FinOps工具则无法做到这一点。
在第12章中,我们将深入讨论绿色软件基金会的绿色软件成熟度矩阵(Green Software Maturity Matrix,GSMM)项目。对大多数实践者而言,该框架提供了一个循序渐进的路径,引导他们沿着这个矩阵的上升方向,从初始的第1级(刚开始在高效、需求可塑且可转移的系统上努力)逐步攀登到巅峰的第5级(系统能够全天候在零碳排放的电力下运行)。
GSMM项目强调了一个核心理念:在追求绿色软件的征途中,我们应该首先将焦点放在提升系统运行效率上,而将代码效率的优化策略安排在最后阶段进行。届时,我们有望直接采购现成的优化解决方案,从而进一步推动绿色软件的发展。事实上,GSMM的这一理念与我们提出的建议非常契合。
在本书的最后一章(第13章),我们将为你准备一项特别的挑战。我们希望你能在未来的6到12个月内成功地将你的托管费用(直接关联碳排放量的费用)减半。为此,我们会提供一些实用的建议,帮助你达成这一目标。诚然,这并非易事,但绝非遥不可及,它正是我们在GSMM上迈向更高层次必须实施的第一步。
最后,我们将分享在撰写本书的过程中对绿色软件的深刻领悟:绿色软件绝非一个小众领域,而是未来软件发展的必然趋势。从今往后,所有软件都必须走向绿色化。
因此,绿色软件必须全方位地满足我们的需求。它必须为开发人员带来生产效率的提升,同时还要兼具弹性、可靠性、安全性、卓越性能、可扩展性和经济性。虽然我们在本章开头提到,绿色软件是碳效率高且具备碳意识的软件,但这仅仅是其众多卓越特性的冰山一角。绿色软件在满足碳意识和高效的同时,还必须满足我们的其他所有需求。值得庆幸的是,这一切不仅切实可行,而且正在逐步成为现实。
绿色软件的发展不应该视为一个只有消极结果的过程,恰恰相反,它充满了希望与活力。在我们看来,软件的绿色化是当前科技领域最富有趣味性且最具挑战的课题。它将深刻地影响并塑造未来,与每个人息息相关。这一课题意义重大,且完全有实现的可能。
因此,我们衷心祝愿你在改变世界的征途中好运连连,并享受其中的每一刻。