【问题标题】:Differentiate celery, kombu, PyAMQP and RabbitMQ/ironMQ区分 celery、kombu、PyAMQP 和 RabbitMQ/ironMQ
【发布时间】:2013-02-13 19:35:55
【问题描述】:

我想将图像上传到 S3 服务器,但在上传之前我想生成 3 种不同大小的缩略图,并且我希望它在请求/响应周期之外完成,因此我使用的是 celery。我已经阅读了文档,这是我所理解的。如果我错了,请纠正我。

  1. Celery 可帮助您在请求响应周期之外管理任务队列。
  2. 还有一种叫做胡萝卜/kombu 的东西——它是一个 django 中间件,用于打包通过 celery 创建的任务。
  3. 然后是第三层 PyAMQP,它有助于胡萝卜与代理的通信。例如。 RabbitMQ、AmazonSQS、ironMQ 等
  4. Broker 位于不同的服务器上,为您处理事务。

现在我的理解是 - 如果多个用户同时上传图片,celery 会将调整大小排队,而调整大小实际上会发生在 ironMQ 服务器上,因为它在 heroku 上提供了一个很酷的插件。

现在的疑惑:

  1. 但是图片大小调整后,ironMQ会推送到S3服务器,还是完成后通知..我不清楚。

  2. 芹菜和昆布/胡萝卜有什么区别,你能不能形象地解释一下。

【问题讨论】:

  • Kombu 是队列连接器。 Celery 构建在 kombu 之上。它独立于 Django。 Kombu 很久以前就取代了胡萝卜。
  • Celery 管理任务;既可以调度它们,也可以根据消息传递实际执行任务。

标签: python heroku rabbitmq celery kombu


【解决方案1】:

IronMQ 不会为您处理您的任务;它只是作为 Celery 的后端来跟踪需要执行的工作。

所以,这就是发生的事情。假设你有两台服务器,你的 web 服务器和你的 Celery 服务器。您的 Web 服务器负责处理请求,您的 Celery 服务器创建缩略图并将其上传到 S3。典型请求如下所示:

  1. 您的用户将图像上传到您的网络服务器。
  2. 您将该图像存储在某处——我个人建议将其放在 S3 上,但您也可以将其存储在例如IronCache,base64 编码。关键是把它放在你的 Celery 服务器可以访问的地方。
  3. 您在 Celery 上排队作业,将图像的位置传递给您的 Celery 服务器。
  4. 您的 Celery 服务器会下载图像、生成缩略图并将其上传到 S3。然后它将 S3 URL 存储在作业结果中。
  5. 您的 Web 服务器会等待作业完成,然后才能访问结果。或者,您可以让 Celery 服务器将结果存储在数据库本身中。关键是 Celery 服务器完成了繁重的工作(生成缩略图),并且在执行时不会阻止请求循环。

我写了一个在 Heroku 上使用 IronMQ 的示例。你可以在这里看到它:http://iron-celery-demo.herokuapp.com。您可以查看示例 on Githubread the tutorial 的源代码,它非常详尽地逐步解释了如何在 Heroku 上部署 Celery。

清理 AMQP 的东西:

  • IronMQ 是 Iron.io 开发的基于云的消息队列服务。
  • AMQP 是一种开放的消息传递规范
  • RabbitMQ 是 AMQP 规范最流行的实现(据我所知)。
  • PyAMQP 是一个 Python 库,可让 Python 客户端与任何 AMQP 实现进行通信,包括 RabbitMQ

IronMQ 和 RabbitMQ/AMQP 之间的最大区别之一是 IronMQ 是托管和管理的,因此您不必自己托管服务器并担心正常运行时间。该规范在差异化方面提供了更多信息,并且存在潜在的差异,但 Celery 将其中的大部分抽象掉了。因为您使用的是 Celery,所以您可能会注意到的唯一区别是 IronMQ 是托管的,因此您不必站起来管理自己的服务器。

全面披露:我受雇于 IronMQ 背后的公司 Iron.io。

【讨论】:

  • 感谢您的详细回复。所以这就是我所理解的。图像处理在 celery 服务器上完成。 IronMQ/RabbitMQ 跟踪哪些任务已完成等。图片中的这个kombu/胡萝卜是什么?
  • 正如 Martijn 解释的 (stackoverflow.com/questions/15121519/…),Kombu 只是 Celery 的一个助手。它管理连接到队列。将其视为高级消息包装器。
【解决方案2】:

“IronMQ 和 RabbitMQ/AMQP 的最大区别之一是 IronMQ 是托管和管理的,因此您不必自己托管服务器并担心正常运行时间。”

目前至少有两个托管托管的 RabbitMQ 即服务选项:Bigwig 和 CloudAMQP。芹菜应该两者都很好。

【讨论】:

  • 谢谢亚历克西斯。我们将在未来包括这些。我认为 Paddy 指的是本机功能 - 作为服务而不是独立服务器实例交付。
  • 这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post
猜你喜欢
  • 2022-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 2017-10-24
  • 2011-07-18
  • 2011-07-17
相关资源
最近更新 更多