【问题标题】:How to handle canary releases on AWS elasticbeanstalk?如何处理 AWS elasticbeanstalk 上的金丝雀版本?
【发布时间】:2018-02-01 09:46:56
【问题描述】:

我之前看到它是通过让一个运行 HAProxy 的 EC2 实例完成的,该实例通过 json 文件/lambda 函数进行配置,进而通过粘性会话控制流量到两个单独的 elasticbeanstalk 应用程序中。所以我们有两层负载均衡。

但是,这有一些问题,其中一个是:测试多个版本变得昂贵,需要越来越多的 EB 应用程序。

我所说的金丝雀发布,我的意思是,能够只发布一定比例的流量,以找出任何在开发人员、审查流程和 QA 流程中逃脱的错误,而不会影响所有流量。

什么是使用 AWS 资源处理此类设置而又不破坏银行的最佳方法? :)

【问题讨论】:

  • 你能分享你的发现吗?看到Sharuzzaman分享的文章不支持粘性会话。我遇到了和你一样的问题,想知道你是如何解决它的:)

标签: amazon-web-services amazon-elastic-beanstalk canary-deployment


【解决方案1】:

使用弹性豆茎实现金丝雀测试的方法是

  1. 创建第二个 beanstalk 环境,您可以在其中部署金丝雀版本
  2. 使用 Route53 加权路由策略将一定百分比的 DNS 请求发送到您的 Canary 环境。
  3. 如果您对 canary 的性能感到满意,则可以将 100% 的流量路由到 canary 环境等。

关于 DNS 路由需要记住的一点是,加权路由不是一门精确的科学,因为客户端会根据您在 Route53 中设置的 TTL 缓存 DNS。在极端情况下,例如只有一个客户端调用您的 beanstalk 环境(例如单个 Web 服务器)并且 TTL 设置为 5 分钟,可能会发生环境之间的切换仅每 5 分钟发生一次。

因此,对于加权路由,建议使用相当低的 TTL 值。此外,拥有许多客户端(例如移动电话)与 DNS 路由结合使用效果更好。

或者,也可以在两个 beanstalk 环境前面创建一个单独的 LB,以平衡 beanstalk 环境之间的请求。但是,我不能 100% 确定 LB 是否可以坐在其他(豆茎)LB 的前面。我怀疑答案不是,但我还没有尝试过。

在弹性 beanstalk 中修改自动缩放组是不可能的,因为 LB 由 beanstalk 管理,beantalk 可以决定恢复您在 LB 上手动所做的更改。此外,beantalk 不允许您部署到实例的子集,同时将旧版本保留在另一个子集上。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我发现这篇 Medium 文章解释了被动自动缩放组的用法,您可以在其中将金丝雀版本部署到其中并监控统计信息。一旦您对结果感到满意,您可以将金丝雀自动伸缩组的期望计数更改为 0,并对活动的自动伸缩组执行滚动升级。

    这里是文章的链接:https://engineering.klarna.com/simple-canary-releases-in-aws-how-and-why-bf051a47fb3f

    【讨论】:

    • 您好,您知道如何支持此解决方案的粘性会话吗?
    • 您可以尝试在负载均衡器中启用粘性会话。对于经典:docs.aws.amazon.com/elasticloadbalancing/latest/classic/…。对于 ALB:docs.aws.amazon.com/elasticloadbalancing/latest/application/…
    • 是否可以将被动自动缩放组与 Elastic Beanstalk 结合使用? EB 为您管理 LB,所以我不相信您可以使用这种方法...
    • @BernieLenz LB 在那里,您可以使用 CLI 或 API 操作它。它不是一个特殊的LB。您可以将自己的实例添加到LB中,LB会尽职尽责地将传入的流量负载均衡到Beanstalk管理的实例和您自己的实例中
    猜你喜欢
    • 2022-07-28
    • 2016-02-12
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 2020-04-29
    相关资源
    最近更新 更多