零停机部署 & 金丝雀发布

发布: (2025年12月28日 GMT+8 18:42)
11 分钟阅读
原文: Dev.to

Source: Dev.to

抱歉,我需要您提供要翻译的具体文本内容。请把文章的正文(除代码块和 URL 之外的部分)粘贴在这里,我会按照要求将其翻译成简体中文并保留原有的 Markdown 格式。

零停机部署

零停机部署确保在向服务器发布新重大更改时,服务能够平稳运行且不中断。

  • 定义:将新应用版本部署到生产环境而不产生任何服务中断。用户可以在后台更新的同时正常使用应用。
  • 核心原则:在整个部署过程中保持服务可用性。这是理想的部署场景,因为团队可以在不导致宕机的情况下引入新功能和修复错误。

Source:

蓝‑绿部署

最直接的零停机部署方法之一。尽管名字多彩,概念却很简单。

环境

环境角色
蓝色当前使用现有版本提供实时流量
绿色接收新版本部署并进行测试

部署步骤

  1. 准备 – 蓝色环境提供生产流量。
  2. 部署 – 创建一个相同的绿色环境并部署新版本。
  3. 测试 – 在绿色环境上运行全面的冒烟测试和健全性检查。
  4. 流量切换 – 在对新版本有信心后,将流量从蓝色切换到绿色。
  5. 监控 – 暂时保持两个环境运行,以便在需要时快速回滚。
  6. 清理 – 确认稳定后下线蓝色环境。

切换策略

策略描述
立即切换一次性将所有流量重定向到新环境。速度更快,但若出现问题风险更高。
渐进迁移先将少量流量路由到绿色环境,随后随着信心提升逐步增加。提供更好的风险缓解,并在生产条件下进行真实世界测试。

蓝‑绿检查清单

  • 两个环境均已运行并正确配置
  • 已在新环境完成全面测试
  • 流量路由机制已准备好并经过测试
  • 监控和告警系统已就位
  • 回滚流程已记录并经过测试
  • 数据库迁移兼容两个版本
  • 负载均衡器配置已相应更新以调整流量

Canary Releases

比单纯的蓝绿部署更为精细的部署期间风险管理方法。

类比 – 以煤矿中用于检测有害气体的金丝雀命名,金丝雀发布在全面部署之前,将新软件版本暴露给一小部分受控用户。此策略能够提前发现潜在问题,同时将影响降至最低。

过程阶段

  1. 初始部署 – 将新版本与现有版本一起部署,但不向其路由任何用户流量。
  2. 选择性曝光 – 开始将少量用户路由到新版本。
  3. 监控与分析 – 仔细监控业务指标和运营指标。
  4. 逐步扩展 – 逐步增加接触新版本的用户基数。
  5. 全面发布 – 在建立信心后,将所有用户迁移到新版本。
  6. 清理 – 在确认稳定后移除旧版本。

目标受众的选择

  • 随机抽样 – 随机挑选用户,以获得无偏样本。
  • 内部用户优先 – 先向员工和内部利益相关者部署,再面向外部用户。
  • 基于人口统计的选择 – 根据特征、地域或使用模式选择用户,以匹配测试目标。
  • 地域性发布 – 在分布式系统中,先在特定地区或数据中心部署,再进行全局发布。

大规模金丝雀模式

  • 多阶段金丝雀 – 如 Facebook 先让内部员工通过特性开关使用新功能,然后再向更广泛的受众扩展。
  • 基于分区的部署 – 将部署限制在特定的服务实例、地理区域或业务单元,而不是按用户路由。
  • 容量测试 – 在真实生产负载下验证性能,而不冒整个用户群的风险。

金丝雀发布 vs. A/B 测试

方面金丝雀发布A/B 测试
目标风险缓解 & 检测回归或运营问题使用不同特性变体验证关于用户行为和业务指标的假设
时长应在数小时内完成通常需要数天或数周才能达到统计显著性
结果判断新版本是否安全可全面推行判断哪个变体在业务层面表现更佳

注意: 将这两类关注点混在一起会干扰结果并导致混淆。

零停机部署的一般最佳实践

  • 在生产环境中最小化并发版本
  • 实现健全的版本跟踪和监控
  • 自动化部署和回滚流程
  • 为每个版本保持清晰的文档

数据库模式更改

数据库模式更改带来独特的挑战。Parallel Change(并行变更)模式提供了一种有效的解决方案:

  1. Expand – 将数据库修改为同时支持旧版和新版应用。
  2. Migrate – 部署新版应用,同时保持向后兼容性。
  3. Contract – 在迁移完成后,移除对旧版的支持。

这种方法确保在整个部署过程中数据库保持兼容。

部署客户端应用(移动 …)

原始内容在此处被截断。

Source:

零停机部署的挑战与策略

客户端考虑因素(例如,浏览器、桌面软件)

  • 功能标记 – 控制功能的发布。
  • 向后兼容 – 在较长时间内支持旧版客户端。
  • 优雅降级 – 为不支持的版本提供回退行为。
  • 版本监控 – 跟踪客户端版本分布,以指导淘汰决策。

成功零停机部署的核心需求

区域需要做的事常用工具 / 选项
负载均衡在不同环境之间路由流量。云负载均衡器、Nginx、HAProxy、服务网格(如 Istio、Linkerd)。
监控与可观测性跟踪业务和运行指标,及早发现问题。Prometheus、Grafana、Datadog、New Relic、ELK 堆栈。
自动化消除手动、易出错的步骤。CI/CD 流水线(GitHub Actions、GitLab CI、Jenkins、Azure Pipelines)。
基础设施即代码 (IaC)一致地复现和配置环境。Terraform、CloudFormation、Pulumi、Ansible。

云厂商托管服务

提供商DNS / 流量路由负载均衡部署自动化
AWSRoute 53Application Load Balancer (ALB)CodeDeploy、CodePipeline
AzureAzure DNSAzure Load Balancer / Application GatewayAzure DevOps、GitHub Actions
GCPCloud DNSCloud Load BalancingCloud Deploy、Cloud Build
其他大多数主流云都有类似服务。

本地部署 – 需要手动搭建上述组件,但使用合适的工具完全可实现。

最佳实践清单

  • 从一开始就为零停机设计
  • 全面测试:单元、集成、端到端。
  • 在非生产环境演练部署
  • 维护运行手册,包括部署和回滚。
  • 定义成功标准(例如错误率阈值、性能目标)。
  • 监控
    • 技术指标 – 错误率、延迟、CPU/内存。
    • 业务指标 – 转化率、用户活跃度。
  • 异常自动告警
  • 在每次发布前建立基线指标
  • 从小范围开始——先在非关键应用上应用策略。
  • 始终拥有经过验证的回滚方案
  • 与利益相关者沟通时间表
  • 选择对业务影响最小的部署时机

部署策略

策略描述适用场景
蓝绿部署保持两个相同的生产环境(蓝色 & 绿色),在新版本验证后切换流量。简单的前进/回滚,风险低,基础设施充足。
金丝雀发布逐步向一小部分用户曝光新版本,监控后再扩大范围。需要细粒度风险管理,能够定位用户分群。
混合方案对核心基础设施使用蓝绿,对功能发布使用金丝雀。复杂系统同时需要快速切换和增量曝光。

选择(或组合)取决于 需求、风险容忍度和运营能力

为什么要投入零停机部署?

  • 提升用户满意度 – 没有服务中断。
  • 降低业务风险 – 故障被隔离且可快速恢复。
  • 提升部署信心 – 团队可以更快交付。

入门指南

  1. 打好基础 – 建立稳固的 CI/CD 流水线、IaC、监控体系等。

Source:

itoring.
2. 选择策略 – 为低风险的试点选择蓝‑绿部署。
3. 自动化 – 用于流量路由、健康检查、回滚的脚本。
4. 迭代 – 根据真实反馈和指标进行改进。


Hope this helps! 🎉
Wishing you a wonderful, happy deploying day! 🤠

You can check out my open‑source projects at GitHub.com/pH-7 ⚡️

Back to Blog

相关文章

阅读更多 »