影子流量是什么
把生产流量复制(或按比例复制)给新版本,响应被丢弃、只用于验证:用真实流量检验新版本的性能与异常路径,而不影响用户结果。Istio 里用 mirror 与 mirrorPercentage 配置。关键约束:写请求会在新版本上真实执行,必须先处理副作用隔离。
基本信息
| 复制对象 | 入口请求按比例镜像 |
|---|---|
| 响应处理 | 丢弃,不返回给用户 |
| 价值 | 真实流量验证性能与异常路径 |
| 约束 | 写操作会真实落库,需隔离或只镜像读流量 |
| 实现 | 服务网格镜像(Istio 等)或网关层复制 |
典型使用场景
- 重大重构:新实现先吃真实流量,观察差异再切主
- 性能验证:用真实流量模型验证容量与尾延迟
- 异常路径:真实参数组合覆盖测试难构造的场景
- 缓存预热:新版本提前处理真实请求模式
- 灰度前哨:正式放量前再跑一轮影子验证
实践要点
- 读优先:先只镜像读接口,写路径另设计
- 影子存储:写请求改写到影子库,避免污染生产数据
- 容量预算:镜像流量叠加的负载提前评估
- 对比观测:新旧版本响应差异收集与告警
- 比例渐增:从小比例开始,观察系统开销
- 回放留存:镜像请求留存样本,便于回归复现
- 安全边界:镜像环境的数据访问按生产同级管控
Istio 镜像
Istio 镜像
http:
- route:
- destination: {host: web, subset: v1}
mirror: {host: web, subset: v2}
mirrorPercentage: {value: 10.0}与金丝雀对比
| 维度 | 影子流量 | 金丝雀发布 |
|---|---|---|
| 用户影响 | 无,响应被丢弃 | 有,真实用户 |
| 验证目标 | 行为与性能对比 | 转化与体验 |
| 主要风险 | 写副作用与容量叠加 | 回滚时效 |
镜像的写请求会在新版本上真实执行:先禁用写路径或指向影子存储,避免数据双写事故。
观测要对齐:新旧版本的日志与指标带上标记,才能对比差异。
镜像在网格侧异步执行:慢响应不拖累用户请求,但会占用新版本容量。