web-dev-qa-db-ja.com

スループット;設計のようなC10Kのキャパシティプランニングヘルプ

私は、クライアントが接続して接続を維持するネットワークサービスを設計しています。モデルはIRC s2s接続を差し引いたものからそれほど遠くありません。

キャパシティプランニングの方法、特にクライアントとの間のメッセージの処理に関連するシステムリソースのコストを理解するのに役立つ可能性があります。

100万のクライアントを同じサーバーに接続しようとした記事があります[1]。もちろん、これらのクライアントのほとんどはテストで完全にアイドル状態でした。クライアントが5秒ごとにメッセージを送信した場合、システムは確実にひざまずきます。

しかし...どうやって手を振るのを減らしますか、そしてあなたは知っています、測定そのような限界点?

クライアントからTCPソケットを介してカーネルに送信され、アプリケーションによって読み取られるメッセージについて話します。データはメモリ内で1つのバッファから別のバッファにシャッフルされます。メモリスループット(「5GT/s」[2]など)を考慮する必要がありますか?

TCP/IPバッファ、予想される帯域幅、およびメッセージの処理に必要なCPUリソースによる、基本的なメモリ要件を測定できると確信しています。私が「スループット」と呼んでいるものについては少し薄暗いです。

助けて!

また、誰かが本当にこれをしますか?または、ほとんどの人は手を振って現実の世界が提供するものを見て、適切に反応しますか?

[1] http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-3/

[2] http://en.wikipedia.org/wiki/GT/s

3
z8000

クライアントがTCPソケットを介してカーネルに送信し、アプリケーションが読み取るメッセージについて話します。データは、メモリ内で1つのバッファから別のバッファにシャッフルされます。

いいえ、そうではありません。とにかくそれをきちんとやればそうではありません。 Linuxの場合、sendfile(2)およびsplice(2)システムコールを検索する必要があります。他のカーネルにも同様のゼロコピー機能があると思われますが、AFAIKでは標準化されていません。

実際には、プログラムをできるだけ単純に記述し、ボトルネックがどこにあるかを測定し、改善し、測定し、改善します...ボトルネックを予測することは困難であり、時期尚早の最適化がすべての悪の根源です(Knuthが述べたように)。

1
Krunch