首富带你畅谈:蓝绿部署、滚动发布、灰度发布/金丝雀发布

首富带你畅谈:蓝绿部署、滚动发布、灰度发布/金丝雀发布

笔者: 张首富
时间: 2019-01-24晚
QQ群: 895291458
博客地址: www.zhangshoufu.com

根据2018年的DevOps发展报告来看,目前的DevOps发展速度非常之快,已经逐渐成为企业运维的标准方案.DevOps的核心就是敏捷高效,敏捷Scrum开发技术曾被认为是最好的技术.
既然公司用到了CI/CD肯定就肯定避免不了持续部署,所以我们就需要考虑一套适合我们的发布方式,这个时候我们就需要了解一下这几个发布方式到底是什么意思,有很么好处,他们之间的差别在哪个地方.

蓝绿部署(Blue/Green Deployment)

定义:

蓝绿部署就是不停止使用老版本的情况下部署新版本进行测试,测试你ok后,将流量切换到新版本,然后老版本也升级到新版本

特点:

1,蓝绿部署无需停止,直接新旧版本都能使用,等待新版本测试正常之后才把流量迁移过来
2,需要两套相同的环境

部署过程:

这个地方拿web应用来做演示再也合适不过了,
1,把所有的请求都代理到老版本代码的Nginx服务器上,然后测试人员在新版本代码的Nginx上测试功能是否合格正常

等待新版本代码所有功能验证通过之后我们在把流量切换到新版本代码所在的集群,等待观察使用一阶段之后再办原来老版本代码的服务器替换成更新的代码,

就这样新旧代码上线测试发布,这个过程叫蓝绿发布.

蓝绿部署的好处:

新代码发布的时候不会影响旧代码,如果出现问题,我们只需要把流量全部迁移到老代码集群即可,风险比较小.

蓝绿部署的不足或风险:

  • 1,因为新旧代码同时在线,我们一定要考虑好后端数据库的处理问题,如果数据库处理不得当,那么蓝绿部署会给你带来不一样的感觉
  • 2,可能会出需要同时处理“微服务架构应用”和“传统架构应用”的情况,如果在蓝绿部署中协调不好这两者,还是有可能导致服务停止的;
  • 3,虽然代码回滚很简单,但是你因该考虑好数据库回滚的事情
  • 4,蓝绿部署需要你有足够多的服务器资源

流量走势图:

滚动发布(Rolling update)

定义:

一般是取出一个或多个服务器先停止服务,更换新的代码,然后投入生产使用,等待稳定在更换一批服务器的代码,周而复始,直到老版本完全被替换掉

特点:

这种部署的方式很像蓝绿部署,但是有和蓝绿部署不一样,他比蓝绿部署更加的节省资源(相同的集群不需要部署两套)

部署过程:

1,现在其中的一台或者多台机器上部署新代码,然后提供服务

2,等过一段时间发现没有什么大问题,开始接着替换代码

3,周而复始直到所有的代码被替换完成

滚动发布的好处:

用户体验影响小,体验较平滑

滚动发布的不足或风险:

  • 1,没有一个确定OK的环境。使用蓝绿部署,我们能够清晰地知道老版本是OK的,而使用滚动发布,我们无法确定。
  • 2,有的时候,我们还可能对系统进行动态伸缩,如果部署期间,系统自动扩容/缩容了,我们还需判断到底哪个节点使用的是哪个代码。尽管有一些自动化的运维工具,但是依然令人心惊胆战。
  • 3,因为是逐步更新,那么我们在上线代码的时候,就会短暂出现新老版本不一致的情况,如果对上线要求较高的场景,那么就需要考虑如何做好兼容的问题。

滚动发布需要注意的事项:

  • 1,滚动式发布一般先发 1 台,或者一个小比例,如 2% 服务器,主要做流量验证用,类似金丝雀 (Canary) 测试
  • 2,滚动式发布需要比较复杂的发布工具和智能 LB,支持平滑的版本替换和流量拉入拉出。
  • 3,每次发布时,先将老版本 V1 流量从 LB 上摘除,然后清除老版本,发新版本 V2,再将 LB 流量接入新版本。这样可以尽量保证用户体验不受影响。
  • 4,回退是发布的逆过程,将新版本流量从 LB 上摘除,清除新版本,发老版本,再将 LB 流量接入老版本。和发布过程一样,回退过程一般也比较慢的。

流量走势图:

灰度发布/金丝雀发布

定义:

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀发布也就是灰度发布的一种方式。

小插曲(为什么叫金丝雀发布)

矿井中的金丝雀
17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离。这就好比我们先哪一个测试看看用户反应,如果没有问题继续发布

特点:

部署过程:

1,准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。

2, 在原有的Nginx 后端中提出金丝雀服务器,升级金丝雀服务器上的应用代码,对齐进行测试

3,带基础测试通过之后再把它加回到服务器急群众,来检测连通性和健康检查

4,带测试结束之后,升级其他服务器代码至新代码

灰度发布的好处:

用户体验影响小;
如果出问题只是一台服务器,不影响我们线上的业务,就是出了问题我们也能快速的解决(把金丝雀撤回来)

灰度发布的不足或风险

发布工具比较复杂,

流量走势图:

参考:
https://www.v2ex.com/t/344341
http://www.10tiao.com/html/773/201803/2247487627/1.html

原文地址:http://blog.51cto.com/13447608/2346437

时间: 2024-10-25 18:09:57

首富带你畅谈:蓝绿部署、滚动发布、灰度发布/金丝雀发布的相关文章

蓝绿部署、滚动部署、灰度发布、金丝雀发布

微服务部署:蓝绿部署.滚动部署.灰度发布.金丝雀发布 在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需要停机即可完成部署.本文的目的就是将目前常用的布署方案做一个总结. 一.蓝绿布署 Blue/Green Deployment(蓝绿部署) 1.定义 蓝绿部署是不停老版本,部署新版本然后进行测试,确认OK,将流量切到新版本,然后老版本同时也升级到新版本. 1.特点

什么是蓝绿部署和滚动部署

海豚的秘密 大家都知道海豚这种可爱的海洋动物.但又有多少人知道,海豚可以永远不睡觉. 是什么样的能力,使得海豚可以永远保持清醒呢?依靠的是海豚大脑特殊的运作方式. 像人一样,海豚的大脑也分为左脑和右脑两个部分.在海豚活跃的状态下,左脑和右脑都是清醒的: 当然,海豚也是血肉之躯,也是需要休息的.在海豚休息的状态下,其中一半大脑会进入睡眠,另一半大脑仍然保持清醒,以面对各种外界情况. 每隔两个小时,这种一半睡眠一半清醒的状态会进行交替,比如这一刻左脑睡眠右脑清醒,下一刻左脑清醒右脑睡眠. 这就是海豚

蓝绿部署、滚动发布、灰度发布的介绍以及最佳实践

蓝绿部署.滚动发布.灰度发布的介绍以及最佳实践 在一般情况下,升级服务器端应用,需要将应用源码或程序包上传到服务器,然后停止掉老版本服务,再启动新版本.但是这种简单的发布方式存在两个问题,一方面,在新版本升级过程中,服务是暂时中断的,另一方面,如果新版本有BUG,升级失败,回滚起来也非常麻烦,容易造成更长时间的服务不可用. 为了解决这些问题,人们研究出了多种发布策略,下面我们一一介绍. 蓝绿部署 所谓蓝绿部署,是指同时运行两个版本的应用,如上图所示,蓝绿部署的时候,并不停止掉老版本,而是直接部署

k8s 蓝绿部署之 Service Label

什么是蓝绿部署 蓝绿(blue/green):新版本与旧版本一起存在,然后切换流量 蓝绿部署流程图 K8S中如何实现蓝绿部署 通过k8s service label标签来实现蓝绿发布 通过Ingress 控制器来实现蓝绿发布 通过Istio来实现蓝绿发布,或者像Istio类似的服务 这次先讲通过k8s service label标签来实现蓝绿发布,Istio实现蓝绿发布下期再分享. k8s 蓝绿 yaml 配置 service.yaml 文件 apiVersion: v1 kind: Servi

如何跨不同版本K8S,为有状态工作负载做蓝绿部署

容器的生态正在爆发!不仅仅应用层在快速变化,还有用于管理应用程序的平台:Kubernetes,也在快速变化.这就为Ops团队带来了一个必须要解决的难题.IT团队如何才能保证一款应用程序能够在各种不同版本的Kubernetes上都能良好运行呢?PX-Motion演示视频:如何跨不同版本Kubernetes,为有状态的工作负载做蓝绿部署 蓝-绿部署是一种专门用于解决这一问题的技术,并能够降低生产环境部署的过程中的停机或错误风险.在蓝绿部署场景下,用户需要构建两个完全相同的生产环境(分别称为蓝与绿),

金丝雀发布、滚动发布、蓝绿发布到底有什么差别?关键点是什么?

金丝雀发布.滚动发布.蓝绿发布到底有什么差别?关键点是什么? ? 根据 2017 年的 DevOps 发展报告,高效能组织和低效能组织在软件交付的效率上有数量级上的差异.技术组织的软件交付能力是一种综合能力,涉及众多环节,其中发布是尤为重要的环节. ? 作为技术人员,大家可能听说过"滚动发布"和"蓝绿发布"等术语,但是很多人并不清楚这些术语背后的原理.本文试图总结当前主流的发布策略,每个的优劣,适用性,让开发人员特别是架构师对现代发布技术有一个更为清晰全面的认识,让

【微服务从入门到精通】:(一)微服务的蓝绿发布及灰度发布

蓝绿部署 基本上,蓝绿部署是一种以可预测的方式发布应用的技术,目的是减少发布过程中服务停止的时间. 简单来说,你需要准备两个相同的环境(基础架构),在蓝色环境运行当前生产环境中的应用,也就是旧版本应用,如图中 App1 version1 . App2 version1 . App3 version3 . 当你想要升级 App2 到 version2 ,在蓝色环境中进行操作,即部署新版本应用,并进行测试.如果测试没问题,就可以把负载均衡器/反向代理/路由指向蓝色环境了. 随后你需要监测新版本应用,

一文搞懂蓝绿发布、灰度发布和滚动发布

应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务.长期以来,业务升级渐渐形成了几个发布策略:蓝绿发布.灰度发布和滚动发布,目的是尽可能避免因发布导致的流量丢失或服务不可用问题. 7.1 蓝绿发布 项目逻辑上分为AB组,在项目系统时,首先把A组从负载均衡中摘除,进行新版本的部署.B组仍然继续提供服务.当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署.A组重新提供服务.最后,B组也升级完成,负载均衡重新接入B组,

一文了解蓝绿发布/灰度发布/滚动发布

应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务. 长期以来,业务升级渐渐形成了几个发布策略:蓝绿发布.灰度发布和滚动发布,目的是尽可能避免因发布导致的流量丢失或服务不可用问题. 一. 蓝绿发布 项目逻辑上分为AB组,在项目系统时,首先把A组从负载均衡中摘除,进行新版本的部署.B组仍然继续提供服务. 当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署.A组重新提供服务. 最后,B组也升级完成,负载均衡重新接入B