4

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

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

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

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

4

2 回答 2

1

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

  1. 创建第二个 beanstalk 环境,将金丝雀版本部署到该环境
  2. 使用 Route53 加权路由策略将一定百分比的 DNS 请求发送到您的金丝雀环境。
  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 不允许您部署到实例的子集,同时将旧版本保留在另一个子集上。

希望这可以帮助。

于 2020-05-21T15:33:48.093 回答
1

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

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

于 2018-06-27T02:26:26.233 回答