Dubbo-Admin 正式支持 3.0 服务治理-阿里云开发者社区

开发者社区> 中间件小哥> 正文

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 所提供的应用级发现模型,在注册来源用 应用级/接口级 进行区分。


image


动态路由


Dubbo-Admin 提供了三种路由的支持,分别是条件路由、标签路由、Mesh路由,所提供的功能可以轻松实现黑白名单、集群隔离、金丝雀发布等服务治理的诉求。下面将举例一一展示这一部分的功能。


条件路由


条件路由可以编写一些自定义路由规则实现服务治理的需求比如黑白名单、读写分离等。路由规则在发起一次RPC调用前起到过滤目标服务器地址的作用,过滤后的地址列表,将作为消费端最终发起RPC调用的备选地址。

下图为一个简单的黑名单功能的实现,该路由规则的含义为禁止 IP 为 172.22.3.91 消费者调用服务 HelloService,条件路由规则的格式为:[服务消费者匹配条件] => [服务提供者匹配条件]


image


标签路由


标签路由通过将某一个或多个服务的提供者划分到同一个分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,可以作为蓝绿发布、灰度发布等场景的能力基础。在 provider 应用级别上创建规则,对应的静态打标为 dubbo.provider.tag=tag1 和 @DubboService(tag = "tag2")。



image


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测试、金丝雀发布等功能。


image


动态配置


动态配置提供了无须重启可以动态调整 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>?


效果图如下


image


服务测试


服务测试相比 dubbo-api-docs 不需要引入任何依赖就能对 dubbo 服务进行测试,方便快速调整和验证 dubbo 服务,效果图如下:


image


服务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数据。


image


小结


本文介绍了 dubbo-admin 的大部分功能,覆盖开发、测试和线上整个阶段。希望本文能够给使用和入手 dubbo- admin 带来一些帮助,详细的使用细节还需要参考官网,也希望 dubbo-admin 能够给 dubbo 使用者带来一个全新的体验,更方便快速的使用 dubbo 所提供出来服务治理的能力。

IMG_2157.JPG

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9515 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
11232 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9062 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13212 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4026 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6918 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
21936 0
+关注
中间件小哥
阿里中间件(Aliware)官方账号
1062
文章
51
问答
来源圈子
更多
阿里云中间件主要有包含这么几个: 分布式关系型数据库DRDS_水平拆分 做数据库扩展性的 、消息队列MQ 是做消息的中间件、企业级分布式应用服务EDAS 做分布式服务的、还有一些其他的中间件,比如配置服务、缓存等等。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载
http://www.vxiaotou.com