簡體   English   中英

區分芹菜,海帶,PyAMQP和RabbitMQ / ironMQ

[英]Differentiate celery, kombu, PyAMQP and RabbitMQ/ironMQ

我想將圖像上傳到S3服務器,但在上傳之前我想生成3種不同大小的縮略圖,我希望它可以在請求/響應周期之外完成,因此我使用的是芹菜。 我已經閱讀了文檔,這是我所理解的。 如果我錯了,請糾正我。

  1. Celery可幫助您在請求響應周期之外管理任務隊列。
  2. 然后有一個名為carrot / kombu的東西 - 它是一個django中間件,它包含通過芹菜創建的任務。
  3. 然后是第三層PyAMQP,它促進了胡蘿卜與經紀人的溝通。 例如。 RabbitMQ,AmazonSQS,ironMQ等
  4. 經紀人坐在不同的服務器上為你做事。

現在我的理解是 - 如果多個用戶同時上傳圖像,芹菜會將調整大小排隊,調整大小實際上會發生在ironMQ服務器上,因為它在heroku上提供了一個很酷的插件。

現在懷疑:

  1. 但是在圖像調整大小之后,ironMQ會將其推送到S3服務器,還是會在完成該過程后通知它...我不清楚它。

  2. 芹菜和海帶/胡蘿卜有什么區別,能否生動地解釋一下。

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。

“IronMQ和RabbitMQ / AMQP之間最大的區別之一是IronMQ是托管和管理的,因此您不必自己托管服務器並擔心正常運行時間。”

目前至少有兩個托管的RabbitMQ即服務選項:Bigwig和CloudAMQP。 芹菜應該與兩者都很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM