ロードバランサーに複数のLinux Webサーバーが接続されており、これらのサーバー間でアセット(写真、ビデオ、その他のもの)を共有したいです。これを行う最良の方法は何ですか?
現在、私はすべてのWebサーバーのファイルサーバーにマウントしていますが、トラフィックが多くなるとダウンするのではないかと心配しています。これを防ぐにはどうすればよいですか?
前もって感謝します。
ロードバランサーに複数のLinux Webサーバーが接続されており、これらのサーバー間でアセット(写真、ビデオ、その他のもの)を共有したいです。これを行う最良の方法は何ですか?
現在、私はすべてのWebサーバーのファイルサーバーにマウントしていますが、トラフィックが多くなるとダウンするのではないかと心配しています。これを防ぐにはどうすればよいですか?
前もって感謝します。
回答:
ニーズに基づいてこれを行う方法は複数あります。
最初の2つは、多数の新しいファイルが来る場合に最適です。3番目の方法は、ユーザーがまだ同期されていない静的コンテンツで404を取得するため、頻繁にファイルを追加または変更しない場合の理想的なソリューションです。
最後のオプションは、多くの点で理想的かもしれませんが、4の中で最も高価であることが判明する可能性があります。これをサポートするには、Webサイトを書き直す必要もあります。
Webサーバーの負荷を減らし、負荷分散を実行する別の優れた方法は、squid(つまりsquid3)を使用することです。キャッシングを使用してリバースプロキシとして設定します。そのように設定すると、写真などの静的コンテンツをHDD(デフォルト)またはRAM(高速で最適)にキャッシュします。特定のノードが過負荷になった場合、他のsquidサーバーへのラウンドロビンも可能です。
通常、より多くのサーバーの必要性は、動的なWebサイト/ APを実行するために必要なリソースに由来するため、別のサブドメイン/ドメインで静的アセットをホストすることを検討してください。(static.yourdomain.comなど)
その後、別のサーバーを使用してそれらをホストできます。静的ファイルホスティングはあまりリソースを使用しないため、静的コンテンツに必要なサーバーはかなり少なくなります。また、動的コンテンツ用にサーバー上のリソースをいくつか解放します。
ロードバランサーによっては、同じドメインでこれを行うこともできます。ロードバランサーは、どのサーバーをどのリクエストに使用するかを決定しますが、別のドメインを使用する場合は、静的アセットをCDNに簡単に配置できます。必要が生じるはずです!
私が採用したこの課題に対する1つの解決策は、共有NFSドライブにファイルのメインの読み取り/書き込みコピーを保持するだけでなく、各Webサーバーで読み取り専用コピーを保持して、NFSホストの障害によりファイルアクセスが行われるようにすることです完全に失うのではなく、読み取り専用モードで。
rsync
各Webホストの読み取り専用コピーを最新の状態に保つために15分ごとに実行されます。check_link
bashスクリプトは、読み取り専用のコピーへのシンボリックリンクを交換してくださいNFSマウントがまだそこにあるそうでなければ作るために毎分を実行します。詳細は、このシステムを最初にセットアップしたときからこの記事に記載されています。
利点:
欠点:
NoSQLデータベースを検討することをお勧めします。それらはクラスターで動作し、最終的な一貫性を提供するように設計されています。ただし、ACIDではないことに注意してください。
ここだ導入あなたがあなたの目的のために必要かもしれないのNoSQLデータベースの種類を決めるのに役立ちます。
以下は、利用可能なNoSQLに関連するリソースのリストです。