如何在AWS Elastic Beanstalk中处理金丝雀发布?

4
我之前看过一种方法,通过一个EC2实例运行HAProxy,通过json文件/lambda函数进行配置,控制具有粘性会话的流量,进入两个独立的elasticbeanstalk应用程序。因此,我们有两层负载均衡。
然而,这种方法存在一些问题,其中之一是:测试多个版本变得昂贵,并且需要越来越多的EB应用程序。
所谓金丝雀发布,是指能够只将一部分流量发布到线上,以便发现逃脱了开发人员、审查过程和QA过程的任何错误,而不会影响所有流量。
如何在AWS资源中处理这样的设置并不花费太多钱? :)

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

1

你好,关于如何为这个解决方案支持粘性会话有什么想法吗? - USer22999299
1
你可以尝试在负载均衡器中启用粘性会话。针对经典型的负载均衡器,请参见https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html 。针对应用型的负载均衡器,请参见https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#sticky-sessions。 - Sharuzzaman Ahmat Raslan
使用被动自动缩放组与弹性 Beanstalk 结合使用是否可行?EB 为您管理 LB,因此我不认为您可以使用此方法... - Bernie Lenz
@BernieLenz LB已经存在,您可以使用CLI或API进行操作。它不是一个特殊的LB。您可以将自己的实例添加到LB中,LB将忠实地将传入的流量负载均衡到由Beanstalk管理的实例和您自己的实例。 - Sharuzzaman Ahmat Raslan

1
你可以通过以下方式在Elastic Beanstalk中实现金丝雀测试:
  1. 创建第二个Beanstalk环境,将金丝雀版本部署到其中
  2. 使用Route53加权路由策略将一定比例的DNS请求发送到您的金丝雀环境。
  3. 如果您对金丝雀的性能满意,那么您可以将100%的流量路由到金丝雀环境等。
需要注意的是,DNS路由不是精确科学,因为客户端基于您在Route53中设置的TTL缓存DNS。在极端情况下,例如仅有一个单独的客户端调用您的Beanstalk环境(如单个Web服务器)并且TTL设置为5分钟,可能会导致在5分钟内仅在环境之间切换一次。
因此,在使用加权路由时,建议使用相当低的TTL值。此外,拥有许多客户端(例如移动电话)与DNS路由结合使用效果更佳。

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

修改 Elastic Beanstalk 中的自动扩展组是不可能的,因为 LB 由 Beanstalk 管理,Beanstalk 可以决定恢复你在 LB 上手动进行的更改。此外,Beanstalk 不允许你在保留旧版本的另一个子集的同时部署到一部分实例上。

希望这有所帮助。


0

流量分割在 Elastic Beanstalk 中得到本机支持。

在创建应用程序环境时(通过单击“配置更多选项”),请务必选择“高可用性”配置预设,因为这将为您的环境配置负载平衡器:

Choose a high availability configuration

然后编辑您的环境的“滚动更新和部署”部分,并选择“流量分配”作为您的部署策略。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接