httpd Web サーバーはクライアントとは異なるダウンロード速度でコンテンツを提供していますか?

httpd Web サーバーはクライアントとは異なるダウンロード速度でコンテンツを提供していますか?

私たちのゲームでは、Web コンテンツを提供するために、httpd がインストールされ、実行されている VM で静的アセットをホストしています (もちろん、ネイティブ Linux の機能もいくつかあります)。構成された MPM は、MaxClients が 6400、ServerLimit が 100、ThreadsPerChild が 64 のワーカーです。メモリは 4 GB です。上記の構成では、提供される静的コンテンツの合計サイズは約 20 MB で、私の国 (ブルガリア) だけでなく、他のさまざまな国でも提供されます。国内と海外の帯域幅速度に違いがないことがチェックされ、確認されています。ただし、帯域幅が最大になるピーク時には、遠方のユーザー (ロシアなど) から、ゲームが完全にダウンロードされるまでに 2 ~ 3 分かかるという大量の苦情が寄せられ始めます。ここからキャッシュを無効にしてゲームの読み込みを確認すると、どのコンピューターから試しても、約 10 秒かかりました。元の VM のイメージからさらに 2 つの VM (構成とコンテンツは同じ) を追加し、最速の負荷分散 (合計 3 つの IP への DNS ラウンドロビン) を実行しました。苦情は減りましたが、ロシアのユーザーの読み込み時間は 1 分以上かかり続けました。ここからゲームを何度もダウンロードしようとしましたが、それでも 10 秒かかり、違いはありませんでした。静的コンテンツ サーバーには国内および国際ピアリングが同等であり、負荷が低いときはすべてのロシアのユーザーも 10 秒でダウンロードできますが、ピーク時にはそうではないことを考えると、考えられる理由は何でしょうか。すべてのユーザーに対して同じであるべきではないでしょうか。

PS 静的サーバーは常に十分なメモリを持っており、生成されたhttpdプロセスは50を超えることはなく、100の制限が設定されています。

編集: 質問の短い要約 - 負荷が低い場合、すべてのクライアント (ローカルおよび遠隔) がクライアントを同じ時間 (たとえば 15 秒) ダウンロードします。負荷が高い場合、ローカル クライアントは再度 15 秒間ロードし、遠隔クライアントは 2 ~ 3 分間ロードします。考えられる理由は何ですか?

答え1

に従ってこれは帯域幅が最大になったときにのみ発生するという説明、それは全く普通の動作のように聞こえるかもしれないが、利用可能な帯域幅(ラインレート)を最大にすると、パケットが失われ始め、TCPウィンドウ最適な速度にスケールアップされない長距離クライアント向け。帯域幅遅延積大きくなると、同じパイプで同じファイルをダウンロードする時間も長くなります。トラフィックシェーピング(言い換えると、パケットのキューイングと優先順位付け) 過負荷期間中に全員にとってより均等にしたい場合は、 – cnst 10月6日 4:56

答え2

答えは多くの要因によって異なります。国際速度は一定であるとは言えません。遠方のユーザーは、あなたとそのユーザーとの間のネットワークとその負荷の程度に応じて、常にパフォーマンスが低下します。

ところで、帯域幅が限界に達しているとおっしゃいましたね。サーバーのネットワーク接続の帯域幅ですか? その場合、CDN またはキャッシュ リバース プロキシが本当に必要です。

簡単な改善点をいくつか提案します:

  • Nginx を使用すると、静的コンテンツをより効率的に提供できます。
  • Cloudflare のような CDN を使用するか、それが複雑すぎる場合は、ロシアで VM をレンタルしてキャッシュ リバース プロキシをインストールし、DNS の geo IP を認識させてロシアのユーザーをそこにリダイレクトすることもできます。Cloudflare の方が実際には簡単かもしれません :)

答え3

ピアリングは国内トラフィックと国際トラフィックで同じであるとは言えません。

過去数年で状況は変わったかもしれないが、ロシアでは伝統的に、ほとんどのプロバイダーはローカルピアリングに対して料金を支払ったことがなく、MSK-IXから直接取得し、残りのトラフィックはトランジットプロバイダーによって処理されていた。

さまざまな方向のリンクは、ほとんどの場合、さまざまな容量を持っており、特定のリンクが時々飽和状態になることがよくあります (予期しないトラフィックの急増、または誰かがリンクを更新するのが面倒、またはトラフィックを増やすために追加料金を支払うなど)。これは、特にピーク時に頻繁に発生する可能性があります。

多くの場合、ピアリング ポイントまたはトランジット ポイントでは、プロバイダーは無制限の 100 Mbps、1 Gbps、または 10 Gbps に対して固定料金を支払います。トラフィックが支払った料金を超えた場合はどうなるでしょうか。一部のパケットはドロップされ、一部は速度が低下しますが、これは通常、ピーク時にのみ発生し、場合によっては一方向のみに発生します (ただし、一方向で発生した場合でも、レイテンシが増加するため、トラフィックはどちらの方向でも速度が低下し、一部のACK輻輳制御パケットも失われます)。

問題を解決するには、mtr問題が発生しているロシアのホストの 1 つに向けて、またロシアのホストの 1 つからブルガリアのサーバーに向けて。各インスタンスを 30 秒から 15 分間実行し (mtr は実行中ずっと統計を集計します)、前回の実行が完了した直後にもう一度 5 分から 15 分間実行するのが最も効果的だと思います。こうすることで、問題が発生した時間を正確に把握できます。

そうでなければ、Apache の問題である可能性もあります。おそらく、ロシアのホストのレイテンシが高いことに関係しているのでしょう。一般的に、nginx はあらゆる種類のコンテンツを提供するのに Apache よりも効率的であるため、代わりに nginx を試してみる良い機会かもしれません。

答え4

光の速度は一定であり、データは長距離光ファイバーケーブルを同じ速度で移動しますが、ソースから遠ざかるほど、通過しなければならない「ホップ」の数が多くなります。

100 マイル離れたサーバーへの traceroute を実行し、その traceroute を地球の反対側にあるサーバーと比較すると、地球の反対側にあるサーバーの方がはるかに多くのホップを通過する可能性が高くなります。

レイテンシーデータが宛先に到達するまでに途中の各ルーターを通過するのにかかる時間 (ホップ) であり、ここで問題となるのは遅延です。

関連情報