私の内部ABテストは、サーバーが1秒あたり3kヒットで1kの同時実行を処理できることを意味すると誤って想定していました。
現時点での私の理論は、ネットワークがボトルネックであるということです。サーバーは十分な速度で十分なデータを送信できません。
1kの同時実行でのblitz.ioからの外部テストでは、サーバーが1秒あたり180しか返せないため、ページの応答時間が長くなるにつれて、ヒット/秒が180で上限に達することが示されています。
私はnginxから空のファイルを提供し、それをベンチに入れました:それは並行性で1:1にスケーリングします。
IO / memcachedのボトルネック(nginxは通常memcachedからプルします)を排除するために、ファイルシステムからキャッシュされたページの静的バージョンを提供します。
結果は元のテストと非常に似ています。約180 RPSに制限されています。
HTMLページを半分に分割すると、RPSが2倍になるため、ページのサイズによって制限されます。
ローカルサーバーから内部的にApacheBenchを実行すると、フルページとハーフページの両方で、高い転送レートで約4k RPSの一貫した結果が得られます。転送速度:62586.14 [Kバイト/秒]受信
外部サーバーからABにアクセスすると、約180RPSになります-blitz.ioの結果と同じです。
意図的なスロットルではないことをどのように確認できますか?
複数の外部サーバーからベンチマークを実行すると、すべての結果が悪くなり、ベンチマークサーバー/ blitz.ioのダウンロード速度の問題ではなく、MYサーバーのアウトバウンドトラフィックに問題があると思われます。
だから、サーバーが十分な速度でデータを送信できないという結論に戻りました。
私は正しいですか?このデータを解釈する他の方法はありますか?毎秒180ヒットを処理できる複数のサーバーと負荷分散をセットアップするソリューション/最適化ですか?
私はサーバーの最適化にかなり慣れていないので、このデータを解釈する確認をいただければ幸いです。
アウトバウンドトラフィック
アウトバウンド帯域幅についての詳細は次のとおりです。ネットワークグラフには、16 Mb / sの最大出力:16メガビット/秒が表示されます。全然聞こえない。
スロットルについての提案のため、私はこれを調べて、linodeのキャップが50 Mbpsであることを発見しました(明らかに、ヒットに近づいていません)。100 Mbpsに上げました。
linodeはトラフィックを制限し、ヒットさえしませんので、これは私のサーバーが実際に最大100mbpsを出力できるはずですが、他の内部ボトルネックによって制限されることを意味しますか?私はこの大規模なネットワークがどのように機能するのか理解していない。文字通り、HDDから読み取れる速度でデータを送信できますか?ネットワークパイプはそれほど大きいですか?
結論として
1:上記に基づいて、LBの背後にあるサーバーごとに正確に180RPSのマルチnginxサーバーセットアップの上にnginxロードバランサーを追加することで、180RPSを確実に上げることができると考えています。
2:linodeに50 / 100mbitの制限があり、それがまったくヒットしない場合は、単一のサーバーセットアップでその制限にヒットするためにできることがあるはずです。ローカルで十分な速さでデータの読み取り/送信ができ、linodeが50mbit / 100mbitのキャップを持つことさえ気にする場合、検出する方法がわからないキャップをヒットできない内部ボトルネックが存在する必要があります。正しい?
この質問は今や巨大で曖昧なものであることに気づきましたが、それをどのように凝縮するのかわかりません。私が行った結論については、ご意見をお寄せください。