用途:Shadow mode 是一种迁移验证模式,把生产流量镜像到新系统而不影响用户。影子系统的响应被丢弃,只有生产响应返回给用户,但两者都会被记录并比对,用于验证替换服务的正确性。
适用场景:验证替换服务的读行为、在真实生产负载下测试性能、切换前比对响应正确性、安全评估新服务版本、用真实流量对新部署做负载测试。若两个系统都需要持久化写入,或新存储需成为权威、需保持强一致,则应改用 dual-write。
主要能力:支持多种镜像模式——全量镜像(100% 流量)、采样镜像(如 10%)、选择性镜像(特定请求类型或端点)、回放镜像(离线重放录制流量)。实现架构包含流量拆分器、影子路由器、响应比对器、差异记录器、指标收集器和 kill switch。部署拓扑有代理层(负载均衡或 API 网关)、应用层(异步复制请求)、基础设施层(Istio、Linkerd 服务网格)和日志回放。
使用方式:代理层镜像时,配置负载均衡或网关将原请求转发到生产后端,克隆请求发往影子后端,只返回生产响应,影子响应仅记录,且影子超时独立于生产。应用层镜像时,在应用层拦截请求,正常走生产路径,异步发送副本到影子服务,不阻塞生产响应,由后台 worker 比对响应。比对时按字段配置规则:ID 和时间戳忽略,计算值按容差比对,集合按集合比对,状态码需精确匹配,错误响应按类型分类,仅比对相关响应头。有状态请求可跳过写入、使用隔离状态、dry-run 写入或仅记录。
限制与注意事项:影子模式最适合只读请求;需隔离影子数据库、队列和外部服务,避免写入共享资源;需配置比对规则忽略时间戳、ID、nonce 等非确定性响应;影子数据库应从近期生产快照播种;采样镜像、自动扩缩或熔断可防止流量放大压垮影子;需为影子单独签发令牌或绕过认证;必须提供秒级生效、无需部署的 kill switch,并在启用前测试。验证指标包括响应匹配率(目标 >99.9%)、影子延迟(P50 在生产 2 倍内)、错误率、可用性和差异类别趋势。
与 dual-write 配合:早期验证用影子模式(读),数据同步用 dual-write,切换前两者并用,切换时反转 dual-write,切换后反向影子镜像以验证无异常。二者都是 Strangler Fig 迁移策略中的战术。