蓝绿发布、灰度发布(金丝雀发布) 和滚动发布

应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务。

长期以来,业务升级渐渐形成了几个发布策略:蓝绿发布、灰度发布和滚动发布,目的是尽可能避免因发布导致的流量丢失或服务不可用问题。

1. 蓝绿发布

1.1 实现原理

1)项目逻辑上分为AB组,在项目系统时,首先把A组从负载均衡中摘除,进行新版本的部署。B组仍然继续提供服务。

2) 当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署。A组重新提供服务。

3) 最后,B组也升级完成,负载均衡重新接入B组,此时,AB组版本都已经升级完成,并且都对外提供服务。

1.2 特点

  • 如果出问题,影响范围较大;
  • 发布策略简单;
  • 用户无感知,平滑过渡;
  • 升级/回滚速度快。

1.3 缺点

  • 需要准备正常业务使用资源的两倍以上服务器,防止升级期间单组无法承载业务突发;
  • 短时间内浪费一定资源成本;
  • 基础设施无改动,增大升级稳定性。

蓝绿发布在早期物理服务器时代,还是比较昂贵的,由于云计算普及,成本也大大降低。

2. 灰度发布(金丝雀发布)

2.1 实现原理

灰度发布只升级部分服务,即让一部分用户继续用老版本,一部分用户开始用新版本,如果用户对新版本没什么意见,那么逐步扩大范围,把所有用户都迁移到新版本上面来。

2.2 特点

  • 保证整体系统稳定性,在初始灰度的时候就可以发现、调整问题,影响范围可控;
  • 新功能逐步评估性能,稳定性和健康状况,如果出问题影响范围很小,相对用户体验也少;
  • 用户无感知,平滑过渡。

2.3 缺点

自动化要求高

2.4 部署过程

  1. 从LB摘掉灰度服务器,升级成功后再加入LB;
  2. 少量用户流量到新版本;
  3. 如果灰度服务器测试成功,升级剩余服务器。

灰度发布是通过切换线上并存版本之间的路由权重,逐步从一个版本切换为另一个版本的过程。

3. 滚动发布

3.1 实现原理

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

  • 红色:正在更新的实例
  • 蓝色:更新完成并加入集群的实例
  • 绿色:正在运行的实例

3.2 特点

  • 用户无感知,平滑过渡;
  • 节约资源。

3.3 缺点

  • 部署时间慢,取决于每阶段更新时间;
  • 发布策略较复杂;
  • 无法确定OK的环境,不易回滚。

3.4 部署过程

  1. 先升级1个副本,主要做部署验证;
  2. 每次升级副本,自动从LB上摘掉,升级成功后自动加入集群;
  3. 事先需要有自动更新策略,分为若干次,每次数量/百分比可配置;
  4. 回滚是发布的逆过程,先从LB摘掉新版本,再升级老版本,这个过程一般时间比较长; 自动化要求高。

4. 小结

综上所述,三种方式均可以做到平滑式升级,在升级过程中服务仍然保持服务的连续性,升级对外界是无感知的。
那生产上选择哪种部署方法最合适呢?这取决于哪种方法最适合你的业务和技术需求。

  • 如果运维自动化能力储备不够,肯定是越简单越好,建议蓝绿发布;
  • 如果业务对用户依赖很强,建议灰度发布;
  • 如果是K8S平台,滚动更新是现成的方案,建议先直接使用。

蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚。

灰度发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本。

滚动发布:按批次停止老版本实例,启动新版本实例。

原文地址:https://mp.weixin.qq.com/s?__biz=MzAwNTM5Njk3Mw==&mid=2247495129&idx=1&sn=6ecc1e69c647df365be3f7b92b858c72&chksm=9b1fed5bac68644d5f5b059aa0c9425a22d8e0d669f09b7f7bf5b35fb9dcfcdae771fac9ae5e&mpshare=1&scene=23&srcid=0211stGZXyDNOY6vP35eeZ57&sharer_sharetime=1613019692245&sharer_shareid=874b87929c17020edadbcebae32b2e39#rd

蓝绿发布、灰度发布(金丝雀发布) 和滚动发布相关推荐

  1. kubernetes(七)项目部署方式:蓝绿部署,灰度发布/金丝雀发布,滚动更新

    在项目迭代的过程中,不可避免需要上线进行部署. 目前项目部署的方式有很多种:像重新部署,蓝绿部署,金丝雀部署(灰度部署),滚动更新.本文简单介绍下这些常见的部署方案以及使用k8s怎么进行对应部署 重新 ...

  2. 发版模式(蓝绿、灰度、滚动)简单原理

    蓝绿部署用的就比较少了,太浪费资源.滚动发布和灰度发布其实都可以用矿工(用户)下井(使用的版本)来理解,旧矿井(旧版本)和新矿井(新版本).滚动发布就是发现新矿井,直接让矿工排队下新矿井,结果瓦斯浓度 ...

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

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

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

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

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

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

  6. 线上发版如何做到分批发的?详解蓝绿部署,滚动升级,A/B 测试,灰度发布/金丝雀发布

    过去的 10 年里,很多大公司都在使用蓝绿部署,安全.可靠是这种部署方式的特点.蓝绿部署虽然算不上" Sliver Bullet ",但确实很实用.在有关于"微服务&qu ...

  7. 科普:蓝绿部署、金丝雀发布(灰度发布)、A/B测试

    蓝绿部署(Blue-green Deployments) 蓝绿部署的目的是减少发布时的中断时间.能够快速撤回发布. It's basically a technique for releasing y ...

  8. 蓝绿部署、金丝雀发布(灰度发布)、A/B测试的准确定义

    作者: 李佶澳   转载请保留:原文地址   发布时间:2018/10/23 14:02:00 说明 蓝绿部署 金丝雀发布 A/B测试 参考 说明 蓝绿部署.A/B测试.金丝雀发布,以及灰度发布.流量 ...

  9. 【项目实战】正确辨析蓝绿部署、金丝雀发布(灰度发布)、滚动发布、A/B测试

    一.背景 蓝绿部署.A/B测试.金丝雀发布,以及灰度发布.流量切分等,经常被混为一谈,影响沟通效率. 根本原因是这些名词经常出现,人们耳熟能详能够熟练地谈起,对这些术语的理解却没有达成一致. 下面是从 ...

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

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

最新文章

  1. 借“样式”巧用Word自带的多级项目符号!
  2. python下载安装教程3.8.1-Linux安装Python 3.8.1
  3. 手机客户端连接linux
  4. python输入多个数据存入列表_python怎么把input的值储存到一个列表
  5. SAP WebIDE一个和Destination相关的问题 - OData下拉菜单里的Destination从哪里来的
  6. python编程中条件句_简单讲解Python编程中namedtuple类的用法
  7. 【IMX6ULL笔记】--内核底层驱动初步探究
  8. C# WPF MVVM 实战 - 2.1
  9. 文字-汉字-生僻字:生僻字1
  10. WPF无边框窗体拖动
  11. 为了下一代,抖音真的该关了---读<<我观察到的牛人有这三个特质>>有感
  12. C++中string类下的begin,end,rbegin,rend的用法
  13. python是微软开发的吗_Python是如何在微软发展壮大的
  14. 通信网基础缩略语集合
  15. 基于stm32的物联网、智能家居控制系统
  16. Python-OpenCV图像处理(二):模糊操作
  17. SQL视图View的总结和使用
  18. Squeezenet官方源代码解析
  19. 在上海软件行业,我见到的年入50万的众生相——我们该如何努力从而达到这个目标...
  20. 半个月零基础可以过计算机二级吗,2018年9月计算机二级考试“零基础”通关计划...

热门文章

  1. 28岁功能测试被辞,最后结局令人感慨...
  2. 算法图解之狄克斯特拉算法实现
  3. killall杀死nginx顽固进程
  4. Clojure入门教程
  5. Spark RDD编程模型及算子介绍(二)
  6. PS平面设计如何学?零基础学习有多难?
  7. 机器人搭建记录 HoshinoBot
  8. 03 graphx 从 SSSP 来看 pregel
  9. 2020大厂到底有多少程序员?腾讯研发人员占比68%
  10. 浙大毕业演讲 --- 马一浮