--- title: "Zero-Downtime Deployment" type: concept tags: [DevOps, Deployment, Reliability] sources: [engineering-devops-automator] last_updated: 2026-05-01 --- # Zero-Downtime Deployment ## 定义 零停机部署是一组软件部署策略,旨在更新应用程序时保持服务持续可用,避免部署过程中用户请求失败或服务中断。 ## 主要策略 ### 蓝绿部署(Blue-Green Deployment) - **原理**:维护两套完全相同的环境(蓝和绿),新旧版本各占一套 - **切换**:通过负载均衡器将流量一次性从旧环境切换到新环境 - **回滚**:切换回旧环境即可实现秒级回滚 - **优点**:简单、切换快速、回滚容易 - **缺点**:资源成本翻倍 ### 金丝雀发布(Canary Deployment) - **原理**:先将新版本部署到小部分服务器/用户,逐步扩大范围 - **切换**:基于流量比例(如 5% → 20% → 100%) - **监控**:每个阶段监控指标,异常则暂停/回滚 - **优点**:风险可控、可进行 A/B 测试 - **缺点**:实现复杂度较高 ### 滚动更新(Rolling Update) - **原理**:逐步替换实例,每次替换一个或一组 - **配置**:Kubernetes Deployment 默认策略 - **优点**:资源利用率高,无需额外环境 - **缺点**:新旧版本共存时间长,回滚相对慢 ### 特性开关(Feature Flag) - **原理**:通过配置开关控制功能启用/禁用 - **部署**:代码部署与功能启用分离 - **优点**:秒级回滚、无需重新部署 - **缺点**:代码复杂度增加 ## 在 DevOps Automator 中的应用 DevOps Automator 的标准部署流程: 1. 部署到 green 环境 2. 健康检查 3. 切换流量 4. 监控关键指标 5. 异常自动回滚 ```yaml kubectl set image deployment/app app=registry/app:${{ github.sha }} kubectl rollout status deployment/app kubectl patch svc app -p '{"spec":{"selector":{"version":"green"}}}' ``` ## 相关概念 - [[CI/CD Pipeline]]:零停机部署是 CI/CD 流水线的最终目标 - [[Kubernetes]]:K8s 原生支持 Rolling Update 和 Canary Deployment - [[Blue-Green Deployment]]:最常用的零停机部署策略 ## 关键考虑因素 - **健康检查**:必须配置主动和被动健康检查 - **数据库迁移**:需要向后兼容的 Schema 变更 - **会话管理**:确保用户会话在版本间保持有效 - **缓存策略**:避免旧缓存导致行为不一致 ## 成功指标 - 部署期间请求失败率:0% - 部署期间延迟增长:< 5% - 回滚时间:< 1 分钟 ## Aliases - Zero Downtime Deployment - 无停机部署 - 滚动更新 - Rolling Deployment - 金丝雀发布 - Canary Release - 蓝绿部署 - Blue-Green Deployment