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