Skip to main content

零停机部署:我们如何实现 99.99% 的可用性

了解 Virex 如何实现零停机部署,以及帮助我们为客户实现 99.99% 可用性的工程决策。

管家婆团队 2025年05月01日 1 分钟阅读
教程 部署 开发

停机的代价十分高昂。对于电商网站而言,每停机一分钟都可能意味着数千甚至更多的收入损失;对于 SaaS 产品而言,停机会侵蚀客户的信任。正因如此,我们投入了大量精力,让 Virex 的部署真正做到零停机。

下面介绍我们是如何做到的。

面临的挑战

传统部署遵循一个简单的模式:停止旧版本,启动新版本。问题在于,应用总会存在一段无法处理请求的间隙——无论这段间隙多么短暂。

对于小型站点来说,几秒钟的停机或许还可以接受。但随着规模扩大,这些几秒钟会不断累积。而对于服务跨时区用户的全球化应用来说,从来没有一个适合停机的“好时机”。

我们的方案:大规模蓝绿部署

我们采用蓝绿部署的一种变体,并针对边缘计算做了一些重要调整:

1. 并行环境预置

当你推送一次新部署时,我们不会触碰正在运行的应用,而是启动一套完全并行的环境:

  • 在整个边缘网络中预置新的容器
  • 将你的应用构建并部署到这些新容器中
  • 通过健康检查确认一切运行正常

只有在新环境完全健康之后,我们才会继续下一步。

2. 渐进式流量切换

我们不会一次性切换全部流量,而是逐步将请求转移到新部署:

  • 1% 的流量进入新版本
  • 监控错误率和延迟
  • 如果各项指标表现良好,依次提升至 10%、50%,直至 100%
  • 一旦发现任何异常,立即自动回滚

这种金丝雀发布方式能够在问题影响到所有用户之前就将其发现。

3. 连接排空

指向旧部署的活跃连接不会被突然中断。我们通过连接排空来:

  • 停止向旧容器发送新请求
  • 允许正在处理的请求执行完成(最长 30 秒)
  • 在此之后才终止旧容器

这确保了没有任何请求会在处理过程中被丢弃。

实施成果

自该系统上线以来,我们实现了:

  • 所有客户部署的99.99% 可用性
  • 部署过程中零请求丢失
  • 平均部署时长为 47 秒

经验总结

构建这套系统让我们收获了几条重要经验:

**可观测性不可或缺。**没有出色的指标体系,就无法完成渐进式发布。在构建部署系统之前,我们就在实时监控上投入了大量资源。

**自动化可以避免人为失误。**手动回滚既缓慢又容易出错。我们的系统会根据预先设定的阈值自动做出回滚决策。

**边缘计算改变了一切。**同时部署到 200 多个节点,与部署到单一数据中心需要截然不同的思路。

亲自体验

每一次 Virex 部署都会自动使用这套系统,无需任何配置——只需推送代码,其余的交给我们处理。

想亲眼看看效果?立即开始免费试用,在几分钟内部署你的第一个应用。