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 方式更为合适些
相关推荐
一 乐6 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维6 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_997 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子7 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34167 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
ITFLY87 小时前
架构很简单:系统拆分与组合
架构
1.14(java)7 小时前
SQL数据库操作:从CRUD到高级查询
数据库
恋爱绝缘体17 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wszy18098 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos