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

弹性与熔断

网格层 vs 应用层熔断。

30 分钟

弹性与熔断

分布式系统里,短暂故障若被 无限重试、同步阻塞 放大,会引发级联崩溃(见 rel-cascade)。熔断 在失败达阈值时 停止调用 或 隔离流量;弹性可在 应用库 与 服务网格 两层实现,需避免重复冲突。

学习目标

  • 理解网格 outlier detection 与 Resilience4j 断路器的对应关系
  • 知道连接池、并发限制在 DestinationRule 中的配置思路
  • 决定「网格管什么、应用管什么」

应用层熔断回顾

sc-circuit-breaker 中 Resilience4j 三状态:

状态行为
Closed正常调用,统计失败
Open直接 fallback
Half-Open试探恢复

逻辑在 调用方 JVM 内,对 HTTP 客户端生效;每个语言栈各配一套。

网格层「熔断」

Istio 常用 异常实例摘除(outlier detection):

trafficPolicy:
  outlierDetection:
    consecutive5xxErrors: 5
    interval: 30s
    baseEjectionTime: 30s
    maxEjectionPercent: 50

Sidecar 把连续 5xx 的 Pod 地址 临时移出负载均衡池——针对 实例级 故障,而非整个服务名 Open。

另有 连接池 / 并发限制:

connectionPool:
  tcp:
    maxConnections: 100
  http:
    http1MaxPendingRequests: 50
    maxRequestsPerConnection: 2

类似 舱壁(rel-circuit),防止单下游拖垮 Sidecar 连接。

两层如何分工

场景建议
单 Pod 坏掉网格 outlier detection 足够
下游全挂 / 业务需兜底 JSON应用 fallback(Feign / WebClient)
gRPC deadline客户端 deadline + 网格 timeout 对齐(grpc-error)
重试只在一层配,避免网格 × 应用双重重试

迁移期常见坑:Feign 3 次重试 + VirtualService 3 次重试 = 最多 9 次,易触发 retry storm。

与超时、限流联动

  • timeout:VirtualService / route 级(见 mesh-traffic)
  • 限流:Envoy 本地 rate limit 或专用组件;429 策略见 rel-degrade
  • 弹性不是「配得越多越好」,要用 obs-metrics 验证 P99 与错误率。

    练习

    • 为 course-service DestinationRule 写 outlierDetection 参数并解释含义
    • 画表格:Resilience4j Open vs Istio ejection 触发条件、恢复方式
    • 读 rel-retries,写团队规范「重试只放一层」

    小结

    网格擅实例级健康与连接隔离;应用擅业务 fallback 与语义。 下一课厘清网格入口与传统 API 网关。

    加载本节练习…
    ← 上一课优雅降级下一课 →网格与 API 网关