柚子快報激活碼778899分享:Dubbo 環(huán)境隔離
柚子快報激活碼778899分享:Dubbo 環(huán)境隔離
通過標簽實現(xiàn)流量隔離環(huán)境(灰度、多套開發(fā)環(huán)境等)
無論是在日常開發(fā)測試環(huán)境,還是在預發(fā)生產環(huán)境,我們經常都會遇到流量隔離環(huán)境的需求。
在日常開發(fā)中,為了避免開發(fā)測試過程中互相干擾,我們有搭建多套獨立測試環(huán)境的需求,但通過搭建物理集群的方式成本非常高且不夠靈活在生產發(fā)布過程中,為了保障新版本得到充分的驗證,我們需要搭建一套完全隔離的線上灰度環(huán)境用來部署新版本服務,線上灰度環(huán)境能完全模擬生產運行情況,但只有固定的帶有特定標記的線上流量會被導流到灰度環(huán)境,充分驗證新版本的同時將線上變更風險降到最低。
利用 Dubbo 提供的標簽路由能力,可以非常靈活的實現(xiàn)流量隔離能力??梢詥为殲榧褐械哪骋粋€或多個應用劃分隔離環(huán)境,也可以為整個微服務集群劃分隔離環(huán)境;可以在部署態(tài)靜態(tài)的標記隔離環(huán)境,也可以在運行態(tài)通過規(guī)則動態(tài)的隔離出一部分機器環(huán)境。
注意:標簽路由是一套嚴格隔離的流量體系,對于同一個應用而言,一旦打了標簽則這部分地址子集就被隔離出來,只有帶有對應標簽的請求流量可以訪問這個地址子集,這部分地址不再接收沒有標簽或者具有不同標簽的流量。舉個例子,如果我們將一個應用進行打標,打標后劃分為 tag-a、tag-b、無 tag 三個地址子集,則訪問這個應用的流量,要么路由到 tag-a (當請求上下文 dubbo.tag=tag-a),要么路由到 tag-b (dubbo.tag=tag-b),或者路由到無 tag 的地址子集 (dubbo.tag 未設置),不會出現(xiàn)混調的情況。
開始之前
部署 Shop 商城項目部署并打開?Dubbo Admin
任務詳情
我們決定為商城系統(tǒng)建立一套完整的線上灰度驗證環(huán)境,灰度環(huán)境和線上環(huán)境共享一套物理集群,需要我們通過 Dubbo 標簽路由從邏輯上完全隔離出一套環(huán)境,做到灰度流量和線上流量互不干擾。
為商城搭建一套完全隔離的灰度環(huán)境
首先,為 User、Detail、Comment、Order 幾個應用都部署灰度環(huán)境實例,我們?yōu)檫@部分實例都帶有?env=gray?的環(huán)境標。部署可以通過以下命令快速完成
kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-samples/master/10-task/dubbo-samples-shop/deploy/Gray.yml
接下來,我們開始為幾個應用分別增加標簽規(guī)則,將剛剛部署的實例從普通流量實例隔離出來。
操作步驟
打開 Dubbo Admin 控制臺在左側導航欄選擇【服務治理】>【標簽路由】點擊 “創(chuàng)建”,輸入?shop-detail?和流量隔離條件保存即可;重復為?shop-comment、shop-order?創(chuàng)建相同的隔離規(guī)則。
以上規(guī)則為每個應用隔離出了一套獨立的灰度環(huán)境,所有帶有?env=gray?的標簽都屬于灰度環(huán)境。等待一小會確保規(guī)則下發(fā)完成,接下來就可以驗證灰度流量在隔離環(huán)境中運行。
為了模擬灰度流量,我們?yōu)樯坛鞘纠醉撛O置了一個?Login To Gray?的入口來模擬從灰度環(huán)境進入商城的流量,在真實環(huán)境中這可以通過在入口網(wǎng)關根據(jù)某些規(guī)則識別流量并自動打標實現(xiàn)。
通過?Login To Gray?登錄后,之后所有請求 Detail、Comment、Order、User 服務的流量都會自動帶有?dubbo.tag=gray?的標識,Dubbo 標簽路由組件會識別這個標識,并將流量路由到剛才圈定的灰度環(huán)境(即所有?env=gray?的實例)。系統(tǒng)運行效果如下:
規(guī)則詳解
我們需要通過 Admin 為?shop-detail、shop-comment、shop-order、shop-user?四個應用分別設置標簽歸組規(guī)則,以?shop-detail?為例:
規(guī)則 key?:shop-detail
規(guī)則體
configVersion: v3.0
force: true
enabled: true
key: shop-detail
tags:
- name: gray
match:
- key: env
value:
exact: gray
其中,name?為灰度環(huán)境的流量匹配條件,只有請求上下文中帶有?dubbo.tag=gray?的流量才會被轉發(fā)到隔離環(huán)境地址子集。請求上下文可通過?RpcContext.getClientAttachment().setAttachment("dubbo.tag", "gray")?傳遞。
name: gray
match?指定了地址子集篩選條件,示例中我們匹配了所有地址 URL 中帶有?env=gray?標簽的地址列表(商城示例中 v2 版本部署的實例都帶已經被打上這個標簽)。
match:
- key: env
value:
exact: gray
force?指定了是否允許流量跳出灰度隔離環(huán)境,這決定了某個服務發(fā)現(xiàn)灰度隔離環(huán)境沒有可用地址時的行為,默認值為?false?表示會 fallback 到不屬于任何隔離環(huán)境 (不帶標簽) 的普通地址集(不會 fallback 到任何已經歸屬其他隔離環(huán)境的 ip 地址)。示例中設置?froce: true?表示當灰度環(huán)境地址子集為空時,服務調用失?。∟o provider exception)。
force: true
清理
為了不影響其他任務效果,通過 Admin 刪除或者禁用剛剛配置的流量隔離規(guī)則。
其他事項
除了示例中演示的動態(tài)環(huán)境劃分,也可以在部署態(tài)指定實例所屬流量標簽(通過一個特殊的 key?dubbo.provider.tag?實現(xiàn)),這樣當實例啟動成功后就已經被自動圈定在某個流量環(huán)境,具體配置方式可參見?標簽路由?說明。
通常,dubbo.tag?流量標的傳遞需要依賴全鏈路追蹤工具的幫助,Dubbo 只會負責 A-B 的點對點標簽傳遞,示例中也是通過在每次點對點 RPC 調用前重復設置達成的傳遞效果,在實踐中,全鏈路灰度往往從 tag 設置進全鏈路上下文后自動啟動,我們只需要擴展 Dubbo Filter 將全鏈路工具上下文中的 tag 標簽讀取并設置進 Dubbo 上下文即可實現(xiàn)全鏈路在 Dubbo 中的自動傳遞,具體可參見?Dubbo 鏈路追蹤集成示例。另外,除了 RPC 調用,在微服務體系的其他基礎產品中也需要依賴全鏈路上下文保證灰度標識的傳遞,以保證完整的流量隔離環(huán)境。
柚子快報激活碼778899分享:Dubbo 環(huán)境隔離
文章鏈接
本文內容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。