本文作者:付莹
前言
随着气候灾害,极端天气的频繁出现,关于气候变化的讨论已经越来越多。各国政府,各行各业也逐渐将可持续发展提上议程。软件作为日常工作生活中不可或缺的一部分,它和气候变化之间有什么关系呢?我们作为软件从业者,又可以做些什么来促进气候目标的达成呢?本文将从软件对可持续发展的影响出发,举例介绍软件如何从三个方面降低碳排放。然后就其中一个方向-软件自身碳排放进行介绍,再到绿色软件的定义,度量和原则。最后提出作为软件从业人员现在可以做些什么。
软件对可持续发展的影响
为什么软件从业者需要关注可持续发展?
说起可持续发展,大部分时候,人们更容易联想到能源,电力,建筑,交通等行业对气候变化的影响,而比较难将软件和可持续发展关联起来。但其实软件和可持续发展之间也有着千丝万缕的联系。它对可持续发展的影响主要分为三个方面:
软件自身所带来的的碳排放
软件的使用促进其他行业降低对气候变化的影响
通过软件推动用户形成绿色生活方式
虽然软件自身并不会带来直接的碳排放,但是由于软件开发,运行和维护需要使用硬件和电力资源,由此而产生的碳排放不可小觑。数据显示,ICT行业在全球碳排放的占比从2007年的1-1.6%已经上升到3-3.6%,相当于航空行业的碳排放占比。而这一趋势还会逐渐升高,到2040年将达到14%。作为软件从业人员,我们需要思考,如何降低软件所带来的碳排放。
与此同时,软件的使用也可以促进其他行业的减碳。比如云计算,数字孪生,AI,IoT等相关技术的使用,可以帮助企业降本增效,减少对气候变化的影响。比如:将数字孪生技术应用在汽车领域的产品设计中,通过软件对产品的结构,材料进行模拟,提前对产品的性能进行评估,提升样机制造通过率,从而减少成本,降低由此带来的碳排放;利用AI,数学建模等技术对企业业务进行模拟,识别不同策略带来的经济收益,经济成本和碳成本,帮助企业规划可持续发展路径;在物流行业,通过电子面单的使用,减少对纸质标签的依赖,极大的降低了由此产生的环境影响。
更进一步,可持续发展目标的达成,需要人们生活习惯的改变。软件作为现代生活中必不可少的工具,通过在软件中增加绿色相关功能,可以引导人们作出更加绿色的选择。比如:谷歌在谷歌机票中增加了每个航班的碳排放信息,帮助用户在选择机票时了解出行对气候变化的影响,增加选择更清洁航班的可能性;支付宝的蚂蚁森林产品,将用户的绿色生活方式和能量积分进行关联,引导用户关注气候变化问题。
软件从业人员的工作会影响到这所有三个方面,因此需要更多的了解所设计的软件产品如何对气候变化产生影响,以及如何降低软件所产生的碳排放,促进可持续发展目标的达成。
接下来,将着重介绍一下如何降低软件自身所带来的碳排放。即如何构建更加绿色的软件。
软件碳足迹
软件自身对气候变化的影响主要来自两个方面,一个是运行软件所使用的硬件在制造,运输和回收过程中所产生的的碳排放,称之为硬件的内置碳排。另一个是软件运行过程中所使用的电力导致的碳排放。虽然使用清洁电力是一个大的趋势,但要达成100%的清洁电力仍然需要很多年的时间。从数据上看,2021年清洁电力在全球电力中的占比只有14%左右。
从碳足迹来看,软件的碳排放主要发生在3个阶段:
用户在终端设备上与软件的交互
数据在网络中的传输
数据在服务器端(数据中心)的计算和处理
要降低软件的碳排放,需要在这几个阶段,从硬件和电力使用入手。很多硬件厂商和依赖大型数据中心的企业已经开始将碳排放作为企业运营的重点。比如:苹果公司在产品设计中提升可再生材料的使用,以降低产品生产过程中所产生的的碳排放;谷歌通过机器学习等技术提升数据中心的能源效率。此外,云服务的使用和普及,也在一定程度上提升了硬件利用率,降低了单位软件对硬件资源的依赖。
在这些基础之上,如何构建更加绿色的软件,进一步降低由于软件开发,运行和维护而产生的碳排放,是作为软件从业者需要考虑的重点。
绿色软件定义
那么到底什么是绿色软件呢?简单来说,绿色软件指的是在交付和使用过程中产生更少碳排放的软件。
这意味着两个方面:
软件对资源的依赖更少,这个资源包括硬件和电力资源
软件在运行过程中使用更加清洁的电力
在设计和交付软件的过程中,软件从业者需要不断从这两个方面思考,以降低软件对环境的影响。
如何评估一个软件是否绿色
绿色软件并没有一个明确的评估标准,达到了多少就说明软件是绿色的。绿色软件的构建是一个持续优化和改进的过程。只有了解当前的软件碳排放水平,才能更好地对后续的优化改进提供指引。
温室气体核算体系中,一般会将企业的碳排放作为整体进行评估。以软件为例,温室气体核算体系会将构建软件和运行维护软件所需的所有硬件和电力汇总到一起来对碳排放量进行计算。这样做可以方便企业进行碳排放的报告,但是对于指导IT部门进行实际减碳意义不大。举个例子:企业的软件碳排放从100tCO2e上升到了200tCO2e,从企业层面来看,由于软件而产生的碳排放量大幅上升了。即便团队采取了很多措施降低软件碳排放,如果单从这一个指标来看,好像团队的工作结果并不是很好。如果换一个视角,之前100tCO2e的碳排放只支持了10万的用户,但是现在200tCO2e的碳排放支持了100万的用户。从这个视角来看,单位碳排放支持了更多的用户,软件团队所做的减排策略是有效的。因此,在评估软件碳排放时,不能单纯从总量进行计算。
为了更好地指导软件团队在软件减碳上的工作,绿色软件基金会提出了“软件碳排强度(Software Carbon Intensity)”的概念。相较于将软件总碳排作为评估标准,碳排强度引入了单位的概念。它的评估方式如下:
E指的是软件开发和使用过程中所消耗的电力
I指的是电力碳排因子
M指的是软件开发使用过程中所使用的硬件的内置碳排
R指的是软件的功能单位,如果软件以API调用量为评估,那么这个单位可以是API调用次数。如果是以用户数据为评估,这个单位可以是用户数量
软件从业者可以以软件碳排强度为指引,不断优化软件的碳排强度,以降低软件对环境的影响。
绿色软件原则
就像构建安全软件一样,构建绿色软件并没有一个固定方法,而是有一些指导原则和实践。绿色软件基金会将这些原则进行了汇总,主要包括以下8个方面:
图1:绿色软件的8个原则
提升软件碳效率
提升软件碳效率,就是要降低单次软件运行所产生的碳排放。这是绿色软件的总体原则,如何实现,需要进一步拆解。
提升软件电力效率
软件的运行离不开电力,无论是我们日常使用的手机,数据中心运行的机器,或者是开发过程所使用的设备,都需要电力的驱动才能够工作。以往,开发和运行软件所消耗的电力并不在我们的考虑范围,在构建绿色软件的时候,需要将这一因素融入软件设计和开发过程中。比如,在不必要使用服务器时,将其关闭以节省电力。比如,在软件架构设计的时候,优化对系统资源的占用,降低运行软件所需的电力。
使用更清洁的电力
清洁电力,指的是在电力生产过程中产生更少碳排放的电力。目前的清洁电力主要指的是由太阳能,风能,水能,核能和氢能转换的电力。其中占比最高的是水能,其次是风能,太阳能。通常情况下,电网中的电力是混合了各种来源的电力,我们使用的电力的碳排强度根据电力来源的不同而有所不同。电力碳排强度有区域性和时间性两个不同的维度。比如,在四川省,由于大量使用了水电,因此它的整体碳排强度会更低一些。而在陕西,火电的占比会更高一些,因此电力的碳排强度也会更高一些,而这一比例随着新能源电力装机量的提升也会有所变化。在时间维度上,太阳能和风能在时间上的变化,也会导致电力碳排强度的变化,比如太阳能在晚上无法发电,因此太阳能所产生的电力占比就会下降。
针对这些特点,在构建软件的过程中,需要将这个因素考虑进来,让软件尽可能运行在电力更加清洁的地区和时间段。比如,在使用云服务的时候,可以选择电力更加清洁的区域,下图是AWS的各区域的电力碳排强度和价格分布。可以看到eu-north-1这个区域的电力相较于us-east-2这个区域会更加清洁。可以考虑将软件部署和运行这样的区域(当然碳排只是众多考虑因素中一个,需要综合选择)。
图2:亚马逊云各区域的电力碳排放和成本分布
降低软件对硬件资源的依赖
和电力一样,软件的开发和运行也离不开硬件的支持。在构建软件的时候,如果能够兼容老一些硬件设备,可以降低硬件设备的更新换代,从而降低由于生产硬件而产生的碳排放。举个例子:我现在所使用的iPhone 13 Pro的总体碳排放是88kg CO2e,如果我使用3年的时间,那么年均排放是29kg,如果将使用时间延长到4年,那么年均排放会是22kg。而使用这个iPhone多长的时间,很大程度上取决于运行软件时的性能和速度。如果构建软件时,能够很好地支持在老设备上的性能,在一定程度上可以延长设备的使用时间。
提升硬件的能源效率
硬件的能源效率一般是硬件厂商重点关注的问题,但是软件也可以在一定程度上提升能源效率。这主要源自能源比例(Energy proportionality),它用来衡量消耗的电力和提供的价值之间的关系。在硬件的电力使用中,有很大一部分是用于基础运行的,就像我们买了250G的手机,实际可以使用的空间只有个200G,因为有50G的空间用于系统存储。因此,在硬件上运行的功能软件越多,基础电力均摊到每个功能上的比例就越小,也即提升了软件对电力的使用效率。
因此,在设计软件架构的时候,尽可能提升服务器的利用率,以提升服务器的能源效率,从而降低运行软件所产生的碳排放。
降低网络数据传输量和距离
网络中的数据传输依赖于一系列的网络设备,比如交换机,路由器,服务器等。随着网络中数据的传输量的增大,这一系列的设备也需要不断地升级。而数据的传输距离越长,对网络设备和电力的消耗也就越大。降低网络数据的传输量和传输距离可以降低由于数据传输而带来的碳排放。
在设计软件的时候,需要从这个视角考虑。比如:在设计前后端交互时,减少不必要的数据传输;将数据在不同区域进行缓存,降低该区域请求数据的传输距离。
提升软件碳适应能力
除了将计算迁移至更清洁的区域,在设计软件时也可以基于当前的碳排强度来调整计算需求,从而提升软件的碳适应能力。这样的模式在生活中经常见到,比如:空调的环保模式,当开启环保模式时,会减少不必要的电力浪费。软件行业也有一些实践,比如:在浏览视频网站时,网站能够实时检查当前网络速度,从而推荐低清晰度的方法,以保障视频的流畅度,也减少了网络传输需求。我们在设计软件时,可以从这个视角进行考虑,在电力更加清洁的时候,运行更多的任务,在电力紧张的时候,减少任务量。
持续度量和优化
构建绿色软件不是一次性的工作,它需要软件团队持续关注并优化。而优化的前提条件之一就是度量。没有度量就无法知道所采取的行动是否有效。因此在构建绿色软件时,需要构建相应的度量方法,并对其进行追踪和优化。
这个度量可以是从碳排放,电力,网络数据传输量,成本等多个维度进行,重要的是它能够反映软件在碳排放上的改进。绿色软件基金会的成员也提供了一些度量的开源工具,供软件从业人员进行参考。在云服务使用所产生的碳排放度量上,Thoughtworks也开源了CCF工具,帮助使用云服务的企业评估由此而产生的碳排放情况。
以上就是构建绿色软件时需要考虑的几大原则。可以看到,相较于通过购买绿电,或者其他碳抵消的方式来降低软件对环境变化的影响,绿色软件更看重实际的减排。在可持续发展的大背景下,作为软件从业人员,需要开始将绿色因素应用到日常的工作中。
软件从业者可以做什么
关于绿色软件的讨论目前还处于非常早期的阶段,相关的实践也还没有体系化的解决方案,但这并不妨碍我们作为软件从业人员开始着手降低软件对环境变化的影响。可以从以下方面开始行动:
加入绿色软件相关社区,通过社区贡献自己的想法,比如:绿色软件基金会
对绿色软件相关实践进行学习了解,比如:Linux基金会提供的绿色软件的培训认证
降低日常开发过程中的浪费,比如:及时关闭不使用的服务器
在软件架构设计中应用更加绿色的实践,比如:使用serverless架构,降低对服务资源的占用
将绿色软件原则作为团队日常技术实践的一部分
最后,借用一句老的口号“保护环境,人人有责”,在气候环境越来越恶劣的当下,作为软件从业人员,我们也可以贡献自己的一份力量,降低软件行业的碳排放,推动本行业的可持续发展。
免责声明:本文内容仅表明作者本人观点,并不代表Thoughtworks的立场