Table of Contents

Methodological Debugging

方法论的调试

SRE[1]经常在生产中进行调试–在压力和信息充斥下。调试似乎是一种神秘的、与生俱来的特性,但幸运的是这并不真实;相反,你可以遵循一个结构化的方法过程来找出问题所在,避免错误和认知偏差。

  1. Triage
  2. Operational definition
  3. Making the mental model of the system explicit
  4. Iterating on the model
  5. Reconstructing and validating
  6. Next steps

  1. 分类:在处理一个事件时,我们首先必须迅速做出一些元决策:对业务有什么影响?我们现在要处理这个事件还是可以推迟?我们是否有时间对其进行调试,还是应该采用紧急故障转移程序?在开始调试之前,许多答案都是未知的。在进入可能很长的调试过程之前,Triage(分类;伤员验伤分类)是一个快速回答这些问题的简短阶段。然而,你可以在任何时候回到这个阶段:把分类看作是一个快速失败的步骤,在你有更多的数据时,可以随时回到这里。

  2. 业务定义:为了解决一个我们决定值得追求的问题,我们需要精确和可衡量地定义它(“它很慢”并不能解决问题)。一个可操作的定义有两个主要部分:测量方法(即,从哪里? 用什么工具? 什么时候? 在什么环境下?)(i.e., From where? With which tools? When? In which environment?) 和该测量的预期结果(例如,”交易X的p99从1小时前开始持续超过500毫秒,应该低于100毫秒“)。这使我们能够协作并验证我们确实解决了我们正在处理的问题。

  3. 使系统的心理模型[2]明确化:我们不能立即知道发生了什么故障,这充分说明我们的系统的心理模型是不完整的,甚至是误导性的。我们的任务是逐步完善这个模型,直到它足够接近现实来解释这个问题。把这个模型写成图表或文字。你可能会想跳过这一步,但不要!写作会迫使你清楚地说明问题。写作迫使你阐明你的模型,这有助于发现差距,更重要的是,使你的假设清晰,以便你能对它们进行迭代。

  4. 对模型进行迭代:一旦我们有了一个明确的模型,我们就可以反复改进,直到找到问题所在–这与科学方法没有什么不同:提出一个假设,定义需要哪些数据来证实或拒绝这个假设,收集这些数据,并对其进行评估以决定是否应该拒绝这个假设。请记住,我们的测量可能是错误的,我们可能被各种认知偏见所左右,或者我们可能只是受制于还原论思维的局限。

  5. 重构和验证:重构阶段基本上与我们对模型提出假设时的分析相反。我们不是把系统分解成各个部分和子系统,而是利用我们所拥有的测量数据,从我们假设的部分中重建系统,并询问各部分的总和是否能解释我们所看到的系统–通常情况下,它不能解释。我们可能遗漏了一个部分,或者我们在其中一个部分发现的故障与这次事件无关(事情总是在某个地方发生故障!)。也可能是各部分之间的相互作用解释了我们正在经历的事情,而不是任何单一的部分。

  6. 接下来的步骤:方法论的调试的核心思想是使我们的心理模型明确化,以意识到我们的模型和现实之间的偏差。对于任何方法论,掌握它需要练习和训练,例如利用游戏日来训练和改善你的系统心理模型。要了解更多,请查看我们的SREcon 2018调试研讨会(SREcon 2018 debugging workshop)。

我们如何构建本书的结构

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

2.WHAT ARE MENTAL MODELS?
​ 2.1 什么是“心理模型”?心理模型是在有意识的思想中构建和模拟的模型。“有意识“就是要了解您和您周围的世界与世界的关系。
​ 2.2 A mental model is what the user believes about the system at hand. Note the two important elements of this definition: A mental model is based on belief, not facts: that is, it’s a model of what users know (or think they know) about a system such as your website.