gpt4 book ai didi

amazon-web-services - 如何防止 Elastic Beanstalk 上长时间运行的作业在不阻止缩减的情况下终止?

转载 作者:行者123 更新时间:2023-12-02 11:21:35 24 4
gpt4 key购买 nike

我有许多并行工作人员在弹性 beantalk 工作人员环境中处理长时间运行的作业。底层 EC2 实例根据队列长度进行扩展。我的问题是 worker 在处理过程中被终止,同时发生了规模化。

我最初防止这种情况的方法如下:
在收到来自 sqs 守护程序的消息后,每个工作人员都在保护他正在运行的 EC2 实例。当工作人员准备好处理作业时,他会再次取消对 EC2 实例的保护。对于这种情况,这似乎是推荐的方法:https://aws.amazon.com/about-aws/whats-new/2015/12/protect-instances-from-termination-by-auto-scaling/
除了没有考虑任何放置策略之外,它还有效。它导致所有实例都受到保护,并且大部分时间都取消了扩展操作。 sqs 守护进程似乎没有考虑用尽可能多的工作人员填充实例。

我的下一个考虑是在触发缩放操作时停止 sqs 守护程序,例如使用自动缩放生命周期 Hook 。但是使用这种方法,终止 protected 实例可能仍然是一个问题(我不知道钩子(Hook)是否在 protected 实例上触发)。此外,似乎不建议停止 sqs 守护进程:Start/stop sqsd daemon on Elastic Beanstalk to view SQS queue messages

如何使用弹性 beanstalk 工作程序层满足这两个要求(1. 不要停止长时间运行的工作程序和 2. 每个 EC2 实例运行尽可能多的工作程序)?

最佳答案

我对 Beanstalk 工作层实例不是很熟悉,但据我所知,它们一次获得 1 个任务,对吗?如果是这样,你为什么需要停止 SQS 守护进程,大概如果发生缩减,这是因为工作队列中没有更多任务,所以这个实例不应该得到一个新的。如果确实有一个恰好在那个时候进来,它不会从 SQS 队列中删除,并且一旦可见性超时结束,就会被另一个工作节点拾取。

直到禁用实例保护后才会触发生命周期 Hook ,因为它仅在选择要终止的实例时才开始。

如果您能够在代码中添加一段逻辑,说明“如果任务结束并且没有新任务进入 -> 然后禁用此实例上的实例保护”
这样只有没有任务的实例才能被终止。

或者,您可以让所有内容始终受到保护,并通过 Cron 作业定期在实例上运行 bash 脚本,检查它当前是否正在运行作业,如果没有,则禁用实例保护

关于amazon-web-services - 如何防止 Elastic Beanstalk 上长时间运行的作业在不阻止缩减的情况下终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48547316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com