在AWS上监控和扩展基于Docker的Celery工作者群集

所以我有一个docker镜像,通过supervisor运行一个芹菜工作器,在单一docker Elastic Beanstalk(相当长的任务,所以acks late = trueconcurrency = 1prefetch multiplier = 1 )上工作得很好。

麻烦的是我想根据工作人员的有效任务负载来扩展实例,而EB只允许整个networking和CPU负载。

添加一个规则来扩大CPU负载工作正常,但我不能保证EB不会决定在任务中间缩小。 这将触发一个docker stop并有效地杀死任何不能很快完成的正在运行的芹菜(如果我没有弄错的话,10秒)。

理想情况下,我需要一个基于CPU活动和队列中任务的监视器,伪代码如下所示:

while check interval has passed if task queue is empty (or workers are not busy) if running instances is greater than 1 scale down 1 instance else if CPU load is higher than threshold scale up 1 instance

现在的问题是这个级别的逻辑在EB中看起来并不可行,更可能在ECS上运行,但我不确定以下几点:

  • 我们应该实施什么样的芹菜监视器,代码运行在哪里? 例如,通常的芹菜工监控命令似乎不是一个很好的解决scheme来监控工作人员的繁忙程度,我们需要处理在docker工人中运行工人的额外复杂性
  • 集群缩放function应该在哪里运行? 在与AWS工程师聊天之后,似乎AWS Lambda可能是一个潜在的解决scheme,但是将集群实例加载到lambda片段的报告似乎相当复杂且难以维护
  • 作为一个额外的问题,如果我们需要迁移到ECS,我们还需要重写我们的部署脚本来手动触发版本交换,因为这是由EBpipe理的。 最好的办法是什么?

任何帮助表示感谢,谢谢!