流量管理
金丝雀、蓝绿、重试、超时。
35 分钟
流量管理
服务网格的核心价值之一:在不改业务代码的前提下 做路由、分流、重试与超时。金丝雀发布、蓝绿切换、故障注入都变成 声明式配置,由 Sidecar 执行。
学习目标
- 理解金丝雀、蓝绿、镜像流量的区别
- 配置重试、超时、故障注入的基本思路
- 对照 rel-retries 与 rel-timeout
发布策略
| 策略 | 做法 | 适用 |
|---|---|---|
| 蓝绿 | 新旧两版 Service,一切流量切到新版本 | 快速回滚、版本差异大 |
| 金丝雀 | 少量流量到新版本,观察指标再放大 | 降低发布风险 |
| 镜像(Shadow) | 复制一份流量到新版本,响应仍走旧版 | 压测新版本、不影响用户 |
Spring Cloud 里常靠 Gateway 路由或注册权重;网格里典型用 VirtualService + DestinationRule 按 subset 权重分流(下节 mesh-istio 详述)。
# 示意:90% v1,10% v2
spec:
http:
- route:
- destination:
host: course-service
subset: v1
weight: 90
- destination:
host: course-service
subset: v2
weight: 10
重试与超时
Sidecar 可在 出站 统一重试,避免每个 Feign 客户端各写一套:
- timeout:单次请求上限,防止线程挂死(对照 rel-timeout)
- retries:仅对 idempotent 或明确允许的方法;需 有限次数 + 退避,否则引发 rel-cascade 中的 retry storm
网格层重试 看不见业务语义:POST 下单是否可重试,仍要应用层幂等(订单号、去重表)保证。
故障注入
混沌工程常用 延迟 / 中断 注入,验证 reliability-essentials 里学的降级与 SLO:
# 示意:对 course-service 注入 5s 固定延迟
fault:
delay:
fixedDelay: 5s
percentage:
value: 10
先在预发、小比例生产验证;配合 obs-traces 观察链路变化。
与 Spring Cloud Gateway 的分工
- Gateway / Nginx:北向、鉴权、聚合 API、WAF