CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
可靠性与故障模式/课时/熔断与舱壁
RawBlame
课时目录12 节

可靠性与故障模式

  1. 01故障模式是什么
  2. 02故障分类
  3. 03级联失败
  4. 04重试与退避
  5. 05超时与 deadline
  6. 06熔断与舱壁
  7. 07降级与限流
  8. 08事务与一致性
  9. 09单体 vs 微服务故障域
  10. 10SLO 与错误预算
  11. 11事后复盘
  12. 12综合练习

熔断与舱壁

对照 sc-circuit-breaker、隔离线程池。

35 分钟

熔断与舱壁

下游 持续失败 时,调用方应 快速失败 而非继续打挂掉的依赖。断路器(Circuit Breaker) 统计失败率,超阈值则 OPEN;舱壁(Bulkhead) 用 隔离线程池 限制故障域。

学习目标

  • 理解 Closed / Open / Half-Open 三状态
  • 区分熔断、重试、超时、降级的组合
  • 深入 Resilience4j 见 sc-circuit-breaker

三状态

状态行为
Closed正常调用,统计失败率
Open直接拒绝或 fallback
Half-Open试探少量请求,成功则关闭
失败率 > 50% ──► OPEN (10s)
                    │
                    ▼ Half-Open:放 3 个试探请求
              成功 ──► Closed
              失败 ──► 继续 OPEN

舱壁隔离

┌─────────────────────────────────┐
│         backend 线程池           │
│  ┌──────────┐  ┌──────────┐    │
│  │ 核心 API │  │ 外部调用 │    │  ← 各自上限
│  │ pool 20  │  │ pool 5   │    │
│  └──────────┘  └──────────┘    │
└─────────────────────────────────┘
     外部慢 ──► 只耗尽 5 线程,核心 API 仍可用

集成模式视角见 ip-circuit。

Spring Cloud 示例

@FeignClient(name = "course-service", fallback = CourseClientFallback.class)
public interface CourseClient {
    @GetMapping("/courses/{slug}")
    Course getBySlug(@PathVariable String slug);
}
resilience4j:
  circuitbreaker:
    instances:
      course-service:
        slidingWindowSize: 10
        failureRateThreshold: 50
        waitDurationInOpenState: 10s

单机 CodeRoadMap

即使 一个 jar,调外部 webhook、OSS、邮件 API 也应 独立熔断——避免第三方拖死主线程。指标:resilience4j_circuitbreaker_state(prom-metrics)。

合理组合

有限重试 → 超时 → 熔断 → fallback → 限流

练习

  • 停掉 mock 下游,观察 Half-Open 恢复
  • 说明舱壁与熔断解决的不同问题
  • 对照 sc-circuit-breaker 调整 failureRateThreshold
  • 小结

    熔断防雪崩;舱壁缩 blast radius。 下一课:降级与限流。

    加载本节练习…
    ← 上一课超时与 deadline下一课 →降级与限流