蓝绿部署、金丝雀发布(灰度发布)、AB测试

简介: 随着微服务架构的普及,线上服务越来越多,随之而来的就是部署越来越频繁;随着互联网行业的兴旺,产品迭代的频率也是越来越快,服务上线速度逐步提升。有上线、有部署,就有风险。有风险,就对业务有影响,然后就有了一系列减少这种风险的部署方案:蓝绿部署、金丝雀发布(灰度发布),也有适应产品迭代频率的AB测试。

随着微服务架构的普及,线上服务越来越多,随之而来的就是部署越来越频繁;随着互联网行业的兴旺,产品迭代的频率也是越来越快,服务上线速度逐步提升。有上线、有部署,就有风险。有风险,就对业务有影响,然后就有了一系列减少这种风险的部署方案:蓝绿部署、金丝雀发布(灰度发布),也有适应产品迭代频率的AB测试。


本文主要是简单解释下这几个概念,帮助自己理解,如果有错误,请大佬们斧正。


蓝绿部署

蓝绿色部署是一种通过运行两个相同的称为 BLUE 和 GREEN 的生产环境来减少停机时间和降低风险的技术。


蓝绿部署,以颜色命名,简单的理解就是,线上有两套集群环境,在架构图中,一套标记成蓝色,称为蓝色集群BLUE;一套标记为绿色,称为绿色集群GREEN。通过将流量引入两个集群,完成系统升级切换。

image.png



步骤一:部署绿色集群,这个时候是初始状态,蓝色集群承担全部责任,接收全部流量,等待被替换。绿色集群刚刚部署,还没有投入使用,流量为0,等待验证和上线。


步骤二:蓝色集群流量不变,向绿色集群引入流量。这个过程可以分成几个阶段完成。第一个阶段,引入少量非实时流量,仅用于数据测试;第二个阶段,引入全部实时流量,用于做系统验证。


步骤三:切断向蓝色集群引入流量,将全部流量引入绿色集群。这个时候,绿色集群已经承担全部责任,接收全部流量。这个过程也可以分阶段操作。第一个阶段,平衡蓝色和绿色集群流量,也就是蓝色和绿色集群一同承担职责;第二个阶段,切断蓝色集群流量,流量全部写入绿色集群。是否采用分阶段操作,完全看升级的功能是否是破坏性的,是否可兼容。


步骤四:监控系统运行,这个过程是必要的。因为没有人能够保证测试时100%的覆盖的,所以新集群可能会出现这样那样、或大或小的问题,如果评估需要回滚,就需要将全部流量切换到蓝色集群。也完成了版本回滚。


金丝雀发布(灰度发布)

金丝雀发布,与蓝绿部署不同的是,它不是非黑即白的部署方式,所以又称为灰度发布。它能够缓慢的将修改推广到一小部分用户,验证没有问题后,再推广到全部用户,以降低生产环境引入新功能带来的风险。


image.png


步骤一:将流量从待部署节点移出,更新该节点服务到待发布状态,将该节点称为金丝雀节点;


步骤二:根据不同策略,将流量引入金丝雀节点。策略可以根据情况指定,比如随机样本策略(随机引入)、狗粮策略(就是内部用户或员工先尝鲜)、分区策略(不同区域用户使用不同版本)、用户特征策略(这种比较复杂,需要根据用户个人资料和特征进行分流,类似于千人千面);


步骤三:金丝雀节点验证通过后,选取更多的节点称为金丝雀节点,重复步骤一和步骤二,直到所有节点全部更新


AB测试

AB测试和上面两种发布方式不是一个范围的概念,它是为了进行效果验证的手段,其他两种是为了实现线上平稳发布的手段,这里把他们放在一起说,是因为这三个概念很容易弄混。


AB测试是线上同时运行多个不同版本的服务,这些服务更多的是用户侧的体验不同,比如页面布局、按钮颜色,交互方式等,通常底层业务逻辑还是一样的,也就是通常说的换汤不换药。

image.png



这个没有具体的步骤(也可以采用金丝雀部署的步骤,只不过不是全量更新),根据策略(这个策略可以是金丝雀分布中的策略一致),将一部分流量引入A版本,另外一部分流量引入B版本,也可能出现CDEF版本。然后相关人员通过分析不同版本的实际效果,选出最优解。最优解可能是一个版本获胜,取代另一个版本,也可能是催生出更多的版本,服务于用户,还有可能是多个版本在不同区域同时提供服务。


最后

这里总结一下:


image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

image.png

参考:

Using Blue-Green Deployment to Reduce Downtime and Risk

Blue Green Deployment

Blue-green Deployments, A/B Testing, and Canary Releases

Canary Release


目录
相关文章
|
jenkins 测试技术 应用服务中间件
【专业测试技能】全流程掌握:部署测试环境的策略与实践
本文分享了关于部署测试环境的策略与实践。文章讨论了部署测试环境的全过程,包括服务如MySQL、Redis、Zookeeper等的部署,以及解决服务间的依赖和兼容问题。文中还介绍了使用Jenkins、Docker等工具进行部署的方法,并通过实战案例讲解了如何创建和管理Jenkins Job、配置代理服务器Nginx、进行前后端服务的访问和优化。最后,作者强调了提问的重要性,并鼓励大家通过互联网解决遇到的问题。
673 2
【专业测试技能】全流程掌握:部署测试环境的策略与实践
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
26714 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
机器学习/深度学习 自然语言处理 API
阿里云零门槛、轻松部署您的专属 DeepSeek模型体验测试
DeepSeek R1是基于Transformer架构的先进大规模深度学习模型,2025年1月20日发布并开源,遵循MIT License。它在自然语言处理等任务上表现出色,高效提取特征,缩短训练时间。阿里云推出的满血版方案解决了服务器压力问题,提供100万免费token,云端部署降低成本,用户可快速启动体验。虽然回答速度有待提升,但整体表现优异,备受关注。
549 8
|
Java 测试技术 应用服务中间件
Spring Boot 如何测试打包部署
本文介绍了 Spring Boot 项目的开发、调试、打包及投产上线的全流程。主要内容包括: 1. **单元测试**:通过添加 `spring-boot-starter-test` 包,使用 `@RunWith(SpringRunner.class)` 和 `@SpringBootTest` 注解进行测试类开发。 2. **集成测试**:支持热部署,通过添加 `spring-boot-devtools` 实现代码修改后自动重启。 3. **投产上线**:提供两种部署方案,一是打包成 jar 包直接运行,二是打包成 war 包部署到 Tomcat 服务器。
485 10
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
4112 1
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
敏捷开发 Devops 测试技术
自动化测试中的持续集成与持续部署
在现代软件开发实践中,自动化测试是确保软件质量和快速迭代的关键。本文将探讨自动化测试如何与持续集成(CI)和持续部署(CD)流程相结合,以提高开发效率和软件质量。我们将分析CI/CD管道中自动化测试的最佳实践,以及如何克服实施过程中的挑战。
340 6
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
636 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
缓存 自然语言处理 并行计算
基于NVIDIA A30 加速卡推理部署通义千问-72B-Chat测试过程
本文介绍了基于阿里云通义千问72B大模型(Qwen-72B-Chat)的性能基准测试,包括测试环境准备、模型部署、API测试等内容。测试环境配置为32核128G内存的ECS云主机,配备8块NVIDIA A30 GPU加速卡。软件环境包括Ubuntu 22.04、CUDA 12.4.0、PyTorch 2.4.0等。详细介绍了模型下载、部署命令及常见问题解决方法,并展示了API测试结果和性能分析。
6727 1
|
Web App开发 编解码 Linux
使用Selenium自动化测试解决报告生成失败问题及Linux部署指南
这篇文章介绍了使用Selenium自动化测试解决报告生成失败问题的方法,包括Linux环境下的部署指南和代码实现。
387 1
使用Selenium自动化测试解决报告生成失败问题及Linux部署指南