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 参数而需要重启服务的局面,下面将展示一些常见的参数调整情况。


  1. 超时时间调整,超时时间调整为 6000 ms

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

  1. 权重调整

configVersion: v2.7

scope: application

key: demo-provider

enabled: true

configs:

- addresses: ["10.20.153.10:20880"]

 side: provider

 parameters:

   weight: 200

  1. 负载策略调整

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 所提供出来服务治理的能力。

IMG_2157.JPG

相关文章
|
算法 安全 数据安全/隐私保护
Higress 改造传统网关有哪些优缺点
Higress 改造传统网关有哪些优缺点
|
移动开发 API
2024年阿里云域名注册、域名续费优惠口令大全来了
2024年阿里云域名注册、域名续费优惠口令大全来了,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”
12068 0
2024年阿里云域名注册、域名续费优惠口令大全来了
|
安全 Java 应用服务中间件
组件漏洞修复---修改SpringBoot内置tomcat的版本号
安全反应Tomcat9.0.41存在安全漏洞,让将所有服务的Tomcat版本升级到9.0.44,我们都知道SpingBoot中是集成的有内置的Tomcat的,叫Embed-Tomcat,这个Tomcat和我们用于部署war包的Tomcat还是有有一些区别的,但是版本一直和Tomcat基本保持一致。
3569 0
组件漏洞修复---修改SpringBoot内置tomcat的版本号
|
10月前
|
人工智能 搜索推荐 前端开发
OpenDeepSearch:搜索引擎革命!这个开源深度搜索工具让AI代理直接读懂网页,复杂问题一键拆解
OpenDeepSearch是基于开源推理模型的深度搜索工具,通过语义重排和多源整合优化检索效果,支持与AI代理无缝集成,提供快速和专业两种搜索模式。
725 10
OpenDeepSearch:搜索引擎革命!这个开源深度搜索工具让AI代理直接读懂网页,复杂问题一键拆解
|
缓存 监控 负载均衡
将近2万字的Dubbo原理解析,彻底搞懂dubbo
市面上有很多基于RPC思想实现的框架,比如有Dubbo。今天就从Dubbo的SPI机制、服务注册与发现源码及网络通信过程去深入剖析下Dubbo。
29758 9
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
3840 1
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
Kubernetes Dubbo 应用服务中间件
【Dubbo3终极特性】「流量治理体系」一文教你如何搭建Dubbo3的控制台服务Dubbo-Admin
【Dubbo3终极特性】「流量治理体系」一文教你如何搭建Dubbo3的控制台服务Dubbo-Admin
600 0
|
人工智能 IDE 程序员
从 AI Coding 演进路径看通义灵码 AI 程序员的发布,让更多 idea 变成产品
通义灵码 2.0 不仅正式发布 AI 程序员,还升级了很多基础能力,使用场景多样。繁星计划的推出更为大学生提供了免费的智能编码助手,助力科技创新。让不具备编码能力的人也可以将 idea 变成产品,帮助到更多开发者和泛开发者。
|
设计模式 缓存 Java
Spring监听器用法与原理详解(带ApplicationListener模型图)(1)
Spring监听器用法与原理详解(带ApplicationListener模型图)
1731 0

热门文章

最新文章