我曾经很佩服那些能修复各种软件缺陷的“救火”专家。许多年前,我是维护遗留系统的团队的一名普通开发人员。当时,团队的每个开发人员轮流带着一部7x24小时开机的手机来处理用户问题。团队中有一位英雄。他戴着眼镜,经常穿一件白大衣。我们有生产事故中解决不了的各种疑难杂症,就找他。只有他才能解决我们这些普通开发者解决不了的问题。所以十几年过去了,我还是很佩服他,认为他是英雄。但是当我后来读到《第五项修炼》描述的“负担转移”系统的基本模型时,我才明白,团队中有这样一个“英雄”,看似“幸运”,却会带来一个意想不到的后果——team不想再花时间和精力去提升普通开发人员解决生产事故的能力,因为“英雄”出来算十个。团队维护的遗留系统不断着火,而我们这些普通开发者却一直无力扑灭。真正的英雄,要么赋能团队成员,提高他们应对生产事故的“救火”能力,而不是一个人依赖他;或者他可以把需要半夜起床的生产事故解决成白天可以解决的小任务,在上班时间解决。可能有人会问,作为开发者,如何把生产事故化解成小任务呢?首先,当你开发新代码或解决软件缺陷时,你总是可以考虑眼前的代码。是否存在以下分布式计算8个谬误:网络可靠、延迟为零、带宽无限大、网络非常安全、网络拓扑结构不会改变、只有一个网管、传输成本为零。网络是同构的。”这样的谬误,那你可以用《复杂系统稳定性的12种反模式》的列表(每个反模式的详细描述见第2版第四章《发布!》)来想想哪里会有“黑暗模式”。债务“。同级集成点级联反应级联失效用户线程阻塞自黑攻击放大效应系统容量不平衡人群误判机器响应慢无限长的结果集”和“暗债”爆发的“可能性”,对这些“暗债”进行排序,然后选择“影响力”最大、“可能性”最大的“暗债”,优先排序。如果你发现代码中有一个“集成点”的“暗债”需要首先处理,那么你可以使用下面的“复杂系统稳定性的12种模式”(每个模式都有详细的描述,见《发布!》第2版第5章)清单,寻找偿还“暗债”的思路。TimeoutcircuitbreakerBulkheadsteady-statefastfail让它崩溃并更换握手测试机MiddlewareDecoupling卸载负载背压机制Governor例如上面“集成点”的“暗债”,可以使用“fastfail”然后,根据修复工作量的大小,要么顺利修复,要么将其加入迭代开发待办清单,纳入日常开发活动中。如果每个开发人员在日常的开发过程中都能不断地思考以上几点,那么白天上班的时候就可以把生产事故相关的“暗债”一一解决,睡个好觉。当然,你可以把上面的方法和效果分享给你的队友。但更有效的方法是尝试影响你的技术领导,让他参考2021年6月中文版新推出的《混沌工程》,关注这个与书同名的新做法.早在2008年,Netflix将数据中心迁移到亚马逊云平台时,就踩了一个大坑,生产事故时有发生。为了解决白天上班时间生产环境中的事故,而不是半夜起床去解决,他们探索出了一个行之有效的方法——混沌工程。如何进行混沌工程?借鉴Netflix的例子,我们可以从“定心态、带人员主动、引业务”三个方面入手混沌工程。承认暗债是复杂系统固有的,而不是一味地要求工程师“不能也不应该犯错”。否则,面对故障,大家只会花很多时间互相推诿,而忽略了提升团队发现更多暗债、快速修复生产故障的能力。根据阿什比必要多样性定律(用于控制系统B的系统A需要与系统B一样复杂),为了建立系统能够承受生产环境的动荡的信心,有必要关注“丰富多彩”的生产环境暗色背景。债务设计同样“丰富多彩”的防范手段。但是光靠技术骨干是发现不了那么多暗债的,也发现不了那么多防范措施的。因此,有必要充分发挥工程师的积极性。这时候,领导者就应该营造一种能够调动工程师主动性和创造性的企业文化,从而促使工程师更安全地发现和修复更多暗债“诡计”。在修复暗债的过程中,可以使用上面列出的8种迷思、反模式和模式。试点业务选择生产事故频发的业务系统,尝试混沌工程。因为事故的反复发生,暗债的出现会给发现和化解暗债带来更大的动力。基于能够反映用户体验的业务稳态行为建立假设,而不是专注于首先发现系统中的弱点。因为这样更有利于全局优化,效果更大。为了让暗债出现,设计引入了现实世界中可能发生的足够多样化的事件,而不是设计容易产生但现实中不太可能发生的事件。为了一针见血。对于每一个引入的事件,参照上述模式列表进行稳定性设计。可以从准生产环境入手,进行混沌实验。回归实验效果,继续发现和解决暗债,避免系统随着时间的推移在韧性方面逐渐“落后”。设计更安全的实验方法,尽量减少爆炸半径,尽量减少实验带来的业务损失,而不是明知故障难以控制,还贸然进行实验。如果实验假设被证伪,那么就有很好的机会发现新的暗债。在寻找暗债的过程中,大家可以参考上面的反模式列表,启发寻找和修复漏洞的设计,以及混沌工程,避免让自己陷入如此悲惨的境地。作为开发者,如何逐渐减少半夜起床修复生产事故的次数?你可以尝试使用我将在本文中介绍的8个谬误、12个反模式和12个模式。如何防止队友半夜打电话给你帮忙抢修生产事故?影响领导并尝试使用混沌工程让团队成员在工作时间继续工作,主动发现并修复分布式系统中的漏洞,并逐渐减少他们在晚上给你打电话的次数。【本文为专栏作家《ThoughtWorks》原稿,微信公众号:Thinkworker,转载请联系原作者】点此阅读更多该作者好文
