【问题标题】:Rabbitmq or Gearman - choosing a jobs queue [closed]Rabbitmq 或 Gearman - 选择作业队列 [关闭]
【发布时间】:2010-02-17 19:58:57
【问题描述】:

在工作中,我们需要构建一个工作服务器,用于发送电子邮件、构建 PDF、处理一些数据等。显然,我们希望构建某种通用排队系统。我对 Gearman 很熟悉,而这正是它试图解决的问题:将工作放在一个队列中,让工人来接他们。但是,我看到很多提到 Rabbitmq 并且不清楚它在这种情况下是如何使用的。

Rabbitmq 是在其上构建分布式作业系统的好框架吗?

【问题讨论】:

  • 作为后续行动,我最终选择了 RabbitMQ 以及出色的 Carrot/Celery 包,我对我的选择感到非常满意。一旦你弄清楚你需要或想要如何配置你的系统,Celery 就非常了不起并且非常简单。 AMQP 一开始可能有点费解,但 Celery 在抽象出许多复杂性方面做得很好,直到您准备好深入研究。
  • @alexis pdf 处理的链接已损坏。你能解决这个问题吗?
  • Sean Crubbs 自己的页面上似乎有一个repost of the article

标签: message-queue rabbitmq celery gearman


【解决方案1】:

我会说 Gearman 更适合排队“作业”,而 RabbitMQ 更适合排队“数据”。当然,它们实际上是一回事,但对我来说,如果你想“扇出”要完成的工作,并且工人可以独立工作,Gearman 是更好的方法.但是,如果您试图将来自大量来源的数据提供给更少的数据消费者,那么 RabbitMQ 是更好的解决方案。

RabbitMQ 的历史,作为一种允许 Twitter 接收突发负载的消息,并将它们馈送到只能保持一个连接打开、速率受限且没有重试的硬质旧 SMS 网关的东西,就是这种情况的说明RabbitMQ 擅长解决的问题。

【讨论】:

    【解决方案2】:

    这完全取决于您要公开的语义。 Gearman 在 RabbitMQ 之上所做的事情真的很容易,这当然可以将消息“扇出”给独立的工作人员。

    但 Gearman 是为特定目的而构建的。 IIUC,Gearman 是一个处理作业的框架,而不是一个消息传递系统。还有其他这样的框架,例如 Celery,在后台使用 RabbitMQ。这是一个值得一读的article about Celery

    【讨论】:

    • 不仅我们 Celery Python-only,而且它实际上将整个 Django 框架作为依赖项。根据我的经验,感觉好像作者是专门为他的环境编写的,以满足他的特定需求。这不一定是坏事,但与 Gearman 或 RabbitMQ 本身相比,这两者都非常灵活。
    • 怀恨在心? :) Celery 不是仅 Python,它可以通过 HTTP 工作,恕我直言,它比 gearman 用于多语言支持的模型更好(以您想要支持的语言实现工作人员)。用其他语言实现 celery worker 也很容易,因为 celery 实际上是一个消息协议,其中 celeryd 恰好是它的 Python 实现。我不知道你从哪里知道将 Celery 与 Gearman 进行比较是不公平的,但你应该阅读常见问题解答 - 特别是 bit.ly/cSh6Ys + bit.ly/cANwUg - 并为我们提供一些新的论据
    • 如果它“真的”是关于更好的模型,我们都会使用 Gopher ...而不是 HTTP :)
    • 答案中提供的链接现在会导致 404。您可以更新吗?
    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多