开箱即用的分布式作业队列解决方案
Posted
技术标签:
【中文标题】开箱即用的分布式作业队列解决方案【英文标题】:Out of box distributed job queue solution 【发布时间】:2021-08-20 01:30:03 【问题描述】:是否有现成的作业队列框架?基本思路是
-
有人排队工作,工作状态为
New
(多个)工人得到一份工作并开始工作,将工作标记为Taken
。一项作业最多只能在一名工作人员上运行
某些东西会监控工作人员的状态,如果正在运行的作业超过了预定义的超时时间,将会以状态New
重新排队,这可能是工作人员的健康问题
工作人员完成任务后,会将任务标记为队列中的Completed
。
某些东西不断清理已完成的任务。或者在第 4 步,当工作人员完成一项任务时,工作人员只需将任务出列。
根据我的调查,Kafka (pub/sub) 或 MQ (push/pull & pub/sub) 或缓存(Redis、Memcached)之类的东西对于这项工作来说已经足够了。但是,它们都需要围绕其核心功能进行某种开发才能成为功能齐全的作业队列。
还研究了关系数据库,支持“SELECT * FOR UPDATE SKIP LOCKED”语法的也是一个不错的选择,这再次需要在数据库和工作人员之间有一个守护进程,这意味着额外的努力。
还研究了云解决方案、Azure Queue 存储等类似评估。
所以我的问题是,是否有任何开箱即用的作业队列解决方案,它是为一件事量身定制的,专门用于作业队列,无需太多努力设置?
谢谢
【问题讨论】:
我认为这取决于您要运行的作业/任务的类型。有什么细节可以提供吗? 【参考方案1】:看看 Python Celery。 https://docs.celeryproject.org/en/stable/getting-started/introduction.html
默认模式使用 RabbitMQ 作为消息代理,但也可以使用其他选项。如果需要,结果可以存储在数据库中。
【讨论】:
感谢您的回答。是否有类似的解决方案不受特定编程语言的约束?以上是关于开箱即用的分布式作业队列解决方案的主要内容,如果未能解决你的问题,请参考以下文章
Ant Design Pro —— 开箱即用的中后台解决方案 | 软件推介