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

通过上面描述,我们理解了什么是灰度发布,接下来我们基于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.hqwc.cn/news/227937.html

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

相关文章

Linux僵死进程及文件操作

1.僵死进程(僵尸进程): 1.僵死进程产生的原因或者条件: 什么是僵死进程? 当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程. 简而言之,就是子进程先结束,并且父进程没有获取它的退出码; 那么僵死进程产生的原因或者条件就是:子进…

第13关 解决K8s中Ingress Nginx控制器无法获取真实客户端IP的问题

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 这节课带大家探索并分享最全面的解决在使用Kubernetes(K8s)和Ingress-Nginx-Controller中无法获取客户端真实IP问题的视频教程,帮助你快速理解并解决这一问…

vue select选择下拉组织树,解决不出现横向滚动条

背景&#xff1a;由于项目需求需要使用下拉选择框的组织架构树 实现代码如下&#xff1a; <el-row><el-col :span"18"><el-form-item label"所属组织:" prop"groupName"><el-select v-model"dataForm.groupName"…

【双指针】四数之和

四数之和 建议做过了解三数之和的思想再做这道题&#xff0c;思路是一样的~ 题目描述 18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [num…

海翔云平台 getylist_login.do SQL 注入漏洞复现

0x01 产品简介 海翔云平台一站式整体解决方案提供商&#xff0c;业务涵盖 批发、连锁、零售行业ERP解决方案、wms仓储解决方案、电商、外勤、移动终端&#xff08;PDA、APP、小程序&#xff09;解决方案。 0x02 漏洞概述 海翔云平台getylist_login.do接口处存在SQL注入漏洞&am…

docker容器运维操作命令

docker exec &#xff1a;在运行的容器中执行命令 docker exec [OPTIONS] CONTAINER COMMAND [ARG...] OPTIONS说明&#xff1a; -d :分离模式: 在后台运行 -i :即使没有附加也保持STDIN 打开 -t :分配一个伪终端docker ps : 列出容器 docker ps [OPTIONS] OPTIONS说明&#…

如何集成一个TypeScript开发环境?

首先要安装个node.js。Node.js (nodejs.org) 然后我们随便建一个文件夹&#xff0c;并且打开它运行到终端 然后再运行命令&#xff1a; npm install typescript -g 成功后 尝试使用 tsc -v 查看版本 接下来再使用命令&#xff1a; tsc --init 我们在.ts文件中尝试输出一些…

GitHub 2023排名前十的最佳开源项目

开源软件&#xff08;OSS&#xff09;彻底改变了当今软件开发的方式。在数百万个开源GitHub项目中&#xff0c;要找到最适合需求的开源项目可能会让人不知所措。 今天给大家列出2023年增长最快的前10个开源GitHub仓库。通过这些增长最快的开源项目&#xff0c;也可以从整体上了…

zabbix 6.0 原理与部署

一、zabbix简介&#xff1a; zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbi…

如何运行C/C++程序

一、在线运行C/C 码曰 - 让代码在云端多飞一会&#xff1a;这是一个支持C/C&#xff0c;Java&#xff0c;Python等多种语言的在线编程&#xff0c;编译运行&#xff0c;粘贴分享的平台。你可以在这里输入你的代码&#xff0c;点击运行按钮&#xff0c;就可以看到输出结果。你也…

java设计模式 开闭原则

开闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;是面向对象设计中的一个重要原则&#xff0c;它指导着我们如何设计和组织代码&#xff0c;以便使系统在扩展性和可维护性方面更加优秀。 开闭原则的定义是&#xff1a;软件实体&#xff08;类、模块、函数…

PWM占空比原理是什么,几个实例带你进一步了解

PWM : 即脉冲宽度调制(Pulse Width Modulation) 脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在从测量、通信到功率控制与变换及嵌入式领域的许多领域中。 PWM控制技术以其控制简单&#xff0c;灵活和动态响应好的优点而…