LLM混沌工程


文档摘要

LLM混沌工程 本节摘要:LLM 的混沌工程在 2026 是它自己的学科。生产环境跑实验前的前置条件:已定义 SLI/SLO、可观测性(链路 + 指标 + 日志)、自动回滚、运行手册、值班。架构分四个平面:控制面(实验调度器)、目标面(服务/基础设施/数据存储)、安全面(护栏 + 中止 + 流量过滤)、可观测面(指标 + 链路 + 日志),外加把发现反馈进 SLO 调整的闭环。护栏是强制的:燃尽率告警在每日错误预算燃尽超预期 2 倍时暂停实验;抑制窗口 + trace-ID 关联用来给告警去噪。节奏:每周小金丝雀 + SLO 复盘;每月游戏日 + 复盘;每季度跨团队韧性审计 + 依赖映射。LLM 专属实验:内存过载、网络失败、provider 停机、畸形提示、KV 缓存驱逐风暴。

LLM混沌工程

本节摘要: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)。

学习目标

阅读完本节,你应当能够:

  1. 列出混沌工程的五个前置条件(SLI/SLO、可观测性、回滚、运行手册、值班),并解释缺任何一项会让实践崩盘。
  2. 画出四个平面(控制、目标、安全、可观测)以及通向 SLO 的反馈闭环。
  3. 列举五个 LLM 专属实验(内存过载、网络失败、provider 停机、畸形提示、KV 驱逐风暴)。
  4. 给定技术栈,在 Harness、LitmusChaos、Chaos Mesh 之间选工具。

一、问题与直觉

传统栈的混沌测试已成熟。LLM 栈增加了新的失败模式。一个带毒字符的 4K token 提示让分词器卡住 12 秒。上游 provider 返回 429;你的网关重试;你的服务在重试放大后的并发上 OOM。突发负载下的 KV 缓存驱逐风暴引发重新预填充级联,饱和了算力。

这些都不会出现在单元测试里。混沌工程让你在用户之前发现它们。

二、核心概念

前置条件

在生产跑混沌前,不要缺:

  1. SLI/SLO —— 已定义的服务级指标与目标。
  2. 可观测性 —— 链路、指标、日志,接好仪表盘。
  3. 自动回滚 —— 第 20 节的策略 flag 回滚。
  4. 运行手册 —— 结构化的,第 23 节。
  5. 值班 —— 有人响应。

缺任何一项,混沌就变成真事故。

四个平面 + 反馈

控制面 —— 实验调度器(Litmus 工作流、Chaos Mesh schedule、Harness UI)。

目标面 —— 服务、Pod、节点、负载均衡器、数据存储。

安全面 —— 杀死开关、抑制窗口、爆炸半径限制、错误预算门。

可观测面 —— 常规指标 + trace-ID 关联,以区分混沌引发与自然故障。

反馈闭环 —— 发现反馈进 SLO 调整、运行手册更新、代码修复。

护栏是强制的

  • 燃尽率告警:每日错误预算燃尽超预期 2 倍即暂停实验。
  • 抑制窗口:实验期间在爆炸半径内静默非实验告警。
  • trace-ID 关联:所有实验引发的错误带标签,值班可去重。

五个 LLM 专属实验

  1. 内存过载 —— 用高并发长上下文请求强制制造 KV 缓存抢占风暴。观察:服务是优雅降级还是崩溃?

  2. 网络失败 —— 切断推理网关与 provider 之间的连通。观察:降级是否在 SLA 内启动?(第 19 节)

  3. Provider 停机模拟 —— OpenAI 100% 429。观察:路由是否故障转移到 Anthropic?(第 16、19 节)

  4. 畸形提示 —— 注入会卡住分词器的负载(如深度嵌套 unicode、超大 UTF-8 码点)。观察:单个请求是否会锁死一个 worker?

  5. KV 驱逐风暴 —— 通过饱和 vLLM 块预算强制驱逐。观察:LMCache 是恢复还是服务退化?

节奏

  • 每周 —— staging 里的小金丝雀实验,可能 5% 生产。
  • 每月 —— 针对特定场景的排期游戏日;跨团队出席;复盘。
  • 每季度 —— 跨团队韧性审计;依赖图更新。

工具

  • Harness Chaos Engineering —— 商业;AI 衍生实验建议;爆炸半径下调;MCP 工具集成。
  • LitmusChaos —— CNCF 毕业;基于 Kubernetes 工作流。
  • Chaos Mesh —— CNCF 沙箱;Kubernetes 原生 CRD 风格。
  • Gremlin —— 商业;支持广。
  • AWS FIS / Azure Chaos Studio —— 托管云服务。

从小开始

第一个实验:稳态流量下 kill 一个解码副本 Pod。观察重路由与恢复。若安全有效,毕业到网络混沌。

第一个 LLM 专属实验:注入一个 provider 429 持续 5 分钟。观察降级。多数团队会发现他们的降级没被充分测过。

你该记住的数字

  • 四个平面:控制、目标、安全、可观测。
  • 燃尽率暂停:每日预算燃尽 2 倍预期。
  • 节奏:每周金丝雀、每月游戏日、每季度审计。
  • 五个 LLM 实验:内存、网络、provider、畸形提示、KV 风暴。

三、从零实现:带安全门的混沌实验

原课程 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(原课程目录)。给定技术栈与成熟度,它产出:

  1. 前置条件核查:SLI/SLO、可观测性、回滚、运行手册、值班是否就位。
  2. 首个实验序列:从小开始——Pod kill → 网络延迟 → provider 429,每步设成功标准。
  3. 安全面配置:爆炸半径、燃尽率门、抑制窗口、trace-ID 标签。
  4. 节奏排程:每周金丝雀、每月游戏日、每季度审计的日历。
  5. 工具选择:依 K8s 原生/商业 AI/云原生偏好选工具。

六、练习

  1. 跑通模拟器:运行 code/main.py。哪个实验触发燃尽门,为什么?

  2. 设计首五实验:为基于 vLLM 的 RAG 服务设计前五个混沌实验,含成功标准。

  3. 燃尽归因:你的燃尽率告警暂停了一个实验。如何判定根因——混沌还是自然故障?

  4. 生产 vs staging:论证混沌该在生产跑还是只在 staging。何时生产是正确答案?

  5. LLM 专属失败:列出三种通用网络混沌无法复现的 LLM 专属失败模式。

本节要点回顾

  1. 五个前置条件:SLI/SLO、可观测性、自动回滚、运行手册、值班——缺一项混沌就变真事故。
  2. 四个平面:控制(调度)、目标(服务/基础设施)、安全(护栏/中止)、可观测(指标/链路),外加反馈进 SLO。
  3. 护栏强制:燃尽率告警(每日燃尽 2 倍预期暂停)、抑制窗口、trace-ID 关联去噪。
  4. 五个 LLM 实验:内存过载、网络失败、provider 停机、畸形提示、KV 驱逐风暴。
  5. 节奏:每周金丝雀 + SLO 复盘、每月游戏日 + 复盘、每季度跨团队韧性审计。
  6. 从小开始:第一个实验 Pod kill,第一个 LLM 实验注入 provider 429 五分钟。
  7. 工具:Harness(AI 辅助)、LitmusChaos(CNCF 毕业)、Chaos Mesh(CNCF 沙箱 CRD)、Gremlin、FIS/Chaos Studio。
  8. 分词炸弹与 KV 风暴是 LLM 独有:通用网络混沌无法复现,必须用 LLM 专属实验。
  9. trace-ID 关联是去噪关键:实验引发的错误带标签,值班才能区分混沌与真故障。
  10. 燃尽率 2 倍是经验阈值:在噪声底之上、在演变成真事故之前。

下一节,我们转入安全——密钥管理、API key 轮换、审计日志、护栏,以及 2026 年 Vercel 供应链攻击教给我们的 CI/CD 凭证卫生。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U