【问题标题】:Celery with Redis vs Redis Alone [closed]Celery with Redis vs Redis Alone [关闭]
【发布时间】:2016-08-28 06:41:52
【问题描述】:

我无法理解使用 Celery 的优势是什么。我知道你可以将 Celery 与 Redis、RabbitMQ 等一起使用,但我为什么不直接让这些消息队列服务的客户端而不是坐在 Celery 前面呢?

【问题讨论】:

  • 好处取决于你使用它的方式,因此它可能没有任何好处。如果您正在构建一个小型系统,那么 Celery 可能对您没有用处。它对于具有多个节点的大型系统很有用。
  • 这个问题不适合这个网站。好的、客观合理的答案将取决于正在解决的问题的具体细节,但你已经向整个可能的问题领域敞开了大门,这使得你的问题既过于宽泛又过于基于观点。可能存在问题 A 和 B,其中问题 A 可以通过 cron 作业 + Redis 更好地解决,而问题 B 将真正受益于使用 Celery + Redis。是否使用 Celery 真的取决于正在解决的问题的细节。

标签: java python rabbitmq celery messaging


【解决方案1】:

使用 Celery 的好处是我们主要需要编写任务处理代码,将任务交付交付到任务处理器的处理由 Celery 框架负责。只需运行更多具有更高并发性(更多处理线程/进程)的 Celery 工作人员,扩展任务处理也很容易。我们甚至不需要编写代码来将任务提交到队列并从队列中消费任务。 此外,它还内置了为任何任务队列添加/删除消费者的功能。该框架支持任务重试、故障处理、结果累积等。它有很多特性可以帮助我们只专注于实现任务处理逻辑。

打个比方,实现一个在 Hadoop 上运行的 map-reduce 程序并不是一项非常复杂的任务。如果数据很小,我们可以编写一个简单的 Python 脚本来实现 map-reduce 逻辑,这将优于处理相同数据的 Hadoop map-reduce Job。但是当数据非常庞大时,我们必须跨机器划分数据,我们需要跨机器运行多个进程并协调它们的执行。复杂性在于在多台机器上运行多个 mapper 实例,然后是 reducers 任务,收集输入并将输入分配给 mapper,将 mapper 的输出传输到适当的 reducer,监控进度,重新启动失败的任务,检测作业完成等。 但是因为我们有 Hadoop,所以我们不需要太关心执行分布式作业的底层复杂性。同样,Celery 也帮助我们主要专注于任务执行逻辑。

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 2011-05-05
    • 2017-07-04
    • 2022-11-07
    • 1970-01-01
    • 2016-06-09
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多