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综合练习

降级与限流

功能开关、返回缓存、429 限流。

30 分钟

降级与限流

当依赖不可用或过载时,牺牲非核心功能 保住核心路径——这叫 降级(Degradation)。限流(Rate Limiting) 则在入口 拒绝超额流量,防止系统被压垮。

学习目标

  • 掌握功能开关、缓存兜底、429 限流三种手段
  • 设计 CodeRoadMap 可降级的功能边界
  • 对照 Gateway 限流见 sc-gateway

降级策略

策略做法用户体验
返回缓存读路径走 Redis / 本地缓存数据可能旧,但页面可用
默认值fallback 返回占位内容缺头像、缺进度条
功能开关feature flag 关非核心模块评论关闭,课程仍可读
异步化非关键写进队列稍后处理通知延迟,订单仍创建

模式层见 ip-circuit fallback 设计。

限流层次

[CDN / WAF]        ← 防 DDoS(若有)
      │
[宝塔 Nginx]       ← limit_req_zone
      │
[Gateway / backend]← Resilience4j RateLimiter / Bucket4j
      │
[MySQL]            ← max_connections 最后一道

429 Too Many Requests 应带 Retry-After,避免客户端立刻重试(rel-retries)。

CodeRoadMap 降级示例

tracks API 正常路径:
  GET /tracks → backend → MySQL

降级路径(MySQL 慢/熔断 OPEN):
  GET /tracks → 读本地缓存 / 静态 JSON 快照
  POST 进度   → 503 +「稍后再试」(写不可降级则明确失败)

写路径降级更危险——宁可失败也别丢数据;读路径优先保体验。

与 SLO 的关系

非核心功能降级后,核心 SLI(如课程列表可用)仍应达标;错误预算花在「主动降级」好过「全站 500」(rel-slo)。

练习

  • 列出 CodeRoadMap 三个可降级、两个不可降级的功能
  • 设计 tracks 列表的缓存 TTL 与失效策略
  • 说明 429 与 503 对客户端重试行为的影响

小结

降级保核心体验;限流保系统不被流量打死。 下一课:事务与一致性。

加载本节练习…
← 上一课熔断与舱壁下一课 →事务与一致性