複数のサーバーを使用して Web サイトを提供することで生じる速度上の欠点は何ですか?

複数のサーバーを使用して Web サイトを提供することで生じる速度上の欠点は何ですか?

これらの質問に答えるのは難しいことはわかっています :) しかし、サービスを異なるサーバーに分離することの影響について、ある程度理解したいと思っています。

具体的には、メディア サーバー (静的ファイルを提供する Apache)、アプリケーション サーバー (PHP ファイルを処理する Apache)、マスター DB サーバー、スレーブ DB サーバーを備えた Web サイトをセットアップしています。

私は、共有プールとしてメディア サーバーとアプリケーション サーバーの両方で memcached を実行するつもりでしたが、そうするとコストがかかる (時間とリソースの面で) のではないかと思いました。明らかに、memcached 呼び出しが (アプリケーション サーバーから) 要求されるたびに、メディア サーバーへの TCP 接続を確立し、結果がどこにあるかを判断して、結果を返す必要があります。

このような小規模な Web サイト設定の場合、アプリケーション サーバーの RAM を増やし、サーバー間で memcached をプールしない方がよいでしょうか。それとも、違いは非常に小さいので心配する価値はないのでしょうか。

例として memcached を使用しましたが、同じシナリオを他のサービス (db など) に適用できるため、回答はかなり一般的なものにしておいた方がよいでしょう。

答え1

小規模な Web サイトの場合、このレベルの最適化はやり過ぎだと思います。

しかし、確実に知る方法が 1 つあります。試して

私たちはワールドキャット過去にこのような質問に答えるために使用されました。これは、さまざまな負荷下でサイトがどのように機能するかを確認するのに最適なツールです。Jメーターは、このような場合にも最適なツールです。

たとえば、WCAT を使用すると、Web アプリ VM (この場合は Fogbugz) とは別に DB VM をホストする別の Hyper-V サーバーを取得することに決定しました。テストの結果、同時ユーザー数が少ない場合でも、アプリ VM と同じマシンに DB VM があるとアプリケーションが使用できなくなることがわかりました (CPU がボトルネックでした)。

答え2

あなたの質問にもっとよく答えるために、いくつかの質問に答える必要があります。

  • 単一の Web サイトですか?
  • 集中的なリソース (大量のサーバー側プログラミング、ストリーミング ビデオなど) を使用していますか?
  • ビデオ、DB、PHP/.NET だけを使用していますか?
  • サーバーのスペックはどの程度ですか?
  • ハードドライブの速度はどれくらいですか? また、RAID 構成になっていますか?
  • プロセッサの数はいくつですか?
  • RAMはどれくらいですか?
  • 100MB または 1000GB の NIC とスイッチを実行していますか?
  • アップストリーム速度はどれくらいですか?
  • あなたの OS は合理化され、最適化されていますか?

答え3

情報が十分でないため、正しい答えが得られる可能性はほとんどありません。実際にいくつかのテストやベンチマークを実行することが、正しい答えが得られていることを確認する唯一の方法です。

あなたの説明から推測すると、プーリングによって個々のリクエストの待ち時間は長くなりますが、処理が滞る前に処理できる総負荷は増加すると思われます。

しかし、個々のリクエストのレイテンシが増加する可能性があると私が言うとき、それはネットワーク設定に応じて、数ミリ秒から数十ミリ秒の間の量を意味します。サイトが十分にビジーな場合、キャッシュが 2 倍になり、DB 呼び出しが少なくなるという速度上の利点の方がはるかに大きいでしょう。メディア サーバーとアプリケーション サーバーのハードウェアがほぼ同じである場合、アプリケーション サーバーの CPU 使用率が高くなり、メディア サーバーの CPU がかなりアイドル状態になる可能性が非常に高くなります。つまり、アプリケーション サーバーではなくメディア サーバーでのみ memcached を使用すると、実際には最高のパフォーマンスが得られる可能性があります。

最適化を確実に行う唯一の方法は、テストすることです。テスト、ベンチマーク、プロファイルなど。テストを行わないと、パフォーマンスが向上したのか、悪化したのかはわかりません。エンドツーエンド テスト (つまり、実際の Web クライアントが行うファイル要求をすべてシミュレートした Web クライアント) を、中程度の負荷と「スラッシュドットされた」負荷の両方で、現実的なユーザーの組み合わせ (キャッシュ ヒットとミスの適切な組み合わせ) で実行します。テストを自動化して、簡単に繰り返し実行できるようにします。両方またはすべてのサーバーで memcached を使用してテストする、1 つのサーバーのみでテストする、もう 1 つのサーバーのみでテストする、一方のサーバーにもう一方のサーバーよりも多くの RAM を使用するなど...

関連情報