关于不停机发布新版本程序的方式
“不停机发布新版本程序”,暂且这么称呼吧,其实就是所说的滚动发布、灰度发布、金丝雀发布和蓝绿发布。
之所以会总结性地提一下这几个概念,主要是本次出门游历,流浪到了乌兰察布市四王子旗,在这儿遇上了个有趣儿的家伙,就此话题进行了兴致勃勃地探讨,借此记录一下探讨结果。
滚动发布是指每次只升级一个或多个服务, 升级完成后加入生产环境, 不断执行这个过程, 直到集群中的全部旧版本升级新版本。 本质是新版本逐步替换旧版本。
| 优点 | 缺点 |
| 用户无感知, 平滑过渡 | 部署时间慢, 取决于每阶段更新时间 |
| 节省服务器 | 发布策略较复杂, 高度依赖自动发布工具 |
| 无法确定新旧版本之间谁产生了缺陷 | |
| 不易回滚 |
操作过程:
先升级 1 个副本, 主要做部署验证;
每次升级副本, 都需将待操作副本从 LB 上先摘掉, 待升级成功后再加入集群;
事先需要有自动更新策略, 分为若干次, 每次数量/百分比可配置;
回滚是发布的逆过程, 先从 LB 摘掉新版本, 再升级老版本, 这个过程一般时间比较长;
业务部署自动化程度要求高。
开始滚动升级后, 流量会直接指向已经启动起来的新版本, 但是这个时候,新版本是不一定可用的, 比如需要进一步的测试才能确认。 那么在滚动升级期间, 整个系统就处于非常不稳定的状态, 如果发现了问题, 也比较难以确定是新版本还是老版本造成的问题。
蓝绿发布提供了一种零宕机的部署方式。 不停旧版本, 部署新版本进行试, 确认业务状态无异常后, 将流量切到新版本。 始终有两个版本同时在线,有问题可以快速切换。 一套是正在提供服务系统, 标记为“绿色” ; 另一套是准备发布的系统, 标记为“蓝色” 。 两套系统都是功能完善的, 并且正在运行的系统, 只是系统版本不同。 开发了新版本, 要用新版本替换线上的旧版本,在线上的系统之外, 搭建了一个使用新版本代码的全新系统。 这时候, 一共有两套系统在运行, 正在对外提供服务的系统是绿色系统, 新部署的系统是蓝色系统。 蓝色系统经过反复的测试、 修改、 验证, 确定达到上线标准之后, 先将绿组的集群从负载均衡中移除, 由蓝组则对用户提供服务。 这段时间内观察蓝色系统(新系统) 工作状态, 如果出现问题, 直接切换回绿色系统。 当确信对外提供服务的蓝色系统工作正常, 不对外提供服务的绿色系统已经不再需要的时候, 蓝色系统正式成为对外提供服务系统, 成为新的绿色系统。 原先的绿色系统可以销毁, 将资源释放出来, 用于部署下一个蓝色系统。 或者移出的绿组进行服务的升级, 等升级完毕后, 再从新将绿组接入到负载均衡中为用户提供服务。 再把蓝组进行移除销毁, 将资源释放出来, 用于部署下一个蓝色系统。此时整个项目集群得进行升级完毕, 我们将此称为蓝绿发布。
蓝绿部署能够简单快捷实施的前提假设是目标业务系统是非常内聚的, 如果目标系统相当复杂,那么如何切换、两套系统的数据是否需要以及如何同步等,都需要仔细考虑。
| 优点 | 缺点 |
| 发布策略简单 | 服务器数量翻倍, 需要准备正常业务使用资源的两倍的服务器 |
| 用户无感知, 平滑过渡 | 如果出问题, 影响范围较大 |
| 升级或回滚速度快 | 短时间内会大幅增加资源成本 |
| 基础设施无改动, 升级稳定性较强 | 在非隔离基础架构(VM、 Docker 等) 上执行蓝绿部署, 蓝色环境和绿色环境有被摧毁的风险 |
金丝雀发布(Canary Release) , 中国大陆又称作灰度发布(Gray Release)。本质上是在生产环境上引一部分实际流量对一个新版本进行测试, 测试新版本的性能和表现, 在保证系统整体稳定运行的前提下, 尽早发现新版本在实际环境上的问题, 以确定产品交付形态。 它在一部分用户中逐步推出新功能或更新,以便在全面推出之前进行测试和评估, 这种方法可以帮助开发人员识别和解决潜在的问题, 同时最小化对用户的影响。 也算是一种软件产品质量测试方式,新版本如果出现问题, 只会发生在低比例的流量上。
事实上金丝雀发布(Canary Release) 和灰度发布(Gray Release) 略有区别: 金丝雀发布是只有一套系统, 版本升级是逐步替换这套系统; 灰度发布则是有稳定和灰度两套环境, 只升级部分服务, 一部分用户继续用老版本, 一部分用户开始用新版本, 如果用户对新版本没什么意见, 那么逐步扩大范围,把所有用户都迁移到新版本上面来, 即通过切换线上并存版本之间的路由权重,逐步从一个版本切换为另一个版本。
金丝雀发布实现步骤:
步骤一: 将流量从待部署节点移出, 更新该节点服务到待发布状态, 将该节点称为金丝雀节点;
步骤二: 根据不同策略, 将流量引入金丝雀节点。 策略可以根据情况指定, 比如随机样本策略、狗粮策略、分区策略、用户特征策略;
步骤三: 金丝雀节点验证通过后, 选取更多的节点称为金丝雀节点, 重复步骤一和步骤二, 直到所有节点全部更新。
| 优点 | 缺点 |
| 保证整体系统稳定性, 影响范围可控, 在初始灰度的时候就可以问题 | 影响范围很小, 相对用户体验也少 |
| 用户无感知, 平滑过渡 | 自动化要求高 |
| 新功能逐步评估性能, 稳定性和健康状况 | 只能适用于新旧版本兼容迭代场景 |
| 小步快跑, 快速迭代 | 需要详细规划业务流量切分的时机和权重策略 |
相关文章:
关于不停机发布新版本程序的方式
“不停机发布新版本程序”,暂且这么称呼吧,其实就是所说的滚动发布、灰度发布、金丝雀发布和蓝绿发布。 之所以会总结性地提一下这几个概念,主要是本次出门游历,流浪到了乌兰察布市四王子旗,在这儿遇上了个有趣儿的家伙…...
MeterSphere压测,出现HttpHostConnectException
现象:MeterSphere更换压力机后,压测出现出现HttpHostConnectException 解决方案: net.ipv4.tcp_tw_reuse默认是0或者2,更改为1 net.ipv4.tcp_tw_reuse,表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连…...
cherry-pick
要将dev分支的某次提交给master分支,可以使用以下命令: 1. 切换到dev分支:git checkout dev 2. 查看提交历史,找到要提交给master的某次提交的commit hash(假设为 <commit_hash>) 3. 切换到master…...
opencv形状目标检测
1.圆形检测 OpenCV图像处理中“找圆技术”的使用-图像处理-双翌视觉OpenCV图像处理中“找圆技术”的使用,图像处理,双翌视觉https://www.shuangyi-tech.com/news_224.htmlopencv 找圆心得,模板匹配比霍夫圆心好用 - 知乎1 相比较霍夫找直线算法, 霍夫找…...
k8s中无法获取到nginx-ingress的客户端真实ip地址x-forwarded-for
1.查看阿里云的nginx-ingress配置文档https://help.aliyun.com/document_detail/42205.html 容器K8s配置方案 如果您的服务部署在K8s上,K8s会将真实的客户端IP记录在X-Original-Forwarded-For字段中,并将WAF回源地址记录在X-Forwarded-For字段中。您需要…...
MySQL(4)索引实践(2)
一、分页优化 limit 1000 10, 其实不是只查询出10条记录,mysql底层会查询出1100条,然后舍去前1000条 所以,随着页的增多,查询效率会降低 1、可以使用取范围的方式比如id>1000 方式优化 2、使用关联查询优化…...
Kafka【命令行操作】
Kafka 命令行操作 Kafka 主要包括三大部分:生产者、主题分区节点、消费者。 1、Topic 命令行操作 也就是我们 kafka 下的脚本 kafka-topics.sh 的相关操作。 常用命令行操作 参数 描述 --bootstrap-server <String: server toconnect to> 连接的Kafka …...
springboot配置注入增强(二)属性注入的原理
一 原理 1 配置的存储 springboot在启动的时候会后构建一个org.springframework.core.env.Environment类型的对象,这个对象就是用于存储配置,如图springboot会在启动的最开始创建一个Environment对象 这个webApplicationType的枚举是在new SpringAppli…...
Android 使用Camera1实现相机预览、拍照、录像
1. 前言 本文介绍如何从零开始,在Android中实现Camera1的接入,并在文末提供Camera1Manager工具类,可以用于快速接入Camera1。 Android Camera1 API虽然已经被Google废弃,但有些场景下不得不使用。 并且Camera1返回的帧数据是NV21…...
2024字节跳动校招面试真题汇总及其解答(四)
12.Java的类加载机制 Java的类加载机制是指将描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 类的加载过程分为以下五个阶段: 加载:将Class文件从磁盘读入内存,并…...
网页的快捷方式打开自动全屏--Chrome、Firefox 浏览器相关设置
Firefox 的全屏方式与 Chrome 不同,Chrome 自带全屏模式以及APP模式,通过简单的参数即可设置,而Firefox暂时么有这个功能,Firefox 的全屏功能可以通过全屏插件实现。 全屏模式下,按 F11 不会退出全屏,鼠标…...
LabVIEW使用ModbusTCP协议构建分布式测量系统
LabVIEW使用ModbusTCP协议构建分布式测量系统 分布式测量系统主要用于监控远程物体。这种系统允许对系统用户获得的数据进行全面的数据收集、处理、存储和组织访问。它们可能包括许多不同类型的传感器。 在任何具有互联网接入的个人计算机上运行的软件都会发送来自传感器的测…...
unity学习第1天
本身也具有一些unity知识,包括Eidtor界面使用、Shader效果实现、性能分析,但对C#、游戏逻辑不太清楚,这次想从开发者角度理解游戏,提高C#编程,从简单的unity游戏理解游戏逻辑,更好的为工作服务。 unity201…...
Spring Boot实现对文件进行压缩下载
在Web应用中,文件下载功能是一个常见的需求,特别是当你需要提供用户下载各种类型的文件时。本文将演示如何使用Spring Boot框架来实现一个简单而强大的文件下载功能。我们将创建一个RESTful API,通过该API,用户可以下载问价为ZIP压…...
Mac专用投屏工具AirServer 7 .27 for Mac中文免费激活版
AirServer 7 .27 for Mac中文免费激活版是一款Mac专用投屏工具,能够通过本地网络将音频、照片、视频以及支持AirPlay功能的第三方App,从 iOS 设备无线传送到 Mac 电脑的屏幕上,把Mac变成一个AirPlay终端的实用工具。 目前最新的AirServer 7.2…...
LabVIEW使用巴特沃兹低通滤波器过滤噪声
LabVIEW使用巴特沃兹低通滤波器过滤噪声 设备采集到的数据往往都有噪声,有时候这些数据要做判断使用,如果不处理往往会影响最终的结果。可以使用动态平滑,或者中值滤波等方法。这里介绍使用巴特沃斯低通滤波,也是非常方便的。 下…...
【Realtek sdk-3.4.14b】RTL8197FH-VG和RTL8812F自适应认证失败问题分析及修改
WiFi自适应认证介绍 WiFi 自适应可以理解为针对WiFi的产品,当有外部干扰信号通过,WiFi产品自动停止发出信号一段时间,以达到避让的目的。 问题描述 2.4G和5G WiFi自适应认证失败,信道停止发送信号时间过长,没有在规定时间内停止发包 2.4G截图 问题分析 根据实验室描述可以…...
SpringBoot 的版本、打包、Maven
一、SpringBoot 结构、集成 1.1、集成组件 Spring Core:Spring的核心组件,提供IOC、AOP等基础功能,是Spring全家桶的基础。 Spring Boot:一个基于Spring Framework的快速开发框架,可以快速创建独立的、生产级别的…...
不同类型程序的句柄研究
先做一个winform程序;随便放几个控件; 用窗口句柄查看工具看一下;form和上面的每个控件都有一个句柄; 然后看一下记事本;记事本一共包含三个控件,各自有句柄; 这工具的使用是把右下角图标拖到要…...
【Godot】解决游戏中的孤立/孤儿节点及分析器性能问题的分析处理
Godot 4.1 因为我在游戏中发现,越运行游戏变得越来越卡,当你使用 Node 节点中的 print_orphan_nodes() 方法打印信息的时候,会出现如下的孤儿节点信息 孤儿节点信息是以 节点实例ID - Stray Node: 节点名称(Type: 节点类型) 作为格式输出&a…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...
EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...
C#最佳实践:为何优先使用as或is而非强制转换
C#最佳实践:为何优先使用as或is而非强制转换 在 C# 的编程世界里,类型转换是我们经常会遇到的操作。就像在现实生活中,我们可能需要把不同形状的物品重新整理归类一样,在代码里,我们也常常需要将一个数据类型转换为另…...
今日行情明日机会——20250609
上证指数放量上涨,接近3400点,个股涨多跌少。 深证放量上涨,但有个小上影线,相对上证走势更弱。 2025年6月9日涨停股主要行业方向分析(基于最新图片数据) 1. 医药(11家涨停) 代表标…...
