私はこの引用の作成者なので、返信します:-)
大規模なサイトには、同時接続と遅延という2つの大きな問題があります。同時接続は、コンテンツのダウンロードに時間がかかる低速のクライアントと、アイドル状態の接続が原因で発生します。これらのアイドル接続状態は、キープアライブと呼ばれる複数のオブジェクトをフェッチするための接続の再利用が原因で発生し、レイテンシによってさらに増加します。クライアントがサーバーに非常に近い場合、クライアントは接続を集中的に使用し、アイドル状態になることはほとんどありません。ただし、シーケンスが終了すると、誰もすぐにチャネルを閉じようとはしません。接続は開いたままで、長期間使用されません。これが、非常に低いキープアライブタイムアウトの使用を推奨する理由です。Apacheのような一部のサーバーでは、設定できる最小のタイムアウトは1秒で、多くの場合、高負荷を維持するには長すぎます。目の前に20000クライアントがあり、平均で毎秒1つのオブジェクトをフェッチする場合、それらの20000接続が永続的に確立されます。Apacheのような汎用サーバーでの20000同時接続は巨大であり、ロードするモジュールに応じて32〜64 GBのRAMが必要になります。RAMを追加しても、それ以上の容量は望めません。実際には、20000クライアントの場合、サーバーには40000から60000の同時接続が表示されることもあります。ブラウザがフェッチするオブジェクトが多い場合、ブラウザは2から3の接続を設定しようとするためです。また、RAMを追加しても、それ以上高くなることは望めません。実際には、20000クライアントの場合、サーバーには40000から60000の同時接続が表示されることもあります。ブラウザがフェッチするオブジェクトが多い場合、ブラウザは2から3の接続を設定しようとするためです。また、RAMを追加しても、それ以上高くなることは望めません。実際には、20000クライアントの場合、サーバーには40000から60000の同時接続が表示されることもあります。ブラウザがフェッチするオブジェクトが多い場合、ブラウザは2から3の接続を設定しようとするためです。
各オブジェクトの後に接続を閉じると、同時接続の数は劇的に減少します。実際、オブジェクト間の時間によってオブジェクトをダウンロードする平均時間に対応する係数で低下します。オブジェクト(ミニチュア写真、ボタンなど)をダウンロードするために50ミリ秒必要で、上記のように平均で1秒あたり1つのオブジェクトをダウンロードする場合、クライアントごとに0.05接続しかなく、これはわずか1000です。 20000クライアントの同時接続。
ここで、新しい接続を確立する時間がカウントされます。遠く離れたクライアントでは、不快な遅延が発生します。以前は、ブラウザはキープアライブを無効にすると、大量の同時接続を使用していました。MSIEでは4、Netscapeでは8の数字を覚えています。これにより、オブジェクトあたりの平均レイテンシはそれだけ割り切れるはずです。キープアライブがすべての場所に存在するようになったため、リモートサーバーの負荷がさらに増加し、ブラウザーがインターネットのインフラストラクチャを保護するため、このような高い数値は見られなくなりました。
つまり、今日のブラウザでは、キープアライブサービスと同じくらい応答性の高い非キープアライブサービスを取得するのが難しくなっています。また、一部のブラウザー(例:Opera)は、ヒューリスティックを使用してパイプライン処理を使用しようとします。パイプラインは、キープアライブを使用する効率的な方法です。応答を待たずに複数の要求を送信することにより、レイテンシがほとんどなくなります。100枚の小さな写真があるページで試してみました。最初のアクセスはキープアライブなしの約2倍の速度ですが、次のアクセスは約8倍の速さです。 「304」応答)。
理想的には、ブラウザに調整可能なパラメータをいくつか用意して、フェッチされたオブジェクト間の接続を維持し、ページが完成したらすぐにドロップできるようにする必要があると思います。しかし、残念ながらそれは見られません。
このため、Apacheなどの汎用サーバーを前面にインストールする必要があり、大量のクライアントをサポートする必要があるサイトでは、通常、キープアライブを無効にする必要があります。また、ブラウザに接続数を増やすように強制するために、複数のドメイン名を使用して、ダウンロードを並列化できます。SSLを集中的に使用しているサイトでは、ラウンドトリップが1つ増えるため、接続設定がさらに高くなるため、これは特に問題になります。
最近よく見られるのは、そのようなサイトが数万から数十万の同時接続を問題なく処理できるhaproxyやnginxなどの軽いフロントエンドをインストールすることを好み、クライアント側でキープアライブを有効にし、クライアントで無効にすることです。 Apache側。この面では、接続を確立するためのコストは、CPUの観点からはほぼゼロであり、時間の観点からはまったく目立ちません。このようにして、クライアント側でのタイムアウトが非常に低く、キープアライブによる遅延が少なく、サーバー側での接続数が少ないという、両方の長所を提供します。みんなが幸せだ :-)
一部の商用製品では、フロントロードバランサーとサーバー間の接続を再利用し、それらを介してすべてのクライアント接続を多重化することで、これをさらに改善しています。サーバーがLBに近い場合、以前のソリューションよりも大幅に向上することはありませんが、複数のユーザー間で予期しない接続の共有が発生し、ユーザー間でセッションが交差するリスクがないことを保証するために、アプリケーションの調整が必要になることがよくあります。 。理論的には、これは決して起こらないはずです。現実は大きく異なります:-)