Skip to content

灰度发布、滚动发布、蓝绿部署和两种测试方法

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

发布方法

灰度发布

定义

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

操作描述

02a83eaffbc05fd47bfe3767a5cf56f2.png

  • 当前版本为V1,替换服务器集群中的一小部分(比如1台)为新版本V2。
  • 如果正常运行,则把剩余V1版本全部升级为V2;如果运行失败,所有服务器回退到V1。

特点分析

  1. 流量趋势图

绿色为旧流量,黄色为新流量。 0d092c9b651210d2ed29e580f0368495.jpeg

  1. 优点

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

  1. 缺点

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

滚动发布

定义

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

操作描述

dee25f62fda6d4e4fc96ef5036a029e0.png

  • 先发布小比例新版本,类似金丝雀。
  • 如果验证成功,按照一定比例替换新版本,直到所有版本都升级为新版本,例如1台,10%,50%,100%。
  • 一旦失败,将所有新版本应用替换回旧版本应用。

特点分析

  1. 流量趋势图

绿色为旧流量,黄色为新流量。 55728bc26f50af840076c632ed852611.jpeg

  1. 优点

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

  1. 缺点
  • 发布和回退时间缓慢。
  • 发布工具复杂,NLB需要平滑的流量摘除和拉入能力。

蓝绿部署

定义

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

操作描述

37f272728dfca53f4c7da30ed765f89e.png

  • 准备两个相同的应用运行环境,命名为蓝色环境、绿色环境,刚开始,蓝色环境和绿色环境都运行着相同的应用版本V1,只有蓝色环境对外提供服务。
  • 我们开发了一个新版本V2,那么放到绿色环境上进行反复的测试、修改、验证,确定达到上线标准后,利用负载均衡器/反向代理/路由等手段将对外服务切换为绿色环境。
  • 一段时间后,如果发生故障,那么迅速切换回蓝色环境V1;如果运行没有异常,那么蓝色环境更新版本到V2,版本再次一致。
  • 当需要开发下一个版本V3,重复前面的步骤,蓝色绿色相互切换相互备份。

特点分析

  1. 流量趋势图

绿色为旧流量,黄色为新流量。 2d26398372c28f3c382001facd83d944.jpeg

  1. 特点
  • 蓝色绿色环境相同,但硬件可以不同,例如蓝色和绿色环境分别是两台独立的机器。
  • 蓝色绿色环境都会在上线版本、旧版本(用于回滚)和新版本(用于上线前测试)之间循环。
  • 如何保证数据库的事务在切换、回退过程中不受影响是很重要的事情,一般来说可以在切换过程中设置为“只读”,或者设计回馈机制,将事务同时反馈到两个环境。
  1. 优点
  • 不停机更新
  • 遇到问题能及时回退到正确版本
  1. 缺点
  • 需要的硬件成本和软件服务倍增了
  • 数据库同步非常困难
  • 如果需要同时处理“微服务架构应用”和“传统架构应用”,当协调不好的时候还是可能出现服务停止的。
  • 在非隔离基础架构(VM、Docker)上执行蓝绿部署,蓝绿色环境都有被摧毁的可能。

双服务器发布

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

测试方法

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

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

A/B测试

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

影子测试

6949faf17064b139c4acac5132c93fea.png

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

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

总结

部署方式零停机生产流量测试机器成本回退速度对用户的影响复杂度
灰度发布‌✔️一般
滚动发布‌✔️‌✔️
双服务器组——蓝绿‌✔️✖︎一般一般
双服务器组——灰度‌✔️‌✔️一般
双服务器组——滚动‌✔️‌✔️一般

参考资料

转载请注明出处https://bananaoven.com/articles/231.html | 香蕉微波炉
分享许可方式知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
重大发现:转载注明原文网址的同学刚买了彩票就中奖,刚写完代码就跑通,刚转身就遇到了真爱。