一篇文章说尽所有软件发布

高效能组织和低效能组织在软件交付的效率上有数量级上的差异。技术组织的软件交付能力是一种综合能力,涉及众多环节,其中发布是尤为重要的环节。——鲁迅

即使作为非开发工程师,相信很多人也听说过“金丝雀发布”、“滚动发布”和“蓝绿发布”等术语。

老司机想通过一篇文字给各位分享一下常见的几种发布模式,让开发或者非开发人员对软件发布一个更为清晰全面的认识,让大家能够根据自己的所在团队的情况,对发布策略给出正确的实践,必要时候参与讨(si)论(bi)。

1、 金丝雀发布

金丝雀 (Canary) 测试。源于以前矿工下矿洞前,先会放一只金丝雀进去探是否有有毒气体,看金丝雀能否活下来,由此得名。

简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依据。

金丝雀发布,一般先把新版本发布到单集群1台服务器,或者一个小比例,主要做流量验证用。

如果金丝测试通过,则把剩余的原有版本全部升级为新版本。如果金丝雀测试失败,则直接摘除金丝雀的流量,宣布发布失败。

金丝雀发布,简单可控不粗暴!初创型公司比较适合。

2、 一群金丝雀发布

单服务器集群滚动发布,老司机给起个名字叫“一群金丝雀发布”。

单服务器集群滚动发布,在金丝雀发布基础上的进一步优化改进,是一种自动化程度较高的发布方式,用户体验比较平滑,是目前成熟型技术组织所采用的主流发布方式。

前提:滚动发布需要比较复杂的发布工具和智能 LB,支持平滑的版本替换和流量拉入拉出

单服务器集群滚动发布实践起来这样的:

1. 先发 1 台,或者一个小比例,主要做流量验证用,是不是很像金丝雀 (Canary) 测试;

2. 每次发布时,先将老版本流量从LB上摘除,清除老版本,发布新版本,再将LB流量接入新版本;

3. 滚动式发布每次操作一般由若干个批次组成,每批的数量一般是可以预设的(使用发布模板设定)。例如:第一批2%,第二批10%,第三批50%,第四批100%。每批上线之间留观察间隔,通过人工验证或监控反馈确保没有问题,再发下一批次。所以总体上滚动式发布过程是可控的 (其中第一批的时间一般会比之后的批次更长);

4. 回退过程:将新版本流量从LB上摘除,清除新版本,替换上老版本发布,再将LB 流量接入老版本。和发布过程一样,回退过程一般也比较可控的;

滚动发布学名叫 Rolling Update Deployment。

在老司机看来,像是先放一只金丝雀,看看没问题?再放10只金丝雀,还没问题?再放N只… 直到整个矿井充满了金丝雀…

上面说的是单服务器集群的滚动发布,后面会讲多服务器集群的滚动发布。

以上说的都是单服务器集群的发布模式,下面讲讲双组服务器集群的发布模式。

非单集群发布的,都需要LB(Load Balance)进行流量引导和负载均衡调控来实现。

以下提到的LB,仅仅指代Load Balance(负载均衡),不要有其他联想…

3、 蓝绿发布

蓝绿发布,为一次发布分配两组服务器,一组运行现有的老版本,一组运行待上线的新版本,再通过LB切换流量方式完成发布,这就是所谓的双服务器组发布方式,俗称“蓝绿发布”。

蓝绿发布实践起来,简单粗暴!

1. 老版本称为蓝组,新版本称为绿组,发布时通过LB一次性将流量从蓝组直接切换到绿组,不经过金丝雀和滚动发布;

2. 出现问题回退,直接通过LB将流量切回蓝组;

发布初步成功后,蓝组机器一般不直接回收,而是留一个待观察期,视具体情况观察期的时间可长可短,观察期过后确认发布无问题,则可以回收蓝组机器。

蓝绿发布,适合简单粗暴的服务器土豪,毕竟需要准备双倍的服务器/容器资源。

简单粗暴,其实也意味着对用户体会很明显。

蓝绿发布还可以有几个变种,下面逐个给大家介绍一下:

4、 功能开关发布

如果土豪拥有了技术,可以在代码层面上做文章。那么就是另一种发布方式:功能开关发布。

说得通俗一点儿,相当于在功能上做了一个if … else … ,当然实际比这个复杂得多。

5、 红蓝金丝雀发布

配合金丝雀发布,可以让蓝绿发布不那么简单粗暴,能够更精益!

红蓝金丝雀发布,是对蓝绿发布的一种简单优化。发布时先从绿组拉入 1 台金丝雀,待金丝雀验证通过再发全量。对比蓝绿发布,该发布方式的优势是有一个生产流量的金丝雀验证过程,可以减轻新版本可能有问题的风险和影响面。

红蓝金丝雀发布,如果有问题回退很快,直接通过LB将流量切回老版本即可。

完成发布后,一般老版本版本要保留观察以备万一,比如留1~2天,后没有问题则回收老版本服务器、容器资源。

6、 进阶的发布模式--A/B发布

A/B发布,跟A/B测试异曲同工,类似于升级版的功能切换发布。

配合LB,控制流量。移动端的流量进A集群,PC端的流量进B集群。

A/B发布实践起来分两种:

1. 简单配置:

纯基于LB实现A/B试,LB需要能够通过条件做流量路由。例如:通过 client IP,设备类型、浏览器类型、甚至是定制的HTTP Header或查询字符串。

2. 高级定制:

高级的A/B测试需要专门的平台支撑,这类平台可以细粒度到针对某类用户做 A/B 测试。不在本文讨论之列。

功能开关发布和A/B发布看起来类似,但前者一般是无状态和全量的,而A/B发布一般是有状态的,能够跟踪事务和用户级别的状态可以实现针对某类特定用户的。

一句话,功能开关发布是成衣,A/B发布是高定款。

7、 技术大咖才能操作的--影子发布

设想以下场景:

• 核心业务要技术转型,但是服务不能停;

• 关键业务从.NET转型JAVA,服务不能停;

• 现金业务后台DB从Oracle转到MySQL,服务不能停;

……

为了确保万无一失,有一种称为影子测试的大招,采用比较复杂的流量复制、回放和比对技术实现。

影子发布,具体实践有点儿复杂:

目标:实现老的遗留系统服务迁移升级到新的服务;

部署启动前,需要在测试环境部署一份遗留系统服务和新的服务,将生产数据库复制两份到测试环境。

同时需要将生产请求导流出来一份,一般可以通过消息队列收集、导流。导流目标是将生产请求日志,复制回放,分发到测试环境里面的遗留系统服务和新的服务。

测试环境中的两种服务,收到响应后进行比对,如果所有响应比对成功,则可以认为 遗留系统服务和新的服务在功能逻辑上是等价的。

如果有响应比对失败,则认为两者在功能逻辑上不等价,需要修复新的环境,并重新进行影子测试,直到全部比对成功。

根据系统复杂度和关键性不同,比对测试时间短的可能需要几周,长的可达几个月之久。

影子发布最大的优势,因为旁路在独立测试环境中进行,可以对生产流量完全无影响。

能完成影子发布的,必须是研发、测试、运维三路大咖联手才能完成。

8、 终极大招--LB发布

最终极、最无敌、最强力、最有效、最无招胜有招…… LB发布,即:老板发布!

老板说怎么发布,咱们就怎么发布…

同理,还有LB产品管理、LB开发、LB测试…… 都是各个行当的最终杀招!每次操作都是暴击效果!!

基操勿6~

常见的软件发布模式,今天老司机给大家介绍到这里。

作  者:Testfan Arthur

出  处:微信公众号:自动化软件测试平台

版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

原文地址:https://www.cnblogs.com/testfan2019/p/11602453.html

时间: 2024-11-08 21:29:33

一篇文章说尽所有软件发布的相关文章

0 Java实现 一篇文章说尽设计模式之六大原则

我们知道,设计模式很有用,学好设计模式不但能让你写出更简洁,优雅的代码,还能使得代码的结构更清晰,也更有利于扩展 当然设计模式也不是万能的,一成不变的.设计模式只是前人总结出来的一种经验,一种特定问题的解决方法,不能看作是死的东西 不一定非要生搬硬套,非得按照设计模式书上来来,只要我们写的代码符合一定的一些原则,一样可以看作是自己的模式.但是前人 总结出来的东西必须非常值得我们学的.本系列23种设计模式会用最简单的例子,会用最让人明白的语言讲清楚里面的思想即可, 过多的细节不会涉及,本系列所有的

百度百家号“漏洞”大曝光 一篇文章十几万阅读量 收入上万

越来越发现自媒体的好处,就是现在太多的平台都提供入口,基本是四大门户还有三大巨头互联网公司,百度.腾讯 .阿里都提供!那么接下来我要分享的是中国最大的搜索引擎公司-百度!,相信最近很多人都知道百度百家号,并且是百度大力的推广. 我看到之后毫不犹豫的,就是注册一个账号,这个等审核的过程真是酸甜苦辣一样的煎熬,不过还好.终于审核通过!一开始的话!发布很多文章都没有什么阅读量,都没有什么访问量!经过一番死磕研究之后发现,找文章的素材是最关键的地方,素材找的好,那么阅读量就会上来:再说了,我也不是那么好

一篇文章教你读懂Makefile

makefile很重要      什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力.因为,makefil

一篇文章看懂spark 1.3+各版本特性

Spark 1.6.x的新特性Spark-1.6是Spark-2.0之前的最后一个版本.主要是三个大方面的改进:性能提升,新的 Dataset API 和数据科学功能的扩展.这是社区开发非常重要的一个里程碑.1. 性能提升根据 Apache Spark 官方 2015 年 Spark Survey,有 91% 的用户想要提升 Spark 的性能.Parquet 性能自动化内存管理流状态管理速度提升 10X 2. Dataset APISpark 团队引入了 DataFrames,新型Datase

一篇文章让Oracle程序猿学会MySql【未完待续】

一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方面和难度方面都比MySql要高一些,所以精通Oracle的DB在学习MySql的时候,没有必要从头到尾再去搞一遍,只需要掌握两者的用法区别即可.故本篇文章就针对Oracle和MySql的区别来把MySql的知识掌握住,在文章中,实例都是MySql环境下的实例,而Oracle可能知识一句话来概括,所以

看到一篇文章不错哦,互联网史上10大经典商战

一切看似眼花缭乱.万象丛生的东西,无一不是从那个“一”开始. TOP10 百度早期如何打动用户? 案例描述:当年百度的市场份额能获得这么多,真的是搜索技术比谷歌做得好?不是,是因为百度有MP3搜索.民工兄弟们交流的时候肯定不会说:我在用一个搜索引擎,使用了高级的搜索技术.他们会说:有一个网站,上面可以免费听歌,可以免费下歌,你也可以试试.正是这样一个简单的点,打动了越来越多的小白用户,才有了今天的百度. TOP9 QQ如何在免费基础上赚钱? 案例描述:互联网的增值服务模式,外国给它起了个名字,叫

一篇文章 让我对新京报有点失望

写在前面:做新闻的人都知道,写报道还是不要有立场的好,一旦有了,便容易招致非议,尤其是涉及企业的报道. 一家可能很多人都不知道的机票直销平台必去科技的倒闭,究竟会有怎样的影响?新京报新媒体公众号"每日旅游新闻"似乎给了一个答案,但是这个答案,给的奇怪,让人失望.即虽然美团点评投资过必去,但必去的倒闭,对美团点评的发展并没有什么影响,且,通过美团提供的数据和美团高层的多次对外表态,每日旅游新闻的一篇名为"美团点评投资的必去倒了,那美团的机票业务咋样了"得出这样一个结论

一篇文章让你了解DNS

目录 什么是DNS DNS的特点 DNS的工作原理 反向解析 DNS的报文格式 一.什么是DNS DNS--Domain Name System,域名系统. 互联网中计算机之间进行通讯,数据怎么走,走向哪里,这些都需要根据IP地址来指引,再如客户端访问服务器,客户端必须知道服务器的IP地址才能将数据正确地发送过去,这么重要的IP地址当然是必不可少的.我们知道现在的IP地址都是由32位的二进制数组成的,为了便于人们记忆,出现了十进制的表示方法,如192.168.0.1,但是人们对数字的记忆太困难了

软件构造 第二章 第一节 软件生命周期和版本控制

软件构造第二章 第一节 软件生命周期和版本控制 基本内容 Software Development Lifecycle (SDLC) Traditional software process models (waterfall, incremental, V- model, prototyping, spiral) Agile development and eXtreme Programming (XP) Collaborative software development Software