1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        如何解決 Spring Cloud 下測(cè)試環(huán)境路由問題

        共 11624字,需瀏覽 24分鐘

         ·

        2022-07-31 11:26

        前言

        Spring Cloud Tencent 微服務(wù)開發(fā)框架自六月底正式對(duì)外宣發(fā)后,受到了許多開發(fā)者非常火熱的關(guān)注。不到一個(gè)月時(shí)間, Github Star 數(shù)就已突破 2000,超過 1000 名開發(fā)者加入我們的社群,并有 20 多個(gè)開發(fā)者參與貢獻(xiàn)項(xiàng)目代碼,項(xiàng)目的熱門程度極大地超出我們的預(yù)期,同時(shí)也驗(yàn)證了我們?cè)谧畛跣l(fā)文章里的觀點(diǎn):Spring Boot + Spring Cloud 仍是當(dāng)前使用相當(dāng)廣泛開發(fā)框架。

        在這一個(gè)月時(shí)間里,Spring Cloud Tencent 的關(guān)注者們最關(guān)心的問題就是,Spring Cloud Tencent 后續(xù)規(guī)劃是什么?

        在過去的一段時(shí)間,我們的主要精力聚焦在微服務(wù)領(lǐng)域最基本的服務(wù)治理原子能力,例如服務(wù)發(fā)現(xiàn)、動(dòng)態(tài)配置、限流熔斷、路由等。Spring Cloud 其它套件基本上也局限于這些基礎(chǔ)能力。但是企業(yè)真正在實(shí)踐 Spring Cloud 過程中,發(fā)現(xiàn)針對(duì)自身具體的業(yè)務(wù)場(chǎng)景,這些原子能力并不能直接提供解決方案,往往需要做二次開發(fā)、定制等。例如定制 Spring Cloud Gateway 的 Filter、增強(qiáng) Feign、支持各種復(fù)雜的服務(wù)路由場(chǎng)景等。因此,開箱即用的業(yè)務(wù)通用解決方案對(duì)企業(yè)來說更具有價(jià)值。

        綜上所述, Spring Cloud Tencent 后續(xù)重要的規(guī)劃之一就是在不斷夯實(shí)服務(wù)治理原子能力的基礎(chǔ)上,提供開箱即用的業(yè)務(wù)通用解決方案,從工具到方案的升級(jí)。

        為此 Spring Cloud Tencent 新增了 spring-cloud-tencent-plugin-starts 模塊,在此模塊下實(shí)現(xiàn)不同業(yè)務(wù)場(chǎng)景的解決方案?,F(xiàn)階段我們主要聚焦在精細(xì)化流量治理能力場(chǎng)景化方案上,并按照開發(fā)流程拆分為三個(gè)階段:

        1. 開發(fā)測(cè)試階段的多測(cè)試環(huán)境場(chǎng)景
        2. 發(fā)布階段的金絲雀發(fā)布、藍(lán)綠發(fā)布、全鏈路灰度等
        3. 生產(chǎn)運(yùn)行階段的單元化、AB測(cè)試等

        本期我們主要聊聊開發(fā)測(cè)試階段的多測(cè)試環(huán)境場(chǎng)景實(shí)戰(zhàn),詳細(xì)介紹 Spring Cloud Tencent 實(shí)現(xiàn)多測(cè)試環(huán)境場(chǎng)景的方案。

        一、基礎(chǔ)知識(shí)

        1.1 什么是測(cè)試環(huán)境路由

        在實(shí)際的開發(fā)過程中,一個(gè)微服務(wù)架構(gòu)系統(tǒng)下的不同微服務(wù)可能是由多個(gè)團(tuán)隊(duì)進(jìn)行開發(fā)與維護(hù)的,每個(gè)團(tuán)隊(duì)只需關(guān)注所屬的一個(gè)或多個(gè)微服務(wù),而各個(gè)團(tuán)隊(duì)維護(hù)的微服務(wù)之間可能存在相互調(diào)用關(guān)系。如果一個(gè)團(tuán)隊(duì)在開發(fā)其所屬的微服務(wù),調(diào)試的時(shí)候需要驗(yàn)證完整的微服務(wù)調(diào)用鏈路。此時(shí)需要依賴其他團(tuán)隊(duì)的微服務(wù),如何部署開發(fā)聯(lián)調(diào)環(huán)境就會(huì)遇到以下問題:

        1. 如果所有團(tuán)隊(duì)都使用同一套開發(fā)聯(lián)調(diào)環(huán)境,那么一個(gè)團(tuán)隊(duì)的測(cè)試微服務(wù)實(shí)例無法正常運(yùn)行時(shí),會(huì)影響其他依賴該微服務(wù)的應(yīng)用也無法正常運(yùn)行。
        2. 如果每個(gè)團(tuán)隊(duì)有單獨(dú)的一套開發(fā)聯(lián)調(diào)環(huán)境,那么每個(gè)團(tuán)隊(duì)不僅需要維護(hù)自己環(huán)境的微服務(wù)應(yīng)用,還需要維護(hù)其他團(tuán)隊(duì)環(huán)境的自身所屬微服務(wù)應(yīng)用,效率大大降低。同時(shí),每個(gè)團(tuán)隊(duì)都需要部署完整的一套微服務(wù)架構(gòu)應(yīng)用,成本也隨著團(tuán)隊(duì)數(shù)的增加而大大上升。

        此時(shí)可以使用測(cè)試環(huán)境路由的架構(gòu)來幫助部署一套運(yùn)維簡(jiǎn)單且成本較低開發(fā)聯(lián)調(diào)環(huán)境。測(cè)試環(huán)境路由是一種基于服務(wù)路由的環(huán)境治理策略,核心是維護(hù)一個(gè)穩(wěn)定的基線環(huán)境作為基礎(chǔ)環(huán)境,測(cè)試環(huán)境僅需要部署需要變更的微服務(wù)。多測(cè)試環(huán)境有兩個(gè)基礎(chǔ)概念,如下所示:

        1. 基線環(huán)境(Baseline Environment): 完整穩(wěn)定的基礎(chǔ)環(huán)境,是作為同類型下其他環(huán)境流量通路的一個(gè)兜底可用環(huán)境,用戶應(yīng)該盡量保證基線環(huán)境的完整性、穩(wěn)定性。
        2. 測(cè)試環(huán)境(Feature Environment): 一種臨時(shí)環(huán)境,僅可能為開發(fā)/測(cè)試環(huán)境類型,測(cè)試環(huán)境不需要部署全鏈路完整的服務(wù),而是僅部署本次有變更的服務(wù),其他服務(wù)通過服務(wù)路由的方式復(fù)用基線環(huán)境服務(wù)資源。

        部署完成多測(cè)試環(huán)境后,開發(fā)者可以通過一定的路由規(guī)則方式,將測(cè)試請(qǐng)求打到不同的測(cè)試環(huán)境,如果測(cè)試環(huán)境沒有相應(yīng)的微服務(wù)處理鏈路上的請(qǐng)求,那么會(huì)降級(jí)到基線環(huán)境處理。因此,開發(fā)者需要將開發(fā)新測(cè)試的微服務(wù)部署到對(duì)應(yīng)的測(cè)試環(huán)境,而不需要更新或不屬于開發(fā)者管理的微服務(wù)則復(fù)用基線環(huán)境的服務(wù),完成對(duì)應(yīng)測(cè)試環(huán)境的測(cè)試。

        雖然測(cè)試環(huán)境路由是一個(gè)相對(duì)成熟的開發(fā)測(cè)試環(huán)境解決方案,但是能夠開箱即用的生產(chǎn)開發(fā)框架卻不多,往往需要開發(fā)者二次開發(fā)相應(yīng)的功能。因此需要一個(gè)相對(duì)完善的解決方案來幫助實(shí)現(xiàn)測(cè)試環(huán)境路由,簡(jiǎn)化開發(fā)難度并提升開發(fā)效率。

        1.2 服務(wù)路由

        服務(wù)路由模型

        服務(wù)路由抽象出最簡(jiǎn)化的模型如下圖所示,解決的是 “哪些請(qǐng)求轉(zhuǎn)發(fā)到哪些實(shí)例” 的問題。細(xì)化來看,包含三個(gè)問題:1. 如何精確標(biāo)識(shí)請(qǐng)求?2. 如何精確標(biāo)識(shí)實(shí)例?3. 如何轉(zhuǎn)發(fā)?

        (圖:服務(wù)路由模型示意圖)

        在流量的微觀世界里,統(tǒng)一通過標(biāo)簽(屬性)來標(biāo)識(shí)一個(gè)實(shí)體,例如請(qǐng)求有來源調(diào)用服務(wù)、目標(biāo)環(huán)境標(biāo)簽等,服務(wù)實(shí)例則有版本號(hào)、實(shí)例分組、環(huán)境分組等標(biāo)簽。服務(wù)路由則是將滿足標(biāo)簽匹配條件的請(qǐng)求轉(zhuǎn)發(fā)到滿足匹配條件的服務(wù)實(shí)例。所以服務(wù)路由的模型可拆解出如下的的專業(yè)術(shù)語:

        • 服務(wù)實(shí)例染色 (為服務(wù)實(shí)例設(shè)置標(biāo)簽信息)
        • 流量染色(為請(qǐng)求設(shè)置標(biāo)簽信息)
        • 服務(wù)路由(根據(jù)路由策略,把請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)實(shí)例)

        服務(wù)實(shí)例標(biāo)簽如何傳遞到調(diào)用方

        服務(wù)實(shí)例注冊(cè)到注冊(cè)中心時(shí),會(huì)帶上標(biāo)簽信息。服務(wù)調(diào)用方從注冊(cè)中心獲取到服務(wù)實(shí)例信息就包含了實(shí)例的標(biāo)簽信息。

        標(biāo)簽全鏈路透?jìng)?/strong>

        有一類請(qǐng)求標(biāo)簽數(shù)據(jù)需要在業(yè)務(wù)響應(yīng)鏈路上一直傳遞,例如全鏈路追蹤里的 TraceId 、測(cè)試環(huán)境路由的 FeatureEnv 標(biāo)簽等。

        服務(wù)路由和負(fù)載均衡的區(qū)別

        服務(wù)路由和負(fù)載均衡都是解決選擇服務(wù)實(shí)例的問題。區(qū)別在于服務(wù)路由是從全量的服務(wù)實(shí)例中挑選出一批滿足路由規(guī)則的服務(wù)實(shí)例,而負(fù)載均衡則是從路由匹配之后的服務(wù)實(shí)例列表中挑選出一個(gè)適合處理請(qǐng)求的實(shí)例。

        二、測(cè)試環(huán)境路由實(shí)現(xiàn)原理

        2.1 方案總覽

        測(cè)試環(huán)境路由的樣例實(shí)現(xiàn)以下圖為例,一共有兩個(gè)測(cè)試環(huán)境以及一個(gè)基線環(huán)境。流量從端到端會(huì)依次經(jīng)過以下組件:App -> 網(wǎng)關(guān) -> 用戶中心 -> 積分中心 -> 活動(dòng)中心。

        圖:測(cè)試環(huán)境路由示意圖

        根據(jù)上一節(jié)服務(wù)路由章節(jié)所述,為了達(dá)到測(cè)試環(huán)境路由的能力,開發(fā)工作需要做三件事情:

        1. 服務(wù)實(shí)例染色(標(biāo)識(shí)實(shí)例屬于哪個(gè)測(cè)試環(huán)境)
        2. 流量染色(標(biāo)識(shí)請(qǐng)求應(yīng)該被轉(zhuǎn)發(fā)到哪個(gè)測(cè)試環(huán)境)
        3. 服務(wù)路由
          a. 網(wǎng)關(guān)根據(jù)請(qǐng)求的目標(biāo)測(cè)試環(huán)境標(biāo)簽轉(zhuǎn)發(fā)到對(duì)應(yīng)的目標(biāo)測(cè)試環(huán)境的用戶中心。
          b. 服務(wù)調(diào)用時(shí),優(yōu)先轉(zhuǎn)發(fā)到同測(cè)試環(huán)境下的目標(biāo)服務(wù)實(shí)例,如果同測(cè)試環(huán)境下沒有服務(wù)實(shí)例則轉(zhuǎn)發(fā)到基線環(huán)境。

        以下三小節(jié),將會(huì)詳細(xì)介紹這三部分的原理。

        2.2 服務(wù)實(shí)例染色

        在多測(cè)試環(huán)境的場(chǎng)景中,需要對(duì)每個(gè)測(cè)試環(huán)境部署的實(shí)例進(jìn)行區(qū)分,因此需要在實(shí)例上打<featureenv=測(cè)試環(huán)境名> 的標(biāo)簽。Spring Cloud Tencent 一共支持三種服務(wù)實(shí)例染色方式。

        方式一:配置文件

        在 Spring Boot 的 application.yml 配置文件里配置以下內(nèi)容即可實(shí)現(xiàn)染色:

        spring:
          cloud:
            tencent:
              metadata:
                content:
                  idc: shanghai
                  env: f1

        Spring Cloud Tencent 應(yīng)用在啟動(dòng)時(shí),讀取配置文件并解析出 idc=shanghai 和 env=f1 標(biāo)簽信息。

        如果以上配置文件放在項(xiàng)目源碼里,要實(shí)現(xiàn)不同的實(shí)例具有不同的標(biāo)簽值則需要打不同包??梢酝ㄟ^以下兩種方式實(shí)現(xiàn)同一個(gè)運(yùn)行包設(shè)置不同的標(biāo)簽值:

        1. 通過 -D 啟動(dòng)參數(shù)覆蓋,例如:-Dspring.cloud.tencent.metadata.content.idc=guangzhou
        2. 通過 Spring Boot 標(biāo)準(zhǔn)方式,把application.yml外掛本地磁盤上

        方式二:環(huán)境變量

        環(huán)境變量在容器場(chǎng)景下非常方便,Spring Cloud Tencent 約定了前綴為 SCT_METADATA_CONTENT_ 的環(huán)境變量為實(shí)例的標(biāo)簽信息,例如:

        • SCT_METADATA_CONTENT_IDC=shanghai
        • SCT_METADATA_CONTENT_ENV=f1

        Spring Cloud Tencent 應(yīng)用在啟動(dòng)時(shí),自動(dòng)會(huì)讀取環(huán)境變量并解析出 IDC=shanghai 和 ENV=f1 標(biāo)簽信息。

        方式三:自定義實(shí)現(xiàn) SPI

        前面兩種方式為 Spring Cloud Tencent 內(nèi)置的方式,但是不一定符合每個(gè)生產(chǎn)項(xiàng)目的規(guī)范,因此 Spring Cloud Tencent 還提供了一種允許開發(fā)者自定義標(biāo)簽 Provider 的方式。例如以下兩種實(shí)踐場(chǎng)景:

        1. 把實(shí)例標(biāo)簽放到機(jī)器上的某一個(gè)配置文件里,例如 /etc/metadata。
        2. 應(yīng)用啟動(dòng)時(shí),調(diào)用公司的 CMDB 接口獲取元信息。

        這種場(chǎng)景下,只要實(shí)現(xiàn) InstanceMetadataProvider SPI 擴(kuò)展即可。

        2.3 流量染色

        流量染色即為每個(gè)請(qǐng)求打上目標(biāo)測(cè)試環(huán)境標(biāo)簽,路由轉(zhuǎn)發(fā)時(shí)根據(jù)請(qǐng)求標(biāo)簽匹配目標(biāo)服務(wù)實(shí)例。而流量染色可以分為以下幾種方式:

        方式一:靜態(tài)染色

        2.2 小節(jié)介紹了可以為服務(wù)實(shí)例設(shè)置一系列的標(biāo)簽信息,例如 idc=shanghai、env=f1 等。在有些場(chǎng)景下,期望所有經(jīng)過當(dāng)前實(shí)例的請(qǐng)求都帶上當(dāng)前實(shí)例的標(biāo)簽信息。例如經(jīng)過 env=f1 的實(shí)例的請(qǐng)求都攜帶 env=f1 的標(biāo)簽信息。

        服務(wù)實(shí)例染色有三種方式,對(duì)應(yīng)的定義哪些標(biāo)簽需要作為請(qǐng)求標(biāo)簽透?jìng)鞯芥溌飞弦灿腥N方式,核心思想就是定義需要全鏈路傳遞的標(biāo)簽鍵值對(duì)的鍵列表。

        1. 通過配置文件的 spring.cloud.tencent.metadata.content.transitive=["idc", "env"] 配置項(xiàng)指定
        2. 通過 SCT_METADATA_CONTENT_TRANSITIVE=IDC,ENV 環(huán)境變量指定
        3. 通過實(shí)現(xiàn) InstanceMetadataProvider#getTransitiveMetadataKeys() 方法指定

        方式二:動(dòng)態(tài)染色

        靜態(tài)染色是把服務(wù)實(shí)例的某些標(biāo)簽作為請(qǐng)求標(biāo)簽,服務(wù)實(shí)例標(biāo)簽相對(duì)靜態(tài),應(yīng)用啟動(dòng)后初始化一次之后就不再變更。但是在實(shí)際的應(yīng)用場(chǎng)景下,不同的請(qǐng)求往往需要設(shè)置不同的標(biāo)簽信息。此時(shí)則需要通過動(dòng)態(tài)染色的能力。

        為請(qǐng)求動(dòng)態(tài)染色也非常簡(jiǎn)單,只需增加以 X-Polaris-Metadata-Transitive- 為前綴的 HTTP 請(qǐng)求頭即可,例如:X-Polaris-Metadata-Transitive-featureenv=f1。這樣 featureenv=f1 就能夠作為請(qǐng)求標(biāo)簽在鏈路上透?jìng)鳌?/p>

        方式三:網(wǎng)關(guān)流量染色

        網(wǎng)關(guān)常常作為流量的入口或者中轉(zhuǎn)站。經(jīng)過網(wǎng)關(guān)的請(qǐng)求,可以根據(jù)某些染色規(guī)則為請(qǐng)求增加標(biāo)簽信息。例如滿足請(qǐng)求參數(shù) uid=1000 請(qǐng)求打上 featureenv=f1 標(biāo)簽。

        網(wǎng)關(guān)流量染色是非常實(shí)用的能力,在 Spring Cloud Tencent 里實(shí)現(xiàn)了非常靈活基于染色規(guī)則的 Spring Cloud Gateway 染色插件。例如以下染色規(guī)則可以實(shí)現(xiàn)為 uid=1000 的請(qǐng)求打上 featureenv=f1 標(biāo)簽、uid=1001 的請(qǐng)求打上 featureenv=f2 標(biāo)簽。更詳細(xì)的染色規(guī)則,可以參考文檔。

        {
            "rules":[
                {
                    "conditions":[
                        {
                            "key":"${http.query.uid}",
                            "values":["1000"],
                            "operation":"EQUALS"
                        }
                    ],
                    "labels":[
                        {
                            "key":"featureenv",
                            "value":"f1"
                        }
                    ]
                },
                {
                    "conditions":[
                        {
                            "key":"${http.query.uid}",
                            "values":["1001"],
                            "operation":"EQUALS"
                        }
                    ],
                    "labels":[
                        {
                            "key":"featureenv",
                            "value":"f2"
                        }
                    ]
                }
            ]
        }

        同時(shí) Spring Cloud Tencent 也預(yù)留了 TrafficStainer SPI ,用戶可以實(shí)現(xiàn)自定義流量染色插件。

        2.4 Spring Cloud Tencent 路由功能原理

        北極星提供了非常完善的服務(wù)治理能力,上層的服務(wù)框架基于北極星原生 SDK 就能快速實(shí)現(xiàn)強(qiáng)大的服務(wù)治理能力。Spring Cloud Tencent 就是在北極星的基礎(chǔ)上實(shí)現(xiàn)了服務(wù)路由能力。

        北極星服務(wù)路由原理

        北極星服務(wù)路由實(shí)現(xiàn)原理并不復(fù)雜,如下圖所示,從注冊(cè)中心獲取到所有實(shí)例信息,再經(jīng)過一系列的 RouterFilter 插件過濾出滿足條件的實(shí)例集合。

        圖:北極星服務(wù)路由執(zhí)行鏈

        在多測(cè)試環(huán)境場(chǎng)景下主要用到了 MetadataRouter (元數(shù)據(jù)路由)插件,此插件核心能力是根據(jù)請(qǐng)求的標(biāo)簽完全匹配服務(wù)實(shí)例的標(biāo)簽。

        例如請(qǐng)求有兩個(gè)標(biāo)簽 key1=value1和 key2=value2,MetadataRouter 則會(huì)篩選出所有實(shí)例中包含同時(shí)滿足 key1=value1 和 key2=value2 的服務(wù)實(shí)例。在多測(cè)試環(huán)境場(chǎng)景下,Spring Cloud Tencent 缺省使用 featureenv 標(biāo)簽,通過 featureenv 標(biāo)簽篩選出屬于同一個(gè)測(cè)試環(huán)境的服務(wù)實(shí)例。

        Spring Cloud Tencent 服務(wù)路由原理

        Spring Cloud Tencent 實(shí)現(xiàn)路由核心分成兩個(gè)部分:

        1. 擴(kuò)展 RestTemplate 、 Feign、SCG 獲取請(qǐng)求的標(biāo)簽信息并塞到 RouterContext (路由信息上下文)里。
        2. 擴(kuò)展 Spring Cloud 負(fù)載均衡組件(Hoxton 版本之前為 Ribbon,2020版本之后為 Spring Cloud LoadBalancer),在擴(kuò)展的實(shí)現(xiàn)里調(diào)用北極星的服務(wù)路由 API 實(shí)現(xiàn)服務(wù)實(shí)例過濾。

        擴(kuò)展部分邏輯較為復(fù)雜,感興趣的讀者可以參考 spring-cloud-starter-tencent-polaris-router 模塊源碼。

        三、測(cè)試環(huán)境路由用戶操作指引

        在上一節(jié)中詳細(xì)介紹了測(cè)試環(huán)境路由的實(shí)現(xiàn)原理,這一節(jié)則詳細(xì)介紹站在用戶的視角需要操作的內(nèi)容。

        通過 Spring Cloud Tencent 實(shí)現(xiàn)流量的測(cè)試環(huán)境路由非常簡(jiǎn)單,核心包含三步:

        1. 服務(wù)增加測(cè)試環(huán)境路由插件依賴
        2. 部署的實(shí)例打上環(huán)境標(biāo)簽
        3. 為請(qǐng)求流量打上環(huán)境標(biāo)簽

        完成以上三個(gè)步驟即可。

        3.1 添加測(cè)試環(huán)境路由插件依賴

        Spring Cloud Tencent 中的 spring-cloud-tencent-featureenv-plugin 模塊閉環(huán)了測(cè)試環(huán)境路由全部能力,所有服務(wù)只需要添加該依賴即可引入測(cè)試環(huán)境路由能力。

        3.2 服務(wù)實(shí)例打上環(huán)境標(biāo)簽

        spring-cloud-tencent-featureenv-plugin 默認(rèn)以 featureenv 標(biāo)簽作為匹配標(biāo)簽,用戶也可以通過系統(tǒng)內(nèi)置的 system-feature-env-router-label=custom_feature_env_key 標(biāo)簽來指定測(cè)試環(huán)境路由使用的標(biāo)簽鍵。以下三種方式以默認(rèn)的 featureenv 作為示例。

        方式一:配置文件

        在服務(wù)實(shí)例的配置文件中添加配置,如在 bootstrap.yml添加如下所示即可:

        spring:
          cloud:
            tencent:
              metadata:
                content:
                  featureenv: f1  # f1 替換為測(cè)試環(huán)境名稱

        方式二:環(huán)境變量

        在服務(wù)實(shí)例所在的操作系統(tǒng)中添加環(huán)境變量也可進(jìn)行打標(biāo),例如:SCT_METADATA_CONTENT_featureenv=f1

        方式三:SPI 方式

        自定義實(shí)現(xiàn) InstanceMetadataProvider#getMetadata() 方法的返回值里里包含 featureenv 即可。

        基線環(huán)境標(biāo)簽值

        注意,基線環(huán)境部署的服務(wù)實(shí)例不需要設(shè)置 featureenv 標(biāo)簽,表明其不屬于任何測(cè)試環(huán)境,才可在請(qǐng)求沒有匹配到對(duì)應(yīng)測(cè)試環(huán)境的時(shí)候,匹配到基線環(huán)境。

        3.3 流量染色

        方式一:客戶端染色 (推薦)

        如下圖所示,在客戶端發(fā)出的 HTTP 請(qǐng)求里,新增 X-Polaris-Metadata-Transitive-featureenv=f1 請(qǐng)求頭即可實(shí)現(xiàn)染色。該方式是讓開發(fā)者在請(qǐng)求創(chuàng)建的時(shí)候根據(jù)業(yè)務(wù)邏輯進(jìn)行流量染色。

        圖:客戶端染色示意圖

        方式二:網(wǎng)關(guān)動(dòng)態(tài)染色(推薦)

        動(dòng)態(tài)染色是開發(fā)者配置一定的染色規(guī)則,讓流量經(jīng)過網(wǎng)關(guān)時(shí)自動(dòng)染色,使用起來相當(dāng)方便。例如把 uid=1 用戶的請(qǐng)求都轉(zhuǎn)發(fā)到 f1 環(huán)境,把 uid=0 用戶的請(qǐng)求都轉(zhuǎn)發(fā)到 f2 環(huán)境。只需要配置一條染色規(guī)則即可實(shí)現(xiàn)。

        圖:網(wǎng)關(guān)動(dòng)態(tài)染色示意圖

        Spring Cloud Tencent 通過實(shí)現(xiàn) Spring Cloud Gateway 的 GlobalFilter 來實(shí)現(xiàn)流量染色插件,開發(fā)者只需要添加 spring-cloud-tencent-gateway-plugin 依賴,并在配置文件中打開染色插件開關(guān)(spring.cloud.tencent.plugin.scg.staining.enabled=true)即可引入流量染色能力。

        方式三:網(wǎng)關(guān)靜態(tài)染色

        往請(qǐng)求中加入固定的 Header 是網(wǎng)關(guān)最常見的插件,如下圖所示??梢栽诿總€(gè)環(huán)境部署一個(gè)網(wǎng)關(guān),所有經(jīng)過網(wǎng)關(guān)的請(qǐng)求都增加 X-Polaris-Metadata-Transitive-featureenv=f1 請(qǐng)求頭即可。此種方式需要每個(gè)環(huán)境部署網(wǎng)關(guān),成本高,所以使用頻率相對(duì)較低。

        圖:網(wǎng)關(guān)靜態(tài)染色示意圖

        完成以上操作步驟即可實(shí)現(xiàn)測(cè)試環(huán)境路由,讀者可運(yùn)行 Spring Cloud Tencent 下 polaris-router-featureenv-example 完整體驗(yàn)。

        四、總結(jié)

        測(cè)試環(huán)境路由在微服務(wù)架構(gòu)系統(tǒng)的開發(fā)階段是非常實(shí)用的功能,能夠大大降低測(cè)試環(huán)境的維護(hù)成本、資源成本,同時(shí)能夠極大的提高研發(fā)效率。通過操作指引的章節(jié)可以看出通過 Spring Cloud Tencent 實(shí)現(xiàn)測(cè)試環(huán)境路由非常簡(jiǎn)單的,只需要部署的服務(wù)實(shí)例增加相應(yīng)的環(huán)境標(biāo)簽以及在請(qǐng)求頭中增加一個(gè)標(biāo)簽即可。

        業(yè)界常見的測(cè)試環(huán)境路由實(shí)現(xiàn)方案往往需要下發(fā)路由規(guī)則給鏈路上的服務(wù),從而實(shí)現(xiàn)路由能力。但是通過北極星的元數(shù)據(jù)路由能力,整個(gè)方案里無需下發(fā)任何路由規(guī)則,只需要在實(shí)例設(shè)置相應(yīng)的標(biāo)簽信息即可,操作成本非常低。

        如果項(xiàng)目剛好使用 Spring Cloud Gateway 作為網(wǎng)關(guān),那么集成 Spring Cloud Tencent 里的網(wǎng)關(guān)染色插件能夠進(jìn)一步降低流量染色成本,客戶端無需做任何事情,只需要配置網(wǎng)關(guān)染色規(guī)則即可實(shí)現(xiàn)流量染色。

        目前 Spring Cloud Tencent 主要實(shí)現(xiàn)了微服務(wù)之間調(diào)用流量的測(cè)試環(huán)境路由能力,不涉及消息隊(duì)列、任務(wù)調(diào)度的測(cè)試環(huán)境路由能力。

        五、歡迎共建

        如果您所在項(xiàng)目正在使用 Spring Cloud 框架,并且

        • 沉淀出了非常實(shí)用的通用插件能力和場(chǎng)景化解決方案
        • 目前正遇到一些落地難題
        • 對(duì) Spring Cloud Tencent 項(xiàng)目感興趣

        非常歡迎您跟我們一起打磨更多實(shí)用且通用的能力,共建滿足各類實(shí)際生產(chǎn)場(chǎng)景使用的微服務(wù)開發(fā)框架。您的一個(gè)建議、Issue、Pull Request 甚至只是一個(gè)小小的 Star 都是對(duì) Spring Cloud Tencent 社區(qū)極大的支持。

        Github 地址:https://github.com/Tencent/spring-cloud-tencent

        我們創(chuàng)建了一個(gè)高質(zhì)量的技術(shù)交流群,與優(yōu)秀的人在一起,自己也會(huì)優(yōu)秀起來,趕緊點(diǎn)擊加群,享受一起成長(zhǎng)的快樂。另外,如果你最近想跳槽的話,年前我花了2周時(shí)間收集了一波大廠面經(jīng),節(jié)后準(zhǔn)備跳槽的可以點(diǎn)擊這里領(lǐng)取

        推薦閱讀

        ··································

        你好,我是程序猿DD,10年開發(fā)老司機(jī)、阿里云MVP、騰訊云TVP、出過書創(chuàng)過業(yè)、國(guó)企4年互聯(lián)網(wǎng)6年從普通開發(fā)到架構(gòu)師、再到合伙人。一路過來,給我最深的感受就是一定要不斷學(xué)習(xí)并關(guān)注前沿。只要你能堅(jiān)持下來,多思考、少抱怨、勤動(dòng)手,就很容易實(shí)現(xiàn)彎道超車!所以,不要問我現(xiàn)在干什么是否來得及。如果你看好一個(gè)事情,一定是堅(jiān)持了才能看到希望,而不是看到希望才去堅(jiān)持。相信我,只要堅(jiān)持下來,你一定比現(xiàn)在更好!如果你還沒什么方向,可以先關(guān)注我,這里會(huì)經(jīng)常分享一些前沿資訊,幫你積累彎道超車的資本。

        點(diǎn)擊領(lǐng)取2022最新10000T學(xué)習(xí)資料

        瀏覽 39
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            出差被绝伦上司整了一夜 | 九哥草逼网 | 《色戒》无删减版在线看视频 | 成人免费视频 国产免费麻豆 | 看三级视频 | 大奶子一区二区 | 全部孕妇毛片丰满孕妇孕交最新章节免费阅读 | 国产三级国产三级国产 | 77777色 | 婷婷五月六月婷婷综合激情 |