dubbo3终极特性「流量治理体系」一文教你如何通过dubbo-admin实现动态进行流量隔离机制(代码片段)

洛神灬殇 洛神灬殇     2023-01-16     269

关键词:

背景信息

如果一个应用有多个版本在线上同时运行,部署在不同环境中,如日常环境和特殊环境,则
可以使用标签路由对不同环境中的不同版本进行流量隔离,将秒杀订单流量或不同渠道订单流量路由到特殊环境,将正常的流量路由到日常环境。即使特殊环境异常,本应进入特殊环境的流量也不会进入日常环境,不影响日常环境的使用。

启动运行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终极特性「请求流治理体系」一文教你如何搭建dubbo3的控制台服务dubbo-admin

...一个控制台,为Dubbo集群提供更好可视化服务。Admin支持Dubbo3并很好的兼容2.7.x、2.6.x和2.5.x。DubboAdmin的部署方式接下来我们主要会介绍有四种DubboAdmin部署到生产环境的方式基于Helm运行Admin基于Kubernetes运行Admin基于Docker运行Admin基... 查看详情

dubbo3终极特性「云原生三中心架构」带你探索dubbo3体系下的配置中心和元数据中心注册中心的原理及开发实战(中)

承接上文通过之前的【Dubbo3终极特性】「云原生三中心架构」带你探索Dubbo3体系下的配置中心和元数据中心、注册中心的原理及开发实战(上),让我们对Dubbo3的三中心架构体系有了一定的认识和了解。Dubbo3的三中心部署架构回... 查看详情

dubbo3终极特性「流式协议体系」dubbo3服务的流式处理和响应式编程实战开发指南(代码片段)

...取消和超时Triple新特性之Stream(流式处理)Stream流式处理是Dubbo3新提供的一种调用类型,在以下场景时建议使用流的方式:接口需要发送大量数据,这些数据无法被放在一个RPC 查看详情

dubbo3终极特性「云原生三中心架构」带你探索dubbo3体系下的配置中心和元数据中心注册中心的原理及开发实战(中)(代码片段)

承接上文通过之前的【Dubbo3终极特性】「云原生三中心架构」带你探索Dubbo3体系下的配置中心和元数据中心、注册中心的原理及开发实战(上),让我们对Dubbo3的三中心架构体系有了一定的认识和了解。Dubbo3的三中心... 查看详情

dubbo3终极特性「云原生三中心架构」带你探索dubbo3体系下的配置中心和元数据中心注册中心的原理及开发实战(上)

Dubb3的应用级服务发现Dubbo3提供了全新的应用级服务发现模型,该模型在设计与实现上区别于Dubbo2的接口级服务发现模型。概括来说,Dubbo3引入的应用级服务发现主要有以下优势适配云原生微服务变革。云原生时代的基础设施能... 查看详情

dubbo3终极特性「云原生三中心架构」带你探索dubbo3体系下的配置中心和元数据中心注册中心的原理及开发实战(上)

Dubb3的应用级服务发现Dubbo3提供了全新的应用级服务发现模型,该模型在设计与实现上区别于Dubbo2的接口级服务发现模型。概括来说,Dubbo3引入的应用级服务发现主要有以下优势适配云原生微服务变革。云原生时代的基础... 查看详情

深入浅出dubbo3原理及实战「新特性简介」dubbo3新特性概览的介绍说明

Dubbo3的微服务框架系列本系列专题是关于Dubbo的简单介绍,涵盖Dubbo的核心概念、基本使用方式以及Dubbo3核心功能。Dubbo的基本介绍ApacheDubbo是一款微服务开发框架,它提供了RPC通信与微服务治理两大关键能力。使用Dubbo开... 查看详情

介绍说明」dubbo3新特性概览的介绍说明

Dubbo3的微服务框架系列​​【Dubbo3入门到精通】总体技术体系介绍及技术指南(目录)​​本系列专题是关于Dubbo的简单介绍,涵盖Dubbo的核心概念、基本使用方式以及Dubbo3核心功能。Dubbo的基本介绍ApacheDubbo是一款微服务开发框... 查看详情

alibaba微服务技术系列「dubbo3.0技术专题」总体技术体系介绍及技术指南(序章)

Dubbo的背景介绍Dubbo的功能特性面向接口代理的高性能RPC调用;服务自动注册与发现;智能负载均衡策略;高度可扩展能力;运行期流量调度;可视化的服务治理与运维;Dubbo的框架结构Dubbo的发展历程2011/10/27:阿里巴巴巴宣布Dub... 查看详情

dubbo3高级特性「框架与服务」dubbo3客户端和服务端的泛化调用机制体系(代码片段)

实现泛化实现(服务端泛化)服务端泛接口实现方式主要用于服务器端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的远程服务框架,可通过实现RawTypeService接口... 查看详情

深入浅出dubbo3原理及实战「新特性简介」dubbo3新特性要点之rpc协议介绍(代码片段)

RPC通信协议Dubbo3提供了Triple(Dubbo3)、Dubbo2协议,这是Dubbo框架的原生协议。除此之外,Dubbo3也对众多第三方协议进行了集成,并将它们纳入Dubbo的编程与服务治理体系,包括:gRPC、Thrift、JsonRPC、Hessian2、REST等。以下... 查看详情

dubbo3.0.0正式发布,王者归来!(代码片段)

Dubbo简介如果你还不知道什么是Dubbo,先来一波扫盲:ApacheDubbo是一款高性能、轻量级的开源Java服务框架Dubbo的6大特性:1、面向接口代理的高性能RPC调用;2、服务自动注册与发现;3、智能负载均衡策略;4、高度可扩展能力;5、... 查看详情

idou老师教你学istio19:istio流量治理功能原理与实战

...战负载均衡算法(loadbalancingalgorithm),定义了几种基本的流量分发方式,在Istio中一共有4种标准负载均衡算法。?Round_Robin:轮询算法,顾名思义请求将会依次发给每一个实例,来共同分担所有的请求。?Random:随机算法,将所有的... 查看详情

在dubbo3.0上服务治理的实践

简介: Dubbo3.0是在云原生背景下诞生的,使用Dubbo构建的微服务遵循云原生思想,能更好的复用底层云原生基础设施、贴合云原生微服务架构。Dubbo3.0介绍作者|十眠自从ApacheDubbo在2011年开源以来,经过多年一众大... 查看详情

一文了解dubbo3配置工作原理(代码片段)

以下是一个Dubbo属性配置的例子dubbo-spring-boot-samples##application.properties#Springbootapplicationspring.application.name=dubbo-externalized-configuration-provider-sample#BasepackagestoscanDubboComponent:@com.a 查看详情

一文了解字节跳动如何解决sla治理难题

动手点关注 干货不迷路 👆基于字节跳动分布式治理的理念,数据平台数据治理团队自研了SLA保障平台,目前已在字节内部得到广泛使用,并支持了绝大部分数据团队的SLA治理需求,每天保障的SLA链路数量过... 查看详情

一文教你如何学习typescript(代码片段)

...目。以上是官网[1]对于TypeScript的定义。强调了两个重要特性:类型系统适用于任何规模2、TypeScript的特性1、类型系统从TypeScript的名字就可以看出来,「类型」是其最核心的特性。我们知道,JavaScript是一门非常灵活的... 查看详情

dubbo3staterouter:下一代微服务高效流量路由(代码片段)

目前的微服务架构中,通常包含服务消费者、服务提供者、注册中心、服务治理四元素,其中服务消费者会向注册中心获取服务提供者的地址列表,并根据路由策略选出需要调用的目标服务提供者地址列表,最后... 查看详情