← 中文资源

简体中文版本

影子流量

影子流量把真实请求复制给新服务,用户仍收到原响应;新服务必须在隔离数据上处理,并只记录结果用于比较。

阅读英文原文

复制请求,不复制副作用

代理可以把一定比例的请求镜像到影子服务,用户仍收到原始响应。影子服务在安全数据存储上处理请求,返回会被记录并丢弃的响应,且不得写生产表、发消息或调用外部供应商。

route:
  - match: { prefix: /api/orders }
    route:
      - destination: { host: orders-v1 }
    mirror:
      host: orders-v2
    mirrorPercentage: 10

示例是 Istio 风格路由。关键是有限的镜像比例和独立资源的目的地。

隔离写入与数据

镜像读端点很简单,写端点则不然。使用沙箱数据库、dry-run 模式,或无法产生外部效果的独立账号。如果影子服务调用支付供应商,应指向测试供应商或阻断调用。影子日志中的个人数据要脱敏或哈希,并施加与生产相同的访问控制。

在真实负载下比较

记录影子响应、状态码和延迟,再与原始结果比较。返回 200 但耗时三倍的影子服务尚未就绪。监控影子服务的 CPU、依赖使用和错误率。若它拖慢主路径或耗尽共享依赖,立即停止镜像。

何时使用

当合成测试无法复现真实请求组合,而新实现需要在暴露前获得生产证据时,使用影子流量。优点是零用户影响下的真实校验;代价是重复负载、副作用风险和数据隐私工作。与金丝雀相比,影子完全隐藏新响应;与暗发布相比,它专门镜像实时流量。