Dubbo3 服務(wù)流量管理

2022-03-29 16:25 更新

通過 Dubbo 定義的路由規(guī)則,實(shí)現(xiàn)對流量分布的控制

流量管理

流量管理的本質(zhì)是將請求根據(jù)制定好的路由規(guī)則分發(fā)到應(yīng)用服務(wù)上,如下圖所示:


其中:

  • 路由規(guī)則可以有多個(gè),不同的路由規(guī)則之間存在優(yōu)先級。如:Router(1) -> Router(2) -> …… -> Router(n)
  • 一個(gè)路由規(guī)則可以路由到多個(gè)不同的應(yīng)用服務(wù)。如:Router(2)既可以路由到Service(1)也可以路由到Service(2)
  • 多個(gè)不同的路由規(guī)則可以路由到同一個(gè)應(yīng)用服務(wù)。如:Router(1)和Router(2)都可以路由到Service(2)
  • 路由規(guī)則也可以不路由到任何應(yīng)用服務(wù)。如:Router(m)沒有路由到任何一個(gè)Service上,所有命中Router(m)的請求都會因?yàn)闆]有對應(yīng)的應(yīng)用服務(wù)處理而導(dǎo)致報(bào)錯(cuò)
  • 應(yīng)用服務(wù)可以是單個(gè)的實(shí)例,也可以是一個(gè)應(yīng)用集群。

Dubbo流量管理介紹

Dubbo提供了支持mesh方式的流量管理策略,可以很容易實(shí)現(xiàn) A/B測試、金絲雀發(fā)布、藍(lán)綠發(fā)布等能力。

Dubbo將整個(gè)流量管理分成VirtualServiceDestinationRule兩部分。當(dāng)Consumer接收到一個(gè)請求時(shí),會根據(jù)VirtualService中定義的DubboRouteDubboRouteDetail匹配到對應(yīng)的DubboDestination中的subnet,最后根據(jù)DestinationRule中配置的subnet信息中的labels找到對應(yīng)需要具體路由的Provider集群。其中:

  • VirtualService主要處理入站流量分流的規(guī)則,支持服務(wù)級別和方法級別的分流。
  • DubboRoute主要解決服務(wù)級別的分流問題。同時(shí),還提供的重試機(jī)制、超時(shí)、故障注入、鏡像流量等能力。
  • DubboRouteDetail主要解決某個(gè)服務(wù)中方法級別的分流問題。支持方法名、方法參數(shù)、參數(shù)個(gè)數(shù)、參數(shù)類型、header等各種維度的分流能力。同時(shí)也支持方法級的重試機(jī)制、超時(shí)、故障注入、鏡像流量等能力。
  • DubboDestination用來描述路由流量的目標(biāo)地址,支持host、port、subnet等方式。
  • DestinationRule主要處理目標(biāo)地址規(guī)則,可以通過hosts、subnet等方式關(guān)聯(lián)到Provider集群。同時(shí)可以通過trafficPolicy來實(shí)現(xiàn)負(fù)載均衡。

這種設(shè)計(jì)理念很好的解決流量分流和目標(biāo)地址之間的耦合問題。不僅將配置規(guī)則進(jìn)行了簡化有效避免配置冗余的問題,還支持VirtualServiceDestinationRule的任意組合,可以非常靈活的支持各種業(yè)務(wù)使用場景。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號