13

開発中のDjangoサイト全体でS3ストレージバックエンドを使用して、EC2サーバーからの負荷を軽減し、複数のウェブサーバー(冗長性、負荷分散)がアップロードされたメディアの同じセットにアクセスできるようにします。

Sorl.thumbnail(v11)テンプレートタグがテンプレートで使用されており、柔軟な画像のサイズ変更/トリミングが可能です。

メディアが豊富なページのパフォーマンスはあまり良くなく、初めて生成する必要のあるサムネイルを含むページにアクセスすると、リクエストもタイムアウトになります。

これは、S3から元の画像をチェック/ダウンロードし(非常に大きく高解像度になる可能性があります)、サムネイルをレンダリング/チェック/アップロードするためであると理解しています。

この設定の最善の解決策は何だと思いますか?

S3コピーに加えてファイルのローカルコピーを保存する提案を見てきました(負荷分散にいくつかのサーバーが使用されている場合はあまり良くありません)。また、sorl.thumbnailをだますために0バイトのファイルを保存することが提案されているのを見ました。

これにアプローチする他の提案やより良い方法はありますか?

4

4 に答える 4

7

sorlサムネイルは、リモートの低速ストレージを念頭に置いて作成されるようになりました。ただし、サムネイルの最初の作成は、たとえばテンプレートから最初にアクセスされたストレージを検索して行われますが、その後、参照はKeyValueStoreにキャッシュされます。それでも最初のクエリと作成が必要です。1つの解決策は、画像のアップロード時に同じオプションで低レベルのapisorl.thumbnail.get_thumbnailを使用することです。画像をアップロードしたら、このサムネイル作成ジョブをセロリのようなキューに追加します。

于 2011-04-06T23:22:23.303 に答える
3

ソーラリーを使用できます。sorl と celery を組み合わせて、ワーカーを介してサムネイルを作成します。ワーカー スレッドの外部でファイル システムにアクセスしないように十分に注意してください。

すぐに (ワーカーがチャンスを得る前に) 返されるサムネイルはTHUMBNAIL_DUMMY_SOURCE、適切なプレースホルダーに設定することで制御できます。

サムネイルが最初に要求されたときにジョブが作成され、ワー​​カー スレッドが完了するまで、後続の要求にはダミー イメージが提供されます。

于 2013-05-25T22:19:44.970 に答える
1

@Aidanのソリューションとほぼ同じですが、sorl-thumbnailにいくつかの調整を加えました。また、セロリを使用してサムネイルを事前に生成します。私のコードはここにありますsorl_thumbnail-async

しかし、easy_thumbnailsがまさに私がやろうとしていたことを行うことがわかったので、現在のプロジェクトでそれを使用しています。トピックに関する便利な短い投稿がここにあります

于 2013-07-08T19:25:05.730 に答える
1

これまでに見つけた最も簡単な解決策は、実際には次のサードパーティ サービスです: http://cloudinary.com/

于 2015-04-04T11:58:27.450 に答える