⼀、蓝绿部署(Blue/Green Deployment)

过去的 10 年⾥,很多公司都在使⽤蓝绿部署(发布)来实现热部署,这种部署⽅式具有安全、可靠的特点。蓝绿部署虽然算不上“ Sliver
Bullet”,但确实很实⽤。
蓝绿部署是最常见的⼀种0 downtime部署的⽅式,是⼀种以可预测的⽅式发布应⽤的技术,⽬的是减少发布过程中服务停⽌的时间。蓝绿
部署原理上很简单,就是通过冗余来解决问题。通常⽣产环境需要两组配置(蓝绿配置),⼀组是active的⽣产环境的配置(绿配置),⼀
组是inactive的配置(蓝绿配置)。⽤户访问的时候,只会让⽤户访问active的服务器集群。在绿⾊环境(active)运⾏当前⽣产环境中的
应⽤,也就是旧版本应⽤version1。当你想要升级到version2 ,在蓝⾊环境(inactive)中进⾏操作,即部署新版本应⽤,并进⾏测试。
如果测试没问题,就可以把负载均衡器/反向代理/路由指向蓝⾊环境了。随后需要监测新版本应⽤,也就是version2 是否有故障和异
常。如果运⾏良好,就可以删除version1 使⽤的资源。如果运⾏出现了问题,可以通过负载均衡器指向快速回滚到绿⾊环境。
蓝绿部署的优点:
这种⽅式的好处在你可以始终很放⼼的去部署inactive环境,如果出错并不影响⽣产环境的服务,如果切换后出现问题,也可以在⾮常短的
时间内把再做⼀次切换,就完成了回滚。⽽且同时在线的只有⼀个版本。蓝绿部署⽆需停机,并且风险较⼩。
(1) 部署版本1的应⽤(⼀开始的状态),所有外部请求的流量都打到这个版本上。
(2) 部署版本2的应⽤,版本2的代码与版本1不同(新功能、Bug修复等)。
(3) 将流量从版本1切换到版本2。
(4) 如版本2测试正常,就删除版本1正在使⽤的资源(例如实例),从此正式⽤版本2。
从过程不难发现,在部署的过程中,应⽤始终在线。并且,新版本上线的过程中,并没有修改⽼版本的任何内容,在部署期间,⽼版本的状
态不受影响。这样风险很⼩,并且,只要⽼版本的资源不被删除,理论上,可以在任何时间回滚到⽼版本。
蓝绿部署的弱点:
使⽤蓝绿部署需要注意的⼀些细节包括:
1、当切换到蓝⾊环境时,需要妥当处理未完成的业务和新的业务。如果数据库后端⽆法处理,会是⼀个⽐较⿇烦的问题。
2、有可能会出现需要同时处理“微服务架构应⽤”和“传统架构应⽤”的情况,如果在蓝绿部署中协调不好这两者,还是有可能导致服务
停⽌;
3、需要提前考虑数据库与应⽤部署同步迁移/回滚的问题。
4、蓝绿部署需要有基础设施⽀持。
5、在⾮隔离基础架构( VM 、 Docker 等)上执⾏蓝绿部署,蓝⾊环境和绿⾊环境有被摧毁的风险。
6、另外,这种⽅式不好的地⽅还在于冗余产⽣的额外维护、配置的成本,以及服务器本⾝运⾏的开销。
蓝绿部署适⽤的场景:
1、不停⽌⽼版本,额外搞⼀套新版本,等测试发现新版本OK后,删除⽼版本。
2、蓝绿发布是⼀种⽤于升级与更新的发布策略,部署的最⼩维度是容器,⽽发布的最⼩维度是应⽤。
3、蓝绿发布对于增量升级有⽐较好的⽀持,但是对于涉及数据表结构变更等等不可逆转的升级,并不完全合适⽤蓝绿发布来实现,需要结
合⼀些业务的逻辑以及数据迁移与回滚的策略才可以完全满⾜需求。

二、A/B 测试(A/B Testing)

A/B 测试跟蓝绿部署完全是两码事。A/B 测试是⽤来测试应⽤功能表现的⽅法,例如可⽤性、受欢迎程度、可见性等等。 蓝绿部署的⽬的
是安全稳定地发布新版本应⽤,并在必要时回滚。
A/B 测试与蓝绿部署的区别在于, A/B 测试⽬的在于通过科学的实验设计、采样样本代表性、流量分割与⼩流量测试等⽅式来获得具有代
表性的实验结论,并确信该结论在推⼴到全部流量可信。
A/B 测试和蓝绿部署可以同时使⽤。

三、灰度发布/⾦丝雀发布

灰度发布/⾦丝雀发布
灰度发布是指在⿊与⽩之间,能够平滑过渡的⼀种发布⽅式。灰度发布是增量发布的⼀种类型,灰度发布是在原有版本可⽤的情况下,同时
部署⼀个新版本应⽤作为“⾦丝雀”(⾦丝雀对⽡斯极敏感,矿井⼯⼈携带⾦丝雀,以便及时发发现危险),测试新版本的性能和表现,以
保障整体系统稳定的情况下,尽早发现、调整问题。
灰度发布/⾦丝雀发布由以下⼏个步骤组成:
1、准备好部署各个阶段的⼯件,包括:构建⼯件,测试脚本,配置⽂件和部署清单⽂件。
2、从负载均衡列表中移除掉“⾦丝雀”服务器。
3、升级“⾦丝雀”应⽤(排掉原有流量并进⾏部署)。
4、对应⽤进⾏⾃动化测试。
5、将“⾦丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)。
6、如果“⾦丝雀”在线使⽤测试成功,升级剩余的其他服务器。(否则就回滚)
灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
灰度发布/⾦丝雀部署适⽤的场景:
1、不停⽌⽼版本,额外搞⼀套新版本,不同版本应⽤共存。
2、灰度发布中,常常按照⽤户设置路由权重,例如90%的⽤户维持使⽤⽼版本,10%的⽤户尝鲜新版本。
3、经常与A/B测试⼀起使⽤,⽤于测试选择多种⽅案。AB test就是⼀种灰度发布⽅式,让⼀部分⽤户继续⽤A,⼀部分⽤户开始⽤B,如
果⽤户对B没有什么反对意见,那么逐步扩⼤范围,把所有⽤户都迁移到B上⾯来。
趣闻 :
⾦丝雀部署(同理还有⾦丝雀测试),“⾦丝雀”的由来:17世纪,英国矿井⼯⼈发现,⾦丝雀对⽡斯这种⽓体⼗分敏感。空⽓中哪怕有
极其微量的⽡斯,⾦丝雀也会停⽌歌唱;⽽当⽡斯含量超过⼀定限度时,虽然鲁钝的⼈类毫⽆察觉,⾦丝雀却早已毒发⾝亡。当时在采矿设
备相对简陋的条件下,⼯⼈们每次下井都会带上⼀只⾦丝雀作为“⽡斯检测指标”,以便在危险状况下紧急撤离。
滚动发布(rolling update)
滚动发布,⼀般是取出⼀个或者多个服务器停⽌服务,执⾏更新,并重新将其投⼊使⽤。周⽽复始,直到集群中所有的实例都更新成新版
本。这种部署⽅式相对于蓝绿部署,更加节约资源——它不需要运⾏两个集群、两倍的实例数。我们可以部分部署,例如每次只取出集群的
20%进⾏升级。
这种⽅式也有很多缺点,例如:
(1) 没有⼀个确定OK的环境。使⽤蓝绿部署,我们能够清晰地知道⽼版本是OK的,⽽使⽤滚动发布,我们⽆法确定。
(2) 修改了现有的环境。
(3) 如果需要回滚,很困难。举个例⼦,在某⼀次发布中,我们需要更新100个实例,每次更新10个实例,每次部署需要5分钟。当滚动发
布到第80个实例时,发现了问题,需要回滚。此时,脾⽓不好的程序猿很可能想掀桌⼦,因为回滚是⼀个痛苦,并且漫长的过程。
(4) 有的时候,我们还可能对系统进⾏动态伸缩,如果部署期间,系统⾃动扩容/缩容了,我们还需判断到底哪个节点使⽤的是哪个代码。尽
管有⼀些⾃动化的运维⼯具,但是依然令⼈⼼惊胆战。
并不是说滚动发布不好,滚动发布也有它⾮常合适的场景。

蓝绿部署、AB测试、灰度发布、⾦丝雀发布、滚 动发布的概念与区别相关推荐

  1. nginx-ingress蓝绿部署权重测试

    kubernetes基于nginx-ingress进行蓝绿部署/金丝雀发布 测试结果汇总分析: 1.正式/灰度各一个pod ,canary权重设置 30% 发送500个请求 ,canary占147个 ...

  2. 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)、功能开关发布

    简介 产品或项目不可能一步到位,一次性推向用户,故而有版本的存在.在app版本更新或者项目迭代的过程中,不可避免需要发布.发布就是部署:部署就是修改:修改则意味着风险. 目前有很多用于部署的技术,本文 ...

  3. 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)

    简介 产品或者项目不可能一步到位,一次性推向用户,故而有版本的存在.在app版本更新或者项目迭代的过程中,不可避免需要发布.发布就是部署/重新部署:部署就是修改:修改则意味着风险. 目前有很多用于部署 ...

  4. 什么蓝绿部署(BlueGreenDeployment) ?

    我和我的同事向我们的客户提出的目标之一是完全自动化的部署过程.自动化部署有助于减少在"完成"软件和实现其价值之间出现的摩擦和延迟.它建立在许多通常与持续集成相关的想法之上,更多地推 ...

  5. 蓝绿部署、金丝雀发布(灰度发布)、AB测试……

    点击关注公众号,Java干货及时送达 来源 | https://www.jianshu.com/p/0df88fe4a1e3 随着微服务架构的普及,线上服务越来越多,随之而来的就是部署越来越频繁:随着 ...

  6. 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别

    在有关微服务.DevOps.Cloud-native.系统部署等的讨论中,蓝绿部署.A/B 测试.灰度发布.滚动发布.红黑部署等概念经常被提到,它们有什么区别呢?通过搜索相关资料,做一个简单的辨析,如 ...

  7. 微服务下蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别...

    更多内容关注微信公众号:fullstack888 在有关微服务.DevOps.Cloud-native的迭代过程中,不可避免的需要"上线",上线就需要部署,需要部署就意味着有修改, ...

  8. 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别...

    蓝绿部署.红黑部署.AB测试.灰度发布.金丝雀发布.滚动发布的概念与区别 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangyinghong_2 ...

  9. 蓝绿部署滚动部署金丝雀发布(灰度发布)A/B测试

    在一般情况下,升级服务器端应用,需要将应用源码或程序包上传到服务器,然后停止掉老版本服务,再启动新版本.但是这种简单的发布方式存在两个问题,一方面,在新版本升级过程中,服务是暂时中断的,另一方面,如果 ...

最新文章

  1. __block 和 __weak的区别
  2. 人工智能技术结合制造业,是学术研究还是落地方案?!
  3. linux 两个驱动 竞争,Linux设备驱动第五章(并发和竞争)读书笔记(国外英文资料).doc...
  4. MFC中将CBitmap画到cdc上
  5. Thymeleaf与Spring集成(第2部分)
  6. Halcon学习笔记——机器视觉应用工程开发思路及相机标定
  7. WebSocket轻松单台服务器5w并发jmeter实测
  8. Luogu P3373 【模板】线段树 2
  9. 标准模板库(STL)之 queue 列传
  10. 博弈论 从懵逼到入门 详解
  11. Kafka负载均衡、Kafka自定义Partition、Kafk文件存储机制
  12. ctfshow萌新赛经验总结
  13. 编程中,有哪些好的习惯一开始就值得坚持?
  14. mysql学习心得总结
  15. 生成 Bingo 卡片
  16. VMware虚拟机复制文件卡死的问题
  17. 图片缩放库 Photoview 和 Gif 控件 GifView 的使用
  18. 水果店的开业活动怎么做,水果店开业活动朋友圈怎么发
  19. 程序员必备的思维能力:抽象思维
  20. rac集群状态中监听状态CHECK TIMED OUT处理

热门文章

  1. [唠嗑]我的阿里实习体验(写于实习入职第二天)
  2. 与大数据相关热门岗位有什么?
  3. 折半查找并插入(在一个有序数组中通过二分查找数字,若存在,指出其是数组中第几个元素;反之插入数组并有序化)
  4. 【已解决】导入tensorflow报错/python已停止工作/The kernel appears to have died
  5. pycharm异常问题之Unable to save settings: Failed to save settings. Please restart PyCharm
  6. C#实现jQuery的方法连缀
  7. centos7密码正确登录失败
  8. 深度学习--滑动平均模型
  9. C语言: “老板,来两份外卖,一份卤肉饭(%d),一份鸡汤面(%f)...“
  10. RNA-Seq质控工具RseQC安装使用