Table of Contents

Don’t Let Anyone Run Code in Your Context

不要让任何人在你的环境下运行代码

我的团队运行一个机器安装服务。提交一个新的操作系统请求,您的机器就会被网络引导到一个RAM磁盘中,它会设置磁盘并下载一个操作系统。客户希望能够调整所有磁盘设置;仅仅选择文件系统类型是不够的。SREs【1】喜欢智能黑客;它们不需要做很多工作就能实现额外的功能,但是有些类型的hack是反模式的,与长期的痛苦相比,短期的收获是微不足道的。我们认为自己很聪明,让客户在安装操作系统之前提供一个shell脚本来运行。这个脚本可以创建分区、RAID阵列和文件系统。只要在脚本终止后挂载了根文件系统,他们的机器就会得到一个操作系统。

快进到几年之后。有数百个shell脚本,有些已经不再使用。另一些则是来自早已消失的机器所有者的脚本的分叉副本,而在一个脚本中发现的bug并没有回传到它的原始版本。由于客户脚本中的错误,2%的机器配置尝试失败了!这影响了我们的服务指标,让客户觉得我们的服务很差。他们并没有错。

失败的原因有很多。一些驱动器不支持所有的hdparm命令。对设备的大小做了假设。一些坏掉的固态硬盘默默地放弃写入,当你读回分区表时,它将是零。驱动器和RAID设置可能会有成千上万种故障。有些脚本长达1800行,没有单元测试。

我们无意中构建了一个依赖于数百个用户的系统,这些用户能够在一个不可靠、不断变化的硬件世界中编写防御性shell脚本。我们毫无根据的乐观主义得到了回报,不断出现难以调试的问题。我们聪明的黑客被证明不是很聪明。

唯一的答案是把我们用户的代码从我们团队的环境中剥离出来。所以我们建立了一个系统,使用有效的用户提供的JSON,描述磁盘布局应该是什么样子。我们向客户承诺,我们会让磁盘看起来像他们希望的那样,如果我们的代码造成了问题,我们将承担责任。对350个shell脚本进行逆向工程,弄清它们的意图,确保我们的磁盘布局工具支持数百个平台上的几十个用例,然后将所有人迁移到新的配置上,这是一件非常痛苦的事情,但一旦完成,我们的配置可靠性在一夜之间从98%上升到99.8%。

在每周数以万计的服务器中,99.8%仍然是一个很大的故障率,调查发现了另一个导致间歇性问题的智能黑客攻击。当客户把机器交给我们时,我们首先会确保机器的流量和数据被清除干净(drain)。为了做到这一点,我们运行一个排水脚本(drain script)。猜猜这是谁写的–我们的客户,当然,如果他们的脚本崩溃或挂起,看起来我们要花很长时间来重新安装机器。

值得庆幸的是,我们知道如何解决这个问题! 把我们用户的代码从我们团队的环境中拿出来。在我们的客户要求我们重新安装机器之前,让他们把机器清除干净。拒绝接受未清除干净的机器。这似乎是一个微小的语义差异,但从SLA的角度来看,如果我们受制于我们不拥有的代码,我们就无法提供有意义的 SLA。

  永远不要让你的客户给你提供代码;坚持验证配置! 永远不要对包含其他团队代码的服务提供SLA! 永远不要为包含不可靠的依赖关系的服务提供SLA! 你不能放弃深入了解你的客户使用你的服务的责任。捍卫你的服务和你的团队在良好客户服务方面的声誉!

我们如何构建本书的结构

SRE虽然涉及复杂的技术系统,但归根结底是一种文化实践。文化是人的产物,这启发我们根据你在组织中的SRE数量来组织本书的各个部分–你具体处理什么,你的一天是怎样的,取决于有多少个SRE工程师。我们将本书的文章分为 “SRE新手” 、0-1个SRE、1-10个SRE、10-100个SRE和 “SRE的未来 ”。

读者如果想找寻先从哪里开始的指导,可以直接跳到最适用于自己的部分;但是,你仍然会发现阅读那些目前并不适用于你日常的部分的文章的价值。

在0到1个SRE时,还没有人被指定为SRE,或者你已经找到了你的第一个SRE,这个角色看起来几乎是孤独的。

在1到10名SRE时,你正在组建一个团队,有知识共享和分工的能力。

在10到100个SRE时,你已经成为一个组织,你需要思考的不仅仅是你所从事的系统,还需要思考如何组织这么多SRE。

“SRE新手” 涵盖了基础性的话题(尽管并不详尽!),对于那些刚刚开始SRE之旅的人来说是很有帮助的,即使是最有经验的SRE,也是一种复习。 “SRE的未来” 包含了一些文章,这些文章探讨了SRE潜在的发展方向,或者是(目前)坐拥时代潮流。

没有必要按照任何特定的顺序阅读本书。你可以从头到尾读一遍。或者,如果你对某个特定的主题感到好奇,可以翻到索引,在那里你可以找到关于该主题的所有文章。把它作为参考指南,或者是灵感的来源–可以在需要的时候提供一个震撼。或者,也许可以建立一个阅读俱乐部,每周一次挑选一篇文章与同事讨论。这就是散文集的魅力所在。我们希望你和我们一样喜欢阅读它们。

结语

SRE系列的文章,有时间我就会翻译一些,希望大家能学到对自己有用的东西。谢谢

翻译不易,转载时请注明原文链接,谢谢

延伸阅读

1.Site Reliability Engineering-中文
   Site Reliability Engineering-english