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

一、背景

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

二、灰度发布方案

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

java 复制代码
// sharetek-gateway.yml核心配置内容
spring:
  cloud:
    # 网关配置
    gateway:
      # 打印请求日志(自定义)
      requestLog: true
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true
      routes:
        # 认证中心
        - id: sharetek-auth
          uri: http://192.168.72.1:9210    // 新系统
          predicates:
            - Path=/api/token,/api/test,/api/test2
            - Weight=group1, 1
        - id: sharetek-auth2
          uri: 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.如果服务实例挂掉,权重分流会报错

相关推荐
qq_404643341 分钟前
Eureka 核心概念
微服务·eureka
码字的字节2 分钟前
Spring Cloud服务注册与发现(一):手把手搭建Eureka Server,详解高可用配置
spring·spring cloud·eureka
大厂资深架构师5 分钟前
Spring Cloud Eureka在后端系统中的服务剔除策略
spring·spring cloud·ai·eureka
岁岁种桃花儿1 小时前
SpringCloud从入门到上天:Nacos做微服务注册中心(二)
java·spring cloud·微服务
7哥♡ۣۖᝰꫛꫀꪝۣℋ5 小时前
微服务负载均衡
spring·微服务
SoleMotive.6 小时前
谢飞机爆笑面经:Java大厂3轮12问真题拆解(Redis穿透/Kafka分区/MCP Agent)
redis·spring cloud·kafka·java面试·mcp
MrSYJ8 小时前
Redis 做分布式 Session
后端·spring cloud·微服务
喵叔哟9 小时前
67.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--分摊功能总体设计与业务流程
数据库·微服务·架构
研究司马懿11 小时前
【云原生】Gateway API高级功能
云原生·go·gateway·k8s·gateway api
瑶山11 小时前
Spring Cloud微服务搭建五、集成负载均衡,远程调用,熔断降级
spring cloud·微服务·负载均衡·远程调用·熔断降级