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

过去的10年里,不少大公司都在使用蓝绿部署,安全、可靠是这种部署方式的特色。蓝绿部署虽然算不上”Sliver Bullet“,但确实很实用。在有关于“微服务”、“DevOps”、“Cloud-native”的讨论中,蓝绿部署、A/B测试、灰度发布,这三种部署方式每每同时出镜。html

那么问题来了,蓝绿部署、A/B测试、灰度发布,这三者之间究竟有何不一样?前端

蓝绿部署

Martin Flower曾在文章中阐述了蓝绿部署的总体要点,建议你们看看。docker

基本上,蓝绿部署是一种以可预测的方式发布应用的技术,目的是减小发布过程当中服务中止的时间。数据库

简单来讲,你须要准备两个相同的环境(基础架构),在蓝色环境运行当前生产环境中的应用,也就是旧版本应用,如图中App1 version一、App2 version一、App3 version3。后端

当你想要升级App2到version2,在蓝色环境中进行操做,即部署新版本应用,并进行测试。若是测试没问题,就能够把负载均衡器/反向代理/路由指向蓝色环境了。安全

随后你须要监测新版本应用,也就是App2 version2是否有故障和异常。若是运行良好,就能够删除App2 version1使用的资源。若是运行出现了问题,你能够经过负载均衡器指向快速回滚到绿色环境。服务器

理论上听起来很棒,但仍是要注意一些细节:架构

  • 当你切换到蓝色环境时,须要稳当处理未完成的业务和新的业务。若是你的数据库后端没法处理,会是一个比较麻烦的问题;负载均衡

  • 有可能会出现须要同时处理“微服务架构应用”和“传统架构应用”的状况,若是在蓝绿部署中协调很差这二者,仍是有可能致使服务中止的;微服务

  • 须要提早考虑数据库与应用部署同步迁移/回滚的问题;

  • 蓝绿部署须要有基础设施支持

  • 在非隔离基础架构(VM、Docker等)上执行蓝绿部署,蓝色环境和绿色环境有被摧毁的风险

A/B Testing

A/B测试跟蓝绿部署彻底是两码事。

A/B测试是用来测试应用功能表现的方法,例如可用性、受欢迎程度、可见性等等。A/B测试一般用在应用的前端上,不过固然须要后端来支持。

A/B测试与蓝绿部署的区别在于,A/B测试目的在于经过科学的实验设计、采样样本表明性、流量分割与小流量测试等方式来得到具备表明性的实验结论,并确信该结论在推广到所有流量可信;蓝绿部署的目的是安全稳定地发布新版本应用,并在必要时回滚。

A/B测试和蓝绿部署能够同时使用。

灰度发布/金丝雀发布

灰度发布是在原有版本可用的状况下,同时部署一个新版本应用做为“金丝雀”(金丝雀对瓦斯极敏感,矿井工人携带金丝雀,以便及时发发现危险),测试新版本的性能和表现,以保障总体系统稳定的状况下,尽早发现、调整问题。

灰度发布/金丝雀发布由如下几个步骤组成:

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

  • 从负载均衡列表中移除掉“金丝雀”服务器。

  • 升级“金丝雀”应用(排掉原有流量并进行部署)。

  • 对应用进行自动化测试。

  • 将“金丝雀”服务器从新添加到负载均衡列表中(连通性和健康检查)。

  • 若是“金丝雀”在线使用测试成功,升级剩余的其余服务器。(不然就回滚)

总结

对于云计算来讲,以上三种策略都是可用的。不难想象,经过docker和kubernetes,咱们能够很简单的实现蓝绿部署、A/B测试、灰度发布……好比好雨云,深度整合Docker和Kubernetes,提供给用户包括代码滚动上线、一键代码回滚等功能和特性在内的强大的CI/CD体验:)

Author Christian PostaTrans by 好雨科技

相关文章
相关标签/搜索