处理更新
学习目标
实施根据您的特定用例定制的最佳零停机时间部署策略。
简介
您的软件公司致力于为客户提供最新的功能和改进,而不会中断他们的体验。不可选择意外停机。在本课中,您将了解如何利用零停机时间部署 (ZDD) 实践确保您的应用程序保持高度可用并体验无缝更新。
动机
在当今快节奏的数字环境中,您的客户需要持续访问您的应用程序,而不管更新、升级或不可预见的问题。无论是否计划停机,都会造成重大财务损失、品牌声誉受损以及有价值的客户损失。为了保持竞争力并在不中断业务的情况下交付创新解决方案,最大限度地减少停机时间至关重要。零停机时间部署 (ZDD) 策略对于降低这些风险和确保无缝用户体验至关重要。
零停机时间部署策略
cf push/cf deploy
以下是用于在 Cloud Foundry 环境中部署大多数应用程序的主要命令:
cf push :将代码和相关性上传到 Cloud Foundry,然后识别必要的 buildpack、编译代码并创建 droplet(包含应用程序的包)。
cf push my-appcf deploy :用于更复杂的部署,仅与 mbt MTA 构建工具 (MBT) 构建命令一起使用,以处理多目标应用程序 (MTA)。它不适用于 cf push 命令中使用的清单。
mbt build
cf deploy mta_archive.mtar
优势:轻松高效地快速部署小型应用程序。
缺点:虽然 cf push 和 cf deploy 都适用于简单部署,但 cf push 特别缺乏内置的零停机时间功能,使其不适合需要持续可用性的生产环境。
滚动式应用部署
在滚动部署中,旧版本的实例将逐渐替换为新版本的实例。这可确保应用程序的某些版本始终处于活动状态。
cf push APP-NAME --strategy rolling
优势 :停机时间最短。在出现问题时回滚的功能。
缺点 :作为版本切换的延迟潜力。由于有状态的应用程序和数据库模式更改,回滚可能非常耗时。
蓝绿部署
蓝绿部署是一种强大的技术,可最大限度地减少停机时间并降低应用程序更新期间的风险。在本部分中,您将了解使用 Cloud Foundry 实施多目标应用程序的蓝绿部署策略的基本内容。该流程非常简单。以下是简化的概览:

蓝色环境 :这是您当前的实时生产环境。它已启动并正在运行,为您的所有用户流量提供服务。
cf deploy <your-mta-archive-v1> --strategy blue-green此命令启动全新应用程序的蓝绿部署,从之前未部署的 MTA 开始。它会触发 appname-idle 应用程序,使其可在特定 URL 上访问。确认这些应用名称空闲实例运行顺利后, 命令会将其从 appname-idle 重命名为 appname,从而完成部署流程并使新版本变为实时版本。绿色环境 :这是部署新版本应用程序的空闲环境。它与蓝色环境相同,但尚未为任何流量提供服务。
cf deploy <your-mta-archive-v2> --strategy blue-green此命令通过将当前应用程序重命名为"实时"版本并启动新的"空闲"版本来启动蓝绿部署。应用的空闲版本随即启动,并在指定的 URL 中访问。然后,部署将进入测试阶段,可以在最终版本之前测试新版本。您可以选择使用特定命令继续或取消部署。如果要绕过测试阶段,只需使用 --skip-testing-phase 选项即可。测试 :在绿色环境中部署新版本后,您可以在不影响实际蓝色环境的情况下对其进行彻底测试。
切换 :当您确信新版本运行完美时,您可以切换路由器,以便所有传入请求现在都转到绿色环境。"那你就知道了! 绿色环境成为新的实时环境。执行上一 cf deploy 命令时还会输出具有正确操作标识的以下命令。
cf deploy -i <operation ID> -a resume此命令执行以下操作:将生产路由映射到"web-idle"和"backend-idle"。
删除"web-idle"和"backend-idle"的临时路由。
使用生产路由配置重新启动"web-idle"和"backend-idle"。
将"Web 空闲"和"后端空闲"重命名为"Web"和"后端"。
删除先前生产性的 'web-live' 和 'backend-live' 应用程序。

优点 :"--strategy blue-green"命令通过自动化整个流程(包括测试和清理)来简化蓝绿部署,从而减少手动步骤和错误。它可以提高资源效率并提供简单的回滚机制,确保以最少的停机时间简化且可靠的部署体验。
缺点 :切换期间处理用户会话和数据一致性可能具有挑战性,尤其是在有状态的应用程序中,由于环境重复,资源消耗增加。
Canary 部署
Canary 部署是一种部署策略,涉及在生产环境中逐步将新版本的应用程序推广到小部分用户或服务器,方法是最初将一小部分流量定向到更新版本,同时将大部分流量保留在稳定版本上。

优势 :在全面推广之前进行真实的测试和验证,更轻松地识别生产中的问题,并在必要时快速恢复到稳定版本。
缺点 :对于有状态的应用程序和数据库模式更改,回滚可能很复杂,因此需要仔细计划以确保转发兼容性和有效的可观察性。
使用 命令部署新版本的应用。 cf push <app_name> --strategy canary
现在,使用新版本更新了一个应用实例。流量也会路由到此应用实例,但流量也会路由到旧版本的应用实例。您可以使用 HTTP 标头字段路由到 cannary 部署的应用实例: "X-Cf-Process-Instance":"<PROCESS_GUID>:
" 测试后,您可以使用 命令将使用旧版本的应用实例更新到新版本。 cf continue-deployment <app_name>
利用 Redis 进行 Approuter 中的用户会话管理
当活动应用程序替换为空闲应用程序时,内存数据将丢失,从而导致清除用户会话数据。为避免这种情况,Approuter 使用 Redis 启用外部会话管理。这允许在原始 Approuter 实例崩溃时恢复会话,从而确保持续的用户会话管理。
有关更详细的配置步骤,请参阅官方 SAP Approuter 文档
选择正确的 ZDD 策略
理想的 ZDD 策略取决于以下几个因素:
**应用程序关键性:**任务关键型应用程序需要最少的中断,通常偏爱蓝绿部署。非关键应用程序可以容忍更大的灵活性,从而通过滚动或 canary 部署实现更快的更新。
**资源约束:**资源有限可能会降低资源密集型蓝绿部署的可行性。在这种情况下,滚动部署或运河部署通常更具成本效益。
**风险承受度:**风险规避组织通过蓝绿部署确定安全优先级。对一些风险开放的企业可以利用 canary 部署进行实际测试和早期问题检测。
**部署复杂性:**使用 cf push 或 cf 部署的简单部署可能很快,但会导致临时停机。在更广泛的 ZDD 策略的上下文中考虑这些命令。
摘要
零停机时间部署 (ZDD) 是现代软件开发、最大限度地减少用户中断并确保持续访问应用程序的关键实践。在本课中,您已了解各种 ZDD 策略,包括滚动更新、蓝绿部署、canary 部署以及使用 Redis 数据库的用户会话管理。通过了解这些策略并考虑应用程序复杂性、风险承受能力和资源等因素,您可以选择并实施最有效的 ZDD 策略以满足您的特定需求。
进一步阅读
SAP 帮助 – 蓝绿部署策略
Cloud Foundry 文档 - 蓝绿
Cloud Foundry 文档 - Rolling-deploy
GitHub SAP 示例 – 蓝绿部署策略
SAP Approuter - 会话处理