伴随着海量请求、节假日峰值流量和与日俱增的系统复杂度一块儿出现的,颇有多是预料之中以及意料以外的各类故障。在不少状况下,因为事故处理预案的缺失或者预案自己的不可靠,以及开发人员故障处理经验的缺失,形成在各类报警之中自乱了阵脚,从而贻误了最佳战机。特别是一些平时线上没出现过的异常故障,一旦忽然出现,每每措手不及。html
系统是否足够健壮?是否有足够的能力应对故障的发生?当面临故障时会出现什么行为?咱们并不但愿真正线上出现故障时才去验证这些问题,这样风险太大,成本太大。因此但愿在线上环境隔离真实流量的状况下,提早模拟产生各类任何可能发生的故障,来观察系统的反应,验证预期策略。数据库
总结一下,故障演练主要有如下几个目标:缓存
理想状况是达到以下流程化: 例行化故障演练、找出系统风险点、优化业务系统、产出可行有效的故障处理预案网络
故障演练是应用高可用能力测评的核心,一次完整的故障演练由演练的对象、对象发生的具体故障、应用的预期故障应对表现、对应用表现的实际观察和判断几部分组成。架构
演练的对象即演练的位置,能够针对应用自己,能够针对应用下游,也能够针对应用所在机器运维
常见的故障类型有如下一些:工具
故障类型 | 举例 |
---|---|
依赖RPC服务故障 | 超时/不可用 |
中间件故障 | Kafka 超时/不可用,Redis超时/不可用 |
基础设施故障 | 数据库超时/不可用,DNS 超时/不可用 |
机器故障 | CPU 满载,网卡流量满载,网络中断,机器宕机,机房断电,磁盘空间满载 |
异常流量 | 入口流量激增,流量掉零 |
也就是预案,针对每种要演练的故障状况,制定故障应对预案,预案模板参考:post
链路/场景 | 故障 | 能否演练 | 影响 | 应对预案 | 操做 SOP | 实施预案后的影响 | 预案解除条件 | 预案解除 SOP | 预案实施失败的应对方案 |
---|---|---|---|---|---|---|---|---|---|
这个能够在监控系统上观察应用的各项指标表现,好比异常打点,流量打点,业务曲线,机器性能等一系列可能受故障影响的地方。性能
针对每种要演练的故障状况,制定故障应对预案优化
肯定所制定故障应对预案确实生效,即:启动预案后,确实能减少所针对故障的影响范围
肯定故障发生时期业务流程按预期运转(经过业务指标、埋点监控、相关的业务链路追踪工具肯定)
肯定应用机器的负载指标在预期范围内(经过各类基础工具的告警肯定) (根据自身业务特色设置更多的检查点)
根据评估出的影响范围通知相关业务应用 RD、运维 RD、基础组件 RD。通知内容要素:
推荐作法: 将全部相关人员拉入一个工做群,群名「XXX应用故障演练」,在群里发送故障演练通知、组织协同
将录制的线上流量逐步加压回放到故障演练的发起应用中的无真实流量机器
开启应用的故障模拟开关,观察故障影响 注意:为确保不影响真实流量,仅对染色流量发生故障
启动应用的故障应对预案
是否达到预期目标 预案有无生效 业务流程是否按预期运转 机器负载是否正常
是否有预期以外的现象发生
关键指标(业务指标、机器负载指标)收集整理
整理后续改进点
须要把故障以场景化的方式沉淀,以可控成本在线上模拟故障,让系统和开发人员平时有更多实战机会,加速系统、工具、流程、人员的进步。
<常态化,制定演练周期>
故障演练的后续工做主要会关注在如下方向:演练常态化、故障标类化、演练智能化。
用常态化的演练驱动稳定性进步,丰富更多的故障场景,定义好最小故障场景和处理手段;基于架构和业务分析的智能化演练,沉淀行业故障演练解决方案。
<"todo">
原文连接:www.jackielee.cn/posts/6fb69…