灰度发布专题---2、Dubbo灰度发布

news2024/11/17 11:43:10

通过上面描述,我们理解了什么是灰度发布,接下来我们基于Dubbo实现灰度发布。Dubbo的灰度发布常见的方式有版本控制灰度发布、路由灰度发布、基于Apollo实现灰度发布,我们把这每种灰度发布都实现一次。
在学习Dubbo灰度发布之前,我们先看准备好的案例工程,如下图:
在这里插入图片描述

Dubbo版本控制灰度发布

在这里插入图片描述
如上图,我们对每个工程做个分析:
dubbo-provider-v1: 版本号为 1.0.0

dubbo: 
provider: 
  protocol: dubbo 
  version: 1.0.0 
  timeout: 3000 

dubbo-provider-v2: 版本号为 2.0.0

dubbo: 
provider: 
  protocol: dubbo 
  version: 2.0.0 
  timeout: 3000 

要实现不同版本的切换,我们可以根据url路径来实现,现实项目中,可以根据用户名或者IP选择调用不 同版本的服务端,当测试版本稳定后,直接将消费端全局版本调整至 2.0.0即可。
dubbo-consumer:默认使用的版本是 1.0.0
控制层调用如下:
在这里插入图片描述
测试效果如下:http://localhost:18082/car/v1/byd

Version1-比亚迪     唐     白色     车牌:byd 

测试效果如下:http://localhost:18082/car/v2/byd

Version1-比亚迪     唐     白色     车牌:byd 

Dubbo权重灰度发布

灰度发布主要目的是让少量用户测试新版本,我们可以将少部分流量引入到 dubbo-provider-v2中,此 时我们可以给 dubbo-provider-v2设置权重比例。
权重参数如下:

# 局部设置可以覆盖掉全局设置对当前局部设置进行修改的远程调用接口的设置
#
# loadbalance 设置负载均衡的方式(局部设置负载均衡):
#     random:RandomLoadBalance:权重随机调用(dubbo中默认使用的方式)
#         如果服务多实例权重相同,则进行随机调用;如果权重不同,按照总权重取随机数
#     roundrobin:RoundRobinLoadBalance:权重轮询调度算法
#         若权重相同则直接取模调用服务,循环调用多个服务,若权重不相同则根据权重的大小循环调用服务
#     leastactive:LeastActiveLoadBalance:最少活跃次数
#         取出多个实例中被调用的次数最少的实例,如果只有一个则调用其,多个且权重相同则随机返回,权重不同则通过总权重随机调用
#     consistenthash:ConsistentHashLoadBalance:一致性hash
#         相同参数的请求总是发到同一提供者
#         如果当前接收请求的提供者挂掉时,会将发往其的请求平摊到其它提供者
# 也可以在application配置文件中配置   dubbo.consumer.loadbalance=
#
#
# cluster 设置dubbo集群容错机制(局部设置):
#     failover:失败自动切换,当出现失败时重试其它服务器,通常用于读操作,但重试会带来更长延迟。可通过retries="2" 来设置重试次数(2中不包含第一次)。
#     failfast:快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作,比如新增记录
#     failsafe:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作
#     failback:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作
#     forking:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。
#     broadcast:广播调用所有提供者,逐个调用,任意一台报错则报错 。通常用于通知所有提供者更新缓存或日志等本地资源信息# 可以在application配置文件中配置   dubbo.consumer.cluster=     retries=

全局配置可以在application.yml中配置:

dubbo: 
	registry:   
	address: zookeeper://127.0.0.1:2181 
consumer:   # 全局性设置负载均衡方式   
	loadbalance: random   
	version: 1.0.0   
	cluster: failfast

如果是单独配置某一个被注入的对象:

@Reference(loadbalance = "roundrobin")
private CarService carService;

Apollo灰度发布

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。.Net客户端不依赖任何框架,能够运行于所有.Net运行时环境。

Dubbo基于Apollo配置管理

在这里插入图片描述
我们先使用Apollo实现项目配置,此案创建三个项目 common:公共配置
在这里插入图片描述
provider:生产者配置
在这里插入图片描述
consumer:消费者配置
在这里插入图片描述

Dubbo基于Apollo灰度发布

通过创建灰度版本,您可以对某些配置做灰度测试 灰度流程为:

  1. 创建灰度版本
  2. 配置灰度配置项
  3. 配置灰度规则.如果是私有的namespace可以按照客户端的IP进行灰度,如果是公共的namespace则可 以同时按AppId和客户端的IP进行灰度
  4. 灰度发布

灰度版本最终有两种结果:全量发布和放弃灰度 全量发布:灰度的配置合到主版本并发布,所有的客户端 都会使用合并后的配置 放弃灰度:删除灰度版本,所有的客户端都会使用回主版本的配置 注意事项: 1.如 果灰度版本已经有灰度发布过,那么修改灰度规则后,无需再次灰度发布就立即生效
在这里插入图片描述

灰度配置

如下图,如果测试版本有额外的配置,我们可以点击新增灰度配置
在这里插入图片描述
新增配置后,点击灰度发布才会生效
在这里插入图片描述

灰度规则配置

我们可以让指定的IP的服务为灰度版本,如下图可以选择当前访问过服务的IP,如果有其他指定IP,可 以手动直接输入,手动输入多个IP以逗号隔开,当用户访问这些IP指定的服务时,对应配置才会生效。
在这里插入图片描述
手动输入IP
在这里插入图片描述

全量灰度发布

全量灰度发布在现实工作中是指灰度版本没有问题了,需要把所有服务的版本全部切换成完成测试的灰 度版本,我们点击全量发布即可,全量发布的时候,我们可以把灰度版本删除。
在这里插入图片描述

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

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

相关文章

2019年11月7日 Go生态洞察:Go Modules v2及更高版本

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

vue3 setup语法糖,常用的几个:defineProps、defineEmits、defineExpose、

vue3和vue2组件之间传参的不同 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。 <script setup> 中的代码会在每次组件实例被创建的时候执行。 任何在 <script setup> 声明的顶层的绑定 (包括变量&#xff0c;函数声明&#xff0…

食材管家,轻松搞定!商户选择生鲜配送系统的原因

随着消费者对生鲜食品的需求不断增加&#xff0c;生鲜市场逐渐成为了电商领域中的热门行业。而生鲜配送系统&#xff0c;则是生鲜电商发展中不可或缺的一部分。本文将探讨商户选择生鲜配送系统的几个原因。 1. 提高效率 生鲜配送系统通过智能化的订单处理、路线规划和配送优化…

2023.11.27 关于 Mybatis 增删改操作

目录 引言 增加用户操作 删除用户操作 修改用户操作 阅读下述文章之间 建议点击下方链接先了解 MyBatis 的创建与使用 MyBatis 的创建与使用 建议点击下方链接先了解 单元测试 的创建与使用 Spring Boot 单元测试的创建与使用 引言 为了方便下文实现增、删、改操作我们先…

java多线程-扩展知识三:乐观锁与悲观锁

1、悲观锁 悲观锁有点像是一位比较悲观&#xff08;也可以说是未雨绸缪&#xff09;的人&#xff0c;总是会假设最坏的情况&#xff0c;避免出现问题。 悲观锁总是假设最坏的情况&#xff0c;认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改)&#xff0c;所以每次…

Appium 2 和 Appium Inspector 环境部署

前言 自 2022 年 1 月 1 日起&#xff0c;Appium 核心团队不再维护 Appium 1.x。官方支持的平台驱动程序的所有最新版本均不兼容 Appium 1.x&#xff0c;需要 Appium 2 才能运行。 Appium 2是一个自动化移动应用程序的开源工具&#xff0c;它带来了以下重要改进&#xff1a;  …

SpringBootWeb案例_01

Web后端开发_04 SpringBootWeb案例_01 原型展示 成品展示 准备工作 需求&环境搭建 需求说明&#xff1a; 完成tlias智能学习辅助系统的部门管理&#xff0c;员工管理 环境搭建 准备数据库表&#xff08;dept、emp&#xff09;创建springboot工程&#xff0c;引入对应…

神经网络核心组件和流程梳理

文章目录 神经网络核心组件和流程梳理组件流程 神经网络核心组件和流程梳理 组件 层&#xff1a;神经网络的基本结构&#xff0c;将输入张量转换为输出张量。模型&#xff1a;由层构成的网络。损失函数&#xff1a;参数学习的目标函数&#xff0c;通过最小化损失函数来学习各…

HCIP-十一、BGP反射器和联盟

十一、BGP反射器和联盟 实验拓扑实验需求及解法1.配置各设备的接口 IP 地址。2.BGPAS 规划3.BGP 反射器4.BGP 联盟5.ebgp 邻居6.bgp 路由汇总 实验拓扑 实验需求及解法 本实验模拟 BGP 综合网络拓扑&#xff0c;完成以下需求&#xff1a; 1.配置各设备的接口 IP 地址。 所有…

这些汽车托运套路你肯定不知道

这些汽车托运套路你肯定不知道 这些套路你肯定不知道.. 学会这三招 汽车托运不怕吃亏 1 看营业执照 首先确定选择的托运公司是否有保障 要求公司出示营业执照和道路运输经营许可证 如果都没有 那就很有可能是无牌照的小作坊!! 这种出问题就肯定没保障 2 保险跟合同 一车一合同 …

安卓系统修图软件(三)

在之前的推送里面&#xff0c;博主分享过两期关于安卓手机的优质修图软件&#xff0c;今天&#xff0c;博主将带来第三期的分享&#xff0c;这也将是该栏目的最后一期。 之前的8款软件&#xff0c;都是以美化、滤镜的风格为主&#xff0c;今天博主带来的这3款&#xff0c;则是以…

数据结构与算法的精髓是什么?复杂度分析【数据结构与算法】

代码跑一遍存在什么问题&#xff1f;什么是 O 复杂度表示法&#xff1f;如何分析时间复杂度&#xff1f;常见时间复杂度量级有哪些&#xff1f;O(1)O(logn)O(n)O(nlogn)O(mn)O(m*n)O(n^2)O(2^n)O(n!)不同时间复杂度差距有多大&#xff1f;时间复杂度分析总结 如何分析空间复杂度…

2021年06月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共10题,每题2分,共20分) 第1题 执行下列程序,输出的结果为? A:12 B:24 C:8 D:30 答案:B 第2题 执行下列程序,角色说出的内容是? A:2 B:3 C:4 D:5 答案:A 第3题 执行下列程序,输出结果为?

Spring Security 6.x 系列(5)—— Servlet 认证体系结构介绍

一、前言 本章主要学习Spring Security中基于Servlet 的认证体系结构&#xff0c;为后续认证执行流程源码分析打好基础。 二、身份认证机制 Spring Security提供个多种认证方式登录系统&#xff0c;包括&#xff1a; Username and Password&#xff1a;使用用户名/密码 方式…

接口测试:Jmeter和Postman测试方法对比

前阶段做了一个小调查&#xff0c;发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中&#xff0c;有高手&#xff0c;自然也会有小白&#xff0c;但有一点我们无法否认&#xff0c;就是每一个高手都是从小白开始的&#xff0c;所以今天我们就来谈谈一大部分人…

Leetcode98 验证二叉搜索树

题意理解&#xff1a; 首先明确二叉树的定义&#xff0c;对于所有节点&#xff0c;根节点的值大于左子树所有节点的值&#xff0c;小于右子树所有节点的值。 注意一个误区&#xff1a; 根节点简单和左孩子&#xff0c;右孩子比大小是不够的&#xff0c;要和子树比&#xff0c;…

30.0/集合/ArrayList/LinkedList

目录 30.1什么是集合? 30.1.2为什么使用集合 30.1.3自己创建一个集合类 30.1.3 集合框架有哪些? 30.1.2使用ArrayList集合 30.2增加元素 30.3查询的方法 30.4删除 30.5 修改 30.6泛型 30.1什么是集合? 我们之前讲过数组&#xff0c;数组中它也可以存放多个元素。集合…

C++基础 -6-二维数组,数组指针

二维数组在内存中的存放方式和一维数组完全相同 下表把二维数组抽象成了行列形式方便理解 a[0]指向第一行首元素地址 a指向第一行的首地址 所以a地址和a[0]地址相同,因为起点相同 但a[0]1往右偏移 但a1往下方向偏移 方便理解 an控制行 a[0]n控制列(相当于*an) 数组指针指向二…

【EI会议投稿】第四届物联网与智慧城市国际学术会议(IoTSC 2024)

第四届物联网与智慧城市国际学术会议 2024 4th International Conference on Internet of Things and Smart City 继IoTSC前三届的成功举办&#xff0c;第四届物联网与智慧城市国际学术会议&#xff08;IoTSC 2024&#xff09;将于2024年3月22-24日在河南洛阳举办。 智慧城市的…

Redis常用操作及应用(二)

一、Hash结构 1、常用操作 HSET key field value //存储一个哈希表key的键值 HSETNX key field value //存储一个不存在的哈希表key的键值 HMSET key field value [field value ...] //在一个哈希表key中存储多个键值对 HGET key fie…