標簽路由通過標簽將一個或多個服務的提供者劃分到同一個分組,從而約束流量只在指定分組中流轉,實現流量隔離的目的。標簽路由可以作為多版本開發測試、同應用的多版本流量隔離以及A/B Testing等場景的能力基礎。本文介紹如何為Spring Cloud服務配置標簽路由。
背景信息
標簽路由目前僅支持ECS集群中的應用。
應用場景
多版本開發測試
多個版本并行開發時,需要為每個版本準備一套開發環境。如果版本較多,開發環境成本會非常大。流量隔離方案可以在多版本開發測試時大幅度降低資源成本。
使用基于標簽路由的全鏈路流量隔離機制,可以將特定的流量路由到指定的開發環境。例如,在開發環境1中,為應用B(V1.1)和應用D(V1.1)創建Tag1標簽,并配置對應的路由規則。入口應用A調用B時,會判斷流量是否滿足路由規則。如果滿足,路由到開發環境1中應用B的V1.1版本;如果不滿足,路由到基線環境中的應用B的V1版本。應用C調用應用D時,同樣根據流量決定路由到應用D的V1版本或V1.1版本。
相同應用的多版本間流量隔離
如果一個應用有多個版本在線上同時運行,部署在不同環境中,例如日常環境和特殊環境。那么可以使用標簽路由對不同環境中的不同版本進行流量隔離,將秒殺訂單流量或不同渠道訂單流量路由到特殊環境,將正常的流量路由到日常環境。即使特殊環境異常,本應進入特殊環境的流量也不會進入日常環境,從而不會影響日常環境的使用。
A/B Testing
線上有多個應用版本同時運行,期望對不同版本的應用進行A/B Testing。那么可以使用標簽路由的全鏈路流量控制功能,將地域A的客戶流量路由到V1版本,地域B的客戶流量路由到V1.1版本。通過對不同版本的驗證,達到降低新產品或新特性的發布風險,為產品創新提供保障的目的。
操作流程
假設ECS集群中部署了應用A,該應用有一個默認分組,共包含3個應用實例。
標簽路由流程如下:
創建標簽:
為應用A新建兩個分組:group1和group2。
將默認分組下的2個應用實例分別更換到分組group1和group2。
分別為group1和group2分組創建標簽路由中的標簽。
創建標簽路由規則:基于group1和group2的標簽分別創建標簽路由規則。
標簽路由創建完成后,當應用B調用應用A時,流量會根據規則被路由到group1和group2。其它不滿足group1和group2的路由規則的流量會被路由到默認分組。
創建標簽
在應用中新建分組,并為該分組添加實例,然后通過分組的JVM設置為該分組創建標簽。
登錄EDAS控制臺。
為應用創建應用分組。具體操作,請參見創建分組。
為新建分組添加實例,可以將默認分組中的實例更換到新建分組,也可以對新建分組進行擴容。具體操作,請參見添加實例。
重要從默認分組中更換到新建分組的應用實例需要重啟才能識別標簽。新建分組中擴容的實例無需重啟。
在新建分組右上角單擊分組設置,在列表中單擊JVM。
在分組設置對話框,單擊自定義。在展開的自定義區域,打開自定義開關,并在配置內容的文本框中設置分組標簽,然后單擊配置JVM參數。
分組標簽通過自定義參數設置,格式為
-Dalicloud.service.tag=tag1
,其中,tag1為標簽名稱,請根據實際業務需求設置。重啟應用。
方式一:在應用列表頁面,選中應用后,單擊批量重啟,在確認對話框,單擊確定。
方式二:在應用列表頁面,單擊應用名稱,在基本信息頁面右上角,單擊停止應用和啟動應用。
說明自定義JVM參數需重啟應用才能生效。
創建標簽路由規則
標簽(即分組)創建完成后,需要分別基于不同標簽創建路由規則。
登錄EDAS控制臺。
在左側導航欄,選擇 。
在Spring Cloud左側導航欄,單擊標簽路由。
在標簽路由頁面,選擇微服務空間,然后單擊創建標簽路由。
在創建標簽路由面板設置參數,然后單擊確定。
標簽路由參數說明:
配置項
說明
微服務空間
左側為地域列表,右側為微服務空間列表,根據實際情況選擇。
路由名稱
標簽路由規則名稱,例如
label-routing-group1
。描述
規則描述。
應用
在下拉列表中選擇應用。
標簽
在下拉列表中選擇標簽,即為應用新建分組設置的自定義JVM參數-Dalicloud.service.tag的值。
選擇完成后,在下方應用實例區域會顯示該分組下的實例的IP。
是否鏈路傳遞
如果需要使用全鏈路流控,請打開是否鏈路傳遞開關。
說明由于目前全鏈路流控處于灰度發布中,所以如需使用該功能,請加入釘釘交流群(群號:31723701),聯系EDAS技術支持人員。
流量規則
框架類型
包含Spring Cloud和Dubbo,根據應用實際框架選擇。
Spring Cloud:僅支持設置URL的Path,例如
/getIp
。Dubbo:支持選擇服務和接口。
Path
HTTP的相對路徑。
條件模式
包含同時滿足下列條件和滿足下列任一條件,根據實際需求選擇。
條件列表
可以分別設置Parameter、Cookie、Header和Body Content四種類型的參數。例如:
Parameter:
name=xiaoming
Cookie:
hello = "world" 或 "world2"
結果驗證
本文僅通過一個示例介紹如何為應用創建標簽路由,您可以為應用參照配置,然后根據實際業務需求進行驗證。
默認100%流量會按照規則,調用到tag1節點。
匹配規則的流量,會調用到對應標簽的節點。