当考虑到新兴的软件趋势时,你可能会想到WebAssembly或GraphQL这样的东西。你可能不会立即想到可持续发展,但是,与许多其他行业一样,这是一个越来越多地出现的主题。有一个气候问题。我们的地球比工业革命前的温度高了1˚C左右,而且还在继续升温。 到2052年(最好的情况)或2030年(最坏的情况),它将变暖1.5˚。
我花了一段时间才意识到,虽然听起来无伤大雅,但即使是1.5˚的变化也很严重。我们很容易认为 "如果我出去时气温升高2˚,我几乎不会注意到它",或者甚至 "如果气温升高几度,那就好了。我可以穿上人字拖,并且有借口吃更多的冰激凌!"(在芬兰,我在2月份就被提供了冰淇淋,但我想这是一个地区的偏好,我们其他人把冰淇淋留给炎热的夏天。)
可悲的是,2˚的上升是美好的反面。一个更温暖的世界将是一个更危险的地方。敌对的环境和日益减少的自然资源造成政治不稳定和人类痛苦。我们现在已经看到了气候变化的影响:灭绝、飓风、破坏性的火灾和洪水。
WTF。这很糟糕!
是的,是的,它是。
好吧,但这与我有什么关系?
气候变化是一个复杂的问题。它就像技术债务,除了在我们的基础设施和政策中。从长远来看,需要进行重大的重构,但我们现在需要做的是推动减少我们的碳排放。
如果你想到碳足迹严重的行业,可能会想到航空业。飞机在全球碳排放中占比高达2.5%。不幸的是,数据中心--这就是我们的行业--消耗了世界能源的1%或2%左右。如果你考虑更广泛的IT行业,我们的能源使用量还更高。我们的污染程度几乎和飞机一样,但有更多的建造管道和更少的机翼。
你可能已经注意到我在比较中把碳苹果和能源桔子混在一起了。飞机使用化石燃料作为能源,而燃烧化石燃料总是会排放出碳。数据中心的能源可以是无碳的。水电、风能或太阳能不产生碳(一旦建立了发电的基础设施)。我们也看到了智能数据中心的架构,将多余的热量回收为当地的供暖。尽管如此,许多数据中心仍然使用煤炭或混合燃料。弗吉尼亚州,世界上的数据中心之都,严重依赖化石燃料。
更糟糕的是,数据中心的能源使用正在快速上升。预计到2030年,它将增加8%至20%。需求总体上在上升,但很多的上升是由机器学习驱动的。人工智能使用大量的能源。模型越来越聪明,但它们通过变大和燃烧更多的电力来做到这一点。最近,深度学习使用的能源每隔几个月就翻一番。
作为技术人员,我们在工作中所做的事对气候有很大影响。我们需要减少开支,但在哪里?我们需要权衡一件事的有用程度和它所使用的能源的多少。我们关注航空作为气候罪魁祸首的原因之一,而不是水泥(8%)或农业(20%),是因为为人们提供食物和住房似乎本质上是有用的,而为观光和会议而飞来飞去似乎......轻浮。同样,NFTs和比特币也让人们感到不满,因为它们使用大量的能源,除了让比特币矿工和投机者致富之外,似乎没有什么目的。(多少能源是 "巨大的"?比特币挖矿目前使用的能源比阿根廷还多,一些估计认为它占所有数据中心能源使用的一半)。
在某些时候,我们将需要做出一些艰难的选择,但我们可以从减少意外的浪费开始。废物--根据定义--没有价值。摆脱浪费并没有什么坏处,它可以节省金钱和碳。削减不需要的处理甚至可以加快应用程序的速度,减少延迟,使用户更高兴。
但是,废物从哪里来?我们如何找到它?
单人住宅的悲惨情况
让我们来谈谈我们运行工作负载的地方。为了了解配置效率,我们需要了解利用率和弹性。利用率是指一个系统的计算能力有多少被工作负载所使用。利用率越高越好。有趣的是,大型机(还记得吗?)的平均利用率约为95%,所以它们是运行工作负载的一种出色的有效方式。大型机使用的功率大约是X86的一半,同时速度也更快。我们不一定都要改用大型机,但我们应该尽量不要把我们的x86用在大部分容量闲置的地方。
下一个概念是弹性。弹性是指我们能多容易地扩大或缩小工作负载。弹性是让我们获得高利用率的原因,因为如果我们可以收缩和增长工作负载,我们可以调整它,使它只使用最低限度的资源。
在云计算的早期,企业急于采用云计算来节省成本。与其在专用硬件上运行每一个应用程序,机器可以被集中起来,工作负载可以根据需要进行扩展和减少。云的弹性使硬件的利用率高,成本低。
这在很大程度上仍然是正确的,但这并不保证。例如,想想Kubernetes。我们都见过慷慨地提供的集群只运行一个小工作负载。其余的硬件容量都没有使用。这到底是怎么回事?单个应用程序有很大的弹性,可以向上和向下扩展。集群,就不是那么回事了。扩大或缩小集群是可能的,但这是一项艰巨的工作,因为集群节点与底层机器是相当耦合的。
一个未被充分利用的集群。
更重要的是,每个集群都有开销,被称为控制平面。即使你是一个缩减集群的高手,把一个集群做得太小也会使其效率低下:它几乎都是开销,只有一点点的应用。
一个具有良好、高利用率的集群--但控制平面消耗了大部分的计算资源。
理想情况下,我们不应该缩小我们的集群,而应该通过共享我们的集群来汇集资源。这在技术上很简单,但有一个障碍。康威定律适用于集群,也适用于代码!康威定律说,你的架构复制了你的组织结构。根据我的经验,你的集群拓扑结构最终也反映了你的组织结构图。
发生这种情况有几个原因。一个原因是,在团队之间沟通备用容量和安排访问和ID的机制。计算机是要花钱的,所以团队不愿意分享,除非有一些收费机制。衡量跨团队的使用情况需要付出努力,协调内部资金的转移可能涉及到可笑的官僚主义。
隔离也是一个问题。如果我们让一个嘈杂的邻居进来,他们占用了所有的计算能力怎么办?如果一个不明智的资源命名引起了范围碰撞怎么办?如果他们运行一个损坏的容器怎么办?安全性是一个很大的问题,因为一个容器的漏洞会影响到它的所有邻居,甚至在其他命名空间中。Kubernetes命名空间提供了一些隔离,但还不足以克服Conway障碍。
尽管如此,我们可以在多租户方面做得更好。我们应该监控我们的集群利用率,合理化那些做得不够好的集群,并默认为共享,至少对于非开发的工作负载而言。
警惕僵尸
让我们想象一下,我们成为利用率专家,把大量的工作负载打包到每个集群中,这样我们所有的集群都在90%的利用率下嗡嗡作响。我们是气候英雄吗?
这完全取决于这些集群上的工作负载是什么。如果是比特币挖矿,那么,显然,我们不是气候英雄,不管我们的利用率有多高。另一方面,即使比特币是有问题的,但至少有人,在某个地方,从它那里受益。 有些工作负载根本就没有目的,甚至没有利润。这些被称为僵尸工作负载,它们是我们行业中的一个可怕的问题。 它们是在某些时候很有用的应用程序,但这个目的很久以前就结束了,没有人把这个应用程序退役。僵尸是不好的。
这种情况一直在发生。当我在学习Kubernetes时,我创建了一个集群,但我有太多的工作在进行中。我把我那每月1000美元的集群忘了两个月。当我重新发现它时,很明显我应该迅速而内疚地关闭它,但有时这些决定是比较棘手的。我们都有宜家的认知偏差,即如果我们做了什么,我们就会对它产生依赖。我们不愿意关闭我们制作的服务器,因为如果我们以后需要它们怎么办?
僵尸问题有多严重?一项对16,000台机器的调查发现,其中四分之一的机器没有做任何有用的工作。对于许多云来说,这些指标可能更糟糕。云计算使配置硬件变得非常容易,但它并没有开箱即用,也没有提供任何支持来记住取消配置这些硬件。云供应商没有任何特别的动机来帮助你减少对他们产品的消耗。
我们能做什么?
解决这些问题是困难的,但它可以做到。对于许多组织来说,对付僵尸的第一道防线是恳求电子邮件。这不是一个特别有效的管理僵尸的方法。会议通常是下一个手段,但它们也不是很有效。
越来越复杂,许多组织尝试标签。与会议相比,标签似乎不那么被动,也更有技术含量,但它们仍然依赖于手工过程。人们必须记住添加一个标签,他们必须选择一个对别人有意义的标签,而且必须有人定期搜索并删除那些看起来可能有资格被删除的带有标签的东西。
一些团队试图在 "僵尸马 "逃跑之前关闭谷仓的门。这在理论上似乎是合理的,但在实践中,它只是最终成为一个额外的创新抑制治理层。为了阻止工程师意外地创建僵尸服务器,这些团队阻止工程师创建任何服务器。可悲的是,每个僵尸服务器一开始都是一个有价值的服务器。在创建阶段增加摩擦并不能帮助在删除阶段的事情顺利进行。
自动化拯救
有希望的是,FinOps可能能够帮助检测僵尸。官方说法是,FinOps是一套帮助成本实时流向组织的正确部分的做法。我更愿意把它看成是找出你的组织中谁忘记关闭服务器的纪律。追踪成本会激励人们减少浪费,从而减少能源消耗。
GitOps也有杀死僵尸的潜力。GitOps的设计是为了帮助灾难恢复和可审计性,而不是气候变化,但减少能源可能是一个次要的好处。基础设施即代码意味着基础设施是一次性的。任何服务器都可以被轻易地启动,所以任何服务器都可以被轻易地关闭。GitOps解决了宜家的认知偏差,因为即使我们关闭了服务器,我们也可以保留我们的创作。
不久前,我开始开玩笑说,旋转集群将成为新的关灯方式。我预言在2021年,当我们每天晚上离开办公室时,我们会把灯关掉,然后我们会把集群关掉。事实证明,我对 "离开办公室 "那部分错得离谱。从好的方面看,我对关闭集群的看法比我所知道的要正确得多--它已经在做了!例如,有一个团队减少了他们的云计算!例如,一个团队通过一些早晚的自动化将他们的云计算成本降低了37%。降低成本并不能保证减少碳排放,但这是一个有用的启发式方法。
自动化不一定非得是复杂的才能产生作用。IBM的一位同事通过实施一个微不足道的租赁系统,使一家银行的CPU使用率减半。当有人提供一台服务器时,新服务器会在两周后自动关闭。如果工程师想保留该服务器,他们可以续租。根据人类的自然倾向(懒惰和健忘!)调整我们的默认值,为工程师和能源消耗创造了巨大的效率。
随着我们的行业开始更多地关注这个问题,我希望我们将看到更多的自动化被植入多云管理系统。例如,流量监控可以标记那些没有与外界对话的服务器。
微观优化的危险
摆脱浪费有时被称为无悔的解决方案,甚至是四赢。优化我们的系统感觉很好,可以帮助用户,减少成本,并拯救地球。然而,我们需要小心微观优化的剧场。
微观优化是让你感觉你正在做出改变的优化,但他们实际上没有做出改变。他们感觉很好,但他们并没有帮助用户,或减少成本,或拯救工厂。在性能调整领域,微观优化是一个众所周知的反模式,但它也发生在许多情况下。
在我们旅行的时候,我经常会避免乘坐出租车。除非一个机场完全无法进入,否则我总是乘坐公共交通工具。这很难!它花费了更多的时间。这需要更多的努力。作为一个独自旅行的女性,这更危险。因为我为避免乘坐出租车付出了很多努力,我觉得自己是个气候英雄。问题是,与我到机场时乘坐的航班的碳排放量相比,我不坐出租车到机场所节省的碳排放量可以忽略不计。
难道每一点都没有帮助吗?乘坐公共交通不是比出租车更好吗?只有在没有机会成本的情况下。资源是有限的,所以如果你花时间去优化一些有相当小的好处的东西,这意味着你失去了优化有更大好处的东西的时间。同样的权衡也适用于我们的 "牺牲预算";如果我们做出痛苦的牺牲,放弃我们真正喜欢的东西,我们可能会觉得 "有权 "保留另一件东西。如果我们放弃的东西比我们保留的东西有更低的碳足迹,这就是一个糟糕的交易。
与性能优化一样,关键是要以数据为导向。测量,不要猜测。当数据不可用时,推动供应商提高其碳足迹的透明度。(在同一次谈话中,你可以提到你非常关心浪费问题,并希望工具能够帮助你最大限度地减少僵尸工作负荷,最大限度地提高利用率,谢谢。)
问题就是机会(诚实!)。
气候挑战的艰巨性很容易使人感到士气低落。它是如此之大,如此之复杂,如此之吓人。一些需要发生的变化是基本的社会变化,比如我们如何衡量进步和价值。政府需要改变他们的法规和激励措施。但企业和个人也需要改变,而这是我们力所能及的。与你的雇主和其供应商讨论他们的碳足迹。测量,并减少。
最后需要发生的变化是,我们需要新的技术。我们必须创造工具来测量和管理能源的利用。我们需要更好地运行我们的基础设施,包括多租户、按需启动和毫不费力的退役。做到这一切意味着发明新的技术和工作方式--这是很令人兴奋的。
插图:霍利-卡明斯