企画特集
-
満足な転職、不満足な転職
入社後の満足と不満足の分かれ目とは?!
納得いく転職をする為の転職活動での留意点 -
7万円台のウルトラブックも!
2012年春モデルの情報をいち早く掲載
HPのお得な情報や最新情報が満載 -
iPadにも対応した地図アプリ
つながらない場所や災害時にも役立つ!
「MapFan for iPhone」を徹底レビュー -
スマホ端末の差別化の鍵となるか
CESでも注目されたDTS Ultra Mobile
サラウンドの未来と海外事情を探る -
「出入口」を固め、攻撃を防御する
従来の防御が使えない!?複合的手法による
脅威から企業システムを守るために -
唯一無二のダブルHDDレコーダー
内蔵HDDとiVDRの「ダブルHDD」搭載!
多機能レコーダーのアドバンテージを探る -
世界と戦うコミュニケーション環境
多様なボイスコミュニケーションを実現する
クラウド型プラットフォームとは? -
もはや神話な、クラウドの思い込み
よくある「5つの勘違い」の真実とは?
IT担当者必見の、目覚めの書を公開 -
漫画で解説 クラウドのITリソース
管理者は、OS、仮想環境の混在に悩む
クラウド環境に必要な3つの運用サイクル -
HP 3PARがデータ急増時代を救う
「使いたい時、使いたいだけ」を実現
今年検討すべき理想のストレージを考える -
iPad 2を充電ケーブルから解放
「エアボルテージ for iPad 2」が実現する
ワイヤレス充電の実力と活用シーンを検証 -
雑然としたデスクは雑念を生む!?
ScanSnap × Evernoteのベストコンビが
仕事の能率を劇的に向上させる -
クラウドサービスの事業戦略に迫る
「創世期」から「成長期」へ突入
国内ベンダーはどう「進化し続ける」のか?
注目コンテンツ
- 「iPad 3」、発売は3月か--LTEに対応の可能性
- 「2012年は次のauへ」--3M戦略スマートパスポート
- 米ヤフーを再び象徴的ブランドに--新CEO
- インテルのウルトラブック戦略が明らかに
- 特集 : 世界最大の家電ショーCES
- 2012年のIT潮流を把握する--年末年始の特別記事を一気読み
- 仕事で活用するアプリを探す「ビジネスアプリセンター」
- ミクシィはソーシャルコマース参入の年--mixiタウン構想が本格始動
- 未来を開く新「はてなサービス」の作り方--危機感を持ちつつチャレンジ
- モジラが重視する“ものづくり”視点
- 超薄型ノートPC「ウルトラブック」比較
- スマホの電池切れから停電時まで対応するバッテリ集
- 軍用試験に耐えたスリムな最強iPhoneケース「LIFE PROOF」
読まれている記事
梅田サロン中止のお詫び、およびアーキテクチャ変更についての技術詳細レポート
プロフィール
最近のエントリー
-
スティーブ・ジョブズとぼく
2011/10/07 -
首都圏のみなさんへ:西へ行こう
2011/03/16 -
ランキングのつくりかた
2011/01/13 -
NoSQLの成功は1:10問題にかかっている
2010/09/20 -
WWDCとLightBike 2とiPhone 4
2010/07/01
先週末に予定されていたJTPA企画の梅田さん主催オンラインサロンですが、会場に多くの人が集まるにつれてLingrが重くなってしまうという事態に陥ってしまい、まるでイベントの体をなさないまま時間が過ぎてしまい、あえなく中止となってしまいました。
当イベントを楽しみにしていた皆様、そして梅田さんはじめJTPAスタッフの方々には、本当に申し訳なかったと思います。ここに改めてお詫び申し上げます。
Macworld 2007のときには180人を収容して何の問題もなく快適に使えていたので、「1000人はわからないけど、200人ぐらいなら大丈夫だろう」とたかをくくっていたのが間違いでした。
今回はその反省も含めて、内部で検証した技術情報をすべて公開し、どのような問題に直面し、どのように解決にあたっているのかをお伝えすることで、特に技術者の皆さんに役立つフィードバックにしたいと思います。
■今回のアーキテクチャの変更について
まず前提としてご理解いただきたいのは、Lingrはインスタントメッセンジャーのような1対1の通信ではなく、1つのイベントが発生するごとにN人に一斉配信しなければいけない=N人全員の状態を同期させなければならないIRC型のアーキテクチャなので、ひとつのルームに参加する人数が増えると単純増加ではなくて級数的に問題が大きくなるということです。
すごく単純化して言えば、あるルームへの参加者N人中の1人あたりの平均的な信頼性を R (0<R<1) とすると、ルームの信頼性 = RN という感じで急速に信頼性が減衰していくモデルです。
これはComet技術を採用することによる「大量の開けっ放しコネクション問題」を乗り越えた他の企業、たとえば Google (GTalk in Gmail) や Meebo でさえも解いたことがない、まったく新しい種類の技術的な問題だといえます。
上記をふまえて、今回の現象を理解する前提として、1月25日のリリースで行われたバックエンドのアーキテクチャ変更についてご説明したいと思います。
新しいアーキテクチャの図はこちら。
主な変更点としては、
- pingをクライアントから直接打たず、observeを発行した時点でChat Serverが代替わりしてくれるようにした(クライアント側での処理をサーバ側へオフロードした)
- Cometを使ったobserveのループにおいて、レスポンスを返してから再接続までの瞬間に発言されたメッセージを漏らさないため、observe発行の際にはクライアント側で受け取った最終のevent-idを申告させ、これとサーバ側で持っているevent-idにずれが検出された場合(クライアント側が遅れていた場合)には即座にChat Serverがobserveをクライアントへ返してgetというまとめ読みメソッドへとリダイレクトさせていたのだが、このget処理もChat Serverが代替わりしてくれるように変更。つまりクライアント側ではobserveからの戻りだけを意識すればよくなった。
これらの変更点は、すべてAPIでアプリケーションを開発しやすくするために行った変更でした。pingがなくなることでクライアント側ではタイマー処理がまるまるひとつ不要になり、getがなくなることで、クライアント側でリダイレクトをハンドリングする必要なくなり、とてもシンプルなループを書けばすむようになりました。
ところが、今回発生した問題は以下のようなものでした。
- 多人数が一斉にひとつの部屋に集まると、1秒間に数〜数十ものイベントが発生する。(いわゆる発言だけに限らず、部屋に入る、部屋を去る、ニックネームをセットする、などもすべてひとつのイベント)しかも、その全てのイベントが全員に毎回マルチキャストされるので、掛け算でSocket I/O負荷が集中する。
- 1秒間に数〜数十ものイベントが発生すると、ほぼ全てのクライアントで自分が持っているevent-idがサーバ側の最新状態より遅れてしまうので、ほぼ全てのクライアントからのobserveリクエストがWeb Serverに対してgetを要求するものになる。
- あまりに多くのクライアントがgetを要求するため、Chat Serverの全ワーカースレッドがgetをWeb Serverに対して発行した状態でブロックされる。
- get要求を受けているWeb Serverのほうでは、そもそもRailsの負荷が高くなっているところへ、enterやsayなどのイベントをリアルタイムにChat Serverにnotifyしようとしても、Chat Serverのほうでスレッドが飽和しているためにどんどんキューに詰まっていく一方となり、まったく配信されない。そしてRails側の処理もnotifyの完了を待つためブロックされてしまう。=いわばデッドロック状態ということになる。
- notifyによる配信が完全に途絶えた結果、誰一人としてリアルタイムにイベントを受け取れるクライアントがいなくなり、全員がgetモードへと移行する。
- さらに、全体のサイクルがどんどん遅くなっているので、クライアントがgetの結果をobserve経由で受け取ったときには常にevent-idが古くなっているため、ますますgetに依存するようになる。20秒毎にタイムアウトで空いたRailsをつかって細々とgetが処理されていくが、全然追いつかない。
- つまり結果としてWeb Serverがパンクした状態でさらにgetループ(=インターバル・ゼロのビジーポーリング)に陥ってしまうので、ますますWeb Serverの負荷が増える、という最悪の事態に。
もうこうなってしまうと何が起きても不思議ではありません。
アーキテクチャの変更前は、getはブラウザからWeb Serverへ直に要求されていたので、少なくともChat Serverがgetによってブロックされ、それがデッドロックを引き起こすという問題は起きたことがありませんでした。
他にもいくつか小さな問題点はあるのですが、一番クリティカルなのは上記の問題でした。とにかくgetストーム状態に落ち込んだらどうにも打つ手がありません。
これに対応するために、現在ダニーが取り組んでいるのは以下の方法です。
- getを同期処理にするのをやめ、BackgrounDRbを使用して非同期にする。つまり、Railsのほうではgetリクエストを受け付けたら即座にChat Serverにレスポンスを返し、実際の処理はRailsから分離された別プロセス(BackgrounDRb)で行い、ここから別便でChat Serverに届けるようにイベントチェーンすることで、誰かが誰かにブロックされる部位を極小化する。
- いつもChat Serverはスカスカ、Web Serverが忙しいという傾向にあるので、サーバの構成比を見直し、Web Serverの比率を高くする。もちろんJettyのスレッドプール数もチューニングする。また、サーバ自体も追加する。
上記もまだ、仮説と実装と検証を繰り返す過程にあるので、最終的にどうなるかはわかりません。
他にも、
- 全てのイベントデータにはoccupantsという、anonymous observerも含めた全員分の参加者リストが毎回含まれているので、参加者が200人もいると、それだけで毎回発行されるイベントデータが巨大になった。
- レスポンスが遅くなればなるほどユーザがブラウザの再読込ボタンをクリックしてしまう確率が上がった。(再読込はダントツで負荷が高いが、こういうときのユーザのふるまいとしては当然なので仕方がない)
- 多数のLingr Radarが自動でリトライを続けたのでさらに負荷が上がった。
などなど、付随する小さな問題はいくつも考えられるのですが、どれもgetストーム問題によるデッドロックがroot causeであり、これさえ解決されれば自然と解消する問題なので、こいつから順番にやっつけているところです。
あとは Hot Rooms / Hot Tags の計算でボトルネックになっていたrecent messagesのカウントをmemcachedにキャッシュしたり、可能なところではどんどんフラグメント・キャッシュを使ったり、Railsを1.2.1に上げることでルーティングまわりが若干速くなったりと、パフォーマンスの改善については総合的な見直しを進めています。
近いうち、予行演習をかねて何かIT関連のネタでチャットイベントをやるかも知れません。そのときにはまた改めて告知させていただきますので、よろしくおねがいします!
♪ 中島美嘉 / 見えない星 (日テレ系水曜ドラマ「ハケンの品格」主題歌:大学時代からの親友・長瀬弘樹が作詞作曲を担当しました。おめでとう!)
最新ブログエントリー
-
システムズ・レジリエンス
Hiroshi Maruyama's Blog/ 2012-02-13 07:51:33 -
スティーブ・ジョブズに学ぶ日本の社会復興
放送と通信の地殻変動/ 2012-02-11 17:28:03 -
IT商材を効果的に売る方法 ~セミナーマーケティング活用法~ その3 企画編 後編
中小ソフトハウスが下請け脱却を目指す時に読むブログ/ 2012-02-09 18:24:32 -
脱原発世界会議報告(2)
IT's Big Bang! -- IT世界の宇宙的観察誌/ 2012-02-06 16:26:54 -
成長神話への違和感 ~ノマドとファイナンス~ (後編)
村上敬亮 情報産業の未来図/ 2012-02-06 01:31:09
今日の主要記事
-
サイブリッジがインマイバッグを譲受、新会社設立へ--元プーペ森永氏も参加
-
auメール障害の影響は615万人--過去2番目の規模で総務省動くか
-
毎月1万ユーザーが増加中のRetty、gooに情報配信--ポータルとの連携模索
-
イメーション、CLEFブランド初のBAヘッドホンを発売
-
gumi、コントロールプラスのソーシャルゲーム事業を譲受
デジタル製品主要記事
イメーション、CLEFブランド初のBAヘッドホンを発売
「iTunes Store」でハッキング被害か--複数のユーザーが報告
アップル、モトローラにドイツで特許1件について勝訴
携帯電話市場の第4四半期利益、アップルとサムスンで95%占める
アップル、米国における「Galaxy Nexus」の販売差し止めを申し立て
卵型スピーカ「Olasonic」の無償貸出キャンペーン第2弾
特集 by 楽天市場






