第 7 章:应用程序生命周期:考虑不断变化
本文深入探讨云原生应用程序的生命周期管理,涵盖零停机升级、蓝/绿部署、滚动升级、密码轮换等关键模式,并结合实际案例说明如何在动态环境中保持系统稳定性和高可用性。
本章要点
- 零停机升级:蓝/绿升级和滚动升级
- 金丝雀升级
- 密码轮换模式
- 应用程序生命周期和故障排除
- 应用程序健康检查
应用程序生命周期概述
应用程序的生命周期包括部署、启动、运行和关闭等阶段。与传统软件开发生命周期(SDLC)不同,云原生应用关注的是生产环境中应用的运行状态和管理方式。
在云原生环境中,应用程序的生命周期管理尤为重要。下图展示了应用程序在生命周期中经历的基本阶段。

云原生环境下的变化与挑战
云原生应用的两个核心特征——高度分布式和持续变化——使得生命周期管理变得复杂。应用实例需要作为一个整体工作,配置和升级需保证一致性。同时,应用实例会因故障或运维事件频繁重启或迁移,带来级联影响。
运维同理心
作为开发者,理解运维需求至关重要。云原生应用的运维关注点包括:
- 可管理性:自动化管理功能,配置变更需高效可靠。
- 弹性:平台需能安全检测应用故障并自动恢复。
- 响应性:用户体验受应用启动和运行状态影响。
- 成本管理:按需伸缩,优化资源利用。
单实例与多实例应用生命周期
以帖子服务为例,多个实例需保持配置一致。配置变更(如密码泄露后更换)需通过滚动升级或蓝/绿部署实现。
注意:配置变更通常需要重启应用实例,确保所有实例一致性。
配置更新的挑战
直接刷新单个实例配置(如 Spring 的 /refresh
端点)无法保证所有实例同步更新,需通过统一管理工具在负载均衡器后进行控制。
云原生升级模式
蓝/绿升级
蓝/绿部署通过新旧版本实例并行运行,验证新版本后切换流量,保证零停机。资源需求较高,但实现简单。

滚动升级
滚动升级允许新旧版本实例同时运行,逐步替换,资源消耗更低,支持更高的敏捷性和并行部署。

并行部署与敏捷性
并行部署支持灰度发布和多版本共存,提升系统灵活性。版本管理需同时关注可部署构件和配置版本。
协调多个应用程序生命周期
应用程序生命周期事件会影响依赖服务。例如,密码变更需协调客户端和服务端的升级。常用模式是分阶段密码轮换,服务端支持多个密码,客户端逐步切换。

实际案例:密码轮换与生命周期管理
本节以实际操作说明密码轮换流程,涉及配置文件修改、滚动升级、Kubernetes 部署等步骤。具体代码实现可参考如下思路:
- 服务端通过配置文件维护密码列表,启动时加载所有有效密码。
- 客户端仅使用最新密码,升级过程中逐步切换。
- 通过 Kubernetes 滚动升级实现配置同步。
示例代码可参考 Spring Boot 应用中通过监听 ApplicationPreparedEvent 加载配置,并在控制器中校验密码有效性。
处理临时运行时环境
云原生应用频繁销毁和重建实例,要求部署可重现性和故障排查能力。日志应输出到 stdout/stderr,便于平台统一收集。故障排查依赖日志和指标,避免碎片化操作。
应用程序生命周期状态的可见性
应用程序需主动广播生命周期事件,便于依赖服务自动适应变化。健康检查端点和控制循环机制(如 Kubernetes 的 livenessProbe)可持续监控应用状态,实现自动恢复。

无服务器架构(Serverless)简述
无服务器平台按需分配运行环境,极大提升开发和运维效率。每次函数调用都经历完整生命周期,开发者需关注启动成本和执行效率。

总结
- 云原生应用需关注应用程序生命周期管理,确保高可用和零停机升级。
- 升级模式包括蓝/绿部署和滚动升级,后者更具敏捷性和资源效率。
- 密码轮换等配置变更需分阶段协调,保证服务连续性。
- 日志和健康检查端点是故障排查和自动恢复的基础。
- 无服务器架构进一步强化了生命周期管理和资源优化。