敏捷/持续集成/持续交付/DevOps基本理论全面解析(下)

简介: 敏捷/持续集成/持续交付/DevOps基本理论全面解析(下)

3.5 测试部署效果

蓝绿部署(Blue-Green Deployment)

一种应用发布模式,可将用户流量从先前版本的应用或微服务逐渐转移到几乎相同的新版本中(两者均保持在生产环境中运行)。

该种部署软件的方法中,维护两个相同的主机环境

蓝色

旧版本的生产环境

绿色

新版本的预发布环境

一旦生产流量从蓝色完全转移到绿色,蓝色就可在回滚或退出生产的情况下保持待机,也可更新成为下次更新的模板。


自动化部署面临的挑战之一是转换本身,将软件从测试的最后阶段转移到实际生产中。通常,您需要快速执行此操作,以最大程度减少停机时间。蓝绿部署方法通过确保拥有两个尽可能相同的生产环境来做到这一点。

在任何时候,其中一个(例如蓝色)都处于活动状态。准备新版本的软件时,在绿色环境中进行最后的测试阶段。一旦软件在绿色环境中运行,就可以切换路由器,以便所有传入请求都进入绿色环境-蓝色的请求现在处于空闲状态。


蓝绿部署还提供了快速回滚的方法-如果出现任何问题,将路由切换回蓝色环境。

在绿色环境处于活动状态时,仍然存在处理丢失的事务的问题,你可能能够以在绿色环境处于活动状态时将蓝色环境作为备份的方式向这两个环境提供交易。或者,您可以在切换前将应用程序置于只读模式,以只读模式运行一段时间,然后将其切换为读写模式。这可能足以清除许多未解决的问题。

两种环境必须不同,但要尽可能相同。在某些情况下,它们可以是不同的硬件,也可以是在相同(或不同)硬件上运行的不同虚拟机。它们也可以是一个单独的操作环境,分为两个区域,两个区域具有单独的IP地址。

将绿色环境投入使用并对它的稳定性感到满意之后,就可以将蓝色环境用作过渡环境,以进行下一个部署的最后测试步骤。准备好发布下一个版本时,你从绿色切换为蓝色的方式与之前从蓝色切换为绿色的方式相同。这样,绿色和蓝色环境便会定期在实时上一个版本(用于回滚)和下一个新版本之间进行循环。

这种方法的一个优点是,它与获得热备份工作所需的基本机制相同。因此,这使您可以在每个版本上测试灾难恢复过程。 (我希望你发布的时间比灾难多得多。)基本思想是要在两个易于切换的环境之间进行切换,有很多方法可以更改细节。一个项目通过跳动Web服务器而不是在路由器上工作来进行切换。另一种变化是使用相同的数据库,从而为Web和域层设置了蓝绿色的开关。使用这种技术,数据库通常可能是一个挑战,尤其是当您需要更改架构以支持软件的新版本时。技巧是将架构更改的部署与应用程序升级分开。因此,首先应用数据库重构来更改架构以支持应用程序的新旧版本,进行部署,检查一切是否正常,以便您有一个回滚点,然后部署该应用程序的新版本。 (并且在升级失败后,删除对旧版本的数据库支持。)


该技术已经存在了很长时间了,但是Martin Fowler并不认为它应该经常使用。 Daniel Terhorst-North和Jez Humble的一些模糊组合提出了这个名称。


这种持续部署模式原本存在不足之处。并非所有环境都具有相同的正常运行时间要求或正确执行 CI/CD 流程(如蓝绿部署)所需的资源。但是,随着企业加大对数字化转型的支持,许多应用开始支持这种。

模型图

在这些实例的前面是调度系统,它们充当产品或应用程序的客户“网关”。通过将调度系统指向蓝色或绿色实例,可以将客户流量引流到期望的部署环境。通过这种方式,切换指向哪个部署实例(蓝色或绿色)对用户来说是快速简单而透明的。

image.png

金丝雀部署(灰度发布)

一部分客户流量被重新引流到新的版本部署中。例如,新版本的搜索服务可与当前服务的生产版本一起部署。

然后,可将10%的搜索查询引流到新版本,以在生产环境中对其进行测试。

如果服务那些流量的新版本没问题,那么可能会有更多流量会被逐渐引流过去。如果仍然没有问题出现,那么随时间推移,可对新版本增量部署,直到100%的流量都调度到新版本。

模型图

image.png

暗发布(DarkLaunching)

也叫功能开关,指软件特性在正式发布之前,先将其第一个版本部署到生产环境。通过应用“开关”技术,使用户在无感的情况下应用新特性的功能,软件提供商通过收集用户的实际操作记录来获得针对这个新特性的反馈数据。

当然,发布新特性,使用户无感还是比较难做到的。新特性所针对软件的改变通常不体现在用户经常使用的界面按钮的调整,更多的是后台交易逻辑或算法层面的调整。


对于可能需要轻松关掉的新功能(若发现有问题),开发人员可添加功能开关(feature toggles)。这是代码中的if-then软件功能开关,仅在设置数据值时才激活新代码。


此数据值可以是全可访问的位置,部署的应用程序将检查该位置是否应执行新代码。如果设置了数据值,则执行代码;如果没有,则不执行。

这为开发人员提供了一个远程“终止开关”,以便在部署到生产环境后发现问题时关闭新功能。

image.png

案例

某互联网公司重新开发了一个在线新闻推荐算法,希望能够为其用户推荐更多和更好的新闻内容。但是,由于此算法相对于以前算法的复杂度较高,提供算法的公司需要搜集该算法的执行效果。基于这种需求,我们就可以应用暗部署的方法。我们可以为这个算法配置一个开关,并将其部署到生产环境中。当针对这个算法的开关打开时,用户的访问流浪就会触发这个新算法的执行。通常用户并不知道其此次访问所调用的算法的新旧。如果这个算法在大规模用户并发情况下的性能不好,我们就可以马上关闭这个算法所对应的开关,让用户使用原来的算法。


参考

https://www.mindtheproduct.com/what-the-hell-are-ci-cd-and-devops-a-cheatsheet-for-the-rest-of-us/

https://tech.youzan.com/gray-deloyments-and-blue-green-deployments-practices-in-youzan/

http://stormluke.me/deploy-not-equal-release-part-one/

https://martinfowler.com/bliki/BlueGreenDeployment.html

目录
相关文章
|
4月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
408 3
|
11月前
|
人工智能 Kubernetes jenkins
容器化AI模型的持续集成与持续交付(CI/CD):自动化模型更新与部署
在前几篇文章中,我们探讨了容器化AI模型的部署、监控、弹性伸缩及安全防护。为加速模型迭代以适应新数据和业务需求,需实现容器化AI模型的持续集成与持续交付(CI/CD)。CI/CD通过自动化构建、测试和部署流程,提高模型更新速度和质量,降低部署风险,增强团队协作。使用Jenkins和Kubernetes可构建高效CI/CD流水线,自动化模型开发和部署,确保环境一致性并提升整体效率。
|
6月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
715 3
|
6月前
|
敏捷开发 运维 数据可视化
提升协作效率的秘密武器:2025年DevOps任务可视化工具全解析
开发、测试、运维团队协作常因流程不透明导致效率低下,DevOps任务可视化工具成为解决这一痛点的关键方案。这类工具通过图形化呈现任务流程、状态追踪和CI/CD监控,实现跨团队协作透明化。核心功能包括看板管理、流水线可视化、自动告警等,能显著降低沟通成本,提升交付效率。市场主流工具如Jenkins、GitLab、板栗看板等各有优势,企业需根据规模、集成需求选择合适方案。随着AI和ChatOps发展,未来可视化工具将更智能化,助力企业构建高效DevOps闭环。
253 1
|
6月前
|
缓存 安全 API
【深度解析】嵌入式第三方集成的优势、挑战与实现方案(2025版)
嵌入式第三方集成是将外部服务无缝嵌入自身系统的技术方案,通过API/SDK实现功能内嵌(如支付、会议),提升用户体验和开发效率。其核心优势包括操作流畅性、降低研发成本及快速迭代能力,但需解决接口稳定性、数据同步等挑战。实施时需注重架构设计(微服务、安全策略)和性能优化(缓存、异步处理)。未来趋势将向AI服务集成、无代码平台发展,同时安全合规要求更严格。建议选择可靠服务商、遵循最佳实践,并持续监控优化集成方案。
363 2
|
7月前
|
机器学习/深度学习 算法 前端开发
集成电路设计:从概念到实现的完整解析优雅草卓伊凡
集成电路设计:从概念到实现的完整解析优雅草卓伊凡
324 2
集成电路设计:从概念到实现的完整解析优雅草卓伊凡
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
3231 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
7月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
1537 0
|
7月前
|
Cloud Native Java Devops
Java 学习路线之环境搭建微服务项目实战及 DevOps 流程实操内容解析
这是一份结合最新技术的Java学习路线,涵盖环境搭建、微服务项目实战及DevOps流程。内容包括2025年版开发环境配置(如SDKMAN管理JDK、)、Gradle构建工具使用、微服务图书管理系统实战(Spring Boot 3.3 + Spring Cloud 2025.0)、云原生部署)、AI融合实践(OpenAI集成)以及性能优化与监控(JFR/Micrometer/Sleuth)。通过每日实践、代码审查和技术分享,帮助你掌握现代企业级开发技能,实现云原生应用的独立开发与部署。资源地址:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
549 0
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南

推荐镜像

更多
  • DNS