14

由于 celery 是一个作业队列/任务队列,名称说明它可以维护其任务并处理它们。那为什么它需要像rabbitmq或redis这样的消息代理呢?

4

1 回答 1

18

Celery 是一个分布式任务队列,这意味着系统可以通过单个集中总线驻留在多个位置的多台计算机(容器)上

基本架构如下:

工人- 可以从总线(任务队列)获取作业(数据)并处理它的进程

*它可以将结果放回总线以供不同的工作人员进一步处理(创建处理流程)

bus - 任务队列,这基本上是一个将作业存储为消息的数据库,因此工作人员可以检索它们,

实现并发且非阻塞的数据库很重要,因此当一个进程从总线上获取或放置工作时,它不会阻止其他工作人员获取/放置他们的工作。

RabbitMQ, Redis,ActiveMQ Kafka等是此类行为的最佳候选者

公共汽车有一个 API,可以让工人提交工作并检索它们(在更复杂的功能中)

大多数总线都实现了确认/失败功能,因此工作人员可以确认他们的工作正在完成,或者如果没有确认(或报告失败),则可以再次将此消息提供给另一个工作人员,并且这次可能会成功处理,因此不会丢失任何数据。 .(这在很大程度上取决于故障转移逻辑和作为任务输入的数据上下文)

Celery包括一个scheduler节拍),它定期将特定作业放在总线上,从而创建一个定期任务

让我们举一个报废的例子,你想报废世界,但中国只能允许来自其地区的流量,欧洲和美国也是如此,所以你可以建立一个工人并将他们安置在世界各地

您只能使用一辆公共汽车,假设它位于美国,所有其他工人都知道这辆公共汽车并可以连接到它,因此通过在位于美国的公共汽车上放置特定工作(废瓷),中国的流程可以工作,因此分布

当然,工作人员会增加系统的吞吐量,这只是由于并行性,与他们的地理位置无关,这是使用事件驱动架构的常见情况(即中央总线、消费者和生产者)

我建议阅读正式的文档,它非常简单

于 2018-06-17T08:32:32.930 回答