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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
服务网格与 SOA/课时/优雅降级
RawBlame
课时目录12 节

服务网格与 SOA

  1. 01服务网格是什么
  2. 02SOA 与微服务
  3. 03Sidecar 模式
  4. 04流量管理
  5. 05mTLS 与服务身份
  6. 06Istio 入门
  7. 07与 Kubernetes
  8. 08优雅降级
  9. 09弹性与熔断
  10. 10网格与 API 网关
  11. 11运维与可观测性
  12. 12综合练习

优雅降级

graceful-degradation;对照 rel-degrade。

25 分钟

优雅降级

下游变慢或不可用时,系统应 有损但可用 地响应用户,而不是长时间挂起或 500 雪崩。优雅降级(Graceful Degradation) 可在 应用层(fallback、缓存、功能开关)与 网格层(路由、超时、摘除实例)同时展开。

学习目标

  • 区分降级、熔断、限流(对照 rel-degrade)
  • 设计网格超时 + 应用 fallback 的组合
  • 说清哪些降级逻辑必须在业务代码里

降级层次

层次手段示例
网格超时、重试上限、traffic split 到稳定版VirtualService timeout 2s
应用Feign fallback、读缓存、默认值课程列表显示「加载中,请稍后」
产品功能开关关闭「推荐课程」模块

Spring Cloud 熔断 的 CourseClientFallback 是 应用层 典型;网格 不会 替你写「返回什么 JSON」,只保证 快速失败或打到健康实例。

网格侧可做的

# VirtualService 片段:路由超时
http:
  - route:
      - destination:
          host: course-service
    timeout: 2s

配合 DestinationRule outlierDetection,坏实例被临时踢出负载均衡池——用户请求自动落到其他副本,类似 无感降级。

全站故障时,网格可把流量 切回上一稳定 subset(蓝绿 / 金丝雀回滚),比逐个重启 jar 快。

应用侧必须做的

  • 语义正确的兜底数据:缓存、静态文案、降级字段标记
  • 幂等与订单类:网格重试不能代替业务去重
  • 用户可感知提示:HTTP 200 + degraded: true vs 503,产品需定义

对照 rel-degrade 的限流 429:网格 AuthorizationPolicy + 外部限流服务 可配合,但配额业务规则仍在应用。

与 SLO 的关系

降级策略应写在 错误预算 内(rel-slo、obs-slo):

  • 降级响应是否算「成功」?若算,SLI 定义要一致
  • 监控 降级触发次数,避免长期「静默失败」

练习

  • 为 tracks API 设计:course-service 超时 2s 时 progress 服务返回「进度暂不可用」
  • 画决策树:超时 → 网格重试?→ 仍失败 → 应用 fallback?
  • 对照 sc-circuit-breaker,写一句 Resilience4j Open 状态与网格 outlier ejection 的异同
  • 小结

    网格保「快失败、流量到健康实例」;应用保「对用户仍有意义的结果」。 下一课专讲弹性与熔断在网格层的表达。

    加载本节练习…
    ← 上一课与 Kubernetes下一课 →弹性与熔断