全鏈路灰度實現原理
更新時間 2024-09-09 19:37:27
最近更新時間: 2024-09-09 19:37:27
分享文章
本章節介紹服務網格全鏈路灰度控制的原理
在微服務架構中,對單個服務的灰度控制可以在請求進入該服務前的代理進行,比如ingress gateway或者客戶端sidecar(如基于請求頭部選擇不同的版本的后端服務),全鏈路灰度中對鏈路中的每個服務的灰度也是基于此原理(定義DestinationRule、VirtualService實現),不同于單服務的灰度控制,全鏈路灰度需要調用鏈上的所有服務都有統一的VS、DR配置,并且需要在整個調用鏈上傳遞版本控制信息,每個服務基于統一的版本控制信息和VS、DR配置實現統一的灰度控制,這里就依賴業務必須接入鏈路追蹤能力。服務網格全鏈路灰度利用鏈路追蹤的trace id在sidecar里實現了inbound請求中的灰度控制信息透傳到outbound請求,解決了灰度控制信息在調用鏈中透傳的問題,如圖所示:

步驟說明如下:
- 用戶請求時帶上特定版本控制頭部x-version,業務接入了分布式鏈路追蹤系統,請求會帶上traceid。
- 經過ingress網關將請求轉發到后端服務的sidecar。
- sidecar內通過自研wasm插件在內存中緩存版本控制信息(key為traceid值,value為版本控制信息)。
- sidecar將請求轉發到業務,此時請求頭部包含traceid和x-version。
- 由于業務接入了全鏈路追蹤,默認會透傳traceid,因此app1向外部請求時也會帶上traceid。
- sidecar outbound方向從緩存中獲取版本控制信息,并添加到頭部中轉發到app2。
- 鏈路內后續的調用情況類似。
通過以上過程就是服務網格全鏈路灰度控制的原理。