突袭演练实战经验

背景

随着酷家乐业务快速成长,用户对于服务的稳定性要求也越来越高,再加上业务复杂度与日俱增,发生线上故障时,由于缺失合理预案、研发人员缺少应急经验,各种报警满天飞,导致自乱阵脚,延长故障持续时间,导致故障无法快速止血。

系统是否健壮?是否有完善且合理的应急预案?研发人员是否掌握基础应急止血能力?能否根据问题现状快速定位出故障根因?等等一系列问题需要有合理的手段和方法,早于线上故障发生前,进行锻炼和验证。

什么是突袭演练?

突袭演练是借鉴红蓝攻防的概念,以一方攻击目标业务服务,随机注入故障,即蓝方;另一方进行防守,即红方。在酷家乐突袭演练中,主办方和业务对接人作为蓝方,承担整个突袭计划的设计和执行;在不知情的情况下注入业务异常,由业务线技术支持、研发、测试等核心演练目标对象作为红方,进行防守应急,直至故障恢复。

突袭演练的目标是什么?

  • 提升服务稳定性,降低高P故障发生
  • 验证服务容灾能力和预案的合理性
  • 锻炼团队应急能力,并提升止血速度和问题分析能力

如何设计一个适合演练的故障?

故障是突袭演练的重要输入和主要载体,演练全程围绕故障展开进行的,一个故障的好坏决定整场演练的效果,如果故障过于失真可能导致没有演练价值或者演练过早结束。什么样的故障才是适合做突袭演练的?什么样的故障才能满足当前团队的演练目的?经过一段时间的探索和尝试,最终明确以下故障设计指标:

  • 故障符合实际业务可能面临的问题,尽可能真实;
  • 需存在用户可感知的业务异常;
  • 故障具有一定持续性、可分析性等。

结合故障设计指标,即可圈定一些常用故障场景(如下),选择适合单个故障场景或多个故障场景进行组合,并附加其他干扰因素,尽可能模拟线上真实场景,扩大问题影响面,增加定位分析难度。

如何让一场突袭演练自主运转起来?

线下突袭演练和线上真实故障的应急还是存在实质性的差异,不仅仅包含故障上的差异,还缺少一些重要环节,例如实际用户流量、问题上报环节等,且线下不稳定因素较多,可能导致演练故障不能被识别获取,或无法让故障很好的持续。现在酷家乐具备问题上报&处理能力的工单系统、详细的故障应急流程体系和故障注入能力的混沌工程平台,如何将三者串联起来、并明确定义各个角色的职责规范、补齐相较于线上故障应急中缺失的环节是我们迫切需要解决的问题。

工单系统相关能力

平台具备的功能:

  • 问题上报
  • 故障应急(通知、拉群、进度跟进等)
  • 故障复盘、事后改进跟进等

故障工单处理流程分析:

  • 用户上报故障->技术支持处理工单,判定故障有效性、严重程度和故障归属→确定为有效故障后发起应急->业务线接收故障,并进行应急止血->故障修复,应急结束->工单流转故障单→故障复盘,事后改进任务跟进。

混沌工程相关能力

当前平台具备:

  • 基础资源、服务维度等故障模拟能力
  • 计划管理、任务编排、执行历史、执行结果记录等管理能力

通过分析了解两个平台能力和相关流程规范,由混沌工程承担演练任务的管理、故障注入、复盘打分等职责,工单系统主要承担故障应急通知、信息同步等职责,基于平台和人员的职责划分,我们最终制定了以下流程和角色职责规范:

  • 由活动策划和业务对接人共同承担故障和演练计划的制定
  • 由混沌工程平台承担故障模拟和问题上报的职责
  • 技术支持接收到演练故障工单后,按照线上故障应急流程,发起应急,业务线进行响应
  • 最后根据本次演练进行故障复盘和应急打分等

如何让突袭演练形成闭环,并发挥最大作用?

除了提前制定好各个角色职责规范和流程规范、确保演练能够自主运转下去之外,我们还需要检测衡量本次演练是否达到我们想要的效果。首先我们需要明确,我们为什么要做突袭演练?我们演练的核心目的是通过突袭演练提升团队应急止血、问题定位能力,从而降低高P故障的发生频率,围绕该目标我们可以根据流程和角色职责等抽取出重点考核内容:

实战案例分享

故障设计

以历史故障“登录接口超时导致全站登录失败”为素材,来设计演练所需故障。

该历史故障根因是灰度某类路由配置功能异常,使得全部流量打到一台灰度机器中,流量超出单机最大承受能力,出现大批量登录相关接口超时。

故障模拟方案:

  • 由于该灰度路由配置问题已解决,无法使用原配置类型,所以采用其他相似功能代替,将全部流量导入到目标机器上;
  • 使用混动工程平台给目标机器注入网络延迟异常来模拟接口超时现象。

故障业务表现

  • 已登录商家后台无法进入,方案列表无法正常展示,用户中心的所有功能不可用;
  • 未登录用户,进行登录操作时会出现登录失败。

演练时间线

演练难点

  • 目标异常节点为底层中台服务,且业务异常表现在sit环境,而异常机器非sit环境
  • 线下流量较少,不易感知流量全部导到其他环境
  • 线下监控报警杂乱,有效信息容易被淹没

演练效果

  • 值班长缺少backup机制,导致应急刚开始缺少值班长进行统筹应急;
  • 演练期间由于研发人员缺少应急经验,在发现简单的应急措施不能满足止血诉求时,有点自乱阵脚,未能采取正确的问题定位措施,导致故障持续时间较长
  • 应急操作和定位结果信息同步不及时,不便于应急节奏的把控和指导。

突袭演练的收益

重点以考核信息流转、故障应急统筹、故障分析、应急止血预案合理性&操作熟练度等能力,最终达到提高应急止血效率的目的,我们在去年11月-12月份共组织的15场演练,覆盖了9个核心业务线。

演练整体效果非常好,共发现30个应急规范类问题、4个监控类问题,产出后续优化action58个,其中包含服务稳定性、流程规范、预案制度等优化;特别是复杂的故障场景,更具备演练的价值,对于团队应急能力的锻炼效果也更好。

除此之外,演练中存在较多通病问题,例如:

  • 在新人较多的情况下,信息流转不畅通;
  • 大部分对于三板斧和常规应急止血操作不熟练等

推荐阅读