2011年11月16日、Microsoftの品川本社で行われた『Microsoft × gloops 合同セミナー 全部見せます!ASP.NETで開発した大規模ソーシャルゲーム』というエンジニア向けのセミナーにブロガーとして参加してきました!!



今回のセミナーは、Microsoftのエヴァンジェリストが語る最新テクノロジと事例の紹介のほか、成長マーケットであるモバイルソーシャルゲーム業界に注目した日本初の技術セミナーイベント。

Microsoftの開発・運用環境を使って、数々の大ヒットソーシャルゲームを開発し、月間100億PV、のべ900万人会員を誇るトップSAP(ソーシャル アプリケーション プロバイダー)である株式会社gloopsのエンジニアさんたちから、専門的なお話を聞くことができました!

メモ程度ですが、ここで紹介させてもらいますね。ソーシャルゲームが気になるエンジニアのみなさんや、ソーシャルゲーム界隈の情報を知りたいという方々のお役に立てれば嬉しいと思います。

Microsoft 砂金信一郎氏





■「Windows Azure(アジュール)」について

「Windows Azure」は汎用的なクラウドサービス。
ハードウェアの保守、パッチ、最新OSへの対応、冗長化対応までMicrosoftがやってくれる。





「Windowsってなぜかみなさん使わないんですよね」
でも、会社でソーシャルアプリ開発する場合→「Azure」使ってみようか、という会社が増えた。



AzureはAmazonとGoogleAppエンジンを真似して全力で作った、とのこと(笑)


Microsoft 新村剛史氏





jQueryやHTML5を使う人が多くなった。また、PHPやJavaなども含め、MicrosoftのAzureはそれらをトータルでサポート!

■開発ツールと技術の選択
いくつかのフレームワークを提供している。





「ASP.NET Webフォーム」…業務用Webアプリに最適。
 →開発生産性重視。豊富なサーバーコントロール。ドラッグ&ドロップでUI作成。

「ASP.NET MVC」…インターネット用Webアプリに最適。
 →HTML出力を制御。HTMLベースのUI作成。責務切り分けとテスト駆動の開発。



「VisualStudio LightSwitch」…HTMLに動的要素を組み込む。
 →動的Webサイト。HTMLにC#/VBを埋め込む。

「ASP.NET Web Pages WebMatrix」…単純なデータ入出力。
 →CRUDアプリ。Silverlightアプリケーション。データ駆動によるUI生成。

(話が早くてメモしきれない感じでした。。。)



gloops(グループス) 川方慎介氏




gloops(元はGMSという社名)、設立は2006年5月。


 川方慎介氏

ソーシャルゲームの国内市場規模


■これまでの主なコンテンツ
2007年10月にSNS「nendo」を公開。
2009年3月にSNS+ゲームサイト「REAL」を公開。
2010年2月にモバゲーのオープンプラットフォームにて「渋谷クエスト」を配信開始。
2010年7月に「大乱闘!!ギルドバトル」をリリース。会員数130万人。
2011年3月に「大争奪!!レジェンドカード」をリリース。会員数139万人。配信開始から14時間で10万人のユーザーを獲得。
2011年8月に「大熱狂!!プロ野球カード」をリリース。会員数は11月現在で170万人。
などなど、現在11コンテンツを運用。





11月のモバゲーランキングの上位。



■開発体制
1コンテンツ、7〜12人で開発。→すべてを内製にこだわっている。



会員数トータル1000万人超。
現在、社員は215人。
キラーコンテンツを投入予定。
今後は国内だけでなく、海外にも注力。


■社風
結果を評価する。個々のチェレンジを歓迎。社長でも社員でも上下関係なくフレンドリー。社長いわく「遠慮は罪」。




■給料
プロジェクトインセブティブ200万円とかも。「大入り」制度や2〜3億円を社員で山分けなんて場合もある。
半年前に入社した22歳の社員は給料1000万円!!!!




■どうしてWindows系?



→新人への教育が楽。短期間でコンテンツをリリースできる。高負荷なWebサービスを安定運用できる。


ASP.NETで開発する大規模ソーシャルゲーム gloops(グループス)CTO池田秀行氏






 池田秀行氏



1.ソーシャルゲームとは

友達とプレイすることが前提のアプリ。1回のプレイ時間が5分程度でも成り立つ。終わりのないゲーム。



■OpenSocialとは?
複数Webサイト間で使用可能なソーシャルアプリケーションのための共通API。2007年にGoogleが開発。国内ではMobage/GREE/mixi/gooなどが実装。

■リクエスト認証
2-legged OAuthの仕様に準拠。Gadgetサーバーがリクエストヘッドにaccess_tokenを付与。access_tokenを元にAPIアクセスが可能。

■APIの利用


■国内SNSプラットフォーム規模

 会員数、Mobageが3200万人。GREEが2700万人。mixiが2500万人。(2011年9月)

■膨大なアクセス量

 リリース後、12時間で10万人が登録ってすごいですね〜!

「スモールスタートは許されません!」
「プラットフォームには5秒ルールが存在します(5秒以内にレスポンスを返さないとタイムアウト)」
「3分間に1000回で強制メンテナンスに」

 昼休みなどはめっちゃアクセスあって、ヤバそう。


2.大規模サービスを支えるシステム構成

■システム構成


■インフラ構成

 11タイトルのうち1タイトルで最大50台程度のサーバー。

■高トラフィックをさばく方法

 アプリケーションの最適化。キャッシュの利用。DBチューニングが必要!

■高トラフィックをさばく方法 【1】基本的なことが一番重要

 データアクセスの最適化、シンプルな実装など。





■高トラフィックをさばく方法 - 【2】キャッシュの利用

 変更のないマスタデータはオンメモリのDataTableに保存。など。

リクエスト毎、プロセス毎、アプリ全体、あらゆる粒度でキャッシュを活用する。

■高トラフィックをさばく方法 - 【3】DBチューニング



 前提事項は、データサイズも非常に大きくなる、1億件を超えるテーブルもある、など。ディスクとメモリのアクセス速度の違いは、Disk Readが発生すると一気に遅延。シーケンシャルアクセスとランダムアクセスによって変わってくる。mdfとldfファイルについて、チェックポイントでディスクに書き込み。インデックス動作。データを絞り込んでからJOIN(コストが数万倍変わることも)。ソート処理を意識する(ROW_NUMBER関数やRANK関数など)。

■トラブル事例
データが数万から数十万件程度なら問題ない。ただし、数千万件規模になると致命的に。



オンラインでのカラム追加やインデックス追加。
大量レコードのCOUNT()→sts.sysindexesが持っている。
数万件に対してORDER BY NEWID()。

数千万件のテーブルにインデックスを使わないクエリを発行→レスポンスが返ってこない。
オプティマイザが実行プランを間違える→OPTION(OPTIMIZE FOR(@from+1, @to=5))。

インデックス付きビュー→Std EdtではWITH(NORXPAND)句が必要。
ログの自動拡張でDBレスポンスが遅延。
テーブル変数@table,一時テーブル#tableの多用でtempdbのI/Oが急増。

トラブルは尽きない
サービスが急成長し続ける限り、未知の問題は常に発生する。
ミスは必ず起こるが、2度と同じミスを押さなければいい。
失敗を通じて成長すればいい。

■DB負荷軽減のために
KVSの利用。→キャッシュを使おう。
垂直分割と水平分割。→負荷の分散。
高速ストレージの導入。

■KVSの利用

 gloopsではmemcashedとRedisを利用。

■memcashed


■Redis


■KVSの使いどころ

 数千万件の書き込みをいちいちデータベースを使ってたら大変なので、一時的なデータストアとして使う。読み書きが高速という特性を生かし、更新頻度の高いデータを管理するのに良い。ゲームだと、ボタンを連打して経験値が増えて、スタミナが減って、達成率が上がって、など。適切なタイミングでバックアップをとるケースもある。

■DBの分割について

DBのボトルネックはI/O

 行きつくところは、ほとんどはディスクI/O。

高速ストレージの導入

 gloopsではPCI ExpressのSSDを導入(FusionIO)。


3.ソーシャルゲームの運用

■開発スタイル
1年半で13タイトルリリースし、クローズは2タイトル(最短命は1週間)。開発期間は2ヶ月程度。開発と運用は100%内製。サービスはリリースしてからが始まり!

■運用スタイル

 7〜12名の回初チームで、少人数で企画やアイディアを出す。高速PDCA(仮説・改善の繰り返し)。

■高速PDCA(仮説・改善の繰り返し)を実現する開発

 ドキュメントは書かない。基本事項はwikiに。

■一番大切なのは

 正しく技術を理解して、きちんとWebアプリを作ること!!

■今後に向けて
アプリケーションアーキテクチャの改善。ビッグデータからデータ分析する基盤の充実。Azure環境での動作検証を行なっていく。



懇親会の中では、gloopsの中でものすごくお給料を貰っている社員の事例で挙げられていた長谷川祐介さん(ソーシャルゲーム事業本部 アプリケーション開発部長兼プリンシパルインフラストラクチャーアーキテクト)とたっぷりお話させていただきました。

また、守永宏明さん(ソーシャルゲーム事業本部 アプリケーション開発部 アプリケーショングループ リードエンジニア)からは、実はエンジニアの人数は全社員のうち2割程度しかいないとのことでした。2ヶ月ごとに新しいコンテンツを生み出しているgloopsとしては、意外と少人数だったことに驚きました。


gloopsは成果に応じた給料のほかにさまざまな評価があるようで、年収が4ケタ万円のエンジニアが多いとのこと!講演の中にもあったように、入社して半年の22歳の人が1000万円近くの給料をもらうなど、想像を絶する高い給料です。
もちろん、開発の現場ですから大変なことも多いと思います。しかし、みなさんは楽しみながら働いているとのこと。

すべてを内製(自社)でやるということから、最初のアイディア出しから自分たちが携われるため、それが自分の作品であるかのように熱中できる。受託開発のようなやらされてる感がないのも良いんでしょうね〜。
やる気も出るし、それが成果につながればお給料にも反映される。しかも、楽しい。羨ましいです!!

いや〜、専門知識のない僕には難しいセミナーでしたが、改めてソーシャルゲーム業界を知る機会になり、とても充実した時間となりました。Microsoftさん、gloopsさん、ありがとうございます!



ソーシャルゲームはなぜハマるのか ゲーミフィケーションが変える顧客満足
深田 浩嗣
ソフトバンククリエイティブ
売り上げランキング: 642