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 参数而需要重启服务的局面,下面将展示一些常见的参数调整情况。
- 超时时间调整,超时时间调整为 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
- 权重调整
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 服务治理的更多相关文章
- 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless
作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...
- dubbo服务治理框架
Dubbo的概述 1.1. Dubbo的背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. ...
- 分布式服务治理框架Dubbo的前世今生及应用实战
Dubbo的出现背景 Dubbo从开源到现在,已经出现了接近10年时间,在国内各大企业被广泛应用. 它到底有什么魔力值得大家去追捧呢?本篇文章给大家做一个详细的说明. 大规模服务化对于服务治理的要求 ...
- Dubbo框架中的应用(两)--服务治理
Dubbo服务治理了看法 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlzaGVoZQ==/font/5a6L5L2T/fontsize/400/fi ...
- Dubbo框架应用之(二)--服务治理
Dubbo服务治理全貌图 当我们现有ITOO平台系统的业务随着用户的逐渐增大,设计的业务越来越广,系统会异常的复杂,在大规模服务之前,我们可以采用的是RMI或Hessian等工具,暴露和引用远程服务, ...
- 分布式服务治理框架dubbo
Dubbo最主要功能有两个 1 RPC调用 2 SOA服务治理方案 Dubbo的架构 Dubbo常见的注册中心有2中,zookeeper以及redis 这篇文章讲解的是采用的zookeeper,要求读 ...
- Dubbo 服务治理-mock实例
转: Dubbo 服务治理-mock实例 老生住长亭 2017.02.28 10:56* 字数 514 阅读 2552评论 10喜欢 2 Dubbo的mock自己折腾的实例,配置信息有点简陋,有点粗鄙 ...
- 5.如何基于 dubbo 进行服务治理、服务降级、失败重试以及超时重试?
作者:中华石杉 面试题 如何基于 dubbo 进行服务治理.服务降级.失败重试以及超时重试? 面试官心理分析 服务治理,这个问题如果问你,其实就是看看你有没有服务治理的思想,因为这个是做过复杂微服务的 ...
- Swoft 2.0.3 重大更新,发布优雅的微服务治理
 什么是 Swoft ? Swoft 是一款基于 Swoole 扩展实现的 PHP 微服务协程框架.Swoft 能像 Go 一样,内置协程网络服务器及常用的协程客户端且常驻内存,不依赖传统的 PHP ...
- 面试系列26 如何基于dubbo进行服务治理、服务降级、失败重试以及超时重试
(1)服务治理 1)调用链路自动生成 一个大型的分布式系统,或者说是用现在流行的微服务架构来说吧,分布式系统由大量的服务组成.那么这些服务之间互相是如何调用的?调用链路是啥?说实话,几乎到后面没人搞的 ...
随机推荐
- 获取Android设备系统apk
前提条件是:电脑adb连接Android设备 打开命令好窗口,输入指令adb shell "dumpsys window|grep mCurrentFocus" 输入指令adb s ...
- union all 优化案例
遇到个子查询嵌套 UNION ALL 的SQL语句很慢,谓词过滤条件不能内推进去,需要优化这段 UNION ALL这块的内容. UNION ALL 慢SQL: SELECT * FROM ((SELE ...
- Java课堂
import java.awt.*; import java.awt.event.*; import java.util.*; public class Main{ public static dou ...
- 实时3D渲染它是如何工作的?可以在哪些行业应用?
随着新兴技术--3D渲染的发展,交互应用的质量有了极大的提高.用实时三维渲染软件创建的沉浸式数字体验,几乎与现实没有区别了.随着技术的逐步改进,在价格较低的个人工作站上渲染3D图像变得更加容易,设计师 ...
- Android网络收集和ping封装库
目录介绍 01.基础介绍 02.stetho大概流程 03.Android中应用 04.如何使用 05.案例截图如下 06.网络请求接口信息 07.如何使用ping 01.基础介绍 该工具作用 诸葛书 ...
- 03.Android崩溃Crash库之ExceptionHandler分析
目录总结 00.异常处理几个常用api 01.UncaughtExceptionHandler 02.Java线程处理异常分析 03.Android中线程处理异常分析 04.为何使用setDefaul ...
- 恶意软件开发(三)经典DLL注入流程
什么是dll注入? DLL注入允许将外部DLL文件加载到进程中并运行其中的代码.DLL(动态链接库)是一种可重用的代码库,它包含在多个程序中使用的函数.类.变量和其他程序代码.DLL注入技术可以通过将 ...
- 记录--手写vm.$mount方法
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.概述 在我们开发中,经常要用到Vue.extend创建出Vue的子类来构造函数,通过new 得到子类的实例,然后通过$mount挂载到 ...
- .NET Emit 入门教程:第五部分:动态生成方法(MethodBuilder 与 DynamicMethod)
前言: 当我们涉及到在运行时生成和定义方法时,便需要使用到C#中的两个关键类之一:MethodBuilder 或 DynamicMethod. 这两者都属于反射(Reflection.Emit)的一部 ...
- .NET分布式Orleans - 5 - 持久化
在分布式系统中,数据的持久化是至关重要的一环. Orleans 7 引入了强大的持久化功能,使得在分布式环境下管理数据变得更加轻松和可靠. 本文将介绍什么是 Orleans 7 的持久化,如何设置它以 ...