nissy.dev

C10K問題

1 min read
Table of Contents

C10K 問題 = クライアント 1 万台問題

  • サーバーのハードウェア性能は問題ないにもかかわらず、クライアントの同時接続数が多くなるとサービスの応答が遅くなること
  • Apache でよく発生していた問題
  • Apache : マルチプロセスのプロセス駆動アーキテクチャ

原因

  • プロセス数の上限
    • プロセスに振られる ID には上限がある (例: 32bit Linux 32767)
  • マルチプロセスによるコンテキストスイッチのコスト
    • コンテキストスイッチ :1 つの CPU が処理するプロセスを切り替えるためにかかるコスト
    • プロセスはメモリ空間を共有しないので、新たなメモリ空間を確保するのに時間がかかる
  • ファイルディスクリプターの上限
    • ファイルディスクリプター : ファイルや I/O アクセスに当てられる ID のこと
    • リクエストごとに DB サーバーに接続すると、プロセス ID 同様に上限に達してしまう

解決策

  • サーバー台数の増加
  • 非同期・ノンブロッキングの I/O (=イベント駆動)
    • シングルプロセス・シングルスレッドで DB コネクションとかも使い回す
    • Nginx : シングルスレッドでのイベント駆動アーキテクチャ

参考資料