9月1日、ゲーム開発者向けカンファレンス「CEDEC 2010」において、SNS「GREE」を運営するグリー株式会社(以下 グリー)が『大規模ソーシャルゲームのつくりかた ~60分でわかるサーバサイド技術~』と題するセッションを講演した。
一日あたり億単位のトラフィックを捌くインフラはどうなっているのか。技術者2名が解説したインフラ構築のノウハウや、ソーシャルゲームと一般のオンラインゲームとの違いについて紹介する。
オンラインゲームとソーシャルゲームとの違い
最近テレビCMでも目にする機会が多くなってきたSNS(ソーシャルネットワーキングサービス)の「GREE(グリー)」。2010年6月時点の数字で、会員数2059万人、月間353億ページビューという言わずとしれた大人気サイトだ。中でも携帯電話向けソーシャルゲームが特徴的で、専用機向けのゲームと比べるとコアゲーマー以外のプレイヤーも多く、利用規模の爆発につながりやすい。実際、サーバー台数は数千台規模、ピーク時の最大同時接続数は画像を除いて1万を超えるという。
セッション前半では同社の増山和幸氏が、現在稼動中のアプリを題材にコンシュマー向けオンラインゲーム(ここではサーバー常時接続型)と携帯ソーシャルゲームとの比較を行い、大規模ソーシャルゲームのシステム構築に考慮すべきポイントを総括した。
以前大手ゲーム会社でゲームサーバーのプログラミングを担当していた経験がある

システムの構成はほぼ同じだが、いくつか特徴が異なる
まずシステム構成についてはオンラインゲームとソーシャルゲームで大きな差異はないと述べ、アクセスの非同期/同期、ステートフル/ステートレス、世界の境界のあり/なし(オンラインゲームでは接続するサーバーでユーザーが区分けされることが多い)、要求されるレイテンシの度合いといった両者の違いを説明した。
アクセスはどちらも夜から深夜にかけて増える傾向があるが、ソーシャルゲームではさらに朝8時、昼12時前といった通勤通学、昼休みの時間帯も伸びる傾向があるようだ。
クライアント(Webブラウザ)、プロキシ、フロントエンドサーバー(Webサーバー)、バックエンドサーバー(DBサーバー)、と大きな違いはない


オンラインゲームの特徴は「リアルタイム性」
続いて「釣り★スタ」というアプリを例に、より具体的な違いが解説された。釣り★スタは、3名のエンジニアで作成し2007年5月にリリースしたFlash Lite製の釣りゲームで、最大同時プレイヤー数は25万人。釣り場が分かれている、レベルが上がると釣り場の選択肢が増える、釣果に応じたポイント取得やランキング更新がある、といったゲーム性を有している。
これをオンラインゲームとして作る場合、まず釣り場ごとにフロントエンドサーバーを用意し、ユーザーのプレイ開始から終了までプロキシーサーバーはクライアントおよびフロントエンドサーバーと常時接続する。ログイン時には、バックエンドサーバーから必要なデータをフロントエンドサーバーのメモリーにロード(ソーシャルゲームと一番異なる部分)。釣り上げに成功したらメモリー上でデータを更新。ランキングなどの全体に関わるデータだけ先にバックエンドサーバーに送信して、結果をフロントエンドサーバーにプッシュして戻し、クライアントにも状態変化を伝える。即時性が必要のないデータは後からバックエンドサーバーに反映する、といった一連の処理が行われる。
このシステムの最大の特徴は「リアルタイム性」にあり、同じサーバーに接続しているプレイヤーどうしでチャットや協力プレイが行える。一方、一台あたりのサーバーリソースに限界があるため、同じ釣り場(サーバー)で遊べる人数の制限や、異なるフロントエンドサーバーに所属するユーザー間の隔たり、といった問題を抱えている。
プレイヤーは特定のフロントエンドサーバーに接続する
