8

画像を S3 サーバーにアップロードしたいのですが、アップロードする前に 3 つの異なるサイズのサムネイルを生成したいので、要求/応答サイクルから外して実行したいので、セロリを使用しています。私はドキュメントを読みました。これが私が理解したことです。間違っている場合は修正してください。

  1. Celery は、リクエスト応答サイクル以外でタスク キューを管理するのに役立ちます。
  2. 次に、cart/kombu と呼ばれるものがあります。これは、セロリを介して作成されるタスクをパッケージ化する django ミドルウェアです。
  3. 次に、ブローカーへのニンジンの通信を容易にする第 3 層の PyAMQP。例えば。RabbitMQ、AmazonSQS、ironMQ など
  4. ブローカーは別のサーバーにあり、あなたのために何かをします.

現在、私の理解では、複数のユーザーが同時に画像をアップロードすると、セロリはサイズ変更をキューに入れ、heroku でクールなアドオンを提供するため、サイズ変更は実際には ironMQ サーバーで行われます。

今疑問:

  1. しかし、画像のサイズが変更された後、ironMQ はそれを S3 サーバーにプッシュしますか、それともプロセスが完了すると通知しますか..私はそれについて明確ではありません。

  2. セロリと昆布・人参の違いをわかりやすく教えてください。

4

2 に答える 2

13

IronMQ はユーザーのタスクを処理しません。Celery が実行する必要があるジョブを追跡するためのバックエンドとして機能するだけです。

それで、これが何が起こるかです。Web サーバーと Celery サーバーの 2 つのサーバーがあるとします。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.comGithubで例のソースを確認し、チュートリアルを読むことができます。このチュートリアルでは、Celery を Heroku にデプロイする方法を非常に詳細かつ段階的に説明しています。

AMQP をクリアするには:

  • IronMQ は、Iron.io によって開発されたクラウドベースのメッセージ キュー サービスです。
  • AMQP はオープン メッセージング仕様です。
  • RabbitMQ は、AMQP 仕様の (私が知っている) 最も一般的な実装です。
  • PyAMQP は、Python クライアントが RabbitMQ を含む AMQP の任意の実装と通信できるようにする Python ライブラリです。

IronMQ と RabbitMQ/AMQP の最大の違いの 1 つは、IronMQ がホストおよび管理されるため、自分でサーバーをホストしてアップタイムを心配する必要がないことです。仕様は差別化の点でより多くを提供し、根本的な違いがありますが、Celery はそれらのほとんどを抽象化します。Celery を使用しているため、気付くと思われる唯一の違いは、IronMQ がホストされているため、独自のサーバーを立ち上げて管理する必要がないことです。

完全な開示: 私は、IronMQ の背後にある会社である Iron.io に勤務しています。

于 2013-02-27T23:37:29.517 に答える