应用服务网格

全链路灰度实现原理

2025-08-14 01:56:59

在微服务架构中,对单个服务的灰度控制可以在请求进入该服务前的代理进行,比如ingress gateway或者客户端sidecar(如基于请求头部选择不同的版本的后端服务), 全链路灰度中对链路中的每个服务的灰度也是基于此原理(定义DestinationRule、VirtualService实现),不同于单服务的灰度控制,全链路灰度需要调用链上的所有服务都有统一的VS、DR配置,并且需要在整个调用链上传递版本控制信息,每个服务基于统一的版本控制信息和VS、DR配置实现统一的灰度控制,这里就依赖业务必须接入链路追踪能力。服务网格全链路灰度利用链路追踪的trace id在sidecar里实现了inbound请求中的灰度控制信息透传到outbound请求,解决了灰度控制信息在调用链中透传的问题,如图所示:

步骤说明如下:

(1)用户请求时带上特定版本控制头部x-version,业务接入了分布式链路追踪系统,请求会带上traceid

(2)经过ingress网关将请求转发到后端服务的sidecar

(3)sidecar内通过自研wasm插件在内存中缓存版本控制信息(key为traceid值,value为版本控制信息)

(4)sidecar将请求转发到业务,此时请求头部包含traceid和x-version

(5)由于业务接入了全链路追踪,默认会透传traceid,因此app1向外部请求时也会带上traceid

(6)sidecar outbound方向从缓存中获取版本控制信息,并添加到头部中转发到app2

(7)链路内后续的调用情况类似

通过以上过程就是服务网格全链路灰度控制的原理。


8627gR_RJpkP