LLM混沌工程 本节摘要:LLM 的混沌工程在 2026 是它自己的学科。生产环境跑实验前的前置条件:已定义 SLI/SLO、可观测性(链路 + 指标 + 日志)、自动回滚、运行手册、值班。架构分四个平面:控制面(实验调度器)、目标面(服务/基础设施/数据存储)、安全面(护栏 + 中止 + 流量过滤)、可观测面(指标 + 链路 + 日志),外加把发现反馈进 SLO 调整的闭环。护栏是强制的:燃尽率告警在每日错误预算燃尽超预期 2 倍时暂停实验;抑制窗口 + trace-ID 关联用来给告警去噪。节奏:每周小金丝雀 + SLO 复盘;每月游戏日 + 复盘;每季度跨团队韧性审计 + 依赖映射。LLM 专属实验:内存过载、网络失败、provider 停机、畸形提示、KV 缓存驱逐风暴。
本节摘要:LLM 的混沌工程在 2026 是它自己的学科。生产环境跑实验前的前置条件:已定义 SLI/SLO、可观测性(链路 + 指标 + 日志)、自动回滚、运行手册、值班。架构分四个平面:控制面(实验调度器)、目标面(服务/基础设施/数据存储)、安全面(护栏 + 中止 + 流量过滤)、可观测面(指标 + 链路 + 日志),外加把发现反馈进 SLO 调整的闭环。护栏是强制的:燃尽率告警在每日错误预算燃尽超预期 2 倍时暂停实验;抑制窗口 + trace-ID 关联用来给告警去噪。节奏:每周小金丝雀 + SLO 复盘;每月游戏日 + 复盘;每季度跨团队韧性审计 + 依赖映射。LLM 专属实验:内存过载、网络失败、provider 停机、畸形提示、KV 缓存驱逐风暴。工具:Harness Chaos Engineering(LLM 衍生建议、爆炸半径下调、MCP 工具集成);LitmusChaos(CNCF);Chaos Mesh(CNCF Kubernetes 原生)。
对应原课程:Phase 17 · Lesson 24 ·
24-chaos-engineering-llm(原英文phases/17-infrastructure-and-production/24-chaos-engineering-llm/docs/en.md)。
阅读完本节,你应当能够:
传统栈的混沌测试已成熟。LLM 栈增加了新的失败模式。一个带毒字符的 4K token 提示让分词器卡住 12 秒。上游 provider 返回 429;你的网关重试;你的服务在重试放大后的并发上 OOM。突发负载下的 KV 缓存驱逐风暴引发重新预填充级联,饱和了算力。
这些都不会出现在单元测试里。混沌工程让你在用户之前发现它们。
在生产跑混沌前,不要缺:
缺任何一项,混沌就变成真事故。
控制面 —— 实验调度器(Litmus 工作流、Chaos Mesh schedule、Harness UI)。
目标面 —— 服务、Pod、节点、负载均衡器、数据存储。
安全面 —— 杀死开关、抑制窗口、爆炸半径限制、错误预算门。
可观测面 —— 常规指标 + trace-ID 关联,以区分混沌引发与自然故障。
反馈闭环 —— 发现反馈进 SLO 调整、运行手册更新、代码修复。
内存过载 —— 用高并发长上下文请求强制制造 KV 缓存抢占风暴。观察:服务是优雅降级还是崩溃?
网络失败 —— 切断推理网关与 provider 之间的连通。观察:降级是否在 SLA 内启动?(第 19 节)
Provider 停机模拟 —— OpenAI 100% 429。观察:路由是否故障转移到 Anthropic?(第 16、19 节)
畸形提示 —— 注入会卡住分词器的负载(如深度嵌套 unicode、超大 UTF-8 码点)。观察:单个请求是否会锁死一个 worker?
KV 驱逐风暴 —— 通过饱和 vLLM 块预算强制驱逐。观察:LMCache 是恢复还是服务退化?
第一个实验:稳态流量下 kill 一个解码副本 Pod。观察重路由与恢复。若安全有效,毕业到网络混沌。
第一个 LLM 专属实验:注入一个 provider 429 持续 5 分钟。观察降级。多数团队会发现他们的降级没被充分测过。
原课程 code/main.py 模拟三个带安全面门的混沌实验,报告哪些会触发燃尽率中止。下面给最小可读的燃尽率门骨架。
def burn_rate_gate(daily_budget, expected_burn_mult, current_burn): """燃尽率门:当前每日燃尽超预期倍数即暂停实验。 daily_budget: 每日错误预算(如 100 个错误) expected_burn_mult: 预期燃尽倍数阈值(典型 2.0) current_burn: 实验期间当日已燃尽的错误数 返回: (是否暂停, 原因) """ burn_rate = current_burn / daily_budget if burn_rate > expected_burn_mult: return True, f"燃尽率 {burn_rate:.2f} > 预期 {expected_burn_mult},暂停实验" return False, f"燃尽率 {burn_rate:.2f} 在预算内,继续" # 案例:三个实验注入不同故障强度 experiments = [ ("畸形提示(单 worker 锁死)", current_burn=120), # 每日预算100,燃尽1.2 ("KV 驱逐风暴(突发负载)", current_burn=250), # 燃尽2.5 → 触发 ("provider 429(降级生效)", current_burn=40), # 燃尽0.4 ] for name, burn in experiments: pause, reason = burn_rate_gate(daily_budget=100, expected_burn_mult=2.0, current_burn=burn) print(f"[{name}] 暂停={pause}: {reason}") # KV 驱逐风暴会触发燃尽门并被安全面中止
💡 trace-ID 关联是混沌告警去噪的关键:给每个实验引发的错误打上实验标签,值班就能一眼区分「这是混沌」与「这是真故障」,否则你会被自己的实验淹没。
| 工具 | 许可 | 模式 | 卖点 | 适合 |
|---|---|---|---|---|
| Harness Chaos Engineering | 商业 | AI 辅助 | LLM 衍生实验建议、爆炸半径下调、MCP 工具集成 | 想要 AI 推荐与最小化手动编排的团队 |
| LitmusChaos | CNCF 毕业 | K8s 工作流 | 成熟、社区大、chart 丰富 | Kubernetes 原生、想避开厂商锁定 |
| Chaos Mesh | CNCF 沙箱 | K8s CRD | CRD 风格声明式、上手快 | 偏好 CRD 声明式配置 |
| Gremlin | 商业 | 通用 | 故障类型支持广 | 想要商业支持与广覆盖 |
| AWS FIS / Azure Chaos Studio | 托管云 | 云原生 | 与云栈集成深 | 已锁定单一云的团队 |
心法:K8s 原生选 LitmusChaos 或 Chaos Mesh;想要 AI 辅助选 Harness;已锁定单一云选 FIS/Chaos Studio。无论哪个,五个前置条件缺一不可。
本节产出 outputs/skill-chaos-plan.md(原课程目录)。给定技术栈与成熟度,它产出:
跑通模拟器:运行 code/main.py。哪个实验触发燃尽门,为什么?
设计首五实验:为基于 vLLM 的 RAG 服务设计前五个混沌实验,含成功标准。
燃尽归因:你的燃尽率告警暂停了一个实验。如何判定根因——混沌还是自然故障?
生产 vs staging:论证混沌该在生产跑还是只在 staging。何时生产是正确答案?
LLM 专属失败:列出三种通用网络混沌无法复现的 LLM 专属失败模式。
下一节,我们转入安全——密钥管理、API key 轮换、审计日志、护栏,以及 2026 年 Vercel 供应链攻击教给我们的 CI/CD 凭证卫生。