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

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue将文本渲染html,vue2.0 之文本渲染-v-html、v-text

vue2.0 之文本渲染-v-html、v-text1、index.html代码vuedemo2、main.js代码import Vue from ‘vue‘import App from ‘./App‘Vue.config.productionTip false/* eslint-disable no-new */new Vue({el: ‘#app‘,render: h > h(App)})render: h > h(App)是ES6的语法&am…

ajax post 没有返回_Ajax异步技术之三:jQuery中的ajax学习

jQuery中的Ajax学习&#xff1a;jQuery是js的一个轻量型框架&#xff0c;已经将js创建的操作进行了封装&#xff0c;而ajax也是js的一部分&#xff0c;所以jQuery也已经将ajax进行了封装。封装&#xff1a;$.get(url,data,fn) url:请求地址data:请求参数&#xff0c;参数格式为…

如何成为真正的数字化企业,锐捷网络发布数字原力觉醒计划

编辑 | 宋慧 出品 | CSDN 云计算 什么样的企业可称为数字化企业&#xff1f; 因为疫情等各类不确定因素&#xff0c;数字化的浪潮正深刻改变着企业。所有企业都需考虑转型、创新、增长&#xff0c;这三个问题。深耕中国企业级市场多年的IT技术厂商锐捷网络&#xff0c;以“点线…

2021中国数字服务大会 | 阿里云混合云新一代运维演进与实践

简介&#xff1a;12月3日&#xff0c;2021中国数字服务大会顺利召开&#xff0c;大会以“数字服务、跨界融合、协同创新”为主题&#xff0c;邀请产学研界嘉宾&#xff0c;举办行业与学术论坛&#xff0c;共话数字服务的挑战和机遇。阿里云作为云厂商代表应邀参会&#xff0c;并…

html文字...点击后全部显示,js 文字超出部分隐藏、点击显示更多示例

这篇文章主要为大家详细介绍了js 文字超出部分隐藏、点击显示更多示例&#xff0c;具有一定的参考价值&#xff0c;可以用来参考一下。感兴趣js 文字超出部分隐藏、点击显示更多示例的小伙伴&#xff0c;下面一起跟随512笔记的小编罗X来看看吧。css&#xff1a;*{padding: 0;ma…

冲压模板自动标注LISP_干货满满!超实用冲压模具资料,加薪必看!

一般的冲压模具都是由&#xff1a;上下托板、上下垫脚、上下模座&#xff1a;一般用A3、Q235等“软料”做成&#xff0c;起支撑整个模具、方便架模、落料等作用。上、下模板&#xff1a;上、下模板起固定刀口、入块、入子、顶料销等作用&#xff0c;外定位、内定位、浮升引导销…

安谋科技四周年献礼,提前完成五年规划目标

自2018年4月正式独立运营以来&#xff0c;安谋科技一直以服务中国的科技产业、建设中国本土的研发能力、赋能中国本土半导体生态为核心使命。值此公司成立四周年之际&#xff0c;安谋科技宣布已提前超额完成了合资公司落地深圳时设立的五年规划目标。 回顾四年来走过的历程&am…

开源微服务编排框架:Netflix Conductor

简介&#xff1a;本文主要介绍netflix conductor的基本概念和主要运行机制。 作者 | 夜阳 来源 | 阿里技术公众号 本文主要介绍netflix conductor的基本概念和主要运行机制。 一 简介 netflix conductor是基于JAVA语言编写的开源流程引擎&#xff0c;用于架构基于微服务的流…

直播回顾:如何对付臭名昭著的 IO 夯?诊断利器来了 | 龙蜥技术

简介&#xff1a;听到IO夯总是让人头疼&#xff0c;那有没有可以分析IO夯问题的利器&#xff1f; 编者按&#xff1a;sysAK&#xff08;system analyse kit&#xff09;&#xff0c;是龙蜥社区&#xff08;OpenAnolis&#xff09;系统运维 SIG 下面的一个开源项目&#xff0c;…

cad致命错误如何处理_Golang 如何优雅地处理错误

- 后端早读课翻译计划 第二篇- 本文提供了一个优雅的处理 Golang 中错误的方法&#xff0c;解决了 Golang error 只有字符串信息的局限性&#xff0c;提供了上下文信息、错误类型判断的功能。尽管 go 具有一个简单的错误模型&#xff0c;但是乍一看&#xff0c;事情并没有那么容…

计算机专业英语第2章测试,计算机专业英语答案

【问答题】翻译下列句子 v【文件作答】熟记计算机专业英语词汇【填空题(客观)】Choose the best one of the four answers given to fill in each blank. This chapter introduces digital computer, data types, the evolution of computers, and types of computers. 1 i…

快速云原生化,从数据中心到云原生的迁移实践

简介&#xff1a;本文将介绍在帮助用户快速完成迁云中的解决方案、最佳实践以及迁云工具。 云原生的时代已经到来&#xff0c;云原生技术正在重塑整个软件生命周期&#xff0c;阿里巴巴是国内最早布局云原生技术的公司之一。 容器服务团队在过去的几年时间内帮助很多用户成功…

实力总结四类 Bean 注入 Spring 的方式

作者 | 阿Q来源 | 阿Q说代码一提到Spring&#xff0c;大家最先想到的是啥&#xff1f;是AOP和IOC的两大特性&#xff1f;是Spring中Bean的初始化流程&#xff1f;还是基于Spring的Spring Cloud全家桶呢&#xff1f;今天我们就从Spring的IOC特性入手&#xff0c;聊一聊Spring中把…

互联网公司如何塑造一支有创业精神的技术团队?

简介&#xff1a;践行这套理论&#xff0c;一个很大的感慨&#xff1a;创业文化的探索&#xff0c;就是和一群志同道合的伙伴去不断探索未知世界&#xff0c;并实现个人与集体成长的过程。所以也非常渴望和志同道合的同学一起探讨交流&#xff01; 作者 | 岩动 引言 我们经常…

广州大学计算机网络期末考试2013,广州大学计算机网络技术试卷(A卷)

广州大学2006-2007 学年第 1 学期考试卷课程计算机网络技术考试形式(开/闭卷&#xff0c;考试/查)一、填空题(15分)1、现有一计算机要和另一设备进行通信&#xff0c;要实现此目标首先要考虑通过何种接口把计算机和相应设备连接起来&#xff1b;解决此问题属于层的任务。(2分)2…

axure中出现小手_你所不知道的15个Axure使用技巧

Axure 6.5已于4月18日发布&#xff0c;可直到上周我才发现&#xff0c;于是赶紧下载升级。等待下载的过程中&#xff0c;闲来无聊跑去看了Axure的版本历史&#xff0c;又浏览了一下官方的使用教程&#xff0c;忽然发现Axure竟如此博大精深&#xff0c;自己平时所用的功能只是皮…

阿里云全站加速DCDN升级

简介&#xff1a;相比传统CDN加速&#xff0c;全站加速DCDN具有更广阔的应用场景。在当下企业全面数字化的进程中&#xff0c;为了更全面地满足广大企业客户的个性化加速需求&#xff0c;全站加速DCDN从简单开通到个性化定制、从内容分发到安全防护&#xff0c;对客户侧的使用体…

Redis 内存满了怎么办?这样置才正确!

作者 | 码哥呀来源 | 码哥字节上回在《Redis 数据过期了会被立马删除么&#xff1f;》说到如果过期的数据太多&#xff0c;定时删除无法删除完全&#xff08;每次删除完过期的 key 还是超过 25%&#xff09;&#xff0c;同时这些 key 再也不会被客户端请求&#xff0c;就无法走…

2000坐标系高程与85高程转换_【科普】测量人必须知道的几大坐标系

导读 不了解坐标系的测绘测量人员,不是好员工!无论科研的还是外业的,亦是如此。小编今天就为大家盘点出这几大传统坐标系,各位大大赶快收藏起来吧! 1 北京54坐标系 新中国成立以后,我国大地测量进入了全面发展时期,在全国范围内开展了正规的,全面的大地测量和测图工作,…

计算机编程pdf百度云,计算机编程基础.pdf

JAVA程序设计基础• Java是完全面向对象的语言&#xff0c;所有的实现必须放在类中。• JVM是 Java 编程语言的核心。• Java 运行时环境 (JRE) 包含一方面与硬件交互、另一方面又与程序交互的 JVM 。• JDK用于开发 Java 程序。• main函数是Java应用程序执行的入口。• 掌握如…