2011-10-18 8 views
0

ユーザーがイメージをアップロードできるWebアプリケーションを構築中です。イメージがアップロードされると、1つまたは複数のサイズにリサイズする必要があります。それぞれのサイズはAmazon S3に送信して保存する必要があります。イメージの各サイズのメタデータとURLは、Webサーバー上の単一のデータベースレコードに格納されます。メッセージキューを使用して、非同期でサイズ変更とアップロードを実行しています(大きな画像と要求ごとに複数のサイズ変更の可能性があるため)。サイズ変更/アップロードタスクが完了したら、データベースレコードをURLで更新する必要があります。メッセージキューからデータベースを切り離すためのベストプラクティス

私の問題は、タスクを実行しているワーカーがデータベースにアクセスできないことです。私は、データベース・レコードを更新するための適切な情報を持つタスクが完了した後、httpコールバックをワーカーからWebアプリケーションに送り返すことを考えていました。他の選択肢や理由がありますか?

私は、Webバックエンドにはpython/pylons、データベースにはmysql、メッセージングにはセロリ/ amqpを使用しています。

ありがとうございます!

+0

"...タスクを実行しているワーカーはデータベースにアクセスできません。"何か特別な理由は? –

+0

ほとんどの場合、ワーカーは異なるマシンで実行され、セキュリティ上の理由からデータベースに直接アクセスすることはできません。 –

答えて

2

あなたの目標はMQからデータベースを切り離すのではなく、むしろ作業者からのものだと思われます。そのため、完了通知を受け取る別のキューを作成し、通知を受け取ってデータベースを適切に更新する別のワーカーを1人追加することができます。

+0

+1:もう1つのキュー。 –

+0

正解、タイトルは多分誤解を招くおそれがあります。私はこれを2つの別々のタスクに分割することを考えましたが、別のキューについては考えていませんでした。これは、データベースアクセスを必要とするタスクを特権マシンにルーティングできるので、実際にはかなり意味があります。ありがとう。 –

関連する問題