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