web-dev-qa-db-ja.com

静的/アップロードされたコンテンツをサイトから分離する

大量のユーザーがいると予想されるサイトがあります。ユーザーコンテンツ(アップロードされた画像)を分離し、lighttpdがコンテンツを提供する別の静的サーバーに配置することをお勧めします。これにより、リクエストが大幅に高速化されるはずです。

私の質問は:

  • これを行うフォームには、どれくらいの改善が期待できますか?
  • どうやって?サイトのユーザーはファイルをアップロードしますが、転送プロセスを自動化するにはどうすればよいですか?ベストプラクティスは何ですか? Rsync?
  • 他のヒントはありますか?アイデア?ご意見をお待ちしております。
7
user7562

後でRsyncを心配する-今のところ、1つのボックスですべてを行うことができます。

メインドメインはhttp://www.example.com/で、このドメインでCookieを提供しています(そうです!)。

非wwwは上記にリダイレクトします。

静的ドメインはhttp://static.example.com/であり、このドメインでは、Cookieやその他の必要のないヘッダー項目は提供しません。そこにjs + cssを圧縮し、画像を圧縮せずに提供します。静的に提供されるものはすべて、パブリックキャッシュ可能に設定し、有効期限を将来に設定します。

ここで、ファイルシステム上の同じ場所を指すようにドメインを設定します。つまり、test.jpgを本当にロードしたい場合は、どちらの場所からでもまったく同じファイルを取得できます。これは、httpd.conf設定と2つの仮想サーバーエントリで行います。

トラフィックが大きなレベルに達したら、静的コンテンツサーバーを別のボックスに移行し、ドキュメントルート全体を新しいボックスにrsyncできます。 5分ごとにこれを行うようにcronジョブをセットアップし、静的の404がwwwにリダイレクトして、まだrsyncされていないリソースを取得できます。

2
ʍǝɥʇɐɯ

速度の違いは、多くの変数に依存しています。このように考えると、ユーザーがページ/画像を要求するたびに、サーバーのプロセッサはその要求を処理して、要求されたアイテムをRAMに投入し、処理する必要があります。

静的コンテンツを分離することにより、プロセッサへのページリクエストのキューから大きな画像のビデオやその他のものを削除し、画像/ビデオ/大きなものにストレスをかけることなく、できるだけ速くページを配布できるようにします。

依存するのは、プロセッサの速度、RAM、帯域幅です。

その方法は、静的サーバーをサブドメインに割り当てることです。これにより、非クロスドメインスクリプトが可能になります。ウェブアドレスだけでリンクできる画像だけの場合、またはクロスサーバースクリプティングの詳細を読むことができる場合、Apacheはそれを行うように設計されているので非常に簡単です。

ここに非常によく似たSO質問があります https://stackoverflow.com/q/913208/500959

1
austinbv