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

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氏が提唱した概念で、当時のサーバー技術の限界を指摘したことで有名だよ。
← 用語集にもどる