【发布时间】:2018-07-10 20:48:39
【问题描述】:
我有许多并行工作人员在弹性 beantalk 工作环境中处理长时间运行的作业。底层 EC2 实例根据队列长度进行扩展。我的问题是工作人员在处理过程中被终止,而行动规模扩大。
我最初防止这种情况的方法如下: 在收到来自 sqs 守护程序的消息后,每个工作人员都在保护他正在运行的 EC2 实例。当工作人员准备好处理作业时,他会再次取消对 EC2 实例的保护。对于这种情况,这似乎是推荐的方法:https://aws.amazon.com/about-aws/whats-new/2015/12/protect-instances-from-termination-by-auto-scaling/ 除了没有考虑任何安置策略这一事实之外,它还有效。它导致所有实例都受到保护,并且大部分时间都取消了扩展操作。 sqs 守护进程似乎没有考虑用尽可能多的工作人员填充实例。
我的下一个考虑是在触发缩放操作时停止 sqs 守护程序,例如使用自动缩放生命周期挂钩。但是使用这种方法,终止受保护的实例可能仍然是一个问题(我不知道钩子是否在受保护的实例上触发)。此外,似乎不建议停止 sqs 守护进程:Start/stop sqsd daemon on Elastic Beanstalk to view SQS queue messages
如何使用弹性 beanstalk 工作程序层满足这两个要求(1. 不要停止长时间运行的工作程序和 2. 每个 EC2 实例运行尽可能多的工作程序)?
【问题讨论】:
标签: amazon-web-services amazon-elastic-beanstalk autoscaling