[Analysis]
Web2.0の先にあるC10K問題
2007/01/09

個々のクライアントがサーバに要求する処理量は小さなものでハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする――。これが最近Web開発者の間で話題となっている「C10K問題」(クライアント1万台問題)だ。
プロセス番号が足りなくなる
パンクするのは例えばプロセス番号だ。
Ajaxの実装として最近注目されている技術に“Comet”(コメット)と呼ばれるものがある。HTTPのセッションをあえて切断せずに、サーバとクライアント間でつなぎっぱなしにするテクニックだ。Cometを使えばクライアントからのリクエストに応えるだけでなく、サーバ側からも不定期に情報を送り出すことができる。例えば、Web上でチャットサービスを実装するには、通常はクライアント側からサーバに一定間隔でポーリングすることで、ほかのユーザーの発言分をサーバから取得して表示するが、Cometのモデルを使えば、誰かが発言したとたん、サーバ側からすべてのクライアントに差分の発言テキストを送信できる。
CometとAjaxを組み合わせることで、きわめてリアルタイム性の高いWebアプリケーションを作成できる。チャットサービスの「Lingr」、Wikiのように編集できてリアルタイムに編集内容が変化する付箋紙サービス「Wema3」、Web上のホワイトボード共有サービス「Thinkature」などは、すべてCometを使ったサービスだ。
Lingrのような軽いサービスでネックとなるのはプロセッサパワーでもストレージのI/O速度でもネットワーク帯域でもない。同時接続ユーザー数が万のオーダーに達したとき、現在のOSやサーバのプログラミングモデルが現実に合わなくなってくることだ。
LinuxなどUNIX系のOSでは、メモリ上で実行中のプログラムに与えられるプロセス番号は符号付き16ビット整数だ。つまり、デーモン(サーバプロセス)も含め、すべての実行中のプロセスには1〜32767までのユニークな番号が与えられていることになる。ところが、HTTPサーバのApacheなどはクライアント1台からのリクエストに対して1つのプロセスを生成するため、必然的に同時接続数は3万クライアント程度が上限となる。IRCのように参加者が能動的に発言するとは限らず、時間があるときや必要なときにだけ発言するような利用法であれば、ハードウェア性能的にもネットワーク性能的にも1台のサーバで10万クライアントを扱うことができても、プロセス番号が足りないという理由でこのモデルは破綻する。
このように、1万クライアントには対応できても10万クライアントには対応できないという状況が「C10K問題」だ。Cはクライアント、10Kは1万を示す。
1スレッドで多数のクライアントに応える
1クライアントに1プロセスというモデルは、軽い処理をこなすには、いかにも無駄が多い。では、マルチスレッドにして1スレッドに1クライアントを割り当てればいいかというと、それでもまだ別の問題がある。多くのOSでは、万単位のスレッド生成ということを前提として設計されていない。例えば、特別な設定をしていないLinuxでは、1スレッド当たりデフォルトで2MB程度のスタックメモリを割り当てる。1万クライアント=1万スレッドであれば20GBのメモリが必要になる。これでは、仮想メモリを使うとしてもパンクしてしまう。
もちろん、64bit対応のLinuxを使って力技で解決してもいい。プロセス番号不足も、仮想化技術を使って1台の物理サーバ上に仮想サーバをパラレルに走らせれば、ある程度はスケールアウトが可能だろう。しかし、C10K問題の本質は、やはりOSやサーバプロセスの設計が、Web2.0的なサービスに不向きになってきていることにある。最新のLinuxでは3万2000個を超えるスレッドを扱ったり、スレッドごとに消費するスタックの量を減らすことも、カーネルパラメータの設定で可能だが、まだ標準的といえるほど普及したテクニックではない。
進むノウハウの蓄積と開発環境の整備
C10K問題が及ぶ範囲は広い。すでに書いたようにサーバ側ではOSのスレッドやサーバの設計モデルがネックとなっている。膨大な数の「軽い処理」を要求してくるクライアント1万台環境では、細かなI/Oが多数発生するため、I/O関連のライブラリの整備も始まっている。現在、一部の先進的な開発者が試行錯誤しながら個別に実装しているCometについても、HTTPサーバでの対応やライブラリの整備が望まれる。実際、その名もずばり「Cometd」というプロジェクトなどが始まっている。
クライアントについても、同時接続セッション数の上限が比較的小さな数値に設定されていることも、いずれ問題となってくるかもしれない。例えばタブブラウザを使って多数のチャットルームに同時にログインしたとき、今のところ何が起こるかよく分からない。特定の実装に対する個別の組み合わせの検証はできるが、一般論としての挙動は、あまり前例がなく予測不能だ。
Ajax普及が本格化してきたのが、ノウハウの蓄積や開発環境の整備が一巡したからだとすると、Cometのようにクライアント1万台(あるいは1万セッション)を扱うC10K時代のWebアプリケーションの時代の幕開けも、もうすぐそこまで来ているのかもしれない。
関連記事
情報をお寄せください:
最新記事
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |






