C10K問題
1 min read
目次
C10K 問題 = クライアント 1 万台問題
- サーバーのハードウェア性能は問題ないにもかかわらず、クライアントの同時接続数が多くなるとサービスの応答が遅くなること
- Apache でよく発生していた問題
- Apache : マルチプロセスのプロセス駆動アーキテクチャ
原因
- プロセス数の上限
- プロセスに振られる ID には上限がある (例: 32bit Linux 32767)
- マルチプロセスによるコンテキストスイッチのコスト
- コンテキストスイッチ :1 つの CPU が処理するプロセスを切り替えるためにかかるコスト
- プロセスはメモリ空間を共有しないので、新たなメモリ空間を確保するのに時間がかかる
- ファイルディスクリプターの上限
- ファイルディスクリプター : ファイルや I/O アクセスに当てられる ID のこと
- リクエストごとに DB サーバーに接続すると、プロセス ID 同様に上限に達してしまう
解決策
- サーバー台数の増加
- 非同期・ノンブロッキングの I/O (=イベント駆動)
- シングルプロセス・シングルスレッドで DB コネクションとかも使い回す
- Nginx : シングルスレッドでのイベント駆動アーキテクチャ