在微服務場景中,應用間的調用是隨機的。當您部署的Spring Cloud應用或Dubbo應用存在升級版本時,可能會導致無法將具有一定特征的流量路由到應用的目標版本。通過SAE提供的全鏈路灰度能力,您無需修改業務代碼,就可以實現端到端的全鏈路流量控制。泳道可以將應用的相關版本隔離成一個獨立的運行環境。通過設置泳道規則,可以將滿足規則的請求流量路由到目標版本的應用。本文介紹如何在SAE通過MSE云原生網關實現端到端的全鏈路灰度。
前提條件
已開通MSE微服務治理專業版或企業版。具體操作,請參見開通MSE微服務治理。
已創建MSE云原生網關。具體操作,請參見創建MSE云原生網關。
確保MSE云原生網關與SAE命名空間處于同一地域,且綁定同一個VPC。
使用限制
全鏈路灰度僅適用于2023年11月08日起新建的微服務應用。
全鏈路灰度功能僅支持在新版控制臺使用。
由于全鏈路灰度功能整合了標簽路由功能(此處指的是MSE微服務治理的標簽路由,與MSE云原生網關的標簽路由無關),因此不推薦已經加入全鏈路灰度的應用配置金絲雀發布和標簽路由規則。
限制項
限制值
備注
網關服務來源類型
SAE內置Nacos和MSE Nacos
基于MSE云原生網關的全鏈路灰度目前只支持SAE內置Nacos和MSE Nacos兩種來源。
MSE云原生網關版本
1.2.13及以上版本
1.2.13以下版本需要升級至最新版本。如何升級版本,請參見升級MSE云原生網關版本。
Spring Cloud版本
Spring Cloud Edgware及以上版本
無。
Dubbo版本
2.5.3~2.7.8
Dubbo 3.0及以上版本當前處于灰度中,如有場景需求,請提工單聯系MSE技術支持。
客戶端類型
Resttemplate
Spring Cloud OpenFeign
無。
Java應用JDK版本
目前支持JDK 6、7、8版本應用接入
JDK 11版本當前處于灰度中,如有場景需求,請提工單聯系MSE技術支持。
負載均衡類型
Ribbon 2.0.x及以上版本
LoadBalancer 3.0.x及以上版本
無。
Spring Cloud Gateway版本
Spring Cloud Gateway 2.1.0.RELEASE及以上版本
無。
名詞解釋
MSE云原生網關:MSE云原生網關是兼容K8s Ingress標準的下一代網關產品,支持ACK容器和Nacos等多種服務發現方式,支持多種認證登錄方式快速構建安全防線。更多信息,請參見云原生網關概述。
泳道:為相同版本應用定義的一套隔離環境。只有滿足了流控路由規則的請求流量才會路由到對應泳道里的打標應用。一個應用可以屬于多個泳道,一個泳道可以包含多個應用,應用和泳道是多對多的關系。
泳道組:泳道的集合。泳道組的作用主要是為了區分不同團隊或不同場景。
基線環境:未打標的應用屬于基線環境,是其他環境的兜底環境。
場景示例
本文通過模擬真實的調用鏈路為您演示全鏈路灰度功能。您無需修改任何業務代碼,只需要給入口應用設置流量規則,該流量的標簽會通過鏈路透傳到下一個應用中。在每個應用的調用過程中,符合規則的流量會優先調用到對應的灰度應用,如果沒有對應的灰度應用則會自動切換回基線應用。
各測試應用部署如下表所示:
后端應用 | 基線應用 | 灰度應用 | 灰度應用上的標簽 |
A | sc-a | sc-a-a1 | alicloud.service.tag:g1 |
sc-a-a2 | alicloud.service.tag:g2 | ||
B | sc-b | sc-b-b2 | alicloud.service.tag:g2 |
C | sc-c | sc-c-c1 | alicloud.service.tag:g1 |
sc-c-c2 | alicloud.service.tag:g2 |
流量分發示意圖如下所示:
調用鏈路如下:
正常流量調用鏈路
MSE云原生網關->應用sc-a->應用sc-b->應用sc-c。
標簽流量調用鏈路
t=g1流量:MSE云原生網關->應用sc-a-a1->應用sc-b->應用sc-c-c1。
t=g2流量:MSE云原生網關->應用sc-a-a2->應用sc-b-b2->應用sc-c-c2。
步驟一:部署基線應用
本文示例中注冊中心選擇MSE Nacos企業版,然后在SAE控制臺使用鏡像部署sc-a、sc-b、sc-c這三個業務應用。
登錄SAE控制臺,在左側導航欄選擇 ,然后選擇目標地域和目標命名空間,最后單擊創建應用。
在創建應用頁面的應用基本信息配置向導中,配置相關信息,然后單擊下一步:高級設置。配置項的更多信息,請參見創建應用。
分類
配置項
說明
基礎信息設置
應用名稱
自定義。
應用描述
自定義。
命名空間類型
選擇命名空間類型。
系統創建:應用會被創建在目標地域下的默認命名空間內,例如cn-shanghai。
選擇已有命名空間:從下拉列表選擇已創建的自定義命名空間,以及對應的專有網絡VPC、交換機vSwitch和安全組。
重要確保MSE云原生網關與SAE命名空間處于同一地域,且綁定同一個VPC。
應用部署方式
選擇鏡像部署,單擊設置鏡像。
在設置鏡像面板,進行如下配置,然后單擊確定。
技術棧語言:選擇Java。
Java運行環境:SAE支持多種Java運行時環境,您可以根據實際需求選擇。
指定部署應用的鏡像文件。
我的阿里云鏡像:選擇您的阿里云賬號下的且已上傳至阿里云容器鏡像服務的鏡像文件及其版本。
Demo鏡像:在下拉列表選擇Demo鏡像的版本。
自定義鏡像:輸入鏡像倉庫地址,確保應用能夠訪問公網。更多信息,請參見配置NAT網關使SAE應用能訪問公網。
其它阿里云賬號私有鏡像:選擇鏡像服務版本和鏡像類型,并填寫相關信息。
容量設置
單實例規格
建議在測試環境中使用0.5 Core 1 GB,在生產環境中依據實際情況選擇更高的實例規格。
實例數
取值范圍為[1,50]。默認值為2。
在創建應用頁面的高級設置配置向導中,配置相關信息,然后單擊創建應用。如果您需要繼續為應用配置啟動命令、環境變量、應用健康檢查、日志等功能,請參見高級配置。
配置項
說明
環境變量
添加自定義環境變量:從類型下拉列表,選擇自定義,并輸入變量名稱和變量值。
單擊+添加添加環境變量,輸入鍵值對。
變量:自定義,輸入
nacos.namespace
、nacos.host
。值:自定義,輸入
public
、mse-7fe****-nacos-ans.mse.aliyuncs.com
。
服務注冊發現
展開服務注冊發現,在Nacos注冊中心服務發現區域選擇MSE Nacos企業版。
步驟二:開啟基線應用的微服務治理功能
全鏈路灰度為MSE微服務治理專業版功能,鏈路中所有涉及應用均需開啟微服務治理功能才能使用。
登錄SAE控制臺。
在左側導航欄,選擇
,在頂部菜單欄選擇地域,然后在應用列表頁面,單擊目標應用名稱。在左側導航欄,選擇
,單擊開啟微服務治理說明應用開通的微服務治理功能的版本與MSE版本保持一致。
步驟三:基于基線應用部署灰度應用
基于基線應用部署灰度應用,其中sc-a和sc-c應用分別部署兩個灰度應用(sc-a-a1,sc-a-a2,sc-c-c1,sc-c-c2),sc-b應用部署一個灰度應用(sc-b-b2)。
登錄SAE控制臺。
在左側導航欄,選擇
,在頂部菜單欄選擇地域,然后在應用列表頁面,單擊目標應用操作列的圖標,然后單擊創建灰度應用。在創建灰度應用頁面的應用基本信息配置向導中,配置相關信息,然后單擊下一步:高級設置。
設置區域
設置項
說明
基礎信息設置
應用名稱
自定義。
應用描述
自定義。
命名空間類型
按照控制臺的默認配置選擇選擇已有命名空間以繼承基線應用的設置。
命名空間:繼承基線應用的配置,不支持修改。
專有網絡 VPC:繼承基線應用的配置,不支持修改。
交換機vSwitch:選擇交換機。
安全組:選擇安全組。
應用部署方式
默認繼承基線應用的設置,您可以根據需求選擇覆蓋或添加新的配置。
灰度標簽
名稱
全鏈路灰度和MSE云原生網關標簽路由功能需搭配灰度標簽才能使用,且標簽名稱必須設置為
alicloud.service.tag
,否則將無法通過標簽值識別到該灰度應用。值
自定義標簽值。標簽值為1-20個字符,只能由字母和數字組成,且字母區分大小寫,如
gray
和GRAY
是兩個不同的標簽值。容量設置
單實例規格
建議在測試環境中使用0.5 Core 1 GB,在生產環境中依據實際情況選擇更高的實例規格。
實例數
取值范圍為[1,50]。默認值為2。
在創建應用頁面的高級設置配置向導中,配置相關信息,然后單擊創建應用。如果您需要繼續為應用配置啟動命令、環境變量、應用健康檢查、日志等功能,請參見高級配置。
配置項
說明
環境變量
添加自定義環境變量:從類型下拉列表,選擇自定義,并輸入變量名稱和變量值。
單擊+添加添加環境變量,輸入鍵值對。
變量:自定義,輸入
nacos.namespace
、nacos.host
。值:自定義,輸入
public
、mse-7fe****-nacos-ans.mse.aliyuncs.com
。
服務注冊發現
展開服務注冊發現,在Nacos注冊中心服務發現區域選擇MSE Nacos企業版。
步驟四:創建云原生網關路由
登錄SAE控制臺。
在左側導航欄,單擊命名空間,在頂部菜單欄選擇地域。
在命名空間頁面,單擊目標命名空間名稱。
在左側導航欄,單擊網關路由,然后單擊創建網關路由。
在創建路由頁面,配置相關信息,然后單擊保存。
配置項
描述
路由名稱
路由規則名稱,自定義。
網絡類型
選擇待轉發請求的網絡類型。
公網:通過公網網關轉發的請求,按照實際轉發流量計費。
私網:通過私網網關轉發的請求不計費,僅在當前VPC內部轉發。
網關類型
選擇MSE云原生網關。
網關實例
當網關類型選擇MSE云原生網關時需要配置。選擇與命名空間同一地域、使用同一VPC的網關實例。如果您需要創建新的網關實例,可以單擊創建MSE云原生網關前往MSE網關管理控制臺進行創建。
域名
選擇路由需要匹配的域名,支持選擇多個域名。
如果您需要創建新的域名,可以單擊創建域名前往MSE網關管理控制臺進行創建。
路徑(Path)
設置匹配HTTP請求中的Path參數。
相同匹配規則時,Path越長優先級越高。
不同匹配規則時,
。等于:即完全匹配。例如,Path等于
/user
。前綴是:以前綴作為匹配條件。例如,Path以
/user
開頭。正則匹配:以正則表達式作為匹配條件。
方法(Method)
設置匹配HTTP請求中的Method參數,不填表示匹配所有參數,支持選擇多種HTTP方法。
請求頭(Header)
設置匹配HTTP請求中的Header參數,相同匹配規則時參數越多優先級越高。
請求參數(Query)
設置匹配HTTP請求中的Query參數,相同匹配規則時參數越多優先級越高。
服務來源
支持SAE 內置 Nacos和MSE Nacos兩種注冊中心。
服務來源選擇MSE Nacos,從下拉列表選擇已創建的MSE Nacos實例和MSE Nacos命名空間。
說明與應用的服務注冊發現方式保持一致。
使用場景
如果需要實現全鏈路灰度功能,使用場景選擇灰度場景按標簽(標簽路由)。
關于目標服務不同類型的說明,請參見路由方式概述。
后端服務
選擇已關聯的后端服務,并指定路由版本(即標簽)和權重。
說明涉及權重的目標服務流量比例總和要求為100%。
按標簽路由只對從網關到后端服務的第一級跳轉有效,如果需要作用于整條請求鏈路上的灰度能力,請配合全鏈路灰度功能一起使用。
超時時間(秒)
輸入超時時間。默認為60秒。如果為0,則表示永不超時。
Fallback
開啟Fallback開關,設置Fallback服務,您需要選擇指定的服務。當路由指向的后端服務沒有可用節點時,原請求會訪問此處指定的Fallback服務。
說明目前僅支持HTTP服務之間的Fallback能力。
步驟五:創建泳道組
登錄SAE控制臺。
在左側導航欄,選擇
,在頂部菜單欄選擇地域,然后在全鏈路灰度頁面,單擊創建泳道組及泳道。如果您選擇的微服務空間內已經創建過泳道組,則單擊創建泳道組。在創建泳道組面板,配置相關信息,然后單擊確定。
配置項
說明
泳道組名稱
自定義泳道組的名稱。
入口類型
選擇MSE云原生網關。
泳道組流量入口
選擇目標云原生網關。
說明僅支持選擇與命名空間VPC一致的云原生網關實例。
泳道組涉及應用
選擇您入口網關所涉及的所有相關應用,可以選擇多個。
說明僅支持添加已開啟MSE微服務治理功能的應用。
應用必須在MSE治理中心的同一個命名空間。
泳道組創建完成后,在全鏈路灰度頁面的泳道組區域,可以查看您創建的泳道組。如需變更泳道組信息,單擊目標泳道組右上角的編輯,可在頁面自行修改相關信息。
步驟六:創建泳道
在全鏈路灰度頁面底部,單擊點擊創建第一個分流泳道。
在創建泳道面板,配置相關信息,然后單擊確定。
創建按內容灰度的泳道
配置項
說明
填寫泳道信息
泳道名稱:自定義。
泳道標簽:選擇需要加入同一條泳道的應用對應灰度版本的
alicloud.service.tag
標簽。泳道標簽用來給請求打標,當符合灰度條件的請求經過網關應用時,會被打上此處指定的標記。泳道狀態:默認開啟。開啟泳道狀態開關,泳道創建完成后,開啟泳道。
配置路由規則
設置相應的路由規則條件。
基線路由:在可選路由列表中,選中目標基線路由。
灰度模式:選擇按內容灰度。
說明灰度模式在整個泳道組內需保持一致,一旦第一條泳道成功創建,后續泳道就不可以再對其進行更改。
灰度條件:指定請求內容的灰度匹配方式。當請求內容以下條件同時滿足時,會被打上前面指定的泳道標簽,需要填寫灰度條件有參數類型、參數、條件、值。參數類型支持Header和。
創建按比例灰度的泳道
配置項
說明
填寫泳道信息
泳道名稱:自定義。
泳道標簽:選擇需要加入同一條泳道的應用對應灰度版本的
alicloud.service.tag
標簽。泳道標簽用來給請求打標,當符合灰度條件的請求經過網關應用時,會被打上此處指定的標記。
配置路由規則
設置相應的路由規則條件。
基線路由:在可選路由列表中,選中目標基線路由。
灰度模式:選擇按比例灰度。
說明灰度模式在整個泳道組內需保持一致,一旦第一條泳道成功創建,后續泳道就不可以再對其進行更改。
流量比例:為所選路由或Path設置流量比例,在默認情況下,泳道內所有的路由或Path都將使用統一的流量比例。取值范圍為[1,100],默認值為1。
步驟七:基線應用及灰度應用流量驗證
按內容灰度流量驗證
使用curl命令測試基線流量:
#測試命令 curl 8.130.XX.XX/a # 測試結果 A[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C[192.168.XX.XX]
說明命令中的
8.130.XX.XX
是云原生網關暴露出的公網IP地址。使用curl命令測試灰度流量,以參數類型選擇Header為例:
# 測試命令 curl 8.130.XX.XX/a -H "tag: ${tag}" # 測試結果 A${tag}[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C${tag}[192.168.XX.XX]
說明當參數帶上
tag: ${tag}
時,會命中灰度標簽,并向后透傳。
按比例灰度流量驗證
使用curl命令測進行驗證:
#測試命令
curl 8.130.XX.XX/a
# 測試結果
A[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C[192.168.XX.XX]
A${tag}[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C${tag}[192.168.XX.XX]
命令中的8.130.XX.XX
是云原生網關暴露出的公網IP地址。
步驟八:微服務治理可觀測
在SAE控制臺的全鏈路灰度頁面,在選擇泳道組下拉列表中選擇目標泳道組,在泳道組及涉及的應用區域單擊目標應用,在應用QPS監控區域,可查看對應泳道基線版本和灰度版本的流量情況。選擇回放時間,展示所選時間對應的指標數據。
監控回放僅支持回放一天內的指標數據。
總QPS:該應用總的每秒請求數(QPS)。
異常QPS:該應用出錯的每秒請求數(QPS)。
未打標QPS:該應用未打標的流量的每秒請求數(QPS)。