熊二哥 阅读(6) 评论(0)

周末早上,一个哥们突然@我,问是否有线上故障处理和定级的规范或者模板,虽然手头有既有文档,但内容显的太具象了,跟我们的业务有很强的关联性,并不是那么好直接复制到他的团队中。因此,个人对过去的线上故障处理进行了回顾和思考,并进行了简要的归纳,望帮助到需要的同学。文本将按事中处理、事后总结和事前预防的顺序进行介绍,不足之处望大家不吝赐教。

换个角度来说,其实故障处理的过程,和小朋友发高烧的处理过程类似。首先mama会带孩子上医院,如果温度高医生会要求打退烧针,类似发布回滚,之后再通常吃对症的药物慢慢恢复疾病。接下来,mama会明确小朋友生病的原因,如吹风受凉,并抱怨程序员爸爸不细心。最后,mama会提出很多的预防计划,比如禁止程序员爸爸带孩子时写代码,6了6了。

1.事中处理

遇到线上故障永远是尽快处理问题,而不是追究谁的责任,有时候快速合理的故障处理,完全可以规避掉大部分的故障危害

1.1线上故障处理SOP

  • a.线上故障第一要务【发布回滚】,因此针对高风险代码,一定要单独发布,便于回滚
  • b.线上故障第二要务【周知干系人】,随时通报故障处理进度,让真正了解该问题的干系人尽早参与进来
  • c.故障代码revert【通常来说,代码问题只要无法在30分钟内修复,就一定要回退代码,避免其他项目把错误代码带上线,再次带来故障】
  • d.修复问题,冷静的完成回归测试后重新上线,如果BUG带来错误数据则需要全面评估数据清洗的风险,避免造成更加严重的次生伤害【很常见】

2.事后总结

2.1.故障定级

简单的可以定位3级【推荐更进一步细化为3-5个层次】,严重性逐步递增:a.线上bug;b.线上故障;c.线上灾难。

一定要针对不同业务、不同层次、不同持续时间、不同后果细化故障定级,并且要周知所有干系人,确认后执行,以电商平台为例。

  • 不同业务:交易、支付、领券属于重要业务,出问题对公司影响很大;C端影响通常要比B端影响大很多
  • 不同层次:前端的影响会小一些,后端的会大一些,基础的会更大【包括中间件、运维等】
  • 不同持续时间:如故障持续3分钟,bug一上线就发现,通常故障级别会比较低,持续12小时,可能CTO都危险了,因此出现问题及时通报很重要,瞒报只会无限的扩大风险
  • 不同后果:影响用户下单100单,产生15个客户投诉,影响商家编辑商品2小时等,这部分的指标一定要和业务、产品沟通确认,他们有这部分最大的发言权。
业务 持续时间 后果 定级
用户订单 5分钟 损失10万订单 线上灾难
商家商品 45分钟 商家45分钟不能编辑和新增商品信息 线上故障
用户评论 3分钟 用户3分钟不能编辑和查看评论信息 线上bug

tip:

【后果数据来源】:通常取前1日、上周同日数据作为参考,根据业务线有差异,此外,互联网业务因变化快去年的数据通常不具参考意义

【构思角度】:可以从空间、时间、组合空间和时间维度

2.2.责任人范围

明确责任人,到底是产品、开发还是测试同学的责任,亦或者是多个干系人共同分担责任。比如由于是产品设计不合理带来的bug,产品同学需要负主要责任,有测试同学参与的项目,测试同学需要和开发同学共担责任,而其他情况,就只能是开发同学自己背锅了。

2.3.故障复盘

在故障处理完成后,一定要复盘并由责任人编写Case Study,并根据相关价值决定是否需要团队内分享【一定要避免同样的问题再次发生】

2.4.故障处罚

开发人员及其多级Leader、[测试人员]及其多级Leader共同分摊,比如开发小A罚款200元,Leader罚款500元,CTO罚款1000元等。

3.事前预防

3.1.故障预防

  • a.规范代码规范、数据库设计规范、日志和告警打点规范
  • b.规范git分支建立和合并、规范测试流程【全面的单元测试、是否需要测试介入等
  • c.规范Review制度,明确审核的责任【至少要识别出代码上线带来的风险,以明确Review的仔细程度】
  • d.规范上线流程【每个项目都需要上线计划,包括配置、数据库、代码项目和发布顺序、回滚方案等】
  • f.引入灰度发布、预发和监控机制,灰度应用出现问题及时回滚
  • e.规范【数据清洗】等高风险行为,高度重视这类操作【容易被忽视】,必须提供完整方案【包括是否备份、如何回滚等】

tip:

以上内容很多是站在比较理想的角度去思考的,实务中,一定要根据具体业务、成本考量、团队能力等因素进行剪裁和权衡,㊗️永远都没有线上故障。

名词解释

SOP: Standard Operating Procedure标准操作流程,就是将某一事件的标准操作步骤和要求以统一的格式描述出来,用来指导和规范日常的工作