如何处理AWS elasticbeanstalk上的canary版本?

时间:2017-08-23 17:23:49

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

我之前已经看到它通过一个运行HAProxy的EC2实例完成,通过json文件/ lambda函数配置,然后通过粘性会话将流量控制到两个独立的elasticbeanstalk应用程序中。所以我们有两层负载平衡。

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

通过金丝雀发布,我的意思是,只能释放一定比例的流量,找出任何逃脱开发者,审核流程和质量检查流程的错误,而不会影响所有流量。

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

2 个答案:

答案 0 :(得分:0)

我找到了这篇中型文章,解释了被动自动缩放组的用法,在其中将canary版本部署到其中并监视统计信息。对结果满意后,可以将Canary自动缩放组的所需计数更改为0,并执行滚动升级到活动自动缩放组。

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

答案 1 :(得分:0)

使用Beanbeantalk进行金丝雀测试的方法是

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

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

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

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

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

希望这会有所帮助。

相关问题