Dubbo-Admin 正式支持 3.0 服务治理
簡介:Dubbo 相信大家并不陌生,是一款微服務開發框架,它提供了 RPC 通信與微服務治理兩大關鍵能力。大家在日常開發中更多使用的是 Dubbo 提供的 RPC 通信這一部分能力,而對其提供的服務治理的能力使用相對少一些,本文的重點將放在服務治理這方面。Dubbo 框架提供了極其豐富的服務治理的功能如流量控制、動態配置、服務 Mock、服務測試等功能,而 Dubbo-Admin 的作用在于將 Dubbo 框架提供的服務治理能力提供一個開箱即用的平臺。本文將介紹 Dubbo-Admin 所提供的功能,讓大家快速了解和使用 Dubbo-Admin并對 Dubbo 所提供的服務治理能力有個初步的了解。
作者介紹
程露,Java開發工程師,中間件開發愛好者,關注服務治理。
嚴浩,Dubbo 貢獻者,關注RPC、服務治理等領域。
前言
Dubbo 相信大家并不陌生,是一款微服務開發框架,它提供了 RPC 通信與微服務治理兩大關鍵能力。大家在日常開發中更多使用的是 dubbo 提供的 RPC 通信這一部分能力,而對其提供的服務治理的能力使用相對少一些,本文的重點將放在服務治理這方面。dubbo 框架提供了極其豐富的服務治理的功能如流量控制、動態配置、服務 Mock、服務測試等功能,而 dubbo-admin 的作用在于將 dubbo 框架提供的服務治理能力提供一個開箱即用的平臺。本文將介紹 dubbo-admin 所提供的功能,讓大家快速了解和使用 dubbo-admin并對 dubbo 所提供的服務治理能力有個初步的了解。
服務詳情
服務詳情將以接口為維度展示 dubbo 服務所提供的服務信息,包含服務提供者、消費者信息和服務的元數據信息比如提供的方法名和參數列表。在最新版本支持了 dubbo 3.0 所提供的應用級發現模型,在注冊來源用 應用級/接口級 進行區分。
動態路由
Dubbo-Admin 提供了三種路由的支持,分別是條件路由、標簽路由、Mesh路由,所提供的功能可以輕松實現黑白名單、集群隔離、金絲雀發布等服務治理的訴求。下面將舉例一一展示這一部分的功能。
條件路由
條件路由可以編寫一些自定義路由規則實現服務治理的需求比如黑白名單、讀寫分離等。路由規則在發起一次RPC調用前起到過濾目標服務器地址的作用,過濾后的地址列表,將作為消費端最終發起RPC調用的備選地址。
下圖為一個簡單的黑名單功能的實現,該路由規則的含義為禁止 IP 為 172.22.3.91 消費者調用服務 HelloService,條件路由規則的格式為:[服務消費者匹配條件] => [服務提供者匹配條件]。
標簽路由
標簽路由通過將某一個或多個服務的提供者劃分到同一個分組,約束流量只在指定分組中流轉,從而實現流量隔離的目的,可以作為藍綠發布、灰度發布等場景的能力基礎。在 provider 應用級別上創建規則,對應的靜態打標為 dubbo.provider.tag=tag1 和 @DubboService(tag = "tag2")。
Mesh路由
Mesh路由是 dubbo 3.0 推出的全新的路由規則功能極其強大,使用mesh路由能夠覆蓋上訴兩種路由的功能場景,并且還可以組合出更加復雜路由場景。
Mesh路由將整個流量管理分成 VirtualService 和 DestinationRule 兩部分,VirtualService 匹配入口流量,DestinationRule 匹配出口流量。下面將實現一個案例,通過對服務 HelloService 的 hi 方法通過入參 number 進行路由,實現入參為偶數的請求路由到 label 為 v1 的服務,入參為奇數的服務路由到 label 為 v2 的服務的功能。
public interface HelloService {
? ?String hi(Integer number);
}
服務實現返回服務提供方端口。
public class HelloServiceImpl implements HelloService {
? ?@Value("${dubbo.protocol.port}")
? ?private String port;
? ?@Override
? ?public String hi(Integer number) {
? ? ? ?return "hi " + number + ", my port is :" + port;
? ?}
}
第一步:啟動兩個服務提供方參數分別為 port = 20883 、dubbo.application.parameters.test-version = v1 和 ?port = 20884 、dubbo.application.parameters.test-version = v2,通過 dubbo.application.parameters 定義的參數將會暴露到服務的URL上。
dubbo.application.parameters.test-version = v1
dubbo.protocol.port=20883
第二步:創建 mesh路由規則,該路由規則定義了 VirtualService、DestinationRule 兩部分。DestinationRule 部分將服務URL參數 test-version=v1 和 test-version=v2 分別劃分為服務 v1 和 v2。VirtualService 則將匹配服務 HelloService#hi 方法的入參,將偶數路由到v1服務,奇數路由到 label 為 v2 的服務。
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
?name: demo/oddEvenRouter
spec:
?dubbo:
?- routedetail:
? ?- match:
? ? ?- method:
? ? ? ? ?argc: 1
? ? ? ? ?args:
? ? ? ? ?- index: 0
? ? ? ? ? ?num_value:
? ? ? ? ? ? ?oneof:
? ? ? ? ? ? ?- exact: 0.0
? ? ? ? ? ? ? ?mod: 2.0
? ? ? ? ? ?type: int
? ? ? ? ?name_match:
? ? ? ? ? ?exact: hi
? ? ?name: even-route
? ? ?route:
? ? ?- destination:
? ? ? ? ?host: demo
? ? ? ? ?subset: v1
? ?- match:
? ? ?- method:
? ? ? ? ?argc: 1
? ? ? ? ?args:
? ? ? ? ?- index: 0
? ? ? ? ? ?num_value:
? ? ? ? ? ? ?oneof:
? ? ? ? ? ? ?- exact: 1.0
? ? ? ? ? ? ? ?mod: 2.0
? ? ? ? ? ?type: int
? ? ? ? ?name_match:
? ? ? ? ? ?exact: hi
? ? ?name: odd-route
? ? ?route:
? ? ?- destination:
? ? ? ? ?host: demo2
? ? ? ? ?subset: v2 ? ? ? ? ?
? ?services:
? ?- exact: org.test.apache.dubbo.interfaces.HelloService ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
---
apiVersion: service.dubbo.apache.org/v1alpha1
kind: DestinationRule
metadata:
?name: test-route
spec:
?host: demo
?subsets:
? ?- name: v1
? ? ?labels:
? ? ? ?test-version: v1
? ?- name: v2
? ? ?labels:
? ? ? ?test-version: v2
第三步:啟動消費者進行測試,可以看見返回結果如我們期待的那樣,通過上訴案例實現了一個簡單的灰度功能,當然也可以輕松實現 A/B測試、金絲雀發布等功能。
動態配置
動態配置提供了無須重啟可以動態調整 RPC 調用行為的一種能力。比如修改超時時間、權重、負載均衡策略調整、服務降級等。避免了為了調整 Dubbo 參數而需要重啟服務的局面,下面將展示一些常見的參數調整情況。
configVersion: v2.7
enabled: true
configs:
?- addresses: [0.0.0.0] ?# 0.0.0.0 for all addresses
? ?side: consumer ? ? ? ?# effective side, consumer or addresses
? ?parameters:
? ? ?timeout: 6000 ? ? ? # dynamic config parameter
configVersion: v2.7
scope: application
key: demo-provider
enabled: true
configs:
- addresses: ["10.20.153.10:20880"]
?side: provider
?parameters:
? ?weight: 200
configVersion: v2.7
scope: application
key: demo-consumer
enabled: true
configs:
- side: consumer
?parameters:
? ?loadbalance: random
文檔與測試
接口文檔
Dubbo-Api-Docs 是一個展示 dubbo 接口文檔,測試接口的工具,相當于 swagger 對于 RESTful 風格的 Web 服務的作用。使用該功能需要 dubbo 服務引入相關包 dubbo-api-docs-annotations 和 dubbo-api-docs-core,使用使用通過注解的形式描述接口和參數信息。
<dependency>
? ?<groupId>org.apache.dubbo</groupId>
? ?<artifactId>dubbo-api-docs-annotations</artifactId>
? ?<version>${dubbo-version}</version>
</dependency>
<dependency>
? ?<groupId>org.apache.dubbo</groupId>
? ?<artifactId>dubbo-api-docs-core</artifactId>
? ?<version>${dubbo-version}</version>
</dependency>
效果圖如下
服務測試
服務測試相比 dubbo-api-docs 不需要引入任何依賴就能對 dubbo 服務進行測試,方便快速調整和驗證 dubbo 服務,效果圖如下:
服務Mock
服務Mock通過無代碼嵌入的方式將Consumer對Provider的請求進行攔截,動態的對Consumer的請求進行放行或返回用戶自定義的Mock數據。從而解決在前期開發過程中,Consumer所依賴的Provider未準備就緒時,造成Consumer開發方的阻塞問題。
只需要以下兩步,即可享受服務Mock功能帶來的便捷:
第一步:Consumer應用引入服務Mock依賴,添加JVM啟動參數-Denable.dubbo.admin.mock=true開啟服務Mock功能。
<denpendency>
? ?<groupId>org.apache.dubbo.extensions</groupId>
? ?<artifactId>dubbo-mock-admin</artifactId>
? ?<version>last</version>
</denpendency>
第二步:在Dubbo Admin中配置對應的Mock數據。
小結
本文介紹了 dubbo-admin 的大部分功能,覆蓋開發、測試和線上整個階段。希望本文能夠給使用和入手 dubbo- admin 帶來一些幫助,詳細的使用細節還需要參考官網,也希望 dubbo-admin 能夠給 dubbo 使用者帶來一個全新的體驗,更方便快速的使用 dubbo 所提供出來服務治理的能力。
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。?
總結
以上是生活随笔為你收集整理的Dubbo-Admin 正式支持 3.0 服务治理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 庖丁解牛|图解 MySQL 8.0 优化
- 下一篇: 爆测一周,22年必看最细致代码托管工具测