「大規模ソーシャルゲームのつくりかた ~60分でわかるサーバサイド技術~」では、グリー株式会社 藤本真樹氏、グリー株式会社 増山和幸氏が登壇し、オンラインゲームと違うソーシャルゲームのサーバー構成などを語られていました。
GREEは2010年6月時において、会員数は2059万人、ページビューは月間357億、デイリーで11億、サーバーの構成は数千台、そのほとんどがx86系サーバーを利用しているとのことです。おおよその最大同時接続数は1万、サーバーからのレスポンスタイムが0.2秒となります。サーバートラフィックの波は、オンラインゲームの波が夜から深夜に対して、携帯がメインとなるGREEでは、夜から深夜に加え、朝8時前後、昼12時前後に増加する傾向があると語られていました。
プレイヤー層はコアゲーマーではなく、カジュアルゲーマーや、ゲームをプレイしたことがない人が遊ばれているそうです。
オンラインゲームとソーシャルゲームでのサ-バー構成の違いとしては、専用クライアントを要するオンラインに対し、ソーシャルではWebブラウザがあれば良いといった違いをはじめ、Proxyに対しLVS(Linux Virtual Server)+Proxy、FrontendサーバーがWebサーバー、BackendがDataBaseサーバーといった構成になります。結論としてはそれほどの違いはないそうです。
増山氏によると、たとえば「釣り☆スタ」オンラインゲームの構成で設営した場合、ゲーム中の釣り場がいわゆるワールドサーバーとして働くため、サーバーのリソースによって釣り場の人数の限界があるといった問題や、そのためにBackendサーバーをスケーリング必要であると語られています。
では、グリー上で構成されているのはどうなっているのかという部分では、前述のブラウザーをクライアントとし、LVS+Proxyで一番負荷の低いWebサーバーに処理を割り当て、リクエストの度にユーザーデータをデータベースサーバーに格納するといった流れになるそうです。
ただ、記録媒体であるディスク上に記録するWrite部分を分散したり、なるべくディスクに書かないようにする工夫が必要と語られていました。
具体的には、ディスクへの負担を減らすためのMySQLであればレプリケーション機能を使って、データベースサーバーのSlaveを増やし、読み出しアクセスの負荷を分散するといった方法から、メモリ上に作成するファイルシステム(tmpfs)でデータを運用。またmemcached互換の分散Key Value Store(KVS)を作成/利用し、データ保存に対するディスクアクセス回数を減らしたそうです。
また、コミュニティのお知らせ機能など、メンバーにメールを一斉配信するような機能では、一斉送信を行わず、Queue(キュー)サーバーを設置し、非同期処理を行いながら、順次メール送信をしていく方法を取っているといったことが語られました。そのほかにも課金アイテムの処理では、サイバーマネーであるポイントの引き出しの前にアイテムを渡すといった処理や、高負荷によってデータがロストした場合などを踏まえ、ロストした場合はログを参照し、後日補完するといった極力ユーザーの不利益にならないようにしているそうです。
そのほかにも、データベースサーバーで何らかの障害が発生した場合や、サーバーOSなどのバージョンアップを行う時は、Master側を停止して、Slaveをマスターに格上げするという手法を取ることで、サービスを停止することなく移行するできるといった内容が語られています。