您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Dubbo靜態(tài)規(guī)則打標(biāo)的方法是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Dubbo靜態(tài)規(guī)則打標(biāo)的方法是什么”吧!
在新模型 release 后,我們發(fā)現(xiàn) Provider 每個(gè) URL 發(fā)布元數(shù)據(jù)都會(huì)注冊(cè) ServiceInstance,影響性能需要優(yōu)化。
我們的優(yōu)化方案是: 去除 ServiceDiscoveryRegistry 中注冊(cè) ServiceInstance 的代碼,在 config_loader 中的loadProviderConfig 方法的最后注冊(cè) ServiceInstance 具體步驟: 1、獲取所有注冊(cè)的 Registry,過(guò)濾出 ServiceDiscoveryRegistry,拿取所有 ServiceDiscovery。 2、創(chuàng)建 ServiceInstance。 3、每個(gè) ServiceDiscovery 注冊(cè) ServiceInstance。
保證 Provider 在注冊(cè)成功之后,才暴露元數(shù)據(jù)信息。
基于 Seata 擴(kuò)展實(shí)現(xiàn)。通過(guò)增加過(guò)濾器,在服務(wù)端接收 xid 并結(jié)合 seata-golang 達(dá)到支持分布式事務(wù)的目的。 從而使 Dubbo-go 在分布式場(chǎng)景下,讓用戶有更多的選擇,能適應(yīng)更多的個(gè)性化場(chǎng)景。
我們?cè)?dubbo-samples 中給出了 事務(wù)測(cè)試用例 。
對(duì)于多注冊(cè)中心訂閱的場(chǎng)景,選址時(shí)的多了一層注冊(cè)中心集群間的負(fù)載均衡:
在 Cluster Invoker 這一級(jí),我們支持的選址策略有:
指定優(yōu)先級(jí)
同 zone 優(yōu)先
權(quán)重輪詢
該版本在傳輸鏈路的安全性上做了嘗試,對(duì)于內(nèi)置的 Dubbo getty Server 提供了基于 TLS 的安全鏈路傳輸機(jī)制。
為盡可能保證應(yīng)用啟動(dòng)的靈活性,TLS Cert 的指定通過(guò)配置文件方式,具體請(qǐng)參見(jiàn) Dubbo-go 配置讀取規(guī)則與 TLS 示例:
本次路由功能重點(diǎn)支持了 動(dòng)態(tài)標(biāo)簽路由 和 應(yīng)用/服務(wù)級(jí)條件路由。
標(biāo)簽路由通過(guò)將某一個(gè)或多個(gè)服務(wù)的提供者劃分到同一個(gè)分組,約束流量只在指定分組中流轉(zhuǎn),從而實(shí)現(xiàn)流量隔離的目的,可以作為藍(lán)綠發(fā)布、灰度發(fā)布等場(chǎng)景的能力基礎(chǔ)。
標(biāo)簽主要是指對(duì) Provider 端應(yīng)用實(shí)例的分組,目前有兩種方式可以完成實(shí)例分組,分別是動(dòng)態(tài)規(guī)則打標(biāo)
和靜態(tài)規(guī)則打標(biāo)
,其中動(dòng)態(tài)規(guī)則相較于靜態(tài)規(guī)則優(yōu)先級(jí)更高,而當(dāng)兩種規(guī)則同時(shí)存在且出現(xiàn)沖突時(shí),將以動(dòng)態(tài)規(guī)則為準(zhǔn)。
可隨時(shí)在服務(wù)治理控制臺(tái)下發(fā)標(biāo)簽歸組規(guī)則
# governance-tagrouter-provider應(yīng)用增加了兩個(gè)標(biāo)簽分組tag1和tag2 # tag1包含一個(gè)實(shí)例 127.0.0.1:20880 # tag2包含一個(gè)實(shí)例 127.0.0.1:20881 --- force: false runtime: true enabled: true key: governance-tagrouter-provider tags: - name: tag1 addresses: ["127.0.0.1:20880"] - name: tag2 addresses: ["127.0.0.1:20881"] ...
可以在 server 配置文件的 tag 字段里設(shè)置
services: "UserProvider": registry: "hangzhouzk" protocol : "dubbo" interface : "com.ikurento.user.UserProvider" loadbalance: "random" warmup: "100" tag: "beijing" cluster: "failover" methods: - name: "GetUser" retries: 1 loadbalance: "random"
consumer 添加 tag 至 attachment 即可
ctx := context.Background() attachment := make(map[string]string) attachment["dubbo.tag"] = "beijing" ctx = context.WithValue(ctx, constant.AttachmentKey, attachment) err := userProvider.GetUser(ctx, []interface{}{"A001"}, user)
請(qǐng)求標(biāo)簽的作用域?yàn)槊恳淮?invocation,使用 attachment 來(lái)傳遞請(qǐng)求標(biāo)簽,注意保存在 attachment 中的值將會(huì)在一次完整的遠(yuǎn)程調(diào)用中持續(xù)傳遞,得益于這樣的特性,我們只需要在起始調(diào)用時(shí),通過(guò)一行代碼的設(shè)置,達(dá)到標(biāo)簽的持續(xù)傳遞。
Key
明確規(guī)則體作用到哪個(gè)應(yīng)用。必填。
enabled=true
當(dāng)前路由規(guī)則是否生效,可不填,缺省生效。
force=false
當(dāng)路由結(jié)果為空時(shí),是否強(qiáng)制執(zhí)行,如果不強(qiáng)制執(zhí)行,路由結(jié)果為空的路由規(guī)則將自動(dòng)失效,可不填,缺省為 false
。
runtime=false
是否在每次調(diào)用時(shí)執(zhí)行路由規(guī)則,否則只在提供者地址列表變更時(shí)預(yù)先執(zhí)行并緩存結(jié)果,調(diào)用時(shí)直接從緩存中獲取路由結(jié)果。如果用了參數(shù)路由,必須設(shè)為 true
,需要注意設(shè)置會(huì)影響調(diào)用的性能,可不填,缺省為 false
。
priority=1
路由規(guī)則的優(yōu)先級(jí),用于排序,優(yōu)先級(jí)越大越靠前執(zhí)行,可不填,缺省為 0
。
tags
定義具體的標(biāo)簽分組內(nèi)容,可定義任意n(n>=1)個(gè)標(biāo)簽并為每個(gè)標(biāo)簽指定實(shí)例列表。必填
name, 標(biāo)簽名稱
addresses, 當(dāng)前標(biāo)簽包含的實(shí)例列表
request.tag=tag1
時(shí)優(yōu)先選擇 標(biāo)記了 tag=tag1
的 provider。若集群中不存在與請(qǐng)求標(biāo)記對(duì)應(yīng)的服務(wù),默認(rèn)將降級(jí)請(qǐng)求 tag 為空的 provider;如果要改變這種默認(rèn)行為,即找不到匹配 tag1 的 provider 返回異常,需設(shè)置request.tag.force=true
。
request.tag
未設(shè)置時(shí),只會(huì)匹配 tag 為空的 provider。即使集群中存在可用的服務(wù),若 tag 不匹配也就無(wú)法調(diào)用,這與約定 1 不同,攜帶標(biāo)簽的請(qǐng)求可以降級(jí)訪問(wèn)到無(wú)標(biāo)簽的服務(wù),但不攜帶標(biāo)簽/攜帶其他種類標(biāo)簽的請(qǐng)求永遠(yuǎn)無(wú)法訪問(wèn)到其他標(biāo)簽的服務(wù)。
您可以在路由規(guī)則配置中配置多個(gè)條件路由及其粒度
Sample:
# dubbo router yaml configure file routerRules: - scope: application key: BDTService priority: 1 enable: false force: true conditions : ["host = 192.168.199.208 => host = 192.168.199.208 "] - scope: service key: com.ikurento.user.UserProvider priority: 1 force: true conditions : ["host = 192.168.199.208 => host = 192.168.199.208 "]
scope表示路由規(guī)則的作用粒度,scope的取值會(huì)決定key的取值。必填。
service 服務(wù)粒度
application 應(yīng)用粒度
Key明確規(guī)則體作用在哪個(gè)服務(wù)或應(yīng)用。必填。
scope=service時(shí),key取值為[{group}/]{service}[:{version}]的組合
scope=application時(shí),key取值為application名稱
enabled=true 當(dāng)前路由規(guī)則是否生效,可不填,缺省生效。
force=false 當(dāng)路由結(jié)果為空時(shí),是否強(qiáng)制執(zhí)行,如果不強(qiáng)制執(zhí)行,路由結(jié)果為空的路由規(guī)則將自動(dòng)失效,可不填,缺省為 false。
runtime=false 是否在每次調(diào)用時(shí)執(zhí)行路由規(guī)則,否則只在提供者地址列表變更時(shí)預(yù)先執(zhí)行并緩存結(jié)果,調(diào)用時(shí)直接從緩存中獲取路由結(jié)果。如果用了參數(shù)路由,必須設(shè)為 true,需要注意設(shè)置會(huì)影響調(diào)用的性能,可不填,缺省為 false。
priority=1 路由規(guī)則的優(yōu)先級(jí),用于排序,優(yōu)先級(jí)越大越靠前執(zhí)行,可不填,缺省為 0。
conditions 定義具體的路由規(guī)則內(nèi)容。必填。
Dubbo-go 處于一個(gè)比較穩(wěn)定成熟的狀態(tài)。目前新版本正處于往云原生方向的嘗試,應(yīng)用服務(wù)維度注冊(cè)是首先推出的功能,這是一個(gè)和之前模型完全不一樣的新注冊(cè)模型。該版本是我們朝云原生邁進(jìn)新一步的關(guān)鍵版本。除此之外,包含在該版本也有一些之前提到的優(yōu)化。
下一個(gè)版本 v1.5.2,本次的關(guān)注重點(diǎn)以通信模型改進(jìn)為主,除此之外,與 2.7.x 的兼容性、易用性及質(zhì)量保證也是本次關(guān)注的信息。**
在服務(wù)發(fā)現(xiàn),會(huì)支持更加多的方式,如:文件、Consul。 從而使 Dubbo-go 在服務(wù)發(fā)現(xiàn)場(chǎng)景下,讓用戶有更多的選擇,能適應(yīng)更多的個(gè)性化場(chǎng)景。
另外 易用性及質(zhì)量保證,主要關(guān)注的是 samples 與自動(dòng)化構(gòu)建部分??山档陀脩羯鲜?Dubbo-go 的難度,提高代碼質(zhì)量。
目前下一個(gè)版本正在緊鑼密鼓的開(kāi)發(fā)中,具體規(guī)劃及任務(wù)清單[1] ,都已經(jīng)在 Github 上體現(xiàn)。
到此,相信大家對(duì)“Dubbo靜態(tài)規(guī)則打標(biāo)的方法是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。