当前位置: 首页 > news >正文

关于不停机发布新版本程序的方式

“不停机发布新版本程序”,暂且这么称呼吧,其实就是所说的滚动发布、灰度发布、金丝雀发布和蓝绿发布。
之所以会总结性地提一下这几个概念,主要是本次出门游历,流浪到了乌兰察布市四王子旗,在这儿遇上了个有趣儿的家伙,就此话题进行了兴致勃勃地探讨,借此记录一下探讨结果。


滚动发布是指每次只升级一个或多个服务, 升级完成后加入生产环境, 不断执行这个过程, 直到集群中的全部旧版本升级新版本。 本质是新版本逐步替换旧版本。

优点缺点
用户无感知, 平滑过渡部署时间慢, 取决于每阶段更新时间
节省服务器发布策略较复杂, 高度依赖自动发布工具
无法确定新旧版本之间谁产生了缺陷
不易回滚

操作过程:

先升级 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分支&#xff0c;可以使用以下命令&#xff1a; 1. 切换到dev分支&#xff1a;git checkout dev 2. 查看提交历史&#xff0c;找到要提交给master的某次提交的commit hash&#xff08;假设为 <commit_hash>&#xff09; 3. 切换到master…...

opencv形状目标检测

1.圆形检测 OpenCV图像处理中“找圆技术”的使用-图像处理-双翌视觉OpenCV图像处理中“找圆技术”的使用,图像处理,双翌视觉https://www.shuangyi-tech.com/news_224.htmlopencv 找圆心得&#xff0c;模板匹配比霍夫圆心好用 - 知乎1 相比较霍夫找直线算法&#xff0c; 霍夫找…...

k8s中无法获取到nginx-ingress的客户端真实ip地址x-forwarded-for

1.查看阿里云的nginx-ingress配置文档https://help.aliyun.com/document_detail/42205.html 容器K8s配置方案 如果您的服务部署在K8s上&#xff0c;K8s会将真实的客户端IP记录在X-Original-Forwarded-For字段中&#xff0c;并将WAF回源地址记录在X-Forwarded-For字段中。您需要…...

MySQL(4)索引实践(2)

一、分页优化 limit 1000 10&#xff0c; 其实不是只查询出10条记录&#xff0c;mysql底层会查询出1100条&#xff0c;然后舍去前1000条 所以&#xff0c;随着页的增多&#xff0c;查询效率会降低 1、可以使用取范围的方式比如id>1000 方式优化 2、使用关联查询优化&#xf…...

Kafka【命令行操作】

Kafka 命令行操作 Kafka 主要包括三大部分&#xff1a;生产者、主题分区节点、消费者。 1、Topic 命令行操作 也就是我们 kafka 下的脚本 kafka-topics.sh 的相关操作。 常用命令行操作 参数 描述 --bootstrap-server <String: server toconnect to> 连接的Kafka …...

springboot配置注入增强(二)属性注入的原理

一 原理 1 配置的存储 springboot在启动的时候会后构建一个org.springframework.core.env.Environment类型的对象&#xff0c;这个对象就是用于存储配置&#xff0c;如图springboot会在启动的最开始创建一个Environment对象 这个webApplicationType的枚举是在new SpringAppli…...

Android 使用Camera1实现相机预览、拍照、录像

1. 前言 本文介绍如何从零开始&#xff0c;在Android中实现Camera1的接入&#xff0c;并在文末提供Camera1Manager工具类&#xff0c;可以用于快速接入Camera1。 Android Camera1 API虽然已经被Google废弃&#xff0c;但有些场景下不得不使用。 并且Camera1返回的帧数据是NV21…...

2024字节跳动校招面试真题汇总及其解答(四)

12.Java的类加载机制 Java的类加载机制是指将描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 类的加载过程分为以下五个阶段: 加载:将Class文件从磁盘读入内存,并…...

网页的快捷方式打开自动全屏--Chrome、Firefox 浏览器相关设置

Firefox 的全屏方式与 Chrome 不同&#xff0c;Chrome 自带全屏模式以及APP模式&#xff0c;通过简单的参数即可设置&#xff0c;而Firefox暂时么有这个功能&#xff0c;Firefox 的全屏功能可以通过全屏插件实现。 全屏模式下&#xff0c;按 F11 不会退出全屏&#xff0c;鼠标…...

LabVIEW使用ModbusTCP协议构建分布式测量系统

LabVIEW使用ModbusTCP协议构建分布式测量系统 分布式测量系统主要用于监控远程物体。这种系统允许对系统用户获得的数据进行全面的数据收集、处理、存储和组织访问。它们可能包括许多不同类型的传感器。 在任何具有互联网接入的个人计算机上运行的软件都会发送来自传感器的测…...

unity学习第1天

本身也具有一些unity知识&#xff0c;包括Eidtor界面使用、Shader效果实现、性能分析&#xff0c;但对C#、游戏逻辑不太清楚&#xff0c;这次想从开发者角度理解游戏&#xff0c;提高C#编程&#xff0c;从简单的unity游戏理解游戏逻辑&#xff0c;更好的为工作服务。 unity201…...

Spring Boot实现对文件进行压缩下载

在Web应用中&#xff0c;文件下载功能是一个常见的需求&#xff0c;特别是当你需要提供用户下载各种类型的文件时。本文将演示如何使用Spring Boot框架来实现一个简单而强大的文件下载功能。我们将创建一个RESTful API&#xff0c;通过该API&#xff0c;用户可以下载问价为ZIP压…...

Mac专用投屏工具AirServer 7 .27 for Mac中文免费激活版

AirServer 7 .27 for Mac中文免费激活版是一款Mac专用投屏工具&#xff0c;能够通过本地网络将音频、照片、视频以及支持AirPlay功能的第三方App&#xff0c;从 iOS 设备无线传送到 Mac 电脑的屏幕上&#xff0c;把Mac变成一个AirPlay终端的实用工具。 目前最新的AirServer 7.2…...

LabVIEW使用巴特沃兹低通滤波器过滤噪声

LabVIEW使用巴特沃兹低通滤波器过滤噪声 设备采集到的数据往往都有噪声&#xff0c;有时候这些数据要做判断使用&#xff0c;如果不处理往往会影响最终的结果。可以使用动态平滑&#xff0c;或者中值滤波等方法。这里介绍使用巴特沃斯低通滤波&#xff0c;也是非常方便的。 下…...

【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&#xff1a;Spring的核心组件&#xff0c;提供IOC、AOP等基础功能&#xff0c;是Spring全家桶的基础。 Spring Boot&#xff1a;一个基于Spring Framework的快速开发框架&#xff0c;可以快速创建独立的、生产级别的…...

不同类型程序的句柄研究

先做一个winform程序&#xff1b;随便放几个控件&#xff1b; 用窗口句柄查看工具看一下&#xff1b;form和上面的每个控件都有一个句柄&#xff1b; 然后看一下记事本&#xff1b;记事本一共包含三个控件&#xff0c;各自有句柄&#xff1b; 这工具的使用是把右下角图标拖到要…...

【Godot】解决游戏中的孤立/孤儿节点及分析器性能问题的分析处理

Godot 4.1 因为我在游戏中发现&#xff0c;越运行游戏变得越来越卡&#xff0c;当你使用 Node 节点中的 print_orphan_nodes() 方法打印信息的时候&#xff0c;会出现如下的孤儿节点信息 孤儿节点信息是以 节点实例ID - Stray Node: 节点名称(Type: 节点类型) 作为格式输出&a…...

Win10 22H2多合一版本实测:家庭版/专业版/企业版到底有什么区别?

Win10 22H2多合一版本深度解析&#xff1a;如何根据需求选择最佳系统版本 当你面对一个包含家庭版、专业版、企业版等多个版本的Win10 22H2多合一ISO镜像时&#xff0c;是否曾感到困惑&#xff1a;这些版本之间究竟有什么区别&#xff1f;哪个版本最适合我的使用场景&#xff1…...

告别答辩夜战!Paperxie AI PPT:10 分钟把论文变「导师满分」学术演示稿

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 又到毕业季&#xff0c;当实验室的灯光熬到凌晨&#xff0c;当电脑里的论文终稿定格在最后一页&#xff0c;无数毕业生却陷入…...

AMD GPU大模型部署与优化指南:基于ollama-for-amd的本地AI解决方案

AMD GPU大模型部署与优化指南&#xff1a;基于ollama-for-amd的本地AI解决方案 【免费下载链接】ollama-for-amd Get up and running with Llama 3, Mistral, Gemma, and other large language models.by adding more amd gpu support. 项目地址: https://gitcode.com/gh_mir…...

OpenClaw自动化测试实践:GLM-4.7-Flash驱动脚本执行与结果分析

OpenClaw自动化测试实践&#xff1a;GLM-4.7-Flash驱动脚本执行与结果分析 1. 为什么选择OpenClaw做测试自动化&#xff1f; 上个月接手一个新项目时&#xff0c;我遇到了一个典型的技术矛盾&#xff1a;作为独立开发者&#xff0c;既需要保证代码质量&#xff0c;又没精力手…...

TestNet资产管理平台:从安装到实战,全面超越灯塔的解决方案

1. TestNet资产管理平台&#xff1a;为什么你需要它&#xff1f; 如果你是一名网络安全工程师或者渗透测试人员&#xff0c;肯定对资产管理的繁琐深有体会。传统的资产管理工具要么功能单一&#xff0c;要么操作复杂&#xff0c;而TestNet资产管理系统的出现&#xff0c;彻底改…...

GEE实战指南:Sentinel-2多光谱植被指数批量计算与优化

1. 为什么需要植被指数&#xff1f; 植被指数是遥感领域用来量化植被生长状态的核心指标。简单来说&#xff0c;就像医生用体温计判断病人是否发烧一样&#xff0c;我们可以通过卫星数据计算出的植被指数&#xff0c;快速了解一片区域的植被健康状况。Sentinel-2卫星提供的多光…...

Cadence 17.4 ORCAD PSpice 保姆级教程:手把手教你搭建RC低通滤波器并验证效果

Cadence 17.4 ORCAD PSpice 从零到精通&#xff1a;RC低通滤波器实战全解析 在电子设计领域&#xff0c;仿真工具的重要性不言而喻。对于初学者而言&#xff0c;Cadence 17.4 ORCAD PSpice可能看起来界面复杂、功能繁多&#xff0c;让人望而生畏。但别担心&#xff0c;本文将从…...

找不到api-ms-win-core-path-l1-1-0.dll的官方解决方法(2026更新)

我是一名企业的IT桌面支持&#xff0c;平时处理得最多的就是员工电脑上五花八门的软件报错。最近&#xff0c;api-ms-win-core-path-l1-1-0.dll缺失的工单量激增&#xff0c;尤其在Windows 7系统的电脑上。很多同事第一反应是去网上搜这个文件下载&#xff0c;但这恰恰是IT运维…...

圣女司幼幽-造相Z-Turbo多模态生成:从文本到视频脚本的连贯创作

圣女司幼幽-造相Z-Turbo多模态生成&#xff1a;从文本到视频脚本的连贯创作 最近在尝试一些新的内容创作工具&#xff0c;发现了一个挺有意思的现象&#xff1a;很多工具要么只能做图&#xff0c;要么只能写文案&#xff0c;想把它们串起来做个完整的视频&#xff0c;中间总得…...

淘宝母婴购物数据可视化分析:从数据清洗到商业洞察

1. 淘宝母婴数据清洗实战&#xff1a;从原始数据到分析就绪 做数据分析最头疼的就是拿到一堆乱七八糟的原始数据&#xff0c;淘宝母婴数据也不例外。我最近处理过一批天池比赛的脱敏数据&#xff0c;光是清洗环节就踩了不少坑。先说说最基础的CSV导入&#xff0c;用pandas的rea…...