我需要一个基于docker / python worker的可伸缩队列处理。我的想法走向了kubernetes。但是,我不确定最好的控制器/服务。
基于azure函数,我得到传入的http流量,将简单的消息添加到存储队列。需要处理这些消息,并将结果反馈到结果队列中。
为了处理这些队列消息,我开发了循环队列并处理这些作业的python代码。每次成功循环后,消息将从源队列中删除,结果将写入结果队列。一旦队列为空,代码就存在。
所以我创建了一个运行python代码的docker镜像。如果启动了多个容器,则队列显然会更快地运行。我还实现了新的Azure Kubernetes服务来扩展它。虽然我是kubernetes的新手,但我读到了工作范例,直到工作准备就绪。简单的yaml模板看起来像这样:
apiVersion: batch/v1
kind: Job
metadata:
name: myjob
spec:
parallelism: 4
template:
metadata:
name: myjob
spec:
containers:
- name: c
image: repo/image:tag
我现在的问题是,该作业无法重新启动。
通常,队列会填充一些条目,然后暂时没有任何反应。然后,更大的队列可以到达,需要尽快处理。当然,我想再次执行这项工作,但这似乎不可能。此外,如果队列中没有任何内容,我希望将占用空间减少到最小。
所以我的问题是,我应该在这个场景中使用什么架构/构造,并且有简单的yaml示例吗?
我有一个类似的系统,我有一个队列有时会被清空,有时会被砰的一声。我类似地编写了队列处理器,它一次处理队列中的一条消息,如果队列为空则终止。它被设置为在Kubernetes工作中运行。
诀窍在于:我创建了一个CronJob来定期启动一个新的作业实例,并且该作业允许无限并行。如果队列为空,则立即终止(“缩小”)。如果队列被猛烈抨击并且最后一个作业尚未完成,则另一个实例开始(“向上扩展”)。
不需要查询队列和扩展状态集或任何东西,如果队列空置,则不会消耗任何资源。您可能必须调整CronJob间隔以微调它对队列填充的反应速度,但它应该做出很好的反应。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。