分析パッケージを作成していますが、プロジェクトの要件では、1日あたり10億件のヒットをサポートする必要があります。うん、「億」。言い換えれば、1秒あたり12,000ヒット以上が持続し、できればバーストする余地があります。これには複数のサーバーが必要になることは知っていますが、「より多くのハードウェアを投入する」前に、各ノードのパフォーマンスを最大にしようとしています。
現在、ヒットトラッキング部分が完了し、最適化されています。リクエストをそのままRedisに保存するだけです(後でHadoopで処理するため)。アプリケーションは、ゲートウェイ用のgunicornを備えたPython / Djangoです。
私の2GB Ubuntu 10.04 Rackspaceサーバー(本番マシンではない)は、毎秒約1200個の静的ファイルを提供できます(単一の静的資産に対してApache ABを使用してベンチマーク)。比較すると、静的ファイルのリンクをトラッキングリンクと交換しても、1秒あたり約600のリクエストが発生します-これは、同じ静的アセットを提供するよりも2分の1だけ遅いため、トラッカーが最適化されていることを意味すると思います繰り返します。
ただし、数百万件のヒットでベンチマークを行うと、いくつかのことに気付きました-
- すべてのNginxログをオフにしているため、ディスク使用量はありません。カスタムコードはリクエストの詳細をRedisに保存するだけです。
- 一定ではないメモリ使用量-おそらくRedisのメモリ管理のため、私のメモリ使用量は徐々に上昇し、その後低下しますが、一度もボトルネックになったことはありません。
- システムの負荷は2〜4前後に留まり、最も重いベンチマークでもシステムは応答します。また、(他の)サーバーが600リクエストを実行している間、目に見える遅延はほとんどなく、手動でhttp://mysite.com/tracking/pixelを表示できます秒。
- 短いテスト、たとえば50,000件のヒット(約2mを要する)を実行すると、安定した信頼性の高い1秒あたり600件の要求を受け取ります。より長いテストを実行すると(これまでに最大3.5mまで試行されました)、r / sが約250に低下します。
私の質問-
a。まだこのサーバーを使い切っているように見えますか?1,200 / sの静的ファイルnginxのパフォーマンスは、他の人が経験したものと同等ですか?
b。そのような大容量アプリケーション向けの一般的なnginxチューニングはありますか?私は64に設定されたワーカースレッドと8に設定されたgunicornワーカースレッドを持っていますが、これらの値を微調整してもあまり助けにも害にもならないようです。
c。着信接続を制限する可能性のあるLinuxレベルの設定はありますか?
d。長時間のテストでパフォーマンスが250r / sに低下する原因は何ですか?繰り返しますが、これらのテスト中にメモリが限界に達することはなく、HDDの使用はゼロです。
事前に感謝します、すべて:)
編集これ は私のnginxの設定です-http ://pastie.org/1450749-それはほとんどバニラで、明らかに脂肪が取り除かれています。