イベント
[CEDEC 2013]モバイルゲームのネイティブ化でオンライン技術はどうなる? 現状分析から今後のトレンドを読み解くセッションをレポート
CEDEC 2013においても,こうしたテーマのセッションが複数行われていたが,本稿ではとくにネットワーク技術に注目したセッション「ネイティブ化が進むモバイルソーシャルアプリで求められるオンライン技術」をレポートする。
サーバーサイドではCPUがボトルネックに
コナミデジタルエンタテインメント ドラコレスタジオ マネージャー 廣田竜平氏 |
廣田氏は,テーマをサーバーサイドとクライアントサイドに分けて,現状やトレンドを語っていった。
サーバーサイドでは,現在はApache+PHPやnode.jsなどのシステムが,アプリケーションサーバーのトレンドであるという。
廣田氏がまとめたサーバーサイドのトレンド |
廣田氏はスライドに挙げた4つの中から,Apache+PHPとnode.jsについて解説した。
Apache+PHPは,やや古典的なアプリケーションサーバーだが「ソーシャルアプリではまだ主流」(廣田氏)とのことで,日本では定番として使われ続けているようだ。
一方のnode.jsについては,Apache+PHPと比較すると新しい技術で,サーバーサイドのアプリケーションをJavaScriptで記述するため,「クライアント側と同じ技術が使え,ソースが1対1で対応するので作りやすい」(廣田氏)という特徴がある。Google V8 Engineに代表される,高速なJavaScriptエンジンが登場したことで,採用例が増えているという。
ちなみに,コナミデジタルエンタテインメントではApache+PHP5.3を採用しているとのこと。廣田氏はPHP5.5に期待しているそうだ。
PHP5.5に期待する機能として「安全なシグナルハンドリング」と「性能と安定性の向上」を挙げた |
続いて,従来のWebソーシャルアプリがゲームデベロッパにもたらした功績に言及。廣田氏は「大量のPVを捌く体制と,(Webサーバーの)シビアな応答性の実現だろうと私は考えている」と語った。
ドラゴンコレクションの場合,1日のPVが4億に達したことがあり,これは大規模なポータルサイトに匹敵する数字だという。Webソーシャルアプリは,ページ遷移の度にサーバーにアクセスするため,通常のWebサイトと比べてもPVは多くなる傾向があるのだ。
大量のPVを捌く技術については,「以前は大手ポータルだけが考えればいいことだったが,ゲームメーカーがそれを考えなければいけなくなった」と廣田氏は指摘する。そして,まさにこの点が,Webソーシャルアプリの功績であると主張した。功績というと,少し違和感があるかもしれないが,ゲームデベロッパがサーバーサイドの技術を培ったことが功である,というのが廣田氏の本意ではないだろうか。
サーバーで大量のPVを捌き,かつシビアな応答を実現させたことが,モバイルWebソーシャルアプリのゲームデベロッパにとっての功績だという |
大量のPVを捌くためには,高速なデータベースが必要になる。コナミデジタルエンタテインメントでもさまざまなリレーショナルデータベース(RDBMS)やKVS(Key Value Storeの略。データベースの一種で,データと対応するキーを,ペアで記憶させることで高速に読み出せる)を利用してきたそうだが,現在はRDBMSにはMySQL,KVSにはmemcachedやkyoto Tycoonといった手堅い構成を標準として使っていると説明していた。
コナミデジタルエンタテインメントの標準的なデータベース構成。非永続型のKVSにはmemcached,永続型のKVSはKyoto TycoonやRedis,RDBMSはMySQLやPercona Server(MySQLをチューンアップした商用RDBMS)を使っているそうだ。いずれもよく知られたもので構成されている印象 |
データベースに関して,廣田氏はこの数年で「ボトルネックが変わってきた」と分析する。SSDやioDrive(サーバー向けの超高速SSD)が広く採用され始めたことで,「かつてはディスクI/OがボトルネックだったものがCPUに移りつつある」(廣田氏)というのだ。
たとえば,コナミデジタルエンタテインメントでストレージをHDDからioDriveに変えた直後には,「ディスクI/Oが使い切れないという問題が発生した。ストレージは何十倍という性能になっているのに,ベンチマークでもHDDに比べて2倍程度しか性能が出なかった」とのことだが,MySQLからPercona Serverに切り替えるとそこそこの性能が得られるようになったという。
シンプルに考えれば「Percona Serverは性能がいいね」ということになるが,そこはコナミデジタルエンタテインメントである。その違いを調べたところ,「mallocがボトルネックになっていたことが分かった」というのだ。
mallocを簡単に説明すると,メモリ領域(厳密にはヒープ中のメモリ領域)を確保する標準的なAPI(関数)である。メモリ領域を確保するだけなので軽いAPIに思えるが,実際はそこそこ重かったりもする。
とはいえ,ディスクI/O待ちが多発するHDDでは,mallocのオーバーヘッドなどはまったく問題にならないはずだ。それが問題になるほど,SSDは速いということなのだろう。廣田氏が示してくれたmallocのパフォーマンス調査結果は,デベロッパにとって大いに参考になるものだと思う。
ストレージがSSDに切り替わることで,データベースのボトルネックはCPUに移りつつあると廣田氏は語る |
コナミが調査した各種mallocの性能比較が表にまとめられている。MySQLでボトルネックになっていたのはmallocだった |
クライアントサイドではチート対策が課題
ここまではサーバーサイドの話だったので,ネイティブアプリ化による変化にはあまり触れられなかった。しかし,クライアントサイドでは大きな変化が生じているようだ。
最初に廣田氏は,ネイティブ化のメリットとして,通信量や通信頻度の削減を挙げた。4Gamer読者も経験的によく知っていると思うが,3G通信やLTEでは,極めて頻繁に切断が起こる。ゲームがネイティブ化するとクライアント側のプログラムの自由度が高くなるので,例えばプレイ中に回線が途切れたとしても,その間のプレイデータをクライアント側に保存しておき,回線がつながってからサーバーにまとめて送るといった,プログラム面の工夫で通信頻度が抑えられるわけだ。
だが,それで問題になるのが,チートだと廣田氏は指摘する。Webアプリ型のソーシャルゲームの場合,サーバーサイドにデータが保存されるため,チートは容易ではない。だがネイティブ化によって,「クライアント側に保存されているデータをプレーヤーが改ざんする恐れがある」(廣田氏)というのだ。
したがって,データを暗号化するなどのチート対策が必須となるが,廣田氏によると「必要最小限のことだけやっておけばいい」という。その理由は「(暗号化が)破られたらアップデートするという対策が可能」であるということだった。
ゲームのネイティブ化により,通信回数が抑えられる。それと同時に,クライアント側にデータが蓄積されるのでチートの危険が高まるという |
廣田氏が,最低限やっておくべきとして挙げたチート対策。ただ,あまり凝ったことをする必要はないともアドバイスしていた。いざとなったらオンラインでアップデートするという対応策があるからとのこと |
また,クライアントサイドがネイティブ化することで,従来のWebアプリでは望めなかったような,より緊密にサーバーと同期を取るリアルタイム性の高いオンラインゲーム(つまり,PCのオンラインMMORPGやFPSのようなタイプのゲームのこと)がモバイルデバイスでも可能になるという。このようなゲームではサーバーとの継続的な接続が欠かせないため,「ソケットプログラミング(通信プログラミング)が必要になるだろう」と廣田氏は述べた。
Webアプリでは使わずに済んだソケットプログラミングに戻るだろうと廣田氏は予測する |
それでも,昔ながらのソケットに戻ることはないという。つまり,node.jsとWebSocketなどの新しいソケットプログラミングが使えるだろうというわけだ |
もちろん,非同期の接続がなくなることはないだろう。それは,「どんな時間でも友人とプレイしている感覚で非同期に遊べる」(廣田氏)というのがソーシャルゲームの特徴だからだ。
こうしたことを踏まえて,廣田氏は今後のソーシャルゲームについて「非同期と同期のいいとこ取りをしたハイブリット型(のゲーム)が増えてくるのではないか」と予想を述べた。
リアルタイム性が必要のないところではHTTP接続(Webサーバー)を使いつつ,リアルタイム性が必要になると継続接続型の通信を用いるという,ハイブリッド型のゲームが増えてくるというのが廣田氏の予想だった |
つまり,モバイルソーシャルゲームが,従来のWebアプリからネイティブへと移ることで,ネットワーク通信の技術もWeb一辺倒ではなくなる可能性があるということだろう。ネイティブ化によって,従来のソーシャルゲームの特徴を残しつつ,ゲームデベロッパが培ってきたPCオンラインゲームのネットワーク技術を活かしたゲームが誕生するかもしれない。
4Gamer「CEDEC 2013」特設ページ
- この記事のURL: