私はPHPとGraphicsmagickを使用しており、画像のバッチをアップロードするユーザーがたくさんいます。
これらのバッチは、1つのイメージから数百、場合によっては数千まで実行されます。
これらの元のアップロードをAmazonS3に保存する必要があります。また、各画像のサイズを3つの異なるサイズに変更し、それらのコピーをAmazonS3に保存する必要があります。
これは、可能な限りリアルタイムである必要があります。
最高のパフォーマンスを得るために、これをどのように設計しますか?
私はPHPとGraphicsmagickを使用しており、画像のバッチをアップロードするユーザーがたくさんいます。
これらのバッチは、1つのイメージから数百、場合によっては数千まで実行されます。
これらの元のアップロードをAmazonS3に保存する必要があります。また、各画像のサイズを3つの異なるサイズに変更し、それらのコピーをAmazonS3に保存する必要があります。
これは、可能な限りリアルタイムである必要があります。
最高のパフォーマンスを得るために、これをどのように設計しますか?
達成するのは非常に簡単です。ユーザーが画像をアップロードしたら、それをメッセージキューに追加します( lpush )。キューにメッセージを追加するとき、あなたはあなたのウェブサイトのユーザーを仕事(待っている)で悩ませているのではなく、代わりにそれをオフラインで行います。非常に強力で、高速で、使いやすいので、私はredisを選びます。キャッシュのニーズなどにも使用できるため、redisを調べる必要があります。それはいいです。次に、キュー内のメッセージを(1つずつ)処理( blpop )する以外に何もしない2つのワーカープロセスを生成します。彼らはキューからメッセージを受け取り、そこでジョブ(画像のサイズ変更)を行い、完了するとキューから次のメッセージを受け取ります。とてもシンプルでとても速いです。特に、たとえばC(Cは非常に高速な言語)にコンパイルされるPHP拡張機能を使用する場合phpredis。
PS:redisを説明する優れた入門チュートリアル=> http://simonwillison.net/static/2010/redis-tutorial/(必読;))