1.微服务灰度发布(方案设计)

前言

微服务架构中的灰度发布(也称为金丝雀发布或渐进式发布)是一种在不影响现有用户的情况下,逐步将新版本的服务部署到生产环境的策略。通过灰度发布,你可以先将新版本的服务暴露给一小部分用户或特定的流量,观察其表现,确保没有问题后再逐步扩大流量,最终完全替换旧版本。
: 该灰度方案的实现主要基于java 去实现

灰度发布的优点

  1. 降低风险:通过只对一部分用户或流量进行更新,可以减少新版本引入的问题对所有用户的影响。
  2. 快速回滚:如果新版本出现问题,可以迅速将流量切换回旧版本,避免影响更多用户。
  3. 渐进式验证:可以在小范围内验证新版本的功能和性能,确保其稳定性和兼容性。
  4. 用户体验优化:可以通过灰度发布收集用户反馈,逐步优化新功能,而不必一次性全面推广。
  5. 避免熬夜发版

设计概要

系统架构图

流量控制

客户端

对于请求流量识别控制,可以据实际需求,设计,下面列举,几种常用的

  1. 用户
  2. 设备ID
  3. 客户端版本
  4. 客户端标签

服务端

流量管理服务端,主要作用,灰度信息管理及控制:

  1. 管理: 用户、 设备ID、 客户端版本,客户端标签,等维度信息;
  2. 灰度信息推送到网关: 让网关依据这些信息,请求识别为正常流量还上灰度流量,
    如果正常流量,将路由到正常实例;如果是灰度流量,将路由到灰度实例;
    注:为了简化设计同时满足核心需求,不做过度设计,实现仅给流量打上灰度标签或无(正常流量)

路由路径

  1. 网关->ribbon->cloud服务->ribbon->cloud服务
  2. 网关->ribbon->cloud服务->thread-->ribbon->dubbo服务
  3. 网关->ribbon->cloud服务->mq服务->cloud服务
  4. 网关->dubbo->dubbo服务->thread->dubbo服务
  5. 网关->dubbo->dubbo服务->mq服务->dubbo服务
    上面大概列举基本请求,所可能经过的路径,要实现灰度路由,经过这些路径的组件,必须实现灰度标签
    的传递,及据灰度标签选择路由

核心组件分析

1.网关

网关作为后端流量的统一入囗,在灰度布实现中,充当着什么重要的角色;

  1. 担任着灰度信息管理,
  2. 入口流量的灰度识别
  3. 请求路由(确认是路由到正常服务实例或是灰度实例)

2. spring-cloud

3. dubbo

4. nocas

5. thread

6. message queue

应用客户端实现

因为需要对应用实例状态的控制以及服务实例之间的灰度标签传递和路由,所以需要修改相关客户端代码的实现。

  1. sdk 方式
    如果采用该方法可能面临的问题:
    1.业务应用推广难大,需要对所有应用依赖升级打包
    2.跨线程标签续传可能需求修改来务业务代码,代价太大了
    3 消息队列收发,可能要调整业务代
  2. agent 方式
    该方式可以很好解决sdk方式的三个问题,但开发会复杂些;
  3. 综合分析,采用 agent 方式更为合适些
相关推荐
NE_STOP8 小时前
Vide Coding--AI编程工具的选择
java
码云数智-园园9 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆9 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
霸道流氓气质9 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
东方佑9 小时前
FRSM 规模效应与架构对比补充报告
架构
小宇宙Zz9 小时前
Maven依赖冲突
java·服务器·maven
swordbob9 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
咖啡八杯10 小时前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
十五喵源码网10 小时前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记
摇滚侠10 小时前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea