GH GambleHub

Chaos Engineering

1)基本原则

Steady State作为原始假设。明确定义规范(例如: p95 <200 ms, error rate <0。3%,成功率为>99.5%).

隔离变量。在可能的情况下一次改变一个因素,以因果关系效果和改善。
度数。从安全环境中的小幅度开始→我们扩大了覆盖范围和强度。
Guardrails.SLO/Alert/错误预算中的显式停止条件。
可重复性。实验必须确定性地复制(脚本/清单/IaC)。
道德与安全。风险实验中没有真实的个人数据和财务交易。

2)什么是"稳定状态"

Steady State是一组可观察到的度量,描述了用户和业务不变量的价值:
  • p50/p95/p99关键尾矿。
  • 成功交易和关键路径转换的比例。
  • Error rate,taymauts,"shed"查询比例(饱和时切断)。
  • 自我修复率(MTTR),抗逆转(无风暴)。
  • 域不变量:不存在"资产负债表中的缺点",一次执行付款,报告日的一致性等。

3)注射目录(我们打破了)

网络:延迟,抖动,丢失/复制,带宽限制,TLS悬崖,DNS翻转。
计算:CPU过载,内存/GC压力,描述符用尽,clock skew。
存储:高p95 I/O,ENOSPC,领导者/复制副本故障,分裂大脑和挥之不去的fsync。
依赖性:5xx/429,"缓慢成功",外部API降解,限额。
数据:消息/跳过、订单外、"肮脏"记录、版本冲突。
操作:未能成功发布/config、错误字幕、过期证书、密钥轮换。
人和过程:负责人无法进入,手动应用程序延迟,不正确的运行簿。

4)实验设计(模板)

1.假设: "在p99 主要API的+300毫秒货币服务下<450毫秒,打开断路器,≤ 15分钟前给出样式响应。"

2.注射:故障轮廓(类型/振幅/持续时间)和目标轮廓。

3.度量/标记: 标记'chaos。experiment_id`, `phase=inject|recover`.

4.Guardrails: abort在'error_rate> 2%'或p99> SLA × 2超过1分钟。
5.结果/结论:观察,错误,改进,工作计划和重新运行列表。

5)可观察性: 必须做什么

Tracing:通过依赖性的查询路径;降级段被标记。
资源指标:CPU, heap/GC, FD, Disk IOPS/lat, network bandwidth,队列深度。
业务指标:转换/交易成功,被抵消交易的份额。
事件的标记:破发者的发现/关闭,撤退及其预算,DB领导者的切换。
实验小组:带有guardrails阈值和"红色按钮"流产的实时dashboard。

6)Guardrails和安全

技术:上限错误率/上限,成功运营比例下降,DLQ增长。
组织:时间窗口,电话参与,"一个区域-一个实验"原则。
数据/合规性:只有合成或非人格化的套件;禁止导致违反监管的测试。
回滚:完成的滚回/无障碍标志/软阻塞流量过程。

7)必须表现出的可持续性模式

Taymout预算和jitter's retrai(无风暴)。
半开路(半开路)和指数恢复电路断路器。
Bulkheads:按临界值隔离池(付款vs分析师)。
Backpressure和rate-limit:可预测的低优先级截止。
同步缓存,防止"预热风暴"。
副作用和具有补偿作用的传奇的幂等性。
用于数据恢复的法定量,feylover和抗熵。

8)脚本示例(草图)

8.1慢成瘾(YAML)

yaml experiment: slow-downstream target: svc:api inject:
dependency:
name: currency mode: add_latency p95_ms: 300 duration: 10m guardrails:
error_rate: "< 1. 5%"
p99_latency: "< 450ms"
expectations:
breaker_open: true stale_data_served: "<= 15m"

8.2 DB领导者的损失

注射:停止领导/强制连任。
等待:暂时禁止记录,从法定人数读取,WAL/Otbox安全,自动复制恢复,没有双重记录。

8.3 ENOSPC在日志光盘

注射:磁盘填充率高达95-100%。
等待:紧急轮换日志,保护关键日志,禁用非关键眼镜,警报和自动修复。

8.4爆破流量+着陆

注射:× 3 RPS 5分钟热内含素。
预期:丢弃低优先级,稳定p95"核心",没有回避级联。

9) CI/CD中的自动化

每个版本的牛排中都有Chaos-smoke(安全振幅上的短注射)。
夜间运行通过实验目录(矩阵服务×故障类型)。
门:如果"稳定性低于阈值"(例如,成功后退的比例低于95%),则会阻止发布。
文物:报告,草图,CPU/heap长笛图,指标和configs的快照。

10)游戏日(游戏日)

带有"现场"场景的常规指挥演习:
  • 角色:实验主持人,度量观察者,回滚操作员,业务代表。
  • 脚本:缓存降级、部分AZ/区域故障、"不良发布"、外部提供商不可用。
  • 结果:在跑步簿中发现的空白,差速器的改进,SLO调整和撤退预算。

11)数据、事件和ML溷乱

数据流:重复测试,遗漏,订单出局,延迟;测试等效算盘和DLQ策略。
存储:索引降级、热分区、锁定冲突、故障复制。
ML: Fitch Store延迟,回滚到基线模型,降低输入质量(drift)-系统必须"轻轻钝"而不是掉落。

12)反模式

没有可观察性的溷乱:你是"盲人",结论是投机性的。
立即注射,没有堆栈和鹅毛笔。
"一个大实验"对一切同时发生-目前还不清楚到底是什么工作。
杂乱无章的混乱行动,没有假设,在小说之后回避。
仅专注于基础架构-被遗忘的业务不变性。
忽略人/过程:Alerts, on-call, runbook是系统的一部分。

13)实践的成熟度(模型)

1.Ad-hoc:一次性注射局部。
2.舞台混乱:脚本目录,可重复运行,行进板。
3.发行混乱:每个发行版,门和报告中的烟雾混乱。
4.有限制的散装溷乱:交通拥挤,严格的护栏,准备回滚。
5.持续稳定性:自动实验,SLO控制,改进为工作流程。

14)与建筑实践集成

抗药性测试:溷沌实验补充了断层注射和退化场景。
负载测试:组合的负载+故障实验检测级联和风暴后。
Policy as Code/RBAC/ABAC: guardrails、回滚步骤和限制作为策略。
同意/隐私管理:不允许违反数据处理模式的实验。
Geo体系结构:对区域伪造者的混沌检查以及将数据绑定到辖区。

15)迷你食谱(伪代码)

Breaker+降解


if breaker. open():
return serve_stale(cache. max_age=15m)
try:
res = call(dep, timeout=250ms)
return res except Timeout:
breaker. trip()
return serve_stale()

限量+着色


if cpu. load() > 0. 85 or queue. depth() > HIGH:
if req. priority < HIGH: return 503_SHED limiter. acquire()

异位副作用


key = "payout:"+external_id if kv. exists(key): return kv. get(key)
res = side_effect()
kv. put(key, res, ttl=30d)
return res

16)建筑师支票清单

1.由Steady State和Guardrails定义?

2.是否有脚本目录(网络/CPU/存储/依赖性/数据/操作)?

3.可观察性是否涵盖资源,潜伏期,业务不变性?

4.Taymauts/retrai/breakers/limiters/bulkheads包括和参数化?

5.准备了运行手册和"红色按钮"?
6.牛排和夜间实验中有溷沌烟雾吗?
7.在游戏日中规定了"安全"窗口和角色?
8.实验是可复制的(IaC/脚本),结果是可转换的?
9.改进是由任务捕获的,正在进行转发?
10.涵盖了数据和ML流水线,不仅仅是HTTP?

二.结论

Chaos Engineering将"意外事件"转换为可预测的场景。抗药性假说,受控注射,强硬的guardrails,丰富的观察力和戒律是降低发布风险并增强对平台信任的工具。因此,该团队了解系统的边界,即使处于故障状态,也可以优雅地降级并快速将服务返回给用户。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

Telegram
@Gamble_GC
开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。