在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

OSC開(kāi)源社區(qū) ? 來(lái)源:OSC開(kāi)源社區(qū) ? 作者:OSC開(kāi)源社區(qū) ? 2022-10-21 09:22 ? 次閱讀

前言

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

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

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

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

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

開(kāi)發(fā)測(cè)試階段的多測(cè)試環(huán)境場(chǎng)景

發(fā)布階段的金絲雀發(fā)布、藍(lán)綠發(fā)布、全鏈路灰度等

生產(chǎn)運(yùn)行階段的單元化、AB測(cè)試等

本期我們主要聊聊開(kāi)發(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í)際的開(kāi)發(fā)過(guò)程中,一個(gè)微服務(wù)架構(gòu)系統(tǒng)下的不同微服務(wù)可能是由多個(gè)團(tuán)隊(duì)進(jìn)行開(kāi)發(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ì)在開(kāi)發(fā)其所屬的微服務(wù),調(diào)試的時(shí)候需要驗(yàn)證完整的微服務(wù)調(diào)用鏈路。此時(shí)需要依賴其他團(tuán)隊(duì)的微服務(wù),如何部署開(kāi)發(fā)聯(lián)調(diào)環(huán)境就會(huì)遇到以下問(wèn)題:

如果所有團(tuán)隊(duì)都使用同一套開(kāi)發(fā)聯(lián)調(diào)環(huán)境,那么一個(gè)團(tuán)隊(duì)的測(cè)試微服務(wù)實(shí)例無(wú)法正常運(yùn)行時(shí),會(huì)影響其他依賴該微服務(wù)的應(yīng)用也無(wú)法正常運(yùn)行。

如果每個(gè)團(tuán)隊(duì)有單獨(dú)的一套開(kāi)發(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)來(lái)幫助部署一套運(yùn)維簡(jiǎn)單且成本較低開(kāi)發(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ǔ)概念,如下所示:

基線環(huán)境(Baseline Environment): 完整穩(wěn)定的基礎(chǔ)環(huán)境,是作為同類型下其他環(huán)境流量通路的一個(gè)兜底可用環(huán)境,用戶應(yīng)該盡量保證基線環(huán)境的完整性、穩(wěn)定性。

測(cè)試環(huán)境(Feature Environment): 一種臨時(shí)環(huán)境,僅可能為開(kāi)發(fā)/測(cè)試環(huán)境類型,測(cè)試環(huán)境不需要部署全鏈路完整的服務(wù),而是僅部署本次有變更的服務(wù),其他服務(wù)通過(guò)服務(wù)路由的方式復(fù)用基線環(huán)境服務(wù)資源。

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

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

1.2 服務(wù)路由

服務(wù)路由模型

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

a98a51d2-5086-11ed-a3b6-dac502259ad0.png

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

在流量的微觀世界里,統(tǒng)一通過(guò)標(biāo)簽(屬性)來(lái)標(biāo)識(shí)一個(gè)實(shí)體,例如請(qǐng)求有來(lái)源調(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ù)語(yǔ):

服務(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í)例的問(wèn)題。區(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)過(guò)以下組件:App -> 網(wǎng)關(guān) -> 用戶中心 -> 積分中心 -> 活動(dòng)中心。

a9a173e4-5086-11ed-a3b6-dac502259ad0.png圖:測(cè)試環(huán)境路由示意圖

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

服務(wù)實(shí)例染色(標(biāo)識(shí)實(shí)例屬于哪個(gè)測(cè)試環(huán)境)

流量染色(標(biāo)識(shí)請(qǐng)求應(yīng)該被轉(zhuǎn)發(fā)到哪個(gè)測(cè)試環(huán)境)

服務(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)境下沒(méi)有服務(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í)例上打 的標(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)簽值則需要打不同包??梢酝ㄟ^(guò)以下兩種方式實(shí)現(xiàn)同一個(gè)運(yùn)行包設(shè)置不同的標(biāo)簽值:

通過(guò) -D 啟動(dòng)參數(shù)覆蓋,例如:-Dspring.cloud.tencent.metadata.content.idc=guangzhou

通過(guò) Spring Boot 標(biāo)準(zhǔn)方式,把a(bǔ)pplication.yml外掛本地磁盤(pán)上

方式二:環(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 還提供了一種允許開(kāi)發(fā)者自定義標(biāo)簽 Provider 的方式。例如以下兩種實(shí)踐場(chǎng)景:

把實(shí)例標(biāo)簽放到機(jī)器上的某一個(gè)配置文件里,例如 /etc/metadata。

應(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)過(guò)當(dāng)前實(shí)例的請(qǐng)求都帶上當(dāng)前實(shí)例的標(biāo)簽信息。例如經(jīng)過(guò) 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ì)的鍵列表。

通過(guò)配置文件的 spring.cloud.tencent.metadata.content.transitive=["idc", "env"] 配置項(xiàng)指定

通過(guò) SCT_METADATA_CONTENT_TRANSITIVE=IDC,ENV 環(huán)境變量指定

通過(guò)實(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í)則需要通過(guò)動(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)過(guò)網(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)過(guò)一系列的 RouterFilter 插件過(guò)濾出滿足條件的實(shí)例集合。

ab224e3c-5086-11ed-a3b6-dac502259ad0.png圖:北極星服務(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)簽,通過(guò) featureenv 標(biāo)簽篩選出屬于同一個(gè)測(cè)試環(huán)境的服務(wù)實(shí)例。

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

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

擴(kuò)展 RestTemplate 、 Feign、SCG 獲取請(qǐng)求的標(biāo)簽信息并塞到 RouterContext (路由信息上下文)里。

擴(kuò)展 Spring Cloud 負(fù)載均衡組件(Hoxton 版本之前為 Ribbon,2020版本之后為 Spring Cloud LoadBalancer),在擴(kuò)展的實(shí)現(xiàn)里調(diào)用北極星的服務(wù)路由 API 實(shí)現(xiàn)服務(wù)實(shí)例過(guò)濾。

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

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

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

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

服務(wù)增加測(cè)試環(huán)境路由插件依賴

部署的實(shí)例打上環(huán)境標(biāo)簽

為請(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)簽,用戶也可以通過(guò)系統(tǒng)內(nèi)置的 system-feature-env-router-label=custom_feature_env_key 標(biāo)簽來(lái)指定測(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)求沒(méi)有匹配到對(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)染色。該方式是讓開(kāi)發(fā)者在請(qǐng)求創(chuàng)建的時(shí)候根據(jù)業(yè)務(wù)邏輯進(jìn)行流量染色。

ab5195f2-5086-11ed-a3b6-dac502259ad0.png圖:客戶端染色示意圖

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

動(dòng)態(tài)染色是開(kāi)發(fā)者配置一定的染色規(guī)則,讓流量經(jīng)過(guò)網(wǎng)關(guān)時(shí)自動(dòng)染色,使用起來(lái)相當(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)。

ac679c52-5086-11ed-a3b6-dac502259ad0.png圖:網(wǎng)關(guān)動(dòng)態(tài)染色示意圖

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

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

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

ac9e2e84-5086-11ed-a3b6-dac502259ad0.png圖:網(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)的開(kāi)發(fā)階段是非常實(shí)用的功能,能夠大大降低測(cè)試環(huán)境的維護(hù)成本、資源成本,同時(shí)能夠極大的提高研發(fā)效率。通過(guò)操作指引的章節(jié)可以看出通過(guò) 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è)界常見(jiàn)的測(cè)試環(huán)境路由實(shí)現(xiàn)方案往往需要下發(fā)路由規(guī)則給鏈路上的服務(wù),從而實(shí)現(xiàn)路由能力。但是通過(guò)北極星的元數(shù)據(jù)路由能力,整個(gè)方案里無(wú)需下發(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ú)需做任何事情,只需要配置網(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ù)開(kāi)發(fā)框架。您的一個(gè)建議、Issue、Pull Request 甚至只是一個(gè)小小的 Star 都是對(duì) Spring Cloud Tencent 社區(qū)極大的支持。

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

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 路由
    +關(guān)注

    關(guān)注

    0

    文章

    278

    瀏覽量

    41843
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14343
  • Cloud
    +關(guān)注

    關(guān)注

    0

    文章

    68

    瀏覽量

    5355

原文標(biāo)題:如何解決Spring Cloud下測(cè)試環(huán)境路由問(wèn)題

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何用ACM簡(jiǎn)化你的Spring Cloud微服務(wù)環(huán)境配置管理

    務(wù)環(huán)境配置管理的方案,并會(huì)簡(jiǎn)單比較一ACM與Spring Cloud Config方案的優(yōu)劣。點(diǎn)此查看原文:[url=]http://click.aliyun.com/m/41595
    發(fā)表于 02-02 14:18

    EDAS再升級(jí)!全面支持Spring Cloud應(yīng)用

    。服務(wù)器的不斷增加對(duì)于運(yùn)維人員也是一個(gè)極大的挑戰(zhàn)。開(kāi)發(fā)、測(cè)試、線上環(huán)境差異性,交付流程越來(lái)越復(fù)雜,新應(yīng)用上線不僅效率低,而且風(fēng)險(xiǎn)高。為了優(yōu)化Spring Cloud微服務(wù)體驗(yàn),就必須補(bǔ)
    發(fā)表于 02-02 15:20

    使用阿里云ACM簡(jiǎn)化你的Spring Cloud微服務(wù)環(huán)境配置管理

    務(wù)環(huán)境配置管理的方案,并會(huì)簡(jiǎn)單比較一ACM與Spring Cloud Config方案的優(yōu)劣。配置的環(huán)境屬性毫無(wú)疑問(wèn),在系統(tǒng)持續(xù)交付的過(guò)程
    發(fā)表于 07-04 17:16

    Dubbo Cloud Native 之路的實(shí)踐與思考

    發(fā)現(xiàn)的能力,就功能性而言,Zuul 和 Gateway 自身并不具備這樣的特性,需要搭配 Eureka 這樣組件,它們更像服務(wù)路由器的角色。分布式配置左邊和中間的四種技術(shù)均為 Spring Cloud
    發(fā)表于 07-05 16:05

    Spring Cloud Config公共配置解決方案

    Spring Cloud Config 多服務(wù)公共配置
    發(fā)表于 08-30 09:05

    使用Spring Cloud與Docker實(shí)戰(zhàn)微服務(wù)

    使用Spring Cloud與Docker實(shí)戰(zhàn)微服務(wù)
    發(fā)表于 09-09 08:31 ?7次下載
    使用<b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b>與Docker實(shí)戰(zhàn)微服務(wù)

    Spring Cloud Function基于Spring Boot的函數(shù)計(jì)算框架

    ./oschina_soft/spring-cloud-function.zip
    發(fā)表于 05-13 10:16 ?0次下載
    <b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b> Function基于<b class='flag-5'>Spring</b> Boot的函數(shù)計(jì)算框架

    RabbitRpc基于spring cloud的微服務(wù)rpc調(diào)用

    ./oschina_soft/gitee-spring-cloud-rabbitrpc.zip
    發(fā)表于 06-14 09:51 ?1次下載
    RabbitRpc基于<b class='flag-5'>spring</b> <b class='flag-5'>cloud</b>的微服務(wù)rpc調(diào)用

    Spring Cloud Gateway服務(wù)網(wǎng)關(guān)的部署與使用詳細(xì)教程

    Gateway 網(wǎng)關(guān)的搭建: 3、Spring Cloud Gateway 配置項(xiàng)的說(shuō)明: 4、Gateway 集成 nacos 注冊(cè)中心實(shí)現(xiàn)服務(wù)發(fā)現(xiàn): 5、Gateway 整合 Apollo 實(shí)現(xiàn)動(dòng)態(tài)路由配置
    的頭像 發(fā)表于 10-11 17:46 ?1749次閱讀

    Spring Cloud Tencent發(fā)布最新匹配版本!

    無(wú)論北極星還是 Spring Cloud Tencent 當(dāng)前都在積極的修復(fù) Bug、完善用戶體驗(yàn)、迭代新功能。所以 Spring Cloud Tencent 也第一時(shí)間適配了
    的頭像 發(fā)表于 12-09 15:34 ?1099次閱讀

    Spring Cloud 2022.0.0正式發(fā)布

    由于 Spring 現(xiàn)在提供了他們自己實(shí)現(xiàn)的接口 HTTP 客戶端解決方案,因此從 2022.0.0 開(kāi)始,Spring Cloud OpenFeign 已到達(dá)特性完成狀態(tài)。這意味著 Spri
    的頭像 發(fā)表于 12-22 10:39 ?726次閱讀

    Spring Cloud 】基于微服務(wù)架構(gòu)的智慧工地監(jiān)管平臺(tái)源碼帶APP

    技術(shù)架構(gòu):微服務(wù) 開(kāi)發(fā)語(yǔ)言:Java 開(kāi)發(fā)工具:Idea 前端框架:Vue 后端框架:Spring Cloud 數(shù) 據(jù) 庫(kù):MySql 移 動(dòng) 端:UniApp
    的頭像 發(fā)表于 08-28 11:10 ?637次閱讀
    【<b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b> 】基于微服務(wù)架構(gòu)的智慧工地監(jiān)管平臺(tái)源碼帶APP

    Spring Cloud :打造可擴(kuò)展的微服務(wù)網(wǎng)關(guān)

    Spring Cloud Gateway是一個(gè)基于Spring Framework 5和Project Reactor的反應(yīng)式編程模型的微服務(wù)網(wǎng)關(guān)。它提供了豐富的功能,包括動(dòng)態(tài)路由、請(qǐng)
    的頭像 發(fā)表于 10-22 10:03 ?527次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b> :打造可擴(kuò)展的微服務(wù)網(wǎng)關(guān)

    dubbo和spring cloud區(qū)別

    Dubbo和Spring Cloud是兩個(gè)非常流行的微服務(wù)框架,各有自己的特點(diǎn)和優(yōu)勢(shì)。在本文中,我們將詳細(xì)介紹Dubbo和Spring Cloud的區(qū)別。 1.架構(gòu)設(shè)計(jì): Dubbo是
    的頭像 發(fā)表于 12-04 14:47 ?1680次閱讀

    Spring Cloud Gateway網(wǎng)關(guān)框架

    SpringCloud Gateway功能特征如下: (1) 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 進(jìn)行構(gòu)建; (2) 動(dòng)態(tài)路由:能夠匹配任何請(qǐng)求屬性;
    的頭像 發(fā)表于 08-22 09:58 ?493次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b> Gateway網(wǎng)關(guān)框架
    主站蜘蛛池模板: 玖玖国产| 亚洲色图日韩| 四虎永久精品视频在线| 四虎新地址4hu 你懂的| 欧美色图在线视频| 在线观看色视频网站| 免费国内精品久久久久影院| 亚洲午夜一区二区三区| 伊人久久影院大香线蕉| 久久中文字幕综合婷婷| 日日操夜夜骑| 精品久久久久久国产免费了| 亚洲成电影| 模特精品视频一区| 99久久999久久久综合精品涩 | 免费日韩三级| 手机看片国产免费永久| 热re99久久精品国99热| 四虎影院.com| 最新看片网址| 69japanese日本100| 狠狠躁| 久久久噜久噜久久综合| 国产伦精品一区二区三区四区 | 在线免费观看h视频| 四虎影院黄色片| 午夜看片网址| 丰满年轻岳欲乱中文字幕| 日本电影在线观看黄| 天天干天天摸| 最新黄色免费网站| 色五五月五月开| 天天操夜夜艹| 亚洲精品成人a在线观看| 97色吧| 男生脱美女内裤内衣动态图| 狠狠色丁香婷婷综合最新地址| 日本视频免费高清一本18| 亚洲一区二区三区在线网站| 免费观看四虎精品成人| www.好吊色|