全部產品
Search
文件中心

Alibaba Cloud Service Mesh:使用寬鬆模式流量泳道實現全鏈路流量管理

更新時間:Jul 17, 2024

寬鬆模式流量泳道搭配定製化路由資源如虛擬服務、目標規則等,可以實現全鏈路的流量統一接入、細粒度的路由管理以及外掛程式式的流量處理。本文介紹如何使用寬鬆模式流量泳道實現全鏈路流量管理。

功能介紹

您可以通過使用寬鬆模式的流量泳道靈活地實現應用版本隔離。基於鏈路透傳要求標頭和引流要求標頭,將流量路由到不同泳道。泳道中服務相互調用時,若目標服務不存在當前泳道則轉寄至基準泳道,保障鏈路完整性,簡化流量管理。

關於寬鬆模式的流量泳道,您需要瞭解以下內容。

調用鏈路上下文透傳方式

調用鏈路上下文透傳是應用程式可以使用寬鬆模式流量泳道的重要前提,這通常代表您的應用程式必須具備以下特徵:對於同一調用鏈路上的所有請求來說,所有請求都具有一個相同的要求標頭。

寬鬆模式的流量泳道適配了常見的應用程式調用鏈路上下文透傳方式,您需要根據您的應用程式實際情況,有針對的選擇相對應的情境來配置寬鬆模式流量泳道。

情境一: 透傳trace ID

trace ID是指具有以下特徵的要求標頭:

  • 要求標頭的內容能夠在整條調用鏈路中透傳。

  • 要求標頭內容對於每條調用鏈路都各不相同。

trace ID一般用於獨立標識一條完整調用鏈路,其內容多為隨機字串。如果應用程式已經接入鏈路追蹤系統,您的應用程式可能已經具備了透傳trace ID的能力,一些常見的鏈路追蹤標準都有獨特的trace ID要求標頭,如x-b3-trace-id、x-datadog-trace-id等。

情境二:透傳自訂要求標頭

應用程式在代碼實現階段,可能已經做到了透傳某些具有業務意義的要求標頭,如version、env等,這種要求標頭常用來標識調用鏈路版本和環境。基於這種情境使用寬鬆模式流量泳道時,您只能同時將透傳的自訂要求標頭作為引流要求標頭使用。

情境三:透傳Baggage要求標頭

Baggage是OpenTelemetry推出的一種標準化機制,旨在實現分布式系統調用鏈路中跨進程傳遞上下文資訊。它通過在HTTP頭部增加名為“Baggage”的欄位實現,欄位值為索引值對格式,可傳遞租戶ID、追蹤ID、安全憑證等上下文資料,支援鏈路追蹤、日誌關聯等功能而無需修改代碼。例如:

baggage: userId=alice,serverNode=DF%2028,isProduction=false

Baggage是OpenTelemetry社區提出的調用鏈路上下文透傳標準化機制,因此我們也推薦您基於這種方式來配置寬鬆模式的流量泳道。

說明

對於情境一和情境三:如果您的應用程式未接入鏈路追蹤系統或未通過代碼透傳baggage,可以參考自動插裝,使用OpenTelemetry Operator為應用程式注入自動插裝能力來實現對鏈路ID要求標頭的透傳,而無需修改應用程式代碼。要完成自動插裝,您需要跟隨上述社區文檔完成OpenTelemetry Operator的安裝、自動插裝的配置,以及為應用Pod加入annotation的一系列步驟。OpenTelemetry自動插裝支援多種常見的分布式鏈路上下文透傳標準(如W3C Baggage、B3等),上述的自動插裝社區文檔提供了W3C TraceContext和W3C Baggage的透傳樣本。

引流要求標頭

通常情況下,寬鬆模式流量泳道使用引流要求標頭為請求鏈路進行“打標”,您可以任意的指定要求標頭,只要不與應用程式現有的業務相關要求標頭衝突即可。基於您選擇的調用鏈路上下文透傳方式,寬鬆模式流量泳道將保證在調用鏈路上的每個環節都包含值為泳道名稱的引流要求標頭。例如,如果您指定x-asm-prefer-tag為引流要求標頭,當請求發往名稱為s1的泳道中的服務時,調用鏈路中後續的請求將始終帶有x-asm-prefer-tag: s1的要求標頭。基於要求標頭中的泳道標籤資訊,流量泳道可以實現應用不同版本之間的隔離環境。

如果您的調用鏈路上下文透傳方式選擇了透傳自訂要求標頭,則引流要求標頭必須指定為被透傳的自訂要求標頭。

情境概述

基於寬鬆模式的流量泳道,您可以通過多種不同的方式來實現應用版本隔離。通過以下情境,您將瞭解如何通過三種不同的透傳要求標頭方式將流量路由到泳道,以及如何配置、使用自訂虛擬服務為寬鬆模式的泳道引流。

相關文檔

  • 流量泳道分為嚴格與寬鬆兩種模式。關於這兩種模式的說明和差異,請參見流量泳道概述

  • 如果您需要同時將鏈路透傳要求標頭指定為引流要求標頭,實現全鏈路流量管理,請參見情境二:在鏈路中透傳自訂要求標頭

  • 您可以基於VirtualService和DestinationRule等流量規則實現流量泳道,同時通過配置流量降級,在某個版本(或者其他特徵)的應用不可用時,將流量發往一個指定的降級版本(或其他特徵)的應用。具體操作,請參見基於流量規則配置實現流量泳道和流量降級

  • 流量泳道的引流規則包含針對要求標頭以及請求路徑的匹配規則,您可以通過自訂虛擬服務的方式來實現更複雜的匹配規則或者自訂請求路由的需求。具體配置方法,請參見通過自訂虛擬服務為寬鬆模式的泳道引流