【しーてんけーもんだい】

C10K問題 とは?

💡 1万人が同時にドアをノックしたら、受付係は何人必要?
📌 このページのポイント
スレッドモデル vs イベント駆動モデル 従来型(スレッドモデル) 接続1 接続2 接続3 接続10000 スレッド1 スレッド2 スレッド3 スレッド… メモリ 枯渇! 1万接続でパンク イベント駆動モデル 接続1 接続2 接続3 接続10000 イベントループ (1スレッド) epoll / kqueue 1万接続も余裕
スレッドモデル vs イベント駆動モデルの比較
ひよこ ひよこ

C10K問題ってなに?なんだか暗号みたいな名前だね!

ペンギン先生 ペンギン先生

1台のサーバーに同時に1万人がアクセスしたとき、サーバーが処理しきれなくなる問題のことだよ。Cは「同時(Concurrent)」、10Kは「1万」を意味するんだ。

ひよこ ひよこ

1万人くらいなら余裕じゃないの?

ペンギン先生 ペンギン先生

昔のサーバーは、1人のお客さんに対して1人の受付係(スレッド)を割り当てるモデルだったんだ。1万人来たら1万人分の受付係が必要で、メモリもCPUもすぐ足りなくなっちゃうんだよ。

ひよこ ひよこ

じゃあどうやって解決したの?

ペンギン先生 ペンギン先生

イベント駆動」という考え方が登場したんだ。1人の超優秀な受付係が、「誰かから連絡が来たら対応する」方式で何千人も同時にさばけるようになったんだよ。Linuxのepollとか、macOSのkqueueがその仕組みだね。

ひよこ ひよこ

nginxとかNode.jsもそういう仕組みなの?

ペンギン先生 ペンギン先生

そのとおり!nginxはApacheの「接続ごとにスレッド」モデルの限界を超えるために作られたし、Node.jsイベントループという仕組みで大量の同時接続を1つのスレッドで処理するんだよ。

ひよこ ひよこ

今でもC10K問題って起きるの?

ペンギン先生 ペンギン先生

技術の進歩でC10K自体はほぼ解決済みだけど、今度は「C10M問題」つまり同時1000万接続が話題になっているよ。io_uringやDPDK(カーネルバイパス技術)など、OSのオーバーヘッドすら回避する手法が研究されているんだ。

ひよこ ひよこ

1000万ってすごいね…!どんな場面で必要になるのかな?

ペンギン先生 ペンギン先生

リアルタイムゲームのサーバーや、IoTで何百万台のデバイスがつながるケース、大規模チャットサービスなんかだね。技術の進化とともに「同時接続の壁」は常に次のレベルに移っていくんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「C10K問題」って出てきたら「1万同時接続でサーバーがパンクする問題」と思えればだいたいOK!
📖 おまけ:英語の意味
「C10K Problem」 = 同時1万接続問題
💬 Cは「Concurrent(同時)」、10Kは「10,000」の略。1999年にDan Kegel氏が提唱した概念で、当時のサーバー技術の限界を指摘したことで有名だよ。
← 用語集にもどる