C10k問題は、多数のクライアントを同時に処理できるようにコンピュータネットワークスタックを最適化する問題でした。 [ 1 ] C10kという名前は、10,000の接続を同時に処理することを意味する数詞です。 [ 2 ]多数の同時接続を処理することは、 1秒あたり多数のリクエストを処理することとは異なる問題です。後者は高いスループット(それらを迅速に処理すること)を必要としますが、前者は高速である必要はなく、ネットワークソケットやその他のステートフルエンドポイントへの接続を効率的にスケジューリングする必要があります。2025年現在、この問題は既に解決されており、1台のコンピュータへの接続数は数百万に達しています。
ソケットサーバーの最適化の問題は、Webサーバーが多数のクライアントをサポートできるようにするには多くの要素を考慮する必要があるため研究されてきました。これには、オペレーティングシステムの制約とWebサーバーソフトウェアの制限の組み合わせが含まれる場合があります。提供されるサービスの範囲とオペレーティングシステムの機能、およびマルチプロセッシング機能などのハードウェアの考慮事項に応じて、マルチスレッドモデルまたはシングルスレッドモデルが好ましい場合があります。メモリ管理(通常はオペレーティングシステム関連)に関する考慮事項を含むこの側面と同時に、示唆される戦略は、I/O管理の非常に多様な側面に関連しています。[ 2 ]
C10kという用語は、1999年にソフトウェアエンジニアのダン・ケーゲルによって造語されました。[ 3 ] [ 4 ]彼は、その年に1ギガビット/秒のイーサネット上で同時に10,000クライアントにサービスを提供したSimtel FTPホストcdrom.comを例に挙げています。 [ 1 ]この用語は、その後、多数のクライアントという一般的な問題に対して使用され、接続数の増加に対しても同様の数字の略語が使用され、最近では2010年代に1,000万の同時接続を指す「C10M」が使用されました。[ 5 ]
2010年代初頭までに、単一の汎用1Uラックマウントサーバーで数百万の接続が可能になった。例としては、WhatsAppが200万以上の接続を処理している( FreeBSD上でErlangを使用する24コア)[ 6 ] [ 7 ]、MigratoryDataが1000万~1200万の接続を処理している(Linux上でJavaを使用する12コア) [ 5 ] [ 8 ]などがある。
非常に多くの接続を必要とする一般的なアプリケーションには、ファイルサーバー、FTPサーバー、プロキシサーバー、 Webサーバー、ロードバランサーなど、一度に数千人または数百万人のユーザーにサービスを提供する必要がある一般公開サーバーが含まれます。[ 9 ] [ 5 ]
著名なソフトウェアエンジニアであるダニエル・ケーゲルは、…ケーゲルのC10Kマニフェスト…10,000の同時接続というC10K問題を解決するnginx …
コンピュータも大きい。 500MHz のマシンに 1 ギガバイトの RAM と 6 枚の 100Mbit/秒イーサネット カードを搭載したものを 3000 ドル程度で購入できる。 10000 台のクライアントの場合、1 台あたり 50KHz、100K バイト、60K ビット/秒となる。 10 万台のクライアントそれぞれに対して、ディスクから 4 キロバイトを取り出し、1 秒に 1 回ネットワークに送信するのに、これ以上の処理能力は必要ないはずだ。 (ちなみに、これは 1 台あたり 0.30 ドルになる。一部のオペレーティングシステムが請求する 100 ドル/クライアントのライセンス料は、少し高く見え始めている。) つまり、ハードウェアはもはやボトルネックではない。
今回は、ハードウェア、OS、ソフトウェアに関する技術的な詳細もいくつか共有したいと思います。hw.machine: amd64 hw.model: Intel(R) Xeon(R) CPU X5675 @ 3.07GHz hw.ncpu: 24 hw.physmem: 103062118400 hw.usermem: 100556451840