springcloud微服务项目,通过gateway+nacos实现灰度发布(系统不停机升级)

一、背景

灰度发布的目的是保证系统的高可用,不停机,提升用户体验。在微服务系统中,原有系统不下线,新版系统与原有系统同时在线,通过访问权重在线实时配置,可以让少量用户先应用新版本功能,如果用户反馈存在问题,则下线新系统;如果反馈良好,则逐步加大新系统的分流权重,同时降低老系统的访问权重,直到新系统替换老系统,实现一种平滑的系统升级效果。

二、灰度发布方案

springcloud架构体系的gateway是专门用来做路由转发的,包括一项重要的功能:权重路由。nacos是目前最流行的微服务注册中心和配置中心,可实现在线配置的实时生效,无需重启系统,此处将gateway的配置信息交给nacos托管,即可实现分布式系统的灰度发布功能。

 

// sharetek-gateway.yml核心配置内容
spring:cloud:# 网关配置gateway:# 打印请求日志(自定义)requestLog: truediscovery:locator:lowerCaseServiceId: trueenabled: trueroutes:# 认证中心- id: sharetek-authuri: http://192.168.72.1:9210    // 新系统predicates:- Path=/api/token,/api/test,/api/test2- Weight=group1, 1- id: sharetek-auth2uri: http://192.168.72.1:9203    // 老系统predicates:- Path=/api/token,/api/test,/api/test2- Weight=group1, 8

由于在同一台电脑上测试,用9210端口部署新系统,9203端口部署老系统,

"- Weight=group1, 1" :配置访问权重,group1相同的为一组,组内的不同机器根据权重系数"1",计算分流权重,权重越大,被访问几率越大。

在实际生产环境系统升级时,可以先调整服务A集群中其中一台机器的访问权重为0(即停止被访问,无论该服务是否运行,都不会被访问),再升级该服务,调整为整体流量的3%,(这个根据业务实际情况而定),释放极少量用户使用新功能,观察新系统用户反馈情况,如果一切良好,再逐步调大新系统权重,同时降低老系统权重,直到新系统完全替换老系统;如果升级过程中,新系统出现问题,可以随时通过调整权重系数,回退到老系统。整个升级过程,用户无感知,极度丝滑,非常优雅!

也可根据服务器的性能高低,分配访问权重。

三、注意事项

如果gateway配置权重后,没有生效(走的是轮巡),或者有的生效,有的仍然轮巡,最大的原因是sharetek-gateway.yml的路由配置出了问题,或者postman访问路径与路由配置路径不匹配

1.错误案例如下:

 2.正确打开方式:

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

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

相关文章

【vue核心技术实战精讲】1.9 Vue指令之v-model双向数据绑定

文章目录 前言 本节内容1、v-modelv-model 双向的数据绑定双向数据流(绑定) v-bind 和 v-model 的区别?input v-model"name"input :value"name"v-model: 其的改变影响其他 v-bind: 其的改变不不影响其他v-bind就是对属性的简单赋值…

如何使用 ArcGIS Pro 制作三维建筑

三维地图已经逐渐成为未来地图的趋势,对于大范围应用,只需要普通的建筑体块就行,如果有高程数据,还可以结合地形进行显示,这里为大家介绍一下 ArcGIS Pro 制作三维建筑的方法,希望能对你有所帮助。 数据来…

睿尔曼超轻量仿人机械臂之复合机器人底盘介绍及接口调用

机器人移动平台是一个包含完整成熟的感知、认知和定位导航能力的轮式机器人底盘产品级平台,产品致力于为各行业细分市场的商用轮式服务机器人提供一站式移动机器人解决方案,让合作伙伴专注在核心业务/人机交互的实现。以下是我司产品双臂机器人以及复合升…

在安卓手机上用termux安装完整kali linux的办法

在安卓手机上termux是完整的Linux仿真器,但也有时候需要在手机上装其他集成度更高的Linux发行版的刚需。 在安卓手机上用termux安装完整kali linux的办法,如下: pkg install wget openssl-tool proot tar -y && hash -r &&…

Rust编程(四)PackageCrateModule

这一部分的中文教程/文档都很混乱,翻译也五花八门,所以我建议直接看英文官方文档,对于一些名词不要进行翻译,翻译只会让事情更混乱,本篇从实战和实际需求出发,讲解几个名称的关系。 Module & Crate & Package & Workspace 英文中的意思: Cargo:货物 Crate:…

【详细讲解PostCSS如何安装和使用】

🌈个人主页:程序员不想敲代码啊🌈 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家🏆 👍点赞⭐评论⭐收藏 🤝 希望本文对您有所裨益,如有不足之处,欢迎在评论区提…

Python读取csv文件入Oracle数据库

在Python中,使用pandas库的read_sql_query函数可以直接从SQL查询中读取数据到DataFrame。而pd.set_option函数用于设置pandas的显示选项。具体来说,display.unicode.ambiguous_as_wide选项用于控制当字符宽度不明确时,pandas是否将这些字符显…

go中继承、多态的模拟实现

Go语言采用了与传统面向对象编程语言(如Java或C)不同的方法来实现继承和多态。 它通过接口(Interfaces)、结构体(Structs)和组合(Composition)提供了继承和多态的能力 继承的模拟实…

在 Mac 上恢复已删除文件的 4 种方法 [完整指南]

几乎每个 Mac 用户都有过因删除、格式化硬盘或清空垃圾箱而导致数据丢失的经历。当您在 Mac 上删除文件并清空垃圾箱或使用“磁盘工具”擦除功能擦除整个硬盘驱动器时,您可能会认为已删除的文件或已擦除的数据已永远消失。事实上,事实并非如此。使用正确…

dou音全系纯算

先说明一个事情: 公众号开通了朋友们,大家可去关注一下,关于国内外的验证系列,或是另类常见的算法都有详情介绍的文章!!!!以后有问题可以直接在vx上留言,这样也方便看的多…

【ARM 嵌入式 C 入门及渐进 13 -- ARM 带返回值的汇编函数】

请阅读【嵌入式开发学习必备专栏 】 文章目录 在 ARMv8 架构中,系统寄存器的访问通常使用专有的指令。对于 MPIDR_EL1(多处理器亲和性寄存器),可以使用 MRS(Move System Register)指令将其值读取到一个通用…

智能工具管理系统-智能工具柜系统

智能工具管理系统-智能工具柜系统 智能工具可视化管理系统(智工具DW-S308)是依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID工具进行统一管理、分析的信息化、智能化、规范化的系统。 一、工具管理现状 东识RFID工具管理系统是一种便捷化的工具…

jQuery如何获取元素宽高?

在jQuery中,获取元素的宽和高有多种方法,取决于你是否需要包括边框、内边距或其他额外空间。以下是几种常用的方式: 获取元素内容区域的宽和高(不包括边框和内边距): var width $(#yourElement).width(); …

前端基础知识html

一.基础标签 1.<h1>-<h6>:定义标题&#xff0c;h最大&#xff0c;h最小 2.<font>&#xff1a;定义文本的字体&#xff0c;尺寸&#xff0c;颜色 3.<b>&#xff1a;定义粗体文本 4.<i>&#xff1a;定义斜体文本 5.<u>&#xff1a;定义文本下…

【MySql数据库】MySQL5.7在navicat中建立连接报错1045及重装MySQL过程中3306端口号被占用释放的过程

文章目录 一、报错1、软件中报错2、navicat中报错3、数据库密码是正确的4、卸载数据库5、重装数据库发现3306端口被占用 二、释放3306端口1、找到3306端口对应的PID值2、释放3306端口号3、释放端口后&#xff0c;重装数据库 一、报错 1、软件中报错 2、navicat中报错 在navic…

prometheus详解1

一、start、reload 与 shutdown 1、启动prometheus 进程 nohup ./prometheus --config.fileprometheus.yml > prometheus.log 2>&1 &2、重载prometheus配置文件&#xff08;reload&#xff09; kill -s SIGHUP <PID>3、优雅的shutdown一个prometheus 进…

CentOS配置docker外部访问

CoreOS 官方文档提供的方法 官方文档&#xff1a;​​​​​​https://coreos.com/os/docs/latest/customizing-docker.html 新建 /etc/systemd/system/docker-tcp.socket 文件 [Unit] DescriptionDocker Socket for the API[Socket] # ListenStream127.0.0.1:2375 ListenStre…

Colorize (Texture Color Palette Modifier)

Colorize提供了无与伦比的区域颜色调整和效果控制,如使用纹理调色板的模型的发射、金属反射和模拟金属遮挡。 Colorize彻底改变了你在Unity中为3D模型添加颜色和生命的方式。无论你是一个独立开发者、艺术家,还是一个大型团队的一员,Colorize都提供了一套直观、强大的工具,…

【CASS精品教程】CASS中计算四参数和七参数(以RTK数据为例)

文章目录 一、四参数介绍二、四参数计算三、七参数介绍四、四参数、七参数的区别一、四参数介绍 两个不同的二维平面直角坐标系之间转换通常使用四参数模型,四参数适合小范围测区的空间坐标转换,相对于七参数转换的优势在于只需要2个公共已知点就能进行转换,操作简单。 在…

Pytorch的named_children, named_modules和named_children

在 PyTorch 中&#xff0c;named_children、named_modules 和 named_parameters 是用于获取神经网络模型组件和参数的三种不同的方法。下面是它们各自的作用和区别&#xff1a; named_parameters&#xff1a;递归地列出所有参数名称和tensornamed_modules&#xff1a;递归地列…