记一次重大事故处理
正在开会的我,手机突然收到密集报警,短信微信响个不停,我脑袋嗡一下,心想完了,平台出问题了。
我马上离开会议,飞奔到监控运行中心。
监控屏幕上全是红色警报,当值工程师告诉我平台所有服务宕机。
我的手机响个不停,我都直接挂断,然后告诉几个SRE(应用运维工程师)不要接任何人电话,专心分析问题,要在5分钟内定位根本原因,提供给我。
2分钟后我接通了CTO的电话,简单的汇报一下立即挂断,然后被他拉到一个高管电话会议之中。
一个项目总经理在会议怒吼,中断一分钟公司损失几十万。我很平静的回复他,激动也没用,他的信息对我们处理故障并没有实际帮助。
我要调动资源处理故障,所有人都要配合我,而不是指责我,有问题故障恢复后再说。
3分钟后,微信应急群炸锅,各产品线人员七嘴八舌,吵成一团。
我在微信群发话,谁在说与处理故障无关的话我就把他踢出去,一个部门经理问道,那我们怎么办?我淡淡的说,等。一个开发小伙发了霸气侧漏四个字以后,群安静了。
4分钟以后架构师向我报告问题根源,初步分析是多重原因导致的结构性平台崩溃。
主要原因是DDOS攻击,异常流量同时引发了搜索引擎爬虫集中抓取,应用层请求巨大不断重试不释放数据库链接,平台层资源枯竭引起了调度器混乱,分布式应用系统陷入混乱……
我当机立断,布置任务,启动一级应急预案,流量SRE修改WAF(防火墙)规则抵抗DDOS同时屏蔽所有蜘蛛,应用层SRE重启所有应用进程,平台层OP紧急注入备用资源扩容资源池,数据库DBA重置数据服务器连接……
7分钟后数据库恢复,8分钟后平台恢复,10分钟后WAF配置重载完成。11分钟后应急群里开始播报,核心业务恢复,A项目恢复,B项目恢复……15分钟后全部业务恢复服务。
事后复盘会上还有个部门总监想甩锅给我,他说,都是你们基础平台的问题连累了大家,你们一直出问题,应该承担责任。
我二话没说在投影上调出了他们项目组的数据,在几分钟之内几百万次调用请求,并且不断重试,不释放链接,拖垮了数据库。
我问他,你们开发程序就没有个资源保护机制吗?没有断路器吗?不会请求降级吗?不懂释放连接吗?一下把数据库资源池耗尽,这也是我的问题吗?他哑口无言。
我总结到,从这次事故来说,暴露出我们平台的各方面问题,咱们谁的瓜谁领,WAF防DDOS配置不完善是我们的责任我不推脱,资源池耗尽是我的问题。然后其他总监各自检讨自己的问题,应用开发太傻,资源调用不合理,要加上服务降级,没有重试抑制,需要断路保护……
最后CTO发话,他也有不可推脱的责任,过于追求功能快速迭代,忽视了安全机制和程序的强壮性,过于追求资源利用率,驳回了基础平台部的资源扩容申请……。
我说,这锅还是CTO才能背的动,别人实力不够呀。哄堂大笑。
经过这次暴露的问题,各部门加班加点整改,整个平台的综合素质上了一个台阶,再也没发生过类似问题。
遇到重大事故处理时,我的经验总结:
- 稳住自己的情绪,保持头脑冷静。
- 屏蔽无效干扰,一槌定音。
- 抓住核心矛盾,快速定位问题所在。
- 分析要全面,决策要科学,做事要果断。
- 调动一切资源全力以赴恢复生产。
- 有条不紊处理问题,不要忙中出错。
- 关键时刻要勇于担当,承担决策责任。
- 不要捂盖子,全面总结复盘整改问题。
刚进菊厂是网络工程师,负责数据中心的网络维护,三级故障2小时响应处理,二级故障1小时响应处理,一级故障15分钟响应处理,凌晨1点去现场属家常便饭。
处理一级故障,主管,总监电话不停的问进展,升级短信发送至副总裁。
经过一年的磨炼,从手忙脚乱到后来抽丝剥茧从容应对,环境锻炼人。