CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

限流降级熔断与可观测

分类:工程技术 · 路径:docs/topics/reliability-and-observability/README.md

#system-design#resilience#observability#sre#chaos-engineering

用令牌桶/漏桶/滑动窗口限流、Resilience4j 熔断、SLI/SLO/错误预算、混沌工程做出可生产运维的系统

父主题

系统设计:从容量估算到一致性与可观测

子主题(0)

限流降级熔断与可观测

0. 元信息

1. 学习路线

限流三件套(令牌桶 / 漏桶 / 滑动窗口)
  → 隔离与熔断(Bulkhead / Circuit Breaker / Retry / Timeout)
  → 降级策略(功能裁剪 / 静态兜底 / 异步化)
  → 可观测三件套(Metrics / Logs / Traces)
  → SLI / SLO / 错误预算
  → 告警分级(Info / Warn / Critical / Page)
  → 混沌工程(ChaosBlade / Litmus / Chaos Mesh)
  → SRE 实践(On-Call / Runbook / Postmortem)

每一步都对应一次故障演练:先在预发做,再到生产低风险。

2. 阶段周数分配

精简子主题不固定周数。按 §3 顺序完成。

3. 九阶段表

阶段核心知识实践产出学会标准
1限流三件套Redis Lua 令牌桶能解释三种算法适用场景
2熔断与隔离Resilience4j 配置能解释 4 个状态与转换
3降级与重试兜底逻辑 + 指数退避能解释为什么重试会雪崩
4Metrics / Logs / TracesOTel SDK + Grafanatraceid 串联三件套
5SLI / SLOSLO 文档能算 4 个 9 的错误预算
6告警分级AlertManager 规则不只看 P99,要看错误预算燃烧速度
7混沌工程ChaosBlade 实验能在预发做节点下线 / 网络延迟演练
8On-Call / RunbookRunbook 模板新人 15 分钟接手
9Postmortemretrospective.mdblameless + 行动项 DRI

4. 第一周任务

精简版省略固定日程。先完成阶段 1~4:限流 + 熔断 + 降级 + 三件套串联。

5. 阶段通用验收

精简版省略;每个产出保留脚本、配置、演练记录、版本。

6. 最终验收

精简版省略;以 §3 第 9 阶段和 §9.4 问题口述检查为准。

7. 综合项目

精简版省略;成果并入父主题百万 QPS 短链项目(限流 + 熔断 + SLO 仪表盘 + 混沌演练)。

本主题贡献

交付物清单

  1. reliability/token_bucket.lua:Redis Lua 令牌桶,含单元测试 6 条(含容量耗尽、并发重置、令牌回补);
  2. resilience4j/:Circuit Breaker + Retry + Bulkhead 完整配置 + 4 状态转换示例压测脚本(Java / Go 任一语言 pseudo-code + 真实 config yaml);
  3. slo/service_slo.md:核心短链服务的 SLI(可用性、延迟、正确性)、SLO(99.95% / 100 ms)、4 个 9 错误预算(30 天 = 21.6 分钟)+ 燃烧速率 1× / 2× / 10× 告警规则;
  4. chaos/gameday.md + chaos/runbook.md:ChaosBlade / Litmus / Chaos Mesh 预发演练复盘(节点下线、网络 200 ms 延迟、Redis 重启)与 blameless Postmortem 模板(含 DRI + deadline)。

验收标准

8. 推荐资料

精简版省略;使用 §9.3 和 §9.6 Source。

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

可靠性与可观测是「系统设计能否上线」的最后一道关。Michael Nygard 2007 年出 Release It!,把稳定性的 9 类反模式(集成点是 #1)写进工程界;Netflix 2012 年开源 Hystrix,把熔断、隔离舱、超时、舱壁模式工程化;2018 年 Hystrix 停更,Resilience4j 接棒。

可观测上,Google 2010 年内部 SRE 流程公开,2016 年 Site Reliability Engineering 出书,把 SLI / SLO / 错误预算写进工业实践。2017~2020 年 OpenTelemetry(合并 OpenTracing + OpenCensus)成为跨语言标准。混沌工程上,Netflix 2010 年 Chaos Monkey 公开,2015 年 Chaos Engineering 书出版,ChaosBlade / Litmus / Chaos Mesh 推动混沌工程民主化。

9.2 概念地图

flowchart TB
  Client[请求] --> Limit[限流]
  Limit --> Bulkhead[隔离舱]
  Bulkhead --> CB[Circuit Breaker]
  CB --> Retry[重试 + Timeout]
  Retry --> App[业务]
  App --> Cache
  App --> DB
  App -.信号.-> Metrics[Metrics]
  App -.信号.-> Logs[Logs]
  App -.信号.-> Traces[Traces]
  Metrics --> SLO[SLI/SLO]
  SLO --> Alert[告警分级]
  SLO --> Budget[错误预算]
  Budget --> Chaos[混沌工程]
  Chaos -.验证.-> CB
  Chaos -.验证.-> Limit
  SLO --> Postmortem[故障复盘]

关系说明:限流 / 熔断 / 降级是边界保护;三件套是可观测的「信号源」;SLI / SLO 把信号变成可衡量目标;错误预算决定发布节奏;混沌工程验证边界保护是否真的有效;故障复盘把教训沉淀到下次设计。

9.3 基础知识讲解

9.3.1 论文 / 规范

9.3.2 书

9.3.3 博客 / 文档

9.3.4 人物

9.3.5 方法

9.4 经典问题与经典案例

问题为什么重要最简答案
令牌桶 vs 漏桶限流语义不同令牌桶允许突发;漏桶平滑;滑动窗口精确
限流应该在哪一层越靠前越省资源网关层 + 进程内 + 资源池三层
熔断 4 状态转换条件CLOSED → OPEN → HALF_OPEN → CLOSED
重试为什么会让雪崩更糟没有指数退避 + 抖动指数退避 + jitter + 最大重试次数
降级 vs 熔断触发与动作降级是功能裁剪;熔断是快速失败
Metrics / Logs / Traces 区别三种信号不同指标聚合 / 离散事件 / 调用链
SLI 怎么选决定 SLO 准不准选用户体验的「可用性 + 延迟 + 正确性」
4 个 9 的错误预算算 SLO 落地99.99% × 30 天 = 4.32 分钟
告警阈值怎么设不被淹没也不漏报错误预算燃烧速率 1×/2×/10×
混沌工程怎么开始怕生产炸先在预发做;先做低风险(节点下线)
Postmortem 怎么写blameless + 行动项时间线 + 根因 + 影响 + 行动项 + DRI
OTel 自动注入跨语言OTLP + Collector + 自动 SDK

9.5 学习难点

9.6 技术标准与接口

9.6.1 Entity

名称版本组织状态 / 可访问性
Resilience4j2.xResilience4j 社区GA;Apache-2.0
Sentinel1.8+AlibabaGA;Apache-2.0
Hystrix1.5.xNetflix已停更;Apache-2.0
OpenTelemetry1.xCNCFGA;Apache-2.0
Prometheus2.xCNCFGA;Apache-2.0
Grafana10.xGrafana LabsGA;AGPL-3.0
Loki3.xGrafana LabsGA;AGPL-3.0
Tempo2.xGrafana LabsGA;AGPL-3.0
Jaeger1.xCNCFGA;Apache-2.0
ChaosBlade1.x阿里GA;Apache-2.0
Litmus3.xCNCFGA;Apache-2.0
Chaos Mesh2.xPingCAPGA;Apache-2.0
W3C Trace Context1.0W3C推荐标准;公开
SLI / SLOSRE BookGoogle工业框架;公开

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级能力可靠性与可观测主题可观察标准
L0知道存在知道限流 / 熔断 / 三件套 / SLO
L1看得懂示例能读 Sentinel / Resilience4j / OTel 配置
L2能正确调用能用 Redis Lua 写限流、配熔断、注入 OTel
L3能解释与排错能写 SLO 文档、做混沌演练、写 Postmortem
L4能设计与扩展能为新业务设计 SLI / 告警 / 演练

本计划目标:L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础
  4. 工程技术
  5. Web 与后端
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力
  9. 安全与可靠性

本计划归属:工程技术 主 + 安全与可靠性 辅。

直接依赖(3)

查看知识图谱