发布模式

简介: 蓝绿部署通过两套并行系统(绿色在线、蓝色待发)实现零停机发布与快速回滚;金丝雀发布逐步替换旧版本,适用于大规模集群;A/B测试则用于比较多个已上线版本的实际效果,三者均为关键的发布与验证策略。

蓝绿部署
蓝绿部署的目的是减少发布时的中断时间、能够快速撤回发布。
It’s basically a technique for releasing your application in a predictable manner with an goal of reducing any downtime associated with a release. It’s a quick way to prime your app before releasing, and also quickly roll back if you find issues.
蓝绿部署中,一共有两套系统:一套是正在提供服务系统,标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。
最初,没有任何系统,没有蓝绿之分。
然后,第一套系统开发完成,直接上线,这个过程只有一个系统,也没有蓝绿之分。
后来,开发了新版本,要用新版本替换线上的旧版本,在线上的系统之外,搭建了一个使用新版本代码的全新系统。 这时候,一共有两套系统在运行,正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色系统。

蓝色系统不对外提供服务,用来做啥?
用来做发布前测试,测试过程中发现任何问题,可以直接在蓝色系统上修改,不干扰用户正在使用的系统。(注意,两套系统没有耦合的时候才能百分百保证不干扰)
蓝色系统经过反复的测试、修改、验证,确定达到上线标准之后,直接将用户切换到蓝色系统:
切换后的一段时间内,依旧是蓝绿两套系统并存,但是用户访问的已经是蓝色系统。这段时间内观察蓝色系统(新系统)工作状态,如果出现问题,直接切换回绿色系统。
当确信对外提供服务的蓝色系统工作正常,不对外提供服务的绿色系统已经不再需要的时候,蓝色系统正式成为对外提供服务系统,成为新的绿色系统。 原先的绿色系统可以销毁,将资源释放出来,用于部署下一个蓝色系统。
蓝绿部署只是上线策略中的一种,它不是可以应对所有情况的万能方案。 蓝绿部署能够简单快捷实施的前提假设是目标系统是非常内聚的,如果目标系统相当复杂,那么如何切换、两套系统的数据是否需要以及如何同步等,都需要仔细考虑。
BlueGreenDeployment中给出的一张图特别形象:

金丝雀发布
金丝雀发布(Canary)也是一种发布策略,和国内常说的灰度发布是同一类策略。
蓝绿部署是准备两套系统,在两套系统之间进行切换,金丝雀策略是只有一套系统,逐渐替换这套系统。
譬如说,目标系统是一组无状态的Web服务器,但是数量非常多,假设有一万台。
这时候,蓝绿部署就不能用了,因为你不可能申请一万台服务器专门用来部署蓝色系统(在蓝绿部署的定义中,蓝色的系统要能够承接所有访问)。
可以想到的一个方法是:
只准备几台服务器,在上面部署新版本的系统并测试验证。测试通过之后,担心出现意外,还不敢立即更新所有的服务器。 先将线上的一万台服务器中的10台更新为最新的系统,然后观察验证。确认没有异常之后,再将剩余的所有服务器更新。
这个方法就是金丝雀发布。
实际操作中还可以做更多控制,譬如说,给最初更新的10台服务器设置较低的权重、控制发送给这10台服务器的请求数,然后逐渐提高权重、增加请求数。
这个控制叫做“流量切分”,既可以用于金丝雀发布,也可以用于后面的A/B测试。
蓝绿部署和金丝雀发布是两种发布策略,都不是万能的。有时候两者都可以使用,有时候只能用其中一种。
上面的例子中可以用金丝雀,不能用蓝绿,那么什么时候可以用蓝绿,不能用金丝雀呢?整个系统只有一台服务器的时候。
A/B测试
首先需要明确的是,A/B测试和蓝绿部署以及金丝雀,完全是两回事。
蓝绿部署和金丝雀是发布策略,目标是确保新上线的系统稳定,关注的是新系统的BUG、隐患。
A/B测试是效果测试,同一时间有多个版本的服务对外服务,这些服务都是经过足够测试,达到了上线标准的服务,有差异但是没有新旧之分(它们上线时可能采用了蓝绿部署的方式)。
A/B测试关注的是不同版本的服务的实际效果,譬如说转化率、订单情况等。
A/B测试时,线上同时运行多个版本的服务,这些服务通常会有一些体验上的差异,譬如说页面样式、颜色、操作流程不同。相关人员通过分析各个版本服务的实际效果,选出效果最好的版本。

相关文章
|
机器学习/深度学习 人工智能 测试技术
11种开源即插即用模块汇总 !!(附论文和代码)
11种开源即插即用模块汇总 !!(附论文和代码)
977 1
|
编译器 Linux 开发工具
|
新零售 Cloud Native Devops
坚持伙伴优先,阿里云颁发合作伙伴年度奖项
2023年4月26日,2023阿里云合作伙伴颁奖盛典在南京举行,阿里云向核心伙伴颁发年度奖项。
坚持伙伴优先,阿里云颁发合作伙伴年度奖项
|
4月前
|
监控 算法 Unix
Thread.sleep(0) 到底有什么用(读
Thread.Sleep用于让线程暂停执行一段时间,不参与CPU竞争。Sleep(1000)并不保证精确唤醒时间,因系统调度受优先级和资源影响;而Sleep(0)会触发系统立即重新分配CPU,给予其他线程执行机会,避免界面假死,具有实际意义。
THW
|
4月前
|
存储 安全
BadUSB 攻击原理
BadUSB攻击通过将USB设备伪装成键盘等HID设备,利用系统对HID的信任,在连接电脑后自动模拟键盘输入执行恶意指令,从而绕过传统安全防护,实现无需用户操作的秒级入侵。
THW
345 0
|
4月前
|
存储 SQL 关系型数据库
面试八股文专题-----MySQL篇
本篇系统讲解MySQL核心知识:查询语句的书写与执行顺序、多表连接方式、索引机制(B+树、聚簇/非聚簇、回表、覆盖索引)、SQL优化策略(左前缀原则、索引失效场景)、存储引擎对比及慢查询定位分析,助力高效数据库开发与调优。
|
4月前
|
canal 消息中间件 关系型数据库
配置数据同步环境
本文介绍如何配置Canal+MQ实现MySQL数据同步。首先开启MySQL主从复制并启用Binlog行模式,创建Canal专用用户;接着部署Canal服务,配置其通过RabbitMQ发送数据变更消息;再设置监听的数据库表及动态Topic路由;最后在RabbitMQ中创建交换机与队列绑定,完成数据同步链路。修改指定表数据后,Canal捕获Binlog并将更新消息发送至MQ队列,供下游系统消费,实现高效、可靠的数据同步。
|
存储 编译器
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
398 12
|
域名解析 缓存 负载均衡
怎么设置腾讯云CDN缓存规则
CDN主要功能是在不同的地点缓存内容,通过负载均衡技术,将用户的请求定向到最合适的缓存服务器上去获取内容,比如说,是北京的用户,我们让他访问北京的节点,深圳的用户,我们让他访问深圳的节点。通过就近访问,加速用户对网站的访问。解决Internet网络拥堵状况,提高用户访问网络的响应速度。
788 156
怎么设置腾讯云CDN缓存规则