溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Dubbo靜態(tài)規(guī)則打標(biāo)的方法是什么

發(fā)布時(shí)間:2021-12-15 16:02:14 來(lái)源:億速云 閱讀:177 作者:iii 欄目:大數(shù)據(jù)

本篇內(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)的方法是什么”吧!

1 應(yīng)用維度注冊(cè)模型

在新模型 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ù)信息。

2 支持基于 Seata 的事務(wù)

基于 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è)試用例 。

3 多注冊(cè)中心集群負(fù)載均衡

對(duì)于多注冊(cè)中心訂閱的場(chǎng)景,選址時(shí)的多了一層注冊(cè)中心集群間的負(fù)載均衡:

在 Cluster Invoker 這一級(jí),我們支持的選址策略有:

  • 指定優(yōu)先級(jí)

  • 同 zone 優(yōu)先

  • 權(quán)重輪詢

3 傳輸鏈路安全性

該版本在傳輸鏈路的安全性上做了嘗試,對(duì)于內(nèi)置的 Dubbo getty Server 提供了基于 TLS 的安全鏈路傳輸機(jī)制。

為盡可能保證應(yīng)用啟動(dòng)的靈活性,TLS Cert 的指定通過(guò)配置文件方式,具體請(qǐng)參見(jiàn) Dubbo-go 配置讀取規(guī)則與 TLS 示例:

4 路由功能增強(qiáng)

本次路由功能重點(diǎn)支持了 動(dòng)態(tài)標(biāo)簽路由 和 應(yīng)用/服務(wù)級(jí)條件路由。

4.1 動(dòng)態(tài)標(biāo)簽路由

標(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)。

4.1.1 動(dòng)態(tài)規(guī)則打標(biāo)

可隨時(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"]
 ...

4.1.2 靜態(tài)規(guī)則打標(biāo)

可以在 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ù)傳遞。

4.1.3 規(guī)則詳解

格式
  • 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í)例列表

降級(jí)約定
  1. 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。

  2. 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ù)。

4.2 應(yīng)用/服務(wù)級(jí)條件路由

您可以在路由規(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 "]

4.2.1 規(guī)則詳解

各字段含義
  • 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)容。必填。

5 回顧與展望

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í)!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI