Windows 2008 R2 サーバーで実行されているサービスによって公開されているソケット接続を開くクライアント デバイスが多数あります。同時クライアント接続数のハード制限とは何か疑問に思っています。
2 に答える
この記事によると、1 つのハード リミットは (だった) 16,777,214 です。実際の制限は、アプリケーションによっても異なります。たとえば、接続ごとにスレッドを作成する場合、実際の制限は、ネットワーク スタックからではなく、スレッド数の制限から生じます。プロセスが持つことができるハンドルの数にも制限があります。
サーバーに適切なアーキテクチャを選択すると仮定すると、制限はメモリとCPUに関連します。私見あなたはマーティンが言及する厳しい限界に決して達することはありません:)
したがって、私見では、決して到達しない理論上の制限について心配するのではなく、アプリケーションを設計する方法と、アプリケーションをテストして、現在維持できるクライアント接続の最大数を決定する方法について考えてください。特定のハードウェア上のアプリケーション。私にとって重要なことは、0日目からパフォーマンステストを実行することです(これについて説明しているブログ投稿については、こちらを参照してください)。最新のオペレーティングシステムとハードウェアを使用すると、非常にスケーラブルなシステムを構築できますが、単純な日常のコーディングと設計のミスにより、そのスケーラビリティが簡単に浪費される可能性があるため、常にパフォーマンステストを実行して、障害物を構築していることを確認する必要があります。パフォーマンス。プロジェクトの最後に戻ってこの種の間違いを修正することはできません。
余談ですが、低スペックのVMを搭載したWindows 2003 Serverでいくつかのテストを実行し、オーバーラップI / O(I / O完了ポート)ベースの設計に基づいて、シンプルなサーバーで70,000を超える同時アクティブ接続を簡単に実現しました。詳細については、この回答を参照してください。
私の個人的なアプローチは、決定したテクノロジを使用してサーバーのシェルをすばやく組み立てることです(I /O完了ポートと最小限のスレッドを使用するアンマネージC++を使用します) 。詳細については、このブログ投稿を参照してください。次に、アプリケーションのストレステストを実行できるクライアントまたは一連のクライアントを構築し、サーバーロジックを実装するときにテストクライアントを更新して実行し続けます。サーバーをさらに複雑にするにつれて、最大同時クライアント数が徐々に減少することが予想されます。スケーラビリティが大幅に低下すると、最新のチェックインを調べて、不幸な設計上の決定を探す必要があります。