【问题标题】:Elastic Beanstalk + Route53 Alias = instant blue-green swaps?Elastic Beanstalk + Route53 Alias = 即时蓝绿交换?
【发布时间】:2015-03-25 10:59:48
【问题描述】:

当使用 Elastic Beanstalk 和 CNAME 交换以实现零停机部署时,DNS 缓存(客户端不遵守 TTL)会导致一些客户端继续向旧环境发送流量(长达几天)。

在将 Elastic Beanstalk 与 Route53 别名一起使用以进行零停机部署时,DNS 缓存是否仍然是一个问题?

【问题讨论】:

    标签: amazon-web-services amazon-route53 amazon-elastic-beanstalk blue-green-deployment


    【解决方案1】:

    http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html 它说

    您将新版本部署到单独的环境,然后交换两个环境的 CNAME 以立即将流量重定向到新版本。

    和

    但是,在传播 DNS 更改并且您的旧 DNS 记录过期之前,请勿终止您的旧环境。 DNS 服务器不一定会根据您在 DNS 记录上设置的生存时间 (TTL) 从缓存中清除旧记录。

    这不是冲突吗? 我认为 DNS 缓存仍然是一个问题。

    如何在旧版本客户端存在时将数据库迁移到新版本。 我想我只能在两个版本都适用的情况下迁移 db。

    我在这里找到了一篇好文章。 http://fbrnc.net/blog/2016/05/green-blue-deployments-with-aws-lambda-and-cloudformation 但它使用 Cloud Formation,而不是 Elastic Beanstalk。

    【讨论】:

      【解决方案2】:

      不幸的是,它确实如此。现在推荐的方法是使用滚动更新。

      【讨论】:

      • 我对滚动更新的理解是你只能用它来更新AWS实例配置——即。一个实例与实例池、实例大小等。您可以使用滚动更新来更新应用程序代码吗?
      • 是的。当您使用 Elastic Beanstalk 时,如果您将应用程序的新版本部署到 EB 应用程序,它将在现有实例上对您的应用程序进行就地更新。如果有问题,你重新部署旧版本。但这意味着您不能进行蓝/绿或红/黑部署。
      • @MattHouser,就地更新与滚动更新/零停机更新相同吗?
      • Amazon 使用就地更新意味着停机时间:“因为 AWS Elastic Beanstalk 在您更新应用程序版本时执行就地更新,所以您会遇到一些停机时间。” docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
      • 是的,就地更新确实会导致一些停机时间。可能是几秒钟或几分钟。滚动更新意味着实例一次更新,而不是同时更新。滚动更新是就地更新。但我认为滚动更新会改变用户,以避免明显的停机时间。
      【解决方案3】:

      我还没有对此进行测试,但我认为这就是他们实施“交换环境 URL”操作的原因,而不是在 route53 中进行。

      Reference

      【讨论】:

      • 不幸的是,环境 URL 交换通过更改“面向外部”域的 DNS CNAME 值来工作,该域仍然存在 TTL / DNS 缓存问题。
      猜你喜欢
      • 2019-03-23
      • 2019-03-09
      • 2014-08-22
      • 2020-11-25
      • 2020-06-09
      • 2020-07-07
      • 1970-01-01
      • 2018-11-01
      • 2020-08-28
      相关资源
      最近更新 更多