零停机部署:我们如何实现 99.99% 的可用性
了解 Virex 如何实现零停机部署,以及帮助我们为客户实现 99.99% 可用性的工程决策。
停机的代价十分高昂。对于电商网站而言,每停机一分钟都可能意味着数千甚至更多的收入损失;对于 SaaS 产品而言,停机会侵蚀客户的信任。正因如此,我们投入了大量精力,让 Virex 的部署真正做到零停机。
下面介绍我们是如何做到的。
面临的挑战
传统部署遵循一个简单的模式:停止旧版本,启动新版本。问题在于,应用总会存在一段无法处理请求的间隙——无论这段间隙多么短暂。
对于小型站点来说,几秒钟的停机或许还可以接受。但随着规模扩大,这些几秒钟会不断累积。而对于服务跨时区用户的全球化应用来说,从来没有一个适合停机的“好时机”。
我们的方案:大规模蓝绿部署
我们采用蓝绿部署的一种变体,并针对边缘计算做了一些重要调整:
1. 并行环境预置
当你推送一次新部署时,我们不会触碰正在运行的应用,而是启动一套完全并行的环境:
- 在整个边缘网络中预置新的容器
- 将你的应用构建并部署到这些新容器中
- 通过健康检查确认一切运行正常
只有在新环境完全健康之后,我们才会继续下一步。
2. 渐进式流量切换
我们不会一次性切换全部流量,而是逐步将请求转移到新部署:
- 1% 的流量进入新版本
- 监控错误率和延迟
- 如果各项指标表现良好,依次提升至 10%、50%,直至 100%
- 一旦发现任何异常,立即自动回滚
这种金丝雀发布方式能够在问题影响到所有用户之前就将其发现。
3. 连接排空
指向旧部署的活跃连接不会被突然中断。我们通过连接排空来:
- 停止向旧容器发送新请求
- 允许正在处理的请求执行完成(最长 30 秒)
- 在此之后才终止旧容器
这确保了没有任何请求会在处理过程中被丢弃。
实施成果
自该系统上线以来,我们实现了:
- 所有客户部署的99.99% 可用性
- 部署过程中零请求丢失
- 平均部署时长为 47 秒
经验总结
构建这套系统让我们收获了几条重要经验:
**可观测性不可或缺。**没有出色的指标体系,就无法完成渐进式发布。在构建部署系统之前,我们就在实时监控上投入了大量资源。
**自动化可以避免人为失误。**手动回滚既缓慢又容易出错。我们的系统会根据预先设定的阈值自动做出回滚决策。
**边缘计算改变了一切。**同时部署到 200 多个节点,与部署到单一数据中心需要截然不同的思路。
亲自体验
每一次 Virex 部署都会自动使用这套系统,无需任何配置——只需推送代码,其余的交给我们处理。
想亲眼看看效果?立即开始免费试用,在几分钟内部署你的第一个应用。