关于不停机发布新版本程序的方式
“不停机发布新版本程序”,暂且这么称呼吧,其实就是所说的滚动发布、灰度发布、金丝雀发布和蓝绿发布。
之所以会总结性地提一下这几个概念,主要是本次出门游历,流浪到了乌兰察布市四王子旗,在这儿遇上了个有趣儿的家伙,就此话题进行了兴致勃勃地探讨,借此记录一下探讨结果。
滚动发布是指每次只升级一个或多个服务, 升级完成后加入生产环境, 不断执行这个过程, 直到集群中的全部旧版本升级新版本。 本质是新版本逐步替换旧版本。
优点 | 缺点 |
用户无感知, 平滑过渡 | 部署时间慢, 取决于每阶段更新时间 |
节省服务器 | 发布策略较复杂, 高度依赖自动发布工具 |
无法确定新旧版本之间谁产生了缺陷 | |
不易回滚 |
操作过程:
先升级 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…...
国家网络安全宣传周知识竞赛活动小程序界面分享
国家网络安全宣传周知识竞赛活动小程序界面分享...
mysql的判断语句
if if 用于做条件判断,具体的语法结构如下,在 if 条件判断的结构中, ELSE IF 结构可以有多个,也可以没有。 ELSE 结构可以有,也可以没有。 IF 条件1 THEN ..... ELSEIF 条件2 THEN -- 可选 ..... ELSE -- 可选 .....…...
ArcGIS Maps SDK for JavaScript系列之四:添加自定义底图
目录 Basemap类介绍Basemap类的常用属性Basemap类的常用方法 使用Basemap添加自定义底图引用Basemap引用切片图层创建一个新的Basemap对象将自定义图层应用到地图视图中引入并创建Camera对象引入并创建SceneView对象 Basemap类介绍 Basemap类是ArcGIS Maps SDK for JavaScript…...
Learn Prompt-角色扮演
模拟面试 当你在新闻中读到更多关于ChatGPT的内容时,你会听说ChatGPT可以代替医生、面试官、教师、律师等。但如果你想在实践中使用它,除了使用简单的提示或例子,你还可以根据不同的场景为ChatGPT设置不同的角色,这样我们就可以…...
《动手学深度学习 Pytorch版》 6.1 从全连接层到卷积
6.1.1 不变性 平移不变性(translation invariance): 不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。 局部性(locality)&…...
六、数学建模之插值与拟合
1.概念 2.例题和matlab代码求解 一、概念 1.插值 (1)定义:插值是数学和统计学中的一种技术,用于估算在已知数据点之间的未知数据点的值。插值的目标是通过已知数据点之间的某种函数或方法来估计中间位置的数值。插值通常用于数…...
【项目经验】:elementui表格中数字汉字排序问题及字符串方法localeCompare()
一.需求 表格中数字汉字排序,数字按大小排列,汉字按拼音首字母(A-Z)排序。 二.用到的方法 第一步:把el-table-column上加上sortable"custom" <el-table-column prop"date" label"序号…...
Spring Boot的运行原理
Spring Boot的运行原理 Spring Boot是一个用于快速构建独立、可独立运行的Spring应用程序的框架。它通过自动配置和约定优于配置的原则,简化了Spring应用程序的开发过程。下面将详细介绍Spring Boot的运行原理,并附上一些代码解释。 1. 主要组件 Sprin…...
xen-gic初始化流程
xen-gic初始化流程 调试平台使用的是gic-600,建议参考下面的文档来阅读代码,搞清楚相关寄存器的功能。 《corelink_gic600_generic_interrupt_controller_technical_reference_manual_100336_0106_00_en》 《IHI0069H_gic_architecture_specification》…...
Docker从认识到实践再到底层原理(六-1)|Docker容器基本介绍+命令详解
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...
做网站维护前景/宁波专业seo服务
上午主要是开会部门岗位调整,下午开会明确基线工作,计划讨论BS采用统一用户权限方式实现,单独做一个独立的平台,感觉这种松耦合的实现方式很好,原来老的平台就是因为耦合太严重才出现现在这样各种问题。 终于要从delph…...
网站建设实训意见和建议/seo关键词优化报价
## php利用phpExcel 导出数组为Excelphp/*** 导出多页的excel** param [type] $fileName 文件名* param [type] $Data 数据* param [type] $sheets 工作区数量[可选]* author Tan * return void*/function exportExcel_sheets($fileName,$Data,$sheets) {$fileName empty($fil…...
全屋定制十大名牌排行2023/北京seo推广外包
在上一篇文章里,我介绍了如何对一个简单的Activity进行单元测试。(参见上一篇)我们为Activity提供了两个参数LastName和FirstName,Activity会根据这两个参数生成一个Email地址。在上一篇中,我们输入了两个“合法”的参…...
荆门市网站建设/seo研究中心学员案例
包含搜索功能的翻页列表开发规范 用户可输入信息的搜索栏需要明确输入规则,输入规则包括两个标准:正则以及字符最大长度;用户可输入信息的搜索栏需要明确是模糊搜索还是精确搜索(模糊搜索指可以输入任意信息搜索,精确…...
正规的网店平台有哪些/网站如何提升seo排名
torch.manual_seed(seed)设定生成随机数的种子,并返回一个torch._C.Generator对象,参数:seed(int or long):种子。torch.initial_seed()返回生成随机数的原始种子值(python long)。torch.get_rng_state() 返回随机生成…...
网站推广有哪些优势/百度关键词推广公司
得流量者得天下,有了流量,客户和生意才会跟着来,所以流量的获取一直都是市场部门的核心目标之一。这几年,SEO的重要性一点都没衰减,甚至有很多小型的创业公司,也会给专门的HC来提升SEO效果。 在基础的SEO工…...