1.微服务灰度发布落地实践(方案设计)
文章目录
- 前言
- 灰度发布的优点
- 设计概要
- 系统架构图
- 流量控制
- 客户端
- 服务端
- 路由路径
- 应用客户端实现
- 核心组件分析
- 1.网关
- 2. spring-cloud
- 3. dubbo
- 4. nocas
- 5. thread
- 6. message queue
前言
微服务架构中的灰度发布(也称为金丝雀发布或渐进式发布)是一种在不影响现有用户的情况下,逐步将新版本的服务部署到生产环境的策略。通过灰度发布,你可以先将新版本的服务暴露给一小部分用户或特定的流量,观察其表现,确保没有问题后再逐步扩大流量,最终完全替换旧版本。
注: 该灰度方案的实现主要基于java 去实现
灰度发布的优点
- 降低风险:通过只对一部分用户或流量进行更新,可以减少新版本引入的问题对所有用户的影响。
- 快速回滚:如果新版本出现问题,可以迅速将流量切换回旧版本,避免影响更多用户。
- 渐进式验证:可以在小范围内验证新版本的功能和性能,确保其稳定性和兼容性。
- 用户体验优化:可以通过灰度发布收集用户反馈,逐步优化新功能,而不必一次性全面推广。
- 避免熬夜发版
设计概要

系统架构图

流量控制
客户端
对于请求流量识别控制,可以据实际需求,设计,下面列举,几种常用的
- 用户
- 设备ID
- 客户端版本
- 客户端标签
服务端
流量管理服务端,主要作用,灰度信息管理及控制:
- 管理: 用户、 设备ID、 客户端版本,客户端标签,等维度信息;
- 灰度信息推送到网关: 让网关依据这些信息,请求识别为正常流量还上灰度流量,
如果正常流量,将路由到正常实例;如果是灰度流量,将路由到灰度实例;
注:为了简化设计同时满足核心需求,不做过度设计,实现仅给流量打上灰度标签或无(正常流量)
路由路径
- 网关->ribbon->cloud服务->ribbon->cloud服务
- 网关->ribbon->cloud服务->thread–>ribbon->dubbo服务
- 网关->ribbon->cloud服务->mq服务->cloud服务
- 网关->dubbo->dubbo服务->thread->dubbo服务
- 网关->dubbo->dubbo服务->mq服务->dubbo服务
上面大概列举基本请求,所可能经过的路径,要实现灰度路由,经过这些路径的组件,必须实现灰度标签
的传递,及据灰度标签选择路由
应用客户端实现
因为需要对应用实例状态的控制以及服务实例之间的灰度标签传递和路由,所以需要修改相关客户端代码的实现。
- sdk 方式
如果采用该方法可能面临的问题:
1.业务应用推广难大,需要对所有应用依赖升级打包
2.跨线程标签续传可能需求修改来务业务代码,代价太大了
3 消息队列收发,可能要调整业务代 - agent 方式
该方式可以很好解决sdk方式的三个问题,但开发会复杂些; - 综合分析,采用 agent 方式更为合适些
核心组件分析
1.网关
网关作为后端流量的统一入囗,在灰度布实现中,充当着什么重要的角色;
- 担任着灰度信息管理,
- 入口流量的灰度识别
- 请求路由(确认是路由到正常服务实例或是灰度实例)
2. spring-cloud
如果微服务实现的是spring-cloud,灰度路由的控制需要实现以下几点
- eureka client 自动生成实例id作为元数据,上报到注册中心,用作实例与管理标识管理
- 灰度标签的续传,如a服务调用b服务,把标签通过http请求头传递到b服务
- 拦截feign调用或 RestTemplate 把灰度请求添加到http 请求头里
- ribbon 的rule 拦截,依赖灰度标签做路由选择
3. dubbo
如果微服务实现的是dubbo,处理跟spring-cloud类似,灰度路由的控制需要实现以下几点
- 灰度标签的续传,如a服务调用b服务,把标签通过rpc attachment续给续传
- 拦截dubbo 路由接口,依赖灰度标签做路由选择
4. nocas
如果注册中心使用的是nacos,同步也要自动上报实例id,到nacos注册中心
5. thread
在服务路由选择时,需要依赖灰度标签,所以需要把灰度标签由一引服务传递到另一个服务,或一个线程传到另一个线程;
像经过spring-cloud或dubbo这些框架上面已实现跨服务标签续传,但是如果业务代码内出现跨线程操作后,则会出现标签断传;
处理该问题可以分别对以下接口或类进行,标签续传增强处理:
- 拦截Runnable或Callable,接口增强实现标签续传;
- 拦截ThreadPoolExecutor, 但是当业务使用Callable或Runnable 时,使用的是lambda表达式时,
可以通过拦截ThreadPoolExecutor,增强实现标签续传
6. message queue
一般现在的后端服务,难免会用到消息队列;如果用到自然也要对消息队列,消费路由处理;
但是消息的消费无法像微服务之间调用,可据路由规则选择提供方;
既然无法像服务之间调用处理去理路由,只有另求其他办法,据消息中间件具体的特性,也可以实现同样的消息
1.kakfa,rocketmq 可以把topic,分成正常消费组和灰度消费组,各自只接口符合自身状态的消息,其它状成的消息丢掉
2.rabbit 可以分正常virtualhost和灰度virthualHost,收发消息
… 未完,后续介绍具体的实现
最后,给大家安利一款mysql监控软件: 安装方便,消耗低,可视化,傻瓜式操作,可以监控慢日志详情、cpu、内存、连接数、tps 等信息
体验演示
下载地址
相关文章:
1.微服务灰度发布落地实践(方案设计)
文章目录 前言灰度发布的优点设计概要系统架构图流量控制客户端服务端 路由路径应用客户端实现核心组件分析1.网关2. spring-cloud3. dubbo4. nocas5. thread6. message queue 前言 微服务架构中的灰度发布(也称为金丝雀发布或渐进式发布)是一种在不影响…...
【UE5 C++课程系列笔记】15——Assert的基本使用
目录 概念 一、Check 二、Verify 三、Ensure 对比 基本使用 一、check的基本使用 二、ensure的基本使用 三、verify的基本使用 概念 assert 可在开发期间帮助检测和诊断不正常或无效的运行时条件。这些条件通常检查是否指针为非空、除数为非零、函数并非递归运行&…...
kubernetes Gateway API-1-部署和基础配置
文章目录 1 部署2 最简单的 Gateway3 基于主机名和请求头4 重定向 Redirects4.1 HTTP-to-HTTPS 重定向4.2 路径重定向4.2.1 ReplaceFullPath 替换完整路径4.2.2 ReplacePrefixMatch 替换路径前缀5 重写 Rewrites5.1 重写 主机名5.2 重写 路径5.2.1 重新完整路径5.2.1 重新部分路…...
likeAdmin架构部署(踩坑后的部署流程
1、gitee下载 https://gitee.com/likeadmin/likeadmin_java.git 自己克隆 2、项目注意 Maven:>3.8 ❤️.9 (最好不要3.9已经试过失败 node :node14 (不能是18 已经测试过包打不上去使用14的换源即可 JDK:JDK8 node 需要换源 npm c…...
【一款超好用的开源笔记Logseq本地Docker部署与远程使用指南】
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
浅谈torch.utils.data.TensorDataset和torch.utils.data.DataLoader
1.torch.utils.data.TensorDataset 功能定位 torch.utils.data.TensorDataset 是一个将多个张量(Tensor)数据进行简单包装整合的数据集类,它主要的作用是将相关联的数据(比如特征数据和对应的标签数据等)组合在一起&…...
gesp(C++二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵
gesp(C++二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵 题目描述 小杨想要构造一个 m m m \times m m...
FFmpeg:详细安装教程与环境配置指南
FFmpeg 部署完整教程 在本篇博客中,我们将详细介绍如何下载并安装 FFmpeg,并将其添加到系统的环境变量中,以便在终端或命令行工具中直接调用。无论你是新手还是有一定基础的用户,这篇教程都能帮助你轻松完成 FFmpeg 的部署。 一、…...
《特征工程:自动化浪潮下的坚守与变革》
在机器学习的广阔天地中,特征工程一直占据着举足轻重的地位。它宛如一位幕后的工匠,精心雕琢着原始数据,将其转化为能够被机器学习模型高效利用的特征,从而推动模型性能迈向新的高度。然而,随着技术的飞速发展…...
webrtc 源码阅读 make_ref_counted模板函数用法
目录 1. 模板参数解析 1.1 typename T 1.2 typename... Args 1.3 typename std::enable_if::value, T>::type* nullptr 2. scoped_refptr 3. new RefCountedObject(std::forward(args)...); 4. 综合说明 5.在webrtc中的用法 5.1 peerConnectionFactory对象的构建过…...
【深度学习基础之多尺度特征提取】特征金字塔(Feature Pyramid)是如何在深度学习网络中提取多尺度特征的?附代码
【深度学习基础之多尺度特征提取】特征金字塔(Feature Pyramid)是如何在深度学习网络中提取多尺度特征的?附代码 【深度学习基础之多尺度特征提取】特征金字塔(Feature Pyramid)是如何在深度学习网络中提取多尺度特征…...
【Docker】离线安装 Docker
离线安装 Docker 在CentOS系统上安装Docker 1、下载 Docker 仓库文件 https://download.docker.com/linux/centos/docker-ce.repo 2、添加 Docker 仓库文件 将上一步下载的文件,移动到 /etc/yum.repos.d/ 目录 3、清除 YUM 缓存 sudo yum clean all sudo yum…...
三大行业案例:AI大模型+Agent实践全景
本文将从AI Agent和大模型的发展背景切入,结合51Talk、哈啰出行以及B站三个各具特色的行业案例,带你一窥事件驱动架构、RAG技术、人机协作流程,以及一整套行之有效的实操方法。具体包含内容有:51Talk如何让智能客服“主动进攻”&a…...
Dockerfile基础指令
1.FROM 基于基准镜像(建议使用官方提供的镜像作为基准镜像,相对安全一些) 举例: 制作基准镜像(基于centos:lastest) FROM cenots 不依赖于任何基准镜像 FROM scratch 依赖于9.0.22版本的tomcat镜像 FROM…...
12.30 linux 文件操作,磁盘分区挂载
ubuntu 在linux 对文件的相关操作【压缩,打包,软链接,文件权限】【head,tail,管道符,通配符,find,grep,cut等】脑图-CSDN博客 1.文件操作 在家目录下创建目录文件&#…...
[图形渲染]【Unity Shader】【游戏开发】 Shader数学基础17-法线变换基础与应用
在计算机图形学中,法线(normal) 是表示表面方向的向量。它在光照、阴影、碰撞检测等领域有着重要作用。本文将介绍如何在模型变换过程中正确变换法线,确保其在光照计算中的正确性,特别是法线与顶点的变换问题。 1. 法线与切线的基本概念 法线(Normal Vector) 法线(或…...
YOLOv9-0.1部分代码阅读笔记-train.py
train.py train.py 目录 train.py 1.所需的库和模块 2.def train(hyp, opt, device, callbacks): 3.def parse_opt(knownFalse): 4.def main(opt, callbacksCallbacks()): 5.def run(**kwargs): 6.if __name__ "__main__": 1.所需的库和模块 import …...
等保测评和密评的相关性和区别
等保测评和密评在网络安全领域均扮演着至关重要的角色,它们之间既存在相关性,又各具特色。 以下是对两者相关性和区别的详细阐述:相关性 1.法律基础:等保测评和密评都是依据国家相关法律法规开展的活动。 等保测评主要依据《网…...
活动预告 |【Part2】 Azure 在线技术公开课:迁移和保护 Windows Server 和 SQL Server 工作负载
课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft 云技术的了解。参加我们举办的“迁移和保护 Windows Server 和 SQL Server 工作负载”活动,了解 Azure 如何为将工作负载…...
大语言模型(LLM)一般训练过程
大语言模型(LLM)一般训练过程 数据收集与预处理 收集:从多种来源收集海量文本数据,如互联网的新闻文章、博客、论坛,以及书籍、学术论文、社交媒体等,以涵盖丰富的语言表达和知识领域。例如,训练一个通用型的LLM时,可能会收集数十亿甚至上百亿字的文本数据.清洗:去除…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
