文章目录

前言

在软件上线之前,不可避免地要对软件的正确性、可靠性进行测试,又最好不要停机维护、不要影响用户体验,并且在新版本出现问题的时候能够及时回退。所以,需要有一套完整的部署方案,灰度发布、滚动发布、蓝绿部署都是常见的手段,而A/B测试则是对用户体验进行调查的测试手段,这里一并学习。

一、灰度发布

定义

灰度发布又叫做金丝雀发布,以前矿工下矿洞前,会放一只金丝雀去试探是否有瓦斯(金丝雀对瓦斯很敏感),映射到这里就是先发布一小部分来试探整体是否能够正常运行,如果能正常运行则进行完全部署的发布方式,目前仍然是不少成长型技术组织的主流发布方式。

操作描述

(1)当前版本为V1,替换服务器集群中的一小部分(比如1台)为新版本V2。

(2)如果正常运行,则把剩余V1版本全部升级为V2;如果运行失败,所有服务器回退到V1。

特点分析

(1)流量趋势图

绿色为旧流量,黄色为新流量。

(2)优点

用户体验影响小,发布过程中出现问题只影响一部分用户。

(3)缺点

自动化程度不够,发布期间可能会引发服务中断。

二、滚动发布

定义

滚动发布(Rolling Update Deployment)是在灰度发布上的改进,先发布一小部分,然后逐步增加新版本的数量,直到服务器都升级为新版本。自动化程度较高,用户体验平滑,是目前成熟型技术组织所采用的主流发布方式。

操作描述

(1)先发布小比例新版本,类似金丝雀。

(2)如果验证成功,按照一定比例替换新版本,直到所有版本都升级为新版本,例如1台,10%,50%,100%。

(3)一旦失败,将所有新版本应用替换回旧版本应用。

特点分析

(1)流量趋势图

绿色为旧流量,黄色为新流量。

(2)优点

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

(3)缺点

发布和回退时间缓慢。

发布工具复杂,NLB需要平滑的流量摘除和拉入能力。

三、蓝绿部署

定义

蓝绿部署(Blue Green Deployment)是一种可以保证系统在不间断提供服务的情况下上线的部署方式,它以可预测的方式发布应用,减少发布过程中服务停止的时间

操作描述

(1)准备两个相同的应用运行环境,命名为蓝色环境、绿色环境,刚开始,蓝色环境和绿色环境都运行着相同的应用版本V1,只有蓝色环境对外提供服务。

(2)我们开发了一个新版本V2,那么放到绿色环境上进行反复的测试、修改、验证,确定达到上线标准后,利用负载均衡器/反向代理/路由等手段将对外服务切换为绿色环境。

(3)一段时间后,如果发生故障,那么迅速切换回蓝色环境V1;如果运行没有异常,那么蓝色环境更新版本到V2,版本再次一致。

(4)当需要开发下一个版本V3,重复前面的步骤,蓝色绿色相互切换相互备份。

特点分析

(1)流量趋势图

绿色为旧流量,黄色为新流量。

(2)特点

蓝色绿色环境相同,但硬件可以不同,例如蓝色和绿色环境分别是两台独立的机器。

蓝色绿色环境都会在上线版本、旧版本(用于回滚)和新版本(用于上线前测试)之间循环。

如何保证数据库的事务在切换、回退过程中不受影响是很重要的事情,一般来说可以在切换过程中设置为“只读”,或者设计回馈机制,将事务同时反馈到两个环境。

(3)优点

不停机更新。

遇到问题能及时回退到正确版本。

(4)缺点

需要的硬件成本和软件服务倍增了。

数据库同步非常困难。

如果需要同时处理“微服务架构应用”和“传统架构应用”,当协调不好的时候还是可能出现服务停止的。

在非隔离基础架构(VM、Docker)上执行蓝绿部署,蓝绿色环境都有被摧毁的可能。

四、双服务器发布

蓝绿发布就是双服务器发布中的蛮力发布法(强行切换),而利用相同的双服务器发布模式可以进行灰度、滚动发布。

五、测试方法

前面的所有都是发布方法,旨在发现bug、隐患。

测试方法则是效果测试,关注的是旧版本和新版本的效果好坏,比如流量转化率、用户体验等等。

A/B测试

A/B测试指的是同时上线V1和V2版本,根据一定条件将流量分别导入V1和V2版本,收集感兴趣的数据,来对比产品功能的效果。

影子测试

影子测试主要用于语言切换,比如从JAVA项目迁移到.NET项目,准备两个完全相同的环境,将流量同时导入两个环境,比对输出的响应,来判断是否逻辑等价。

这种测试可能需要几周,也可能长达半年。

总结

部署方式 零停机 生产流量测试 机器成本 回退速度 对用户的影响 复杂度 
 灰度发布 ? √ 低 慢 一般 低
 滚动发布 √ √ 低 慢 低 低
 双服务器组——蓝绿 √ × 高 快 一般 一般
 双服务器组——灰度 √ √ 高 快 小 一般
 双服务器组——滚动 √ √ 高 快 小 一般

参考资料

1、《蓝绿部署、A/B测试以及灰度发布》

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

3、《微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布》

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



转载请注明出处http://www.bewindoweb.com/231.html | 三颗豆子
分享许可方式知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
重大发现:转载注明原文网址的同学刚买了彩票就中奖,刚写完代码就跑通,刚转身就遇到了真爱。
你可能还会喜欢
具体问题具体杠