日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dubbo-go 中如何实现路由策略功能

發布時間:2024/8/23 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dubbo-go 中如何实现路由策略功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可在控制面對服務的路由進行精細控制,是一個成熟 RPC 系統必備的能力之一。作為一個逐步走向成熟的 RPC 系統,Apache/dubbo-go(以下簡稱 dubbo-go )的最新版本 v1.4 中已經實現了?Condition Router 和 Health Instance First Router 等路由。

實現一個功能,首先要清楚其本質。那到底什么是路由規則,我們為什么需要路由規則?設想這么一個場景:現在要對某服務的新版本進行一次灰度發布,需要將一些對實驗流量進行引流到灰度機器,其余流量依舊使用正常服務。此時就可以考慮使用路由策略達到目的。

路由規則( routing rule )是為了改變網絡流量所經過的途徑而修改路由信息的技術,通過改變路由屬性(包括可達性)達到引流的目的。在發起一次 RPC 調用前,它會過濾目標服務器地址,將消費端最終發起 RPC 調用的目標范圍限定在過濾后的地址列表。

目標

路由策略的關鍵點在于:

  • 設定規則:用戶可通過什么方式把路由規則傳遞給使用方;
  • 解析規則:涉及到的路由規則的語法,以及對語法的解析。比如,要考慮規則是否支持邏輯運算;
  • 規則匹配:如何判斷一個服務實例是否匹配某條路由規則。
  • 綜上,可以總結出 dubbo-go 路由規則的目標有:

    • 支持從多個地方,如本地文件、遠程配置中心,讀取路由規則信息;
    • 設計一套定義路由規則的簡單語法;
    • 保持與 Dubbo 的兼容,降低學習成本;

    總體設計

    首先要考慮的是:路由規則應該放在整個服務治理周期的哪個階段呢?dubbo-go 的架構圖如下:

    可以看到圖中的 Router 介于 Cluster 和 LB(load balance) 之間,這就意味著一個請求被發送到哪個服務器,是經過了 Cluster - Router - LB 三層處理的。可以將 Router 看做是一種較小范圍的邏輯分組。

    而在 Router 內部,將經歷三個步驟:讀取路由規則,解析路由規則,執行匹配。為了提高程序效率,路由規則的讀取和解析都是可以提前完成的,比如在應用啟動的時候。

    根據上面圖中流程,可清楚地明晰 Router 的路由流程。

    接口設計

    根據前面的目標和總體設計,我們很容易地設計出 Router 的接口。

    路由規則接口

    Router 是 dubbo-go 路由最核心的接口。它可以理解為,當一個請求(或者說一次調用)過來的時候,判斷哪些實例是滿足該規則的抽象。其實際代碼定義如下:

    其核心在于 Route 方法,執行匹配邏輯。目前該接口的實現有:

    • ListenableRouter
    • AppRouter
    • ConditionRouter
    • HealthCheckRouter
    • FileConditionRouter

    在現實實現中,不同的不同的路由規則是有優先級的,即 Router 的另一個重要特性:Priority 。它決定了的是路由規則的組織方式。

    路由規則鏈式接口

    除了優先級,多個路由規則的執行是有順序的。有路由規則的 Chain 接口如下:

    Chain 實現了對不同路由規則的組織。從命名也可以看出,它是責任鏈模式的一種應用,通過該接口可將路由規則組成一條鏈,鏈中每條規則的輸出都是下一條規則的輸入。至于整個鏈路中不同規則的順序,取決于每個規則的 Priority ,它決定了每條路由規則的排序。

    讀取路由規則接口

    讀取路由規則對應 FileRouterFactory 和 RouterFactory 兩個接口。一般地,只需要一個 RouterFactory 接口就可以,但考慮到路由規則的不同來源,比如規則可能是從配置文件里面讀取過來,也可能是直接在服務的 URL 解析而來,所以我們抽象出來了兩個接口:

    FileRouterFactory

    RouterFactory

    我們一般將這兩個接口對應本地和遠程兩種情況:

    • 本地路由規則配置:在原配置加載階段,新增讀取路由配置文件步驟。使用 FileRouterFactory?解析后,生成對應路由規則,然后加載到緩存中。
    • 遠程路由規則配置:讀取遠程配置并且監聽其變化,篩選符合路由規則配置信息,通過 RouterFactory 生成對應路由規則,同樣加載到緩存中備用。

    實現

    從圖里面可以看出,實現路由規則以兼容 dubbo 為首要目標,降低使用者的學習成本為輔助目標。與配置中心模塊相結合,實現路由規則遠程統一管理與下發。

    規則類型

    下面介紹一下 dubbo-go 現有的路由規則實現。

    條件路由

    Condition Router 作為 dubbo-go 中第一個支持的路由規則實現,允許用戶通過配置文件及配置中心管理路由規則。與之相似的一個概念是 dubbo-go 的 group,但是條件路由提供了更加細粒度的控制手段和更加豐富的表達語義。比較典型的使用場景是黑白名單設置,灰度以及測試等。

    健康檢查路由

    在 RPC 調用中,如果希望盡可能地將請求命中到那些處理能力快、處于健康狀態的實例,即可以考慮該路由。該路由判定斷定某個服務提供者的不健康度,優先調用那些健康的服務實例。對 "健康" 度的判定,dubbo-go 默認的實現策略是:某服務的錯誤比例到達某一個閾值或者請求活躍數大于上限,則認為其不健康,頗類似于服務熔斷。dubbo-go 當然亦允許用戶擴展其健康檢測策略。

    標簽路由

    以 Provider 為維度,將某一個或多個服務的提供者劃分到同一個分組,約束流量只在指定分組中流轉,從而實現流量隔離的目的,即為標簽路由。它可以作為藍綠發布、灰度發布等場景的能力基礎。

    • 靜態打標:根據配置文件所配置的標簽,固定給 Provider 設置標簽。
    • 動態打標:基于健康檢查路由,根據服務不同時刻,不同狀態,動態在 Provider 設置適合的標簽。

    示例

    下面以條件路由在 zookeeper 實現為例,對服務提供者與服務消費者進行整體流程分析。

    如何配置條件路由規則

    可以直接通過 dubbo-admin進行配置:

    這些配置可以分成全局配置和服務配置兩類。

    全局配置

    對應應用級全局路由規則配置。例如:

    /dubbo/config/dubbo/user-info-server(應用名).condition-router

    上面 schema 配置中,應用名配置為為 user-info-server,即該條規則只對該應用生效。后綴 ".condition-router" 表明該條規則為條件路由。除此之外,還可用 ".tag-router" 表示標簽路由。

    服務配置

    對應服務級所有路由規則配置。例如有如下規則 schema:

    /dubbo/ com.ikurento.user.UserProvider(服務名) /routers

    該規則中服務名為 com.ikurento.user.UserProvider。

    除了在控制面板 Dubbo Admin 中下發路由規則外,還可以在本地文件中配置相應的規則。比如說在文件?router_config.yml?中配置:

    # dubbo router yaml configure file priority: 1 force: true conditions : ["host = 1.1.1.1 => host = 192.168.199.214"]

    更多配置方式請參考?條件路由配置。使用 dubbo-go 的路由功能時,注意以以下方式?引入對應的包

    總結

    dubbo-go 整體路由規則功能實現,已基本對齊 dubbo 2.7.x 版本,目前上文中描述過的條件路由、標簽路由與健康檢測路由,且支持本地及遠端配置路由規則,能滿足基本使用場景,但距離完善還有還長遠的路。dubbo-go 未來路由功能計劃如下:

  • 更多的配置中心【如 etcd/consul 等】支持,理論上已經支持,但還沒測試;
  • service-router(未支持);
  • 標簽路由-配置中心(未支持);
  • 目前路由與配置中心結合的代碼,對新增路由規則并不友好,有一定接入成本。
  • 本文對 dubbo-go 已有的路由功能進行了總結,至于源碼級的分析,本文不作展開。歡迎大家持續關注 dubbo-go 項目【https://github.com/apache/dubbo-go】。

    本文作者:
    鄒毅賢,Github ID @zouyx,開源愛好者,就職于 SheIn 供應鏈部門,負責供應鏈開放平臺。

    原文鏈接
    本文為云棲社區原創內容,未經允許不得轉載。

    總結

    以上是生活随笔為你收集整理的dubbo-go 中如何实现路由策略功能的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 色欧美在线 | 久久精品韩国 | 精品无码国产一区二区三区av | 欧美一区二区在线视频观看 | 亚洲人成电影在线 | 亚洲一区二区三区在线免费观看 | 欧美粗大猛烈老熟妇 | 成都电影免费大全 | 国产永久精品大片wwwapp | 内射中出日韩无国产剧情 | 欧美日韩中文字幕一区 | 九九久久综合 | 无码任你躁久久久久久老妇 | 午夜免费片 | 一级黄色免费大片 | 亚洲另类一区二区 | 好男人www在线视频 我们的2018在线观看免费高清 | 不卡的中文字幕 | 少妇饥渴放荡91麻豆 | 激情av网| 国产又大又粗又硬 | 久久无码人妻精品一区二区三区 | 黄色成年人网站 | 欧美一级片一区 | 国产主播喷水 | 超碰网址| 日韩理论片在线观看 | 91干干干 | av片网站| 国产色婷婷 | 日韩簧片在线观看 | 波多野结衣视频免费看 | 欧美a网| 成年免费视频黄网站在线观看 | 超碰丝袜 | 亚洲天堂av一区二区 | 97色资源| 四虎精品在永久在线观看 | 成人a级网站 | 中文字幕淫 | 激情视频网站 | www.久久婷婷 | 久草国产在线观看 | 巨乳动漫美女 | 三级网站在线 | 国产精品综合久久久 | 快色视频在线观看 | 女人免费视频 | 隔壁邻居是巨爆乳寡妇 | 成人做爰的视频 | 久久婷婷国产麻豆91天堂 | 日本精品不卡 | 久久久久久久久久一区二区三区 | www.一区二区三区四区 | 成品人视频ww入口 | 日本老师巨大bbw丰满 | 欧美1234区 | 自拍偷拍激情小说 | 一级片免费观看 | 亚洲精品一二三 | www国产无套内射com | 免费人妻一区二区三区 | 婷婷综合社区 | 亚洲中文无码av在线 | 午夜久久久久久久久久久 | 国产精品1000部啪视频 | 中文字幕一区二区三区四区 | 超碰牛牛 | www.777含羞草 | 日韩 欧美 国产 综合 | 中文一二三区 | 成人网入口 | 精品国产乱码一区二区三区99 | 亚洲av无码精品色午夜果冻不卡 | av免费高清 | 欧洲国产精品 | 中文字幕亚洲视频 | 高h教授1v1h喂奶 | 成人毛片观看 | 永久免费汤不热视频 | 色综合久久久久无码专区 | 国产一区二区三区久久 | 欧美肉大捧一进一出免费视频 | 亚州国产精品视频 | 日本青青草 | 日韩在线观看你懂的 | 色婷婷精品久久二区二区密 | 日韩av大片 | 国产精品成人免费精品自在线观看 | 亚洲精品一区二区三区在线 | 人人爽人人爽人人爽 | 无码aⅴ精品一区二区三区浪潮 | 国产精品一区二区三区在线看 | 黑丝一区二区三区 | 中文精品一区二区三区 | 99久久精品免费看国产四区 | 91免费高清在线观看 | 国产一区二区三区免费播放 | 国内av片 |