浅谈一次线上事故

705 阅读3分钟

线上事故对一个软件工程师意味着什么

“嘿,哥们!赶紧来监控室,你刚刚发布的版本导致系统接单量陡降,版本我们已经回滚了”。作为一个软件工程师,接到这样一个电话,心里瞬间肯定“叮咚”一下,会恐慌、质疑、焦躁。

没错,这正是2021年遇到线上事故那刻,我心里的真实写照。一次大的线上事故,对一个软件工程师的职业生涯会产生诸多不利,小则影响当年的评优评先,大则被公司劝退或辞退。

事故的过程以及后果

现在回顾一下当时的事故,依然心有余悸。

由于公司业务的快速发展,部门需要整合,我们团队要从其它组接手一些新的项目。此次事故,就是新项目的一次发布引起的。

大概在2021年某天上午11:30左右,新项目版本开始发布,总共有6台机器。

  1. 先发布一台机器,业务日志没有任何报错,机器的CPU和内存都是正常,观察了大概5分钟,一切正常。
  2. 根据前期经验,一台机器没有问题,其它机器发布基本也不会有问题,于是剩下的5台机器就一起发布了。正好到了午饭时间,团队小伙伴都去午餐了,5台机器发布完,差不多30分钟,期间我去了趟卫生间。
  3. 就在我上卫生间的时候,接到运维小哥的电话:“系统接单量陡降,版本已经回滚”。

当时我完全是一脸懵的状态,系统接单跟我的发布有什么关系,服务的业务日志和监控没有任何异常啊!其实系统接单量,在我发布时候,就一直在持续降低,只是运维人员和我都没有关注到,期间大概持续了半个小时。

下午研发部门负责人,就召开了组内会议,告知了此次事故产生的影响和后期注意事项。由于对业务侧产生的影响较大,我作为第一责任人写了回溯报告,还向公司CTO进行了汇报。

鉴于我还处于新员工阶段,此项目也是刚刚接手,公司对事故没有进行公开处理,只是今年好的考评已与我无缘。

事故原因

直接原因:

  • 发布的版本没有拉取master分支最新的代码,导致之前上线的功能不可用 间接原因:
  • 和团队信息没有拉齐,版本发布时,其它小伙伴之前发布的代码没有合并到master分支
  • 测试验证不充分,连基本的测试场景都没有覆盖到
  • 运维人员也不够负责,发布期间连监控大盘也不关注
  • 上线发布的机制缺失,代码评审,发布评审都没有

事故总结

谁发布谁负责,虽然其它环节也有责任,但是主要责任依旧是研发人员。基于此次事故,个人经验沉淀。

  • 发布版本要通知,发布代码要评审
  • 发布项目对上下游的影响,要非常清楚
  • 监控大盘的各个业务指标要了解
  • 核心链路的发布必须先灰度
  • 发布出现异常有兜底措施

大家都有什么线上事故的经验,欢迎评论交流