发布模式

简介: 蓝绿部署通过两套并行系统(绿色在线、蓝色待发布)实现零停机发布与快速回滚,适用于内聚性强的系统。金丝雀发布则逐步替换旧版本,适合大规模集群。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测试时,线上同时运行多个版本的服务,这些服务通常会有一些体验上的差异,譬如说页面样式、颜色、操作流程不同。相关人员通过分析各个版本服务的实际效果,选出效果最好的版本。

相关文章
|
云栖大会 开发者
收到阿里云【乘风者计划】博主证书和奖励
收到阿里云【乘风者计划】博主证书和奖励 2023年2月对我来说是一个很好的开端,因为我在1号就收到了阿里云寄给我的【乘风者计划】博主证书和奖励。好兆头啊! 我收到的是我获得的【技术博主】【星级博主】【专家博主】三个的奖品和证书,一快给我寄过来哒!
3253 2
收到阿里云【乘风者计划】博主证书和奖励
|
5月前
|
存储 人工智能 关系型数据库
4.3 服务端(Cursor)-接口开发(员工管理)
基于SpringBoot+Mybatis+PageHelper,使用JDK8+新语法实现员工管理功能,涵盖分页查询、新增、修改、删除、详情及全量查询接口,操作emp与emp_expr表,支持多条件筛选与级联工作经历处理,高效完成前后端交互。
|
5月前
|
监控 Java 测试技术
OOM排查之路:一次曲折的线上故障复盘
本文记录了一次线上服务因Paimon数据湖与RocksDB集成引发的三次内存溢出(OOM)故障排查全过程。通过MAT、NMT、async-profiler等工具,结合监控分析与专家协作,最终定位到RocksDB通过JNI申请堆外内存未释放的根源问题,并推动架构优化:由应用直写改为Flink统一入湖。分享排查思路与工具使用,为同类技术栈提供借鉴。
|
5月前
|
敏捷开发 持续交付
阿里巴巴-云效
通过阿里云效平台实现高效研发协作:开通服务后,可进行需求管理,创建项目并协作更新任务,支持看板模式直观跟进进度;结合代码托管与自动化部署,完成代码提交、流水线构建与发布全流程,助力团队敏捷开发。(239字)
|
5月前
|
关系型数据库 MySQL Java
4.2 服务端(Cursor)-接口开发(部门管理)
基于SpringBoot+Mybatis+PageHelper,使用JDK8+语法,连接内网MySQL数据库(Sealos托管),完成部门管理5大接口开发:列表查询、根据ID查询、添加、修改、删除部门。结合dept表结构与接口文档,实现RESTful API,返回统一格式数据,通过ApiFox测试验证功能完整可用。(239字)
|
5月前
|
人工智能 前端开发 JavaScript
4.6 前端(Cursor)-页面布局
使用Sealos DevBox创建Vue项目,通过Cursor开发。执行`npm run dev`启动,访问公网地址即可预览。基于Vue3+ElementPlus实现“智学云帆”布局:顶部标题、右侧登录信息、左侧菜单,右侧动态页面。优化背景色、宽度及响应式,首页设计简洁大气,提升整体视觉体验。(238字)
阿里云服务器多少钱一年学生价?学生免费领取教程
阿里云学生免费领云服务器教程:先领300元学生专享代金券,再用券支付云服务器订单,实现免费领取。亲测有效,快来试试!
|
5月前
|
数据采集 存储 搜索推荐
《埋点工具的极简配置与高效应用指南》
本文聚焦小游戏开发场景下的数据埋点工具实践,核心围绕“轻量化、精准化”原则拆解工具选型与落地逻辑。文章对比第三方标准化工具与自定义轻量化工具的适用场景,分别阐述第三方工具“去冗余、抓核心”的配置方法,以及自定义工具“极简架构+核心功能聚焦”的开发思路。同时强调埋点工具需与游戏玩法深度绑定,通过“工具校验+人工复盘”保障数据质量,并建立“数据-决策-迭代”闭环,让埋点工具成为驱动小游戏持续增长的核心感知载体,为开发者提供了一套兼具实用性与独特性的埋点解决方案。
194 3
|
5月前
|
缓存 监控 测试技术
全链路压测实施指南
全链路压测是保障分布式系统稳定的核心手段,通过模拟真实流量,覆盖从请求接入到数据存储的完整链路,提前发现性能瓶颈、验证架构与预案。本文从压测规划、数据构造、流量模拟、监控分析、问题定位等十大维度,系统拆解实施流程与实战技巧,结合双11等典型案例,梳理标准化压测流程,助力企业高效落地全链路压测,为大促高峰提供坚实稳定性保障。
565 0
|
机器学习/深度学习 人工智能 自然语言处理
文科生在AI大模型时代:以人文为翼,迎接新机遇
随着AI大模型的崛起,关于“文科无用论”的讨论再度兴起。然而,AI在内容创作中的优势并未使文科生陷入就业寒冬,反而带来了新机遇。AI大模型依赖高质量的人文训练语料,文科生可在模型训练、优化及新兴职业如AIGC内容官中发挥专长。掌握AI技能并通过GAI认证,文科生能在新时代绽放光彩。