背景信息

如果一个应用有多个版本在线上同时运行,部署在不同环境中,如日常环境和特殊环境,则

可以使用标签路由对不同环境中的不同版本进行流量隔离,将秒杀订单流量或不同渠道订单流量路由到特殊环境,将正常的流量路由到日常环境。即使特殊环境异常,本应进入特殊环境的流量也不会进入日常环境,不影响日常环境的使用。

启动运行Dubbo-Admin

在运行之前,我们需要保障进行运行对应的Dubbo-Admin服务,可以参考 【Dubbo3终极特性】「流量治理体系」一文教你如何搭建Dubbo3的控制台服务Dubbo-Admin,进行搭建和运行启动Dubbo-Admin服务。

因为dubbo-admin-server会将dubbo-admin-ui打包为资源文件,所以启动dubbo-admin-server就可直接访问页面了

我们在这里可以直接下载clone源码

git clone https://github.com/apache/dubbo-admin.git

直接可以下载到IDE中

  • dubbo-admin-distribution:主要用于操作安装和打包使用的项目组件
  • dubbo-admin-server:dubbo-admin服务的后台服务springboot类型的项目
  • dubbo-admin-test:dubbo-admin服务的测试服务
  • dubbo-admin-ui:dubbo-admin的ui服务,主要会显示前端的ui页面。

通过源码打包运行

  1. dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址
  2. 构建
    • mvn clean package -Dmaven.test.skip=true
  3. 启动
    • mvn --projects dubbo-admin-server spring-boot:run

      或者
    • cd dubbo-admin-distribution/target; java -jar dubbo-admin-${project.version}.jar
  4. 访问 http://localhost:38080

可以直接再IDE的md文件中进行允许编译对应的dubbo-admin的代码以及运行服务。

Dubbo-Admin 动态进行流量隔离

Dubbo提供动态流量隔离的服务治理能力,可以在无需重启应用的情况下,动态进行流量隔离。Dubbo可以通过XML配置,注解配置,动态配置实现流量隔离,这里主要介绍动态配置的方式。

允许多个Provider端服务

你可以直接进行运行服务进行运行多个实例。如下所示。

当然也可以通过VM参数进行调整为不同的dubbo.protocol.port,方便我们进行路由转发机制。

标签路由规则

将服务提供者进行分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,有两种方式可以完成实例分组,分别是动态规则打标和静态规则打标

2.1 动态规则相较于静态规则优先级更高

标签路由

登录Dubbo-Admin控制台

用户名为root,密码为root。

在左侧导航栏选择服务治理 > 标签路由。

点击创建按钮,在创建新标签规则面板中,填写规则内容,然后单击保存。

配置模板

---
force: false
runtime: true
enabled: true
key: application-provider
tags:
- name: tag1
addresses: ["127.0.0.1:20880"]
- name: tag2
addresses: ["127.0.0.1:20881"]
...

对于流量隔离场景,只需要理清楚以下问题基本就知道配置该怎么写了:

修改服务所属提供者应用的配置。

应用:scope: application, key: app-name(还可使用services指定某几个服务)。

当路由结果为空,是否强制返回。

  • force=false: 当路由结果为空,降级请求tag为空的提供者。
  • force=true: 当路由结果为空,直接返回异常。

路由规则的优先级

priority=1: 路由规则的优先级,用于排序,优先级越大越靠前执行,可不填,缺省为 0。

配置是否只对某几个特定实例生效。

所有实例:addresses: ["0.0.0.0"] 或addresses: ["0.0.0.0:*"] 具体由side值决定。

指定实例:addersses[实例地址列表]。

运行服务提供者

可以从dubbo-admin中看到对应的服务已经注册上来了

开发服务消费者

RpcContext.getContext().setAttachment("dubbo.tag",name);

切换不同的tag参数,即可完成流量转发:tag1 tag2

我们通过name参数进行切换标签

请求 GET http://127.0.0.1:8082/add?name=tag1&age=12

我们可以看到打印了对应provider1服务的日志

请求 GET http://127.0.0.1:8082/add?name=tag2&age=12

我们可以看到打印了对应provider2服务的日志

小伙伴们,你们学会了嘛?

【Dubbo3终极特性】「流量治理体系」一文教你如何通过Dubbo-Admin实现动态进行流量隔离机制的更多相关文章

  1. Istio流量治理原理之负载均衡

    流量治理是一个非常宽泛的话题,例如: ● 动态修改服务间访问的负载均衡策略,比如根据某个请求特征做会话保持: ● 同一个服务有两个版本在线,将一部分流量切到某个版本上: ● 对服务进行保护,例如限制并 ...

  2. 流量染色与gRPC服务托管 微服务协作开发、灰度发布之流量染色 灰度发布与流量染色

    大规模微服务场景下灰度发布与流量染色实践 https://mp.weixin.qq.com/s/UBoRKt3l91ffPagtjExmYw [go-micro]微服务协作开发.灰度发布之流量染色 - ...

  3. 面试都在问的「微服务」「RPC」「服务治理」「下一代微服务」一文带你彻底搞懂!

    ❝ 文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) ❞ 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程 ...

  4. 「查缺补漏」巩固你的Redis知识体系

    Windows Redis 安装 链接: https://pan.baidu.com/s/1MJnzX_qRuNXJI09euzkPGA 提取码: 2c6w 复制这段内容后打开百度网盘手机App,操作 ...

  5. 「每日一题」面试官问你对Promise的理解?可能是需要你能手动实现各个特性

    关注「松宝写代码」,精选好文,每日一题 加入我们一起学习,day day up 作者:saucxs | songEagle 来源:原创 一.前言 2020.12.23日刚立的flag,每日一题,题目类 ...

  6. 「查缺补漏」巩固你的RocketMQ知识体系

    Windows安装部署 下载 地址:[https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.5.2/rocketmq-all-4.5.2-bin- ...

  7. 「查缺补漏」巩固你的Nginx知识体系

    Nginx篇 基本介绍 Nginx是一款轻量级的 Web服务器 / 反向代理服务器 / 电子邮件(IMAP/POP3)代理服务器,主要的优点是: 支持高并发连接,尤其是静态界面,官方测试Nginx能够 ...

  8. [转帖]「知乎知识库」— 5G

    「知乎知识库」— 5G 甜草莓 https://zhuanlan.zhihu.com/p/55998832 ​ 通信 话题的优秀回答者 已关注 881 人赞同了该文章 谢 知识库 邀请~本文章是几个答 ...

  9. 「每日一题」有人上次在dy面试,面试官问我:vue数据绑定的实现原理。你说我该如何回答?

    关注「松宝写代码」,精选好文,每日一题 ​时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 来源:原创 一.前言 文章首发在「松宝写代码」 2020. ...

  10. B 站崩了,总结下「高可用」和「异地多活」

    你好,我是悟空. 一.背景 不用想象一种异常场景了,这就真实发生了:B 站晚上 11 点突然挂了,网站主页直接报 404. 手机 APP 端数据加载不出来. 23:30 分,B 站做了降级页面,将 4 ...

随机推荐

  1. 服务器之Apollo单机部署(快速安装)

    部署Apollo apollo单机部署(快速安装) Apollo官网:https://www.apolloconfig.com/#/zh/deployment/quick-start-docker 官 ...

  2. 齐博x2是什么?

    齐博x2是什么? 齐博x2是齐博x1的延申版本. 对小程序全方位加强

  3. Java函数式编程:一、函数式接口,lambda表达式和方法引用

    Java函数式编程 什么是函数式编程 通过整合现有代码来产生新的功能,而不是从零开始编写所有内容,由此我们会得到更加可靠的代码,并获得更高的效率 我们可以这样理解:面向对象编程抽象数据,函数式编程抽象 ...

  4. 制作一个windows垃圾清理小程序

    制作一个windows垃圾清理小程序: 把下列代码保存为.bat文件(如垃圾清理.bat) 双击它就能很快地清理垃圾文件,大约一分钟不到. 就是下面的文字(这行不用复制)=============== ...

  5. LcdTools如何使用PX01进行EDP屏EDID比对及设置显示EDID比对结果

    PX01点EDP屏在上电过程会自动读取屏EDID,那怎么进行EDID比对呢? LcdTools打开点屏工程,在上电时序函数中先用SetCmpEDID()指令设置EDID比对值,再调用CheckEDID ...

  6. .NET周报【10月第3期 2022-10-25】

    国内文章 聊一聊被 .NET程序员 遗忘的 COM 组件 https://www.cnblogs.com/huangxincheng/p/16799234.html 将Windows编程中经典的COM ...

  7. ThreadPoolExecutor BlockingQueue讲解

    有四种常用阻塞队列策略: 1.直接拒绝:(Direct Handoffs) 一个好的工作队列应该是不缓存任务,而是直接交给线程处理,就如SynchronousQueue一样.一个任务将会入队失败,如果 ...

  8. vue-axios 输入参数获取数据的写法

    <template> <div class="nav"> <input v-model="name" type="tex ...

  9. halcon如何识别硬币?

    halcon如何识别硬币? 前言 最近一直在学习halcon,在此做了一个案例,分享给大家,效果图如下: 1.思路分析 通过观察,发现1元,5角,1角,它们在面值的文字描述不一样,硬币显示的花纹不一样 ...

  10. Spring Security(4)

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 前面的方法中,除了login()方法能成功,另外两个都失败,并不是因为代码问题,而是Spring Security默认是通过Web页面来实现页面 ...