区分芹菜,海带,PyAMQP和RabbitMQ/ironMQ

use*_*985 7 python heroku rabbitmq celery kombu

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

  1. Celery可帮助您在请求响应周期之外管理任务队列.
  2. 然后有一个名为carrot/kombu的东西 - 它是一个django中间件,它包含通过芹菜创建的任务.
  3. 然后是第三层PyAMQP,它促进了胡萝卜与经纪人的沟通.例如.RabbitMQ,AmazonSQS,ironMQ等
  4. 经纪人坐在不同的服务器上为你做事.

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

现在怀疑:

  1. 但是在图像调整大小之后,ironMQ会将其推送到S3服务器,还是会在完成该过程后通知它...我不清楚它.

  2. 芹菜和海带/胡萝卜有什么区别,能否生动地解释一下.

Pad*_*ddy 12

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

所以,这就是发生的事情.假设您有两台服务器,即您的Web服务器和Celery服务器.您的Web服务器负责处理请求,您的Celery服务器会创建缩略图并将它们上传到S3.这是典型的请求:

  1. 您的用户将图像上载到您的Web服务器.
  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.您可以在Github上看到该示例的源代码并阅读本教程,该教程非常全面地解释了如何在Heroku上部署Celery.

要清理AMQP的东西:

  • IronMQ是由Iron.io开发的基于云的消息队列服务.
  • AMQP是一种开放式消息传递规范
  • RabbitMQ是AMQP规范中最受欢迎的实现(我知道).
  • PyAMQP是一个Python库,允许Python客户端与AMQP的任何实现进行通信,包括RabbitMQ

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

完全披露:我受雇于IronMio背后的公司Iron.io.