アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現

タグ:
日時:
2017年08月30日(水)16時30分〜17時30分
形式: レギュラーセッション
プラットフォーム: モバイル
受講スキル:
・スマートフォンゲーム制作にあたって、HTTP通信を実装したしたことがある方 ・ゲームシステムにおけるDBの運用および選定に興味のある方 ・クライアント・サーバ間の通信モデルに興味のある方 ・KVSやそれをコアに用いたシステムに興味のある方 ・AWSの利用経験のある方
受講者が得られるであろう知見:
・DynamoDBやLevelDBといったKVSを用いたデータストレージモデルの特性や注意点 ・非同期通信モデルの長所および制約事項 ・クライアントとサーバでデータスキーマを共有することのメリットとデメリット ・スケールアウトするDBMSの特性とその設計と運用の現実 ・「事後」にデータチェックを行うためのトークンシステムやログシステムおよびその限界 ・KVSを用いた非同期データ同期システムの実装例とその顛末
セッションの内容

アナザーエデンにおいては、一般的なスマートフォンゲームと異なり、ホーム画面がありません
これにより世界観への没入を阻害しないプレイ体験が実現されていますが、そのためにはサーバへの問い合わせ、といったシステム上の制約をできるだけユーザに感じさせないような通信およびデータ保存の仕組みを構築する必要があります

このため、アナザーエデンでは次のような原則に基づいたオートセーブ機構を実装しています

・サーバへの問い合わせはできるだけバックグラウンドで行う
・クライアント上でデータを生成し、基本的にはそれを受け入れる
・サーバ上のビジネスロジックはできるかぎりシンプルなものにする
・クライアントとサーバでデータスキーマを完全に一致させる
・クライアント上のデータ保存のために信頼性の高いKVSを採用する
・サーバ側のDBはクライアントのミラーであることが原則である
・サーバ側で生成したデータについても、一度クライアント側で受入処理を経た上で確定とする
・クライアント上でのデータ改ざん(チート)のリスクについては、サーバから配布する署名やトークンによって一定程度の信頼性を担保する

このセッションでは、上記のような設計を実現するために採用した基盤技術であるLevelDBやDynamoDBおよびflatbuffersについてお話します
また、実際に動作するデモを通じて、それらをどのように組み合わせてオートセーブ機構を実現しているのかについてお話します


講演資料

  • C17_224.pdf
  • C17_224_movie.zip

※資料のダウンロードにはログインが必要です。


講演者プロフィール

鈴木 清人

鈴木 清人
所属 : グリー株式会社
部署 : Wright Flyer Studios事業本部
役職 : リードエンジニア

経歴:
横浜国立大学工学部電子情報工学科卒。EDAツールベンダ、マーケティング系SaaSベンダ等を経て2013年グリー入社。
グリーでは内製BIシステム、「天と大地と女神の魔法」と「アナザーエデン」を担当。
大規模なトラフィックを捌く経験を求めて入社したものの、なぜか自らトラフィックを作りださねばならない立場に。
直近の「アナザーエデン」では、サーバ・クライアントのデータモデル、通信モデルのほか、アセットパイプラインやプロジェクト体制も含めたゲーム制作・運用システム全体の設計、実装を手がけている。

《講演者からのメッセージ》
スマートフォンゲームも年を追うごとにプロダクトが大規模化し、ゲームモデルの多様性が失われてきている昨今、システムのアーキテクチャを構想からやりなおす、といった試みの機会やその正当性はますます小さくなってきていると思いますが、そうした新しい試みの余地がまったくなくなってしまったわけではないと思います。
今回のセッションがそうした技術ドリヴンによるゲームモデル改革事例の紹介のひとつになれば、と思っています。

西田 綾佑

西田 綾佑
所属 : グリー株式会社
部署 : Wright Flyer Studios事業本部
役職 : エンジニア

経歴:
2014年 東京大学大学院 情報理工学系研究科修了
同年 グリー株式会社 入社
Wright Flyer StudiosにてLINEタワーライジングの開発を経て、アナザーエデンの開発を担当。

《講演者からのメッセージ》
アナザーエデンでは、StateMachineを導入したゲームループとイベントハンドラの設計、UIフレームワークの整備、サウンド基盤、ネットワーク基盤、データストア、アセット管理周りを主に担当していました。

アナザーエデンの世界観への没入感を阻害しないように、できる限りサーバとの通信をバックグラウンドで済ませられるようにオートセーブ機能をチューニングしてきましたので、その辺りについて詳しく紹介させていただきます。