译者前言

Troubleshooting 即故障排查检修,这绝对不是一项简单的任务,不同技术体系之间天差地别,这个问题可有统一答案?因为具体的技术终将过时,所以本文不谈任何具体的技术细节,而是针对 troubleshooting 提出十条方法论。

本文原作者:Steve Mushero
原文链接: https://medium.com/faun/shit-breaks-dao-of-troubleshooting-6cc1b3869ce0

1. 故障无法避免

啊,你的服务又挂了,很不幸。
更不幸的是,因为负载高、业务复杂,它挂掉是常事。
它以一种不能被 “自动扩容”、“加容器”、“重启” 等手段轻易 “解决” 的方式挂掉,花里胡哨的调度系统此时也起不到作用。当然我不是说这些方法没用,毕竟它们各有各的场景。
有时候,你面对一个故障,5 分钟就能定位原因,但作为 “老兵” 的你一定懂得这背后需要多少经验积累和努力,常言道 “功夫都在戏外”。 如果你恰好用了微服务(micro-service)、无服务器(server-less)、无限可分割(infinitely-divisible)、无处不在的松散连接组件(loosely-connected pieces and parts)之类的新玩意,修复起来就更难了。
何解?具体技术早晚会过时,而方法论则具备长久生命力。唯有 “道”(指方法论)才是应对复杂系统的指路明灯。

2. 对一切建模

要能说出每个部件在模型中的位置,它们如何交互、如何配置。条件允许的话,连它的行为也要弄清楚。
拿到并看懂逻辑架构图,有必要的话,物理架构图、网络架构图也一样。搞清楚不同尺度上的分层、分组。

3. 可知则尽知

尽你所能,弄清楚所有的配置和状态。
这确实很难,看懂仓库里的代码、配置文件、.env、基础结构即代码(infrastructure-as-code systems)只是毛毛雨,更不要说运行时动态的部分。但不管你喜不喜欢,真正运行着的系统就是一切真相的源头。

4. 谁动了环境?

最近有什么被动过?由谁?何时?操作对象是什么?效果是什么?谁登过服务器?谁 push 过代码?改了什么配置?诸如此类。
然后,哪些行为发生了变化。例如谁的延迟发生了变化,相关部分的动力学[1]变化,错误率是否有变化,哪些资源负载或可用性发生了变化?哪些变化重要呢?

5. 请专家

直接或间接地应用知识和经验,了解事物之间的关系、依赖,尤其是动力学及与之关联的失效模式[2]。动用一切资源去找最懂行的人,问朋友同事、在论坛社区发帖、在社交网络提问、在 IRC 或邮件列表提问……如果专家是“鬼魂”,那就“作法招魂”[3]。到现场指导是最好的、实在不行就远程。条件允许的话,使用可用的专家系统或规则引擎,这些都是被编码过的专业知识。

6. 提问要清晰准确

提问前请务必再三观察和思考,虽然提供给专家的信息永远是片面的,但错误的提问神仙难救,而某些低风险的、清晰而准确的提问,则连人脑都不需要,可以直接被规则引擎快速地自动解答,这就是提问质量的差距。

7. 局部小规模实验

可对系统做微小的改动或调整,观察其影响。
这招非常好用,尤其是使用排除法时、探究组件之间的关系、验证某些东西不生效的猜想时。

8. 提前做排除

别浪费时间在明显错误的方向上,它会吞噬掉大量的时间和精力,注意力被转移,资源被浪费,不要等到最后才懊悔没早点排除错误选项。问题 “是” 什么固然重要,但永远别忽视问题 “不是” 什么,要持续不断地根据逻辑和经验做排除。

9. 小心求证

排查到最后可能以自相矛盾的结论收尾,某些部分似是而非,最终问题无解。用马克 · 吐温的话说:“麻烦的不是未知,而是你深信不疑,却发现事实并非如此”。
所以在排查过程中要乐于不断挑战和测试自己的基本假设、基本事实与真相,因为似是而非的部分往往埋藏在其中。

10. 寻求慰藉

排查问题是困难的,时间和工具永远都不够,并且总是伴随着巨大压力。时常停下来,重新思考和审视已知的一切,观察它们如何连接与相互影响,真相经常以这样匪夷所思的方式被发现……

故障无法避免,遵循以上十条真理,答案终将到来。

注解:
[1] Dynamics 即动力学,这里理解为需要分辨指标中谁是因,谁是果,以及影响程度。对指标的解读是关键。
[2] Failure Modes 即失效模式,详见百科
https://en.wikipedia.org/wiki/Failuremodeandeffectsanalysis。这里强调的是有效利用前人的经验。
[3] 原文是 Ouija 即通灵板,流行在欧美的一种占卜方式类似笔仙,这里的意思是从一切来源寻求专业知识,有必要的话连鬼魂都要问。

关于神策数据

神策数据(Sensors Data),隶属于神策网络科技(北京)有限公司,是国内专业的大数据分析和营销科技服务提供商,为企业提供神策营销云、神策分析云、神策数据根基平台三大产品方案,通过全渠道的数据采集与全域用户 ID 打通,全场景多维度数据分析,全通道的精准用户触达,帮助企业实现数字化经营。

神策数据立足大数据及用户行为分析的技术与实践前沿,提出基于数据流的企业运营框架——SDAF,即Sense(感知)、Decision(决策)、Action(行动)、Feedback(反馈)的数据闭环,并致力为客户打造基于 SDAF运营框架的数据闭环。业务现已覆盖以互联网、品牌零售、金融、融合媒体、企业服务、高科技、汽车、互联网+ 等为代表的 30 多个主要行业,并可支持企业多个职能部门,目前已服务付费客户 1500 余家。公司总部在北京,并在上海、深圳、合肥、武汉、成都、中国台北等地均拥有本地化的服务团队,覆盖全国及东南亚市场,同时,公司拥有专业的服务团队,为客户提供与营销和大数据相关的咨询、解决方案和专业服务。