8

我已经阅读了 AWS 文档关于Deploying Versions with Zero Downtime,也就是CNAME swapping

正如yegor256这个答案中解释的那样:

它唯一做的就是交换两个 CNAME。例如,您有一个环境 foo-1 的 CNAME foo-1.example.com,另一个环境 foo-2 的 CNAME foo-2.example.com。交换运行环境 foo-1 后会在http://foo-2.example.com响应。

所以问题是,你并没有立即切换整个流量,而只是切换新流量。现有流量将继续使用之前的 CNAME 条目长达 TTL 秒,从而使两个版本在这段短时间内共存(根据 Arun Kumar的说法,300 秒或更长时间)。

当应用程序的两个版本可以共存时,这对我来说是可以接受的。

但是,我们的应用程序的某些版本包含数据库补丁,必须在旧版本被取出后和新版本引入之前立即运行。

所以看起来 CNAME 交换对于我们正在做的事情来说还不够好,因为旧的应用程序版本会在数据库修补后中断。

理想情况下,我想:

  • 始终保持相同的弹性负载均衡器
  • 让 Elastic Beanstalk 使用新应用程序版本启动一个或多个实例
  • 从 ELB 中移除现有实例(使用旧应用版本)
  • 修补数据库
  • 将新启动的实例(带有新应用版本)添加到 ELB

这会将停机时间减少到只有几秒钟503 Service Unavailable只有当有补丁需要应用时

那可能吗?还是我没有正确地看到整个画面,我错过了一个更简单的解决方案?

4

1 回答 1

1

以下是您可以用来在 Elastic Beanstalk 上执行零停机时间部署的一些其他策略:http ://www.hudku.com/blog/demystified-zero-downtime-with-amazon/

于 2013-09-19T20:44:35.407 回答