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

news/2024/4/27 17:20:09/文章来源:https://blog.csdn.net/shanxiderenheni/article/details/137104130

一、背景

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

二、灰度发布方案

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.正确打开方式

3.如果服务实例挂掉,权重分流会报错

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

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

相关文章

2024软件设计师备考讲义——(8)

操作系统 〇、操作系统概述 OS作用、OS特征、OS分类 作用:提高计算机效率,人机交互友好特征:并发性、共享性、虚拟性、不确定性分类:批处理、分时、实时、网络、分布式、微机嵌入式操作系统:微型化、可定制、实时性、可…

Nuxt(组件-基础使用)

1.根目录下新建compoents目录&#xff0c;必须是这个名字 2.封装组件 示例代码如下&#xff08;Header.vue&#xff09;&#xff1a; <template><div><NuxtLink to"/"> 首页 </NuxtLink><NuxtLink to"/about"> 关于 </…

创龙教仪基于瑞芯微3568的ARM Cortex A-55教学实验箱 适用于人工智能 传感器 物联网等领域

适用课程 Cortex-A55 ARM嵌入式实验箱主要用于《ARM 系统开发》、《ARM 应用开发》《物联网通信技术》、《嵌入式系统设计》、《移动互联网技术》、《无线传感器网络》、《物联网设计方法与应用》、《人工智能》等课程。 适用专业 Cortex-A55 ARM嵌入式实验箱主要面向电子信…

20232831 2023-2024-2 《网络攻防实践》第4次作业

目录 20232831 2023-2024-2 《网络攻防实践》第4次作业1.实验内容2.实验过程&#xff08;1&#xff09;ARP缓存欺骗攻击&#xff08;2&#xff09;ICMP重定向攻击&#xff08;3&#xff09;SYN Flood攻击&#xff08;4&#xff09;TCP RST攻击&#xff08;5&#xff09;TCP会话…

vue3 渲染一个后端返回的图片字段渲染、table表格内放置图片

一、后端直接返回图片url 当图片字段接口直接返回的是图片url&#xff0c;可以直接放到img标签上 <img v-if"thumbLoader" class"r-image-loader-thumb" :src"resUrl" /> 二、当图片字段接口直接返回的是图片Id 那么就需要去拼一下图片…

正则表达式 vs. 字符串处理:解析优势与劣势

title: 正则表达式 vs. 字符串处理&#xff1a;解析优势与劣势 date: 2024/3/27 15:58:40 updated: 2024/3/27 15:58:40 tags: 正则起源正则原理模式匹配优劣分析文本处理性能比较编程应用 1. 正则表达式起源与演变 正则表达式&#xff08;Regular Expression&#xff09;最早…

【媒体邀约】选择媒体公关公司邀约媒体有哪些优势

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 选择媒体公关公司邀约媒体具有以下优势&#xff1a; 丰富的媒体资源&#xff1a;媒体公关公司通常与各大主流媒体、行业媒体、网络媒体等有着长期合作关系&#xff0c;拥有丰富的媒体资…

鸿蒙OS开发实例:【工具类封装-页面路由】

import common from ohos.app.ability.common; import router from ohos.router 封装app内的页面之间跳转、app与app之间的跳转工具类 【使用要求】 DevEco Studio 3.1.1 Release api 9 【使用示例】 import MyRouterUtil from ../common/utils/MyRouterUtil MyRouterUtil…

c++指针最全总结(附源码和详细总结)

目录 哈喽&#xff0c;我又来啦&#x1f604; 指针是什么&#xff1f;What is a pointer&#xff1f; 简单点说 一级指针的定义 指针的赋值 指针的输出 二级指针的定义 简单说 二级指针的赋值 二级指针的输出 改变一级指针指向 二级指针的步长 改变n-1级指针的指向 …

R语言赋值符号<-、=、->、<<-、->>的使用与区别

R语言的赋值符号有&#xff1c;-、、-&#xff1e;、&#xff1c;&#xff1c;-、-&#xff1e;&#xff1e;六种&#xff0c;它们的使用与区别如下: <-’&#xff1a;最常用的赋值符号。它将右侧表达式的值赋给左侧的变量&#xff0c;像一个向左的箭头。例如&#xff0c;x …

Spring Boot 实现定时任务动态管理

前言 本文主要介绍了SpringBoot架构下动态定时任务的使用&#xff0c;定时任务表达式配置在数据库中&#xff0c;通过反射执行到目标方法。 Quartz Quartz 是一个开源的作业调度框架,支持分布式定时任务&#xff0c;Quartz定时任务据我了解可分为Trigger&#xff08;触发器&…

JavaEE企业开发新技术4

2.16 模拟Spring IOC容器功能-1 2.17 模拟Spring IOC容器功能-2 什么是IOC&#xff1f; 控制反转&#xff0c;把对象创建和对象之间的调用过程交给Spring框架进行管理使用IOC的目的&#xff1a;为了耦合度降低 解释&#xff1a; 模仿 IOC容器的功能&#xff0c;我们利用 Map…

计算机网络:物理层 - 传输媒体

计算机网络&#xff1a;物理层 - 传输媒体 物理层基本概念导引型传输媒体同轴电缆双绞线光纤 非引导型传输媒体无线电波微波红外线 物理层基本概念 在计算机网络中用来连接各种网络设备的传输媒体&#xff0c;种类众多&#xff0c;大致可以分为两类&#xff0c;一类是导引型传…

Docker进阶:Docker Swarm(集群搭建) —实现容器编排的利器

Docker进阶&#xff1a;Docker Swarm&#xff08;集群搭建&#xff09; —实现容器编排的利器 1、什么是Docker Swarm&#xff1f;2、Docker Swarm 与 Docker Compose的区别3、创建一个Swarm集群&#xff08;1-Manager&#xff0c;2-Worker&#xff09;1、资源准备2、初始化Swa…

【JavaEE初阶系列】——带你了解volatile关键字以及wait()和notify()两方法背后的原理

目录 &#x1f6a9;volatile关键字 &#x1f388;volatile 不保证原子性 &#x1f388;synchronized 也能保证内存可见性 &#x1f388;Volatile与Synchronized比较 &#x1f6a9;wait和notify &#x1f388;wait()方法 &#x1f4bb;wait(参数)方法 &#x1f388;noti…

8.HelloWorld小案例

文章目录 一、Java程序开发运行流程如何理解编译&#xff1f; 二、HelloWorld案例的编写1、新建文本文档文件&#xff0c;修改名称为HelloWorld.java。2、用记事本打开HelloWorld.java文件&#xff0c;输写程序内容。代码要跟我编写的完全保持一致。3、ctrl s 保存&#xff0c…

JavaScript基础练习题之计算数组元素的和与平均值

一、如何使用JavaScript计算数组元素的和与平均值&#xff1f; 二、正确的源程序 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>计算数组元素的和与平均值</title></head><body><h1>计算数组元…

AIGC重塑金融 | 大模型在金融行业的应用场景和落地路径

作者&#xff1a;林建明 来源&#xff1a;IT阅读排行榜 本文摘编自《AIGC重塑金融&#xff1a;AI大模型驱动的金融变革与实践》&#xff0c;机械工业出版社出版 目录 01 大模型在金融领域的 5 个典型应用场景 02 大模型在金融领域应用所面临的风险及其防范 03 AIGC 技术的科…

蓝桥杯 - 小明的背包3(多重背包)

解题思路&#xff1a; 动态规划 多重背包问题需要在01背包问题&#xff08;不重复&#xff09;的基础上多加一层循环进行遍历&#xff0c;并且dp[ j ]的式子也需要修改 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan …

CSS及javascript

一、CSS简介 css是一门语言&#xff0c;用于控制网页的表现。 cascading style sheet:层叠样式表 二、css的导入方式 css代码与html代码的结合方式 &#xff08;1&#xff09;css导入html有三种方式&#xff1a; 1.内联样式&#xff1a;<div style"color:red&quo…