亲爱的 KV,
过去一年,我一直在为一个大型计算集群的分布式作业控制系统工作。该系统是由公司的一位联合创始人内部开发的,他还在断断续续地继续开发,而我们一个小团队则添加新功能并尝试修复错误。代码不算糟糕,但它有一个主要缺陷——如果系统队列中的作业不够多,它就会趋于冻结。我和团队中的另一人一直在努力诊断这个问题,但管理层给它分配了非常低的优先级,因为只要我们在系统空闲时添加虚拟作业,这个错误就不会发生。我从未见过系统像这样运行,我想知道,这种问题在分布式作业控制系统中是否常见?
失业者
亲爱的失业者,
系统因资源匮乏而冻结的具体问题在分布式作业控制系统中是否常见?根据我的经验,每个分布式系统都是珍贵的雪花,而 KV 讨厌雪!
我们先来谈谈高层次的问题——没有人关心你是否修复了这个错误,因为如果你放入虚拟作业,系统就“正常工作”了。正常工作这个短语是计算机领域最被滥用的短语之一,在这种情况下,它真正表明的是某人智力上的懒惰,或者他或她的动机在其他地方。“我们为什么要关心我们的系统以 100% 的功率运行,而修复问题却要花费时间和金钱?” 除了现在计算机消耗了全球电力相当大的比例之外,不解决这样的错误还会产生其他有害的副作用。
系统会随机卡死不仅表明系统中存在严重的错误;它也是一个主要的风险来源。你没有说你的分布式作业控制系统控制什么,但假设我希望它不是控制具有重大现实世界副作用的东西,比如发电站、喷气式飞机或金融交易系统。当然,风险在于系统会卡死,不是在有人方便添加虚拟作业来清除卡死的时候,而是在某些可能导致数据丢失或返回不正确结果的操作期间。我相当怀疑,如果像这样的系统在协调电网电力平衡时卡死,可能会造成惊人的甚至致命的后果。
我并不是说每个错误都必须以牺牲其他有成效的工作为代价来修复,但根据我的经验,正是像这样的错误往往会在绝对最糟糕的时候发生。如果团队事先知道这个错误,那么当他们不得不承认他们在实际发生之前就知道存在这样的风险时,只会导致尴尬。
如果不深入研究系统本身,就很难说太多关于技术问题。(记住 KV 之前关于雪花的评论。)处理这种冻结情况最常见的方法本身并不完全令人满意,那就是设置一个看门狗进程,查看系统是否正在取得进展,并在它认为系统卡住后在适当的超时后重新启动它。
看门狗方法存在几个问题。首先是看门狗实际会做什么。一些看门狗通过重新启动卡住的进程来运行,它们通过粗暴地杀死进程并重新启动它来做到这一点。如果系统执行的计算都是幂等的,那么风险很小,因为任何未完成的操作都将从头开始重新启动,并且不应产生副作用。大多数系统都有副作用,这意味着这种重启可能会导致整个系统发生级联错误。如果错误很明显,那么人工操作员或许能够将系统回滚到良好的已知状态并重新启动系统。但是,如果错误是一种静默损坏,返回不正确的答案(正如我在本文开头提到的)呢?在这种情况下,看门狗很可能弊大于利。
即使看门狗方法在其他方面没有危害,选择合适的超时时长也存在第二个问题。由于系统在工作量不足时会卡死,因此有些人会希望将看门狗定时器设置得非常快,以防止这些卡死降低系统的整体效率。非常短的看门狗超时可能会使系统抖动,因为每次看门狗触发引起的重启都需要系统执行工作才能返回到运行状态。当进程重新启动时,系统完成的所有工作都是纯粹的开销;它无助于系统执行其预期的工作。相反,将看门狗超时设置得太长会冒着系统长时间卡死的风险,同样会降低整体效率。通常,这些超时的选择是通过一种被称为“大胆猜测”的黑魔法形式完成的,然后是另一种被称为“再次大胆猜测”的启发式方法,以查看它是否比第一个更好。
不要低估使用这些方法的生产系统的数量。我相信,如果我们真的知道我们每天依赖的系统中,有多少系统在底层使用了黑魔法,我们都会更愿意在怀俄明州购买土地,建造掩体,并在其中生活。
不幸的是,正如 KV 之前讨论过的那样,调试分布式系统很困难,但事实证明,不调试它们并让它们灾难性地失败会使日子更加难过。
KV
有毒的程序员
Kode Vicious
一个态度强硬的程序员,KV 回答你的问题。他不是曼纳斯小姐。
https://queue.org.cn/detail.cfm?id=1348585
从 EDVAC 到 WEBVAC
Daniel C. Wang
面向计算机科学家的云计算
https://queue.org.cn/detail.cfm?id=2756508
大到不能倒
Pat Helland、Simon Weaver 和 Ed Harris
拥抱失败,以免失败拥抱你。
https://queue.org.cn/detail.cfm?id=3077383
Kode Vicious,凡人称之为 George V. Neville-Neil,从事网络和操作系统代码的工作,以获得乐趣和利润。他还教授有关编程相关主题的课程。他的兴趣领域是代码探险、操作系统和重写你的糟糕代码(好吧,也许不是最后一个)。他获得了马萨诸塞州波士顿东北大学计算机科学学士学位,并且是 、Usenix 协会和 IEEE 的成员。 Neville-Neil 与 Marshall Kirk McKusick 和 Robert N. M. Watson 合著了 FreeBSD 操作系统设计与实现 (第二版)。他是一位狂热的自行车爱好者和旅行家,目前居住在纽约市。
版权所有 © 2018,所有者/作者持有。出版权已授权给 。
最初发表于 Queue 第 16 卷,第 1 期—
在 数字图书馆 中评论这篇文章
Marc Brooker, Ankush Desai - AWS 的系统正确性实践
构建可靠和安全的软件需要一系列方法来推理系统正确性。除了行业标准的测试方法(例如单元测试和集成测试)之外,AWS 还采用了模型检查、模糊测试、基于属性的测试、故障注入测试、确定性模拟、基于事件的模拟以及执行跟踪的运行时验证。形式化方法一直是开发过程的重要组成部分——也许最重要的是,形式化规范作为测试预言,为 AWS 的许多测试实践提供正确的答案。正确性测试和形式化方法仍然是 AWS 的关键投资领域,这些领域已经看到的投资回报加速了这一进程。
Achilles Benetopoulos - 数据中心计算机的中间表示
我们已经到了分布式计算无处不在的地步。内存应用程序数据大小正在超过单台机器的容量,因此需要将其划分为集群;在线服务具有高可用性要求,只有将系统部署为多个冗余组件的集合才能满足这些要求;高持久性要求只能通过数据复制来满足,有时甚至跨越广阔的地理距离。
David R. Morrison - 模拟:分布式系统中未被充分利用的工具
模拟在人工智能系统的出现中发挥着巨大作用:我们需要一种高效、快速且经济高效的方式来训练人工智能代理在我们的基础设施中运行,而模拟绝对提供了这种能力。
Matt Fata, Philippe-Joseph Arida, Patrick Hahn, Betsy Beyer - 企业到云:谷歌的虚拟桌面
超过四分之一的 Googler 使用内部、数据中心托管的虚拟桌面。这种本地部署的产品位于企业网络中,允许用户从世界任何地方远程开发代码、访问内部资源和使用 GUI 工具。在其最显着的特性中,虚拟桌面实例可以根据手头的任务调整大小,具有持久的用户存储,并且可以在企业数据中心之间移动以跟随出差的 Googler。直到最近,我们的虚拟桌面都是使用名为 Ganeti 的自研开源虚拟集群管理系统,托管在 Google 企业网络上可商购的硬件上。今天,这项重要且对 Google 至关重要的工作负载在 GCP(Google 计算平台)上运行。