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 方式更为合适些
相关推荐
练习时长两年半的程序员小胡2 分钟前
JVM 垃圾回收机制全景解析:从对象回收到收集算法
java·jvm·算法·垃圾回收
LilySesy4 分钟前
【案例总结】幽灵单据——消失的交货单号
数据库·ai·oracle·编辑器·sap·abap
看天走路吃雪糕4 分钟前
墨者:SQL注入实战-MySQL
数据库·mysql·base64·sql注入·sqlmap·墨者靶场·tamper
笑衬人心。6 分钟前
JVM 笔记:类加载、内存管理、垃圾收集与垃圾收集器
java·jvm·笔记
程序猿小D9 分钟前
Java项目:基于SSM框架实现的进销存管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】
java·数据库·mysql·ssm·jsp·毕业论文·进销存管理系统
得物技术15 分钟前
Java volatile 关键字到底是什么|得物技术
java·后端
HoHeHa17 分钟前
IDEA 手动下载安装数据库驱动,IDEA无法下载数据库驱动问题解决方案,IDEA无法连接数据库解决方案(通用,Oracle为例)
java·数据库·intellij-idea
22:30Plane-Moon20 分钟前
SQL 查询语法笔记
数据库·笔记·sql
你可以叫我仔哥呀22 分钟前
Java程序员学从0学AI(七)
java·开发语言·人工智能·ai·spring ai
Bug生产工厂30 分钟前
以支付接口为核心:支付系统与 ERP 对接的全流程方案
架构