如何作好一次故障演练?

为何要进行故障演练?

伴随着海量请求、节假日峰值流量和与日俱增的系统复杂度一块儿出现的,颇有多是预料之中以及意料以外的各类故障。在不少状况下,因为事故处理预案的缺失或者预案自己的不可靠,以及开发人员故障处理经验的缺失,形成在各类报警之中自乱了阵脚,从而贻误了最佳战机。特别是一些平时线上没出现过的异常故障,一旦忽然出现,每每措手不及。html

系统是否足够健壮?是否有足够的能力应对故障的发生?当面临故障时会出现什么行为?咱们并不但愿真正线上出现故障时才去验证这些问题,这样风险太大,成本太大。因此但愿在线上环境隔离真实流量的状况下,提早模拟产生各类任何可能发生的故障,来观察系统的反应,验证预期策略。数据库

总结一下,故障演练主要有如下几个目标:缓存

  1. 确保系统按咱们预想的方式应对故障
  2. 寻找系统中未预料到的弱点
  3. 寻找其余提升系统鲁棒性的方式来避免事故实际发生

理想状况是达到以下流程化: 例行化故障演练、找出系统风险点、优化业务系统、产出可行有效的故障处理预案网络

什么是故障演练?

故障演练是应用高可用能力测评的核心,一次完整的故障演练由演练的对象、对象发生的具体故障、应用的预期故障应对表现、对应用表现的实际观察和判断几部分组成。架构

(1)演练的对象

演练的对象即演练的位置,能够针对应用自己,能够针对应用下游,也能够针对应用所在机器运维

(2)对象发生的具体故障

常见的故障类型有如下一些:工具

故障类型 举例
依赖RPC服务故障 超时/不可用
中间件故障 Kafka 超时/不可用,Redis超时/不可用
基础设施故障 数据库超时/不可用,DNS 超时/不可用
机器故障 CPU 满载,网卡流量满载,网络中断,机器宕机,机房断电,磁盘空间满载
异常流量 入口流量激增,流量掉零

(3)应用的预期故障应对表现

也就是预案,针对每种要演练的故障状况,制定故障应对预案,预案模板参考:post

链路/场景 故障 能否演练 影响 应对预案 操做 SOP 实施预案后的影响 预案解除条件 预案解除 SOP 预案实施失败的应对方案

(4)对应用表现的实际观察和判断

这个能够在监控系统上观察应用的各项指标表现,好比异常打点,流量打点,业务曲线,机器性能等一系列可能受故障影响的地方。性能

3、故障演练怎么作?

故障演练前

(1)检查必备基础能力

  • 须要应用具有在业务链路中完整传递染色标记流量的能力
  • 须要应用具有模拟下游依赖服务故障的能力
  • 须要应用具有请求流量录制\回放\隔离的能力

(2)肯定故障演练范围、环境

  1. 要对哪些请求流量注入故障?
  • 决策原则: 选择核心业务链路的请求流量
  • 推荐作法: 链路分析,标记出核心业务链路
  1. 要模拟哪些下游服务的故障?
  • 决策原则: 此下游服务发生故障的机率大 此下游服务发生故障时影响的业务范围广 此下游服务发生故障的会影响核心业务 此下游服务发生故障时能制定出可行的应对方案
  • 推荐作法: 依赖链路分析,肯定业务链路中依赖了哪些下游服务 反向依赖分析,肯定下游服务故障会影响哪些业务链路,评估影响的业务范围
  1. 在哪一个应用环境模拟故障?
  • 决策原则: 所选环境越接近线上生产环境越好
  • 推荐作法: 在线上无真实流量的机器作故障演练(关闭外部真实流量)

(3)回放流量隔离和影子表隔离

  • 流量隔离
  • 影子表隔离

(4)制定故障应对预案

针对每种要演练的故障状况,制定故障应对预案优化

  • 预案制定原则: 预案得有针对的故障或风险类型,能够是一个或多个 得肯定预案在什么状况下才能启动/解除,有什么前置要求条件 预案得确实有效,即:启动预案后,确实能减少所针对故障的影响范围 肯定预案开启后会形成的额外影响,不能引起新的故障

(5)配置故障

(6)肯定演练目标

  1. 肯定所制定故障应对预案确实生效,即:启动预案后,确实能减少所针对故障的影响范围

  2. 肯定故障发生时期业务流程按预期运转(经过业务指标、埋点监控、相关的业务链路追踪工具肯定)

  3. 肯定应用机器的负载指标在预期范围内(经过各类基础工具的告警肯定) (根据自身业务特色设置更多的检查点)

(7)培训参与的内部人员

(8)通知涉及的外部人员

根据评估出的影响范围通知相关业务应用 RD、运维 RD、基础组件 RD。通知内容要素:

  • 故障演练的发起应用
  • 故障演练起止时间
  • 故障演练应用集群环境
  • 对每一个相关应用的影响预估。好比:对下游依赖服务的调用峰值 QPS、上游服务收到的异常请求比率

推荐作法: 将全部相关人员拉入一个工做群,群名「XXX应用故障演练」,在群里发送故障演练通知、组织协同

故障演练中

  1. 将录制的线上流量逐步加压回放到故障演练的发起应用中的无真实流量机器

  2. 开启应用的故障模拟开关,观察故障影响 注意:为确保不影响真实流量,仅对染色流量发生故障

  3. 启动应用的故障应对预案

  • 观察故障影响有无按预期消除或减少影响范围
  • 观察各项业务指标
  • 观察机器负载指标
  • 验证业务流程按预期运转(好比:取消展现XX模块、再也不请求YY接口)

故障演练后

  1. 现场清理
  • 流量关闭、流量隔离任务关闭
  • 故障模拟开关关闭、预案关闭
  • 清理演练期间写入的数据、缓存、日志等(可选)
  • 演练期间操做改动的业务配置开关复位
  • 重启应用
  • 通知相关人员演练结束
  1. 演练报告与总结
  • 是否达到预期目标 预案有无生效 业务流程是否按预期运转 机器负载是否正常

  • 是否有预期以外的现象发生

  • 关键指标(业务指标、机器负载指标)收集整理

  • 整理后续改进点

故障演练何时作?

须要把故障以场景化的方式沉淀,以可控成本在线上模拟故障,让系统和开发人员平时有更多实战机会,加速系统、工具、流程、人员的进步。

<常态化,制定演练周期>

故障演练后续规划

故障演练的后续工做主要会关注在如下方向:演练常态化、故障标类化、演练智能化。

用常态化的演练驱动稳定性进步,丰富更多的故障场景,定义好最小故障场景和处理手段;基于架构和业务分析的智能化演练,沉淀行业故障演练解决方案。

<"todo">


原文连接:www.jackielee.cn/posts/6fb69…

更多精彩请扫描关注公众号:

相关文章
相关标签/搜索