GH GambleHub

Chaos Engineering:系统的可持续性

Chaos Engineering: 系统的可持续性

1)为什么溷沌工程

目的是通过实验而不是单词和图表来证明原型体系结构的稳定性。我们故意制造受控故障,以便:
  • 检验有关系统行为的假设并验证SLO;
  • 发现隐藏的SPOF,不正确的taymout/retrai,级联效应;
  • 训练团队:游戏日,运行手册,通讯;
  • 形成"默认可持续性"而不是"希望更好"的文化。

重要的是:Chaos Engineering ≠"打破一切"。这是一种科学方法:steady-state →假设→实验→结论→改进。

2)实验的基本周期

1.Steady-state(基线): 哪个SLI稳定?(例如,99岁的≤500 ms的成功。95%).

2.假设: 如果失去一个AZ,p95将增加<10%,并且≥99可用性。9%.

3.实验:有计划的folt,带有有限的blast radius和停止标准。
4.观察:度量/跟踪器/logi,burn-rate SLO,商业SLI(例如成功存款)。
5.改进:捕获发现,更改时间限制/路由,更新运行手册。
6.自动化/倒退:我们在时间表中重复,我们在CI/CD和游戏日日历中添加。

3)安全栏杆(安全第一)

Blast radius:从狭窄开始-单个pod/实例/路线/namespace。
Guardrails:在SLO燃烧率(快速/缓慢),后退限制,QPS限制,事件预算上。

停止条件: "如果error-rate> X%或p99> Y ms N分钟-立即停止和滚回。"

窗口:通话工作时间,通知的摊牌,冷冻版本。
通讯:IC/Tech lead/Comms,清晰的渠道(战争室),消息模板。

4)失败类别和假设思想

网络:延迟/jitter/损失,部分端口下降,服务/PSP之间的"翻转"通信。
编译器/节点:进程杀死、CPU过热、文件描述符用尽、连接池狭窄。

存储和DB: 光盘后端的增长,lag复制,停止一个阴影/领导,分裂脑.

依赖性:外部API降级,提供商限制,5xx/429激增。

变更管理: 发行失败,幻灯片不好,部分滚动.

外围:CDN降级,DNS/Anycast漂移,WAF/机器人保护失败。
区域/AZ:完全损失或"部分"事件(稍微更糟且不可预测)。

5)工具和技术

Kubernetes: Chaos Mesh, Litmus, PowerfulSeal, kube-monkey.

云:AWS Fault Injection Simulator (FIS),云端的Fault Domains。
网络/代理:Toxiproxy (TCP毒药),tc/netem, iptables, Envoy fault (delay/abort), Istio fault injection。
过程/节点:"stress-ng",cgroups/CPU-throttle,disk fill。
流量路由:GSLB/DNS重量,用于假冒检查的金丝雀/蓝绿色切换。

6)脚本示例(Kubernetes)

6.1 路线上延迟/abort (Istio VirtualService)

yaml apiVersion: networking. istio. io/v1alpha3 kind: VirtualService metadata: { name: api-chaos }
spec:
hosts: ["api. internal"]
http:
- route: [{ destination: { host: api-svc } }]
fault:
delay: { percentage: { value: 5 }, fixedDelay: 500ms }
abort: { percentage: { value: 1 }, httpStatus: 503 }

假设: 客户端taymauts/retrai和CB将保持p95 <300 ms和error-rate <0。5%.

6.2 Pod Kill (Chaos Mesh)

yaml apiVersion: chaos-mesh. org/v1alpha1 kind: PodChaos metadata: { name: kill-one-api }
spec:
action: pod-kill mode: one selector:
namespaces: ["prod"]
labelSelectors: { "app": "api" }
duration: "2m"

假设:平衡器和HPA可补偿单个实例的损失,而不需要p99> 20%的增长。

6.3网络溷乱(延迟到数据库)

yaml apiVersion: chaos-mesh. org/v1alpha1 kind: NetworkChaos metadata: { name: db-latency }
spec:
action: delay mode: all selector: { namespaces: ["prod"], labelSelectors: {"app":"payments"} }
delay: { latency: "120ms", jitter: "30ms", correlation: "25" }
direction: to target:
selector: { namespaces: ["prod"], labelSelectors: {"role":"db"} }
mode: all duration: "5m"

假设:池/taymout/缓存将减少影响;p95付款将保留≤ SLO。

6.4磁盘填充

yaml apiVersion: chaos-mesh. org/v1alpha1 kind: IOChaos metadata: { name: disk-fill-logs }
spec:
action: fill mode: one selector: { labelSelectors: {"app":"ingest"} }
volumePath: /var/log size: "2Gi"
duration: "10m"

假设:在路线退化之前,定位/配额/异位数的轮换将起作用。

7)K8s外实验

7.1 Toxiproxy(本地/集成)

bash toxiproxy-cli create psp --listen 127. 0. 0. 1:9999 --upstream psp. prod:443 toxiproxy-cli toxic add psp -t latency -a latency=200 -a jitter=50 toxiproxy-cli toxic add psp -t timeout -a timeout=1000

7.2 Envoy HTTP故障(周长/mesh)

yaml fault:
delay: { fixed_delay: 0. 3s, percentage: { numerator: 10, denominator: HUNDRED } }
abort: { http_status: 503, percentage: { numerator: 1, denominator: HUNDRED } }

7.3 AWS FIS(想法示例)

Auto Scaling Group的"杀死"N% EC2实验,人为地提高EBS-latency,并在单个AZ中禁用NAT-GW。
根据CloudWatch SLO度量标准的内置停止标准。

8)混乱期间的观察度量

SLO/SLI: fraction of good requests, p95/p99, burn-rate.

RED模型沿着关键路线(Rate, Errors, Duration)。
池:等待p95连接,utilization。
DB:lag复制品,锁定,漂移p95查询。
网络:retransmits,RTT,dscp/ecn行为。
业务SLI:交易成功(存款/支票),回报/错误百分比。
跟踪:选择性跟踪(exemplars),发布注释的相关性。

9)与SLO/Error-budget的集成

在错误预算内规划实验:溷乱不应"扰乱"季度目标。
Burn-rate alerta作为自动杀手开关。
报告:"多少预算被烧毁","steady-state的哪些缺点"。

10)游戏日(练习)

剧本:简短的传说(例如"东地区丢失"),注射步骤,SLO目标,角色,时间。
评分:RTO/RPO实际,通信质量,运行簿正确性。
复古:有所有者和时间表的改进列表,更新文档/dashbords。

11)自动化和CI/CD

Smoke-chaos:每次发布时都会进行短暂的堆迭测试(例如,每条路线1 pod-kill+200毫秒延迟)。
每晚/每周:报告较重的场景(5-15分钟)。
促销门:如果p95/错误>金丝雀的阈值是自动回滚。
实验目录存储库(YAML+runbook+SLO-thresholds)。

12)反模式

"打破无栏杆":没有停止标准,没有呼叫→真正事件的风险。
一次性促销而不是过程。
没有脚步状态的混乱:目前尚不清楚什么可以算作成功/失败。
注射延迟时,多余的回火→ DDoS。
忽略业务SLI:付款/订单失败时的"technar"成功。
缺乏后期分析和改进的所有者。

13)实施清单(0-45天)

0-10天

定义steady-state SLI(定制+业务)。
选择工具(Chaos Mesh/Litmus/Toxiproxy/FIS)。
描述栏杆:爆炸射线,停止标准,窗口,角色。

11-25天

启动第一个实验:pod-kill, 100-200毫秒延迟至关键的apstream, drop 1%数据包。
自定义burn-rate alerta,将kill-switch与停止条件相关联。
举办第一个游戏日,收集复古和小说。

26-45天

添加AZ/依赖级别脚本(外部PSP, DD-lag)。
自动化舞台上的夜间混乱;准备"季节性"脚本。
实验目录和指导/SRE的定期报告。

14)成熟度量

≥80%的关键路线具有描述的实验和步进状态度量。
自动杀手开关在超过p99/error-rate阈值时触发。
每季度-AZ/区域级别的游戏日;≥1次/多月-目标依赖情景。
MTTR在改进周期后下降,"释放↔事件"相关性降低。
实际故障中"意外"跌落的比例→趋于零。
Dashbords以KPI(burn-rate,恢复时间,成功的DR活动比例)的形式显示"弹性"。

15) guardrails和stop触发器的示例

停止: 'http_req_failed> 1%'3分钟,'p99> 1000 ms' 3窗口,'deposit_success <99。5%`.

降低爆炸射线:自动回滚清单,恢复GSLB重量,禁用故障注射。
停止命令:单个按钮/脚本,并设置原因。

16)文化和过程

混乱是SRE节奏的一部分,不是"极端"。
透明的报告、漏洞识别、纠正措施。
呼叫培训,与客户/合作伙伴进行通信模拟。
与SLA/SLO和预算挂钩:溷乱应该增加而不是破坏可靠性。

17)结论

Chaos Engineering将"九号希望"转变为可证明的可持续性。制定步进状态,放下栏杆,打破小而可控的栏杆,观察SLO和商业SLI,捕捉并自动化改进。然后,真正的失败将成为事件驱动的:可预测的RTO,受保护的错误预算以及团队在不惊慌的情况下行动的意愿。

Contact

联系我们

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

开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

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

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