Copyright (C) DeNACo.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
DeNA Technology Conference 2017
その後の・・
DeNAのネイティブアプリ開発
1
2017/02/10
Osamu Ikeda
Executive Officer. SVP
Sub Buisiness Unit Head, Japan Region Game.
DeNA Co., Ltd.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
キャラクタのパラメータのデータ構造を設計するとして・・
サーバエンジニアの作るデータ
CREATE TABLE character_data (
id int,
名前 varchar,
ライフ int,
攻撃力 int,
防御力 int,
素早さ int
);
※ライフ値の取得
SELECT ライフ FROM character_data WHERE id = 1;
36
37.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
キャラクタのパラメータのデータ構造を設計するとして・・
クライアントエンジニアの作るデータ
typedef struct (
char 名前[ MAX_NAME ],
int ライフ、
int 攻撃力
int 防御力,
int 素早さ
} character_data;
※ライフ値の取得(IDが連番の場合・・)
int life = character_data[ 1 ].life;
37
38.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
あまり違わないですね…?
38
RDBMS vs 構造体
39.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
ここにも落とし穴が…!
39
RDBMS vs 構造体
40.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
Sakashoの扱う2つのデータ
アセット
クライアントのストレージに永続的に記録されるデータ。
グラフィックやサウンドなど、更新頻度が低くサイズの大きなデータはこちらで扱うことが多い。
ゲーム起動時に全てダウンロードする前提であることが多い。
マスタ
クライアントのメモリ上で扱われ、都度ダウンロードされるデータ。
更新が頻繁なデータや、利用期間が限定的なデータはこちらで扱うことが多い。
(※「アセット」と「マスタ」という言葉の使い分けかたはたぶんDeNAの方言です。)
双方提供するAPIの機能としては大きな違いはなく(名前を指定してダウンロードするのみ)、用
途に合わせて更新の検知ための仕組みや、管理のための機能が違うだけ。
40
41.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
Sakashoはクライアント側のアーキテクチャを優先するために、サーバサイドで
はあまりデータ管理の機能はもたず、クライアントのストレージの延長程度のシ
ンプルで汎用的な機能だけを提供していた。
41
マスター
アセット
Sakasho
42.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
例えばクエストを配信するとしたらこんなイメージ。
42
マスター Sakasho
クエストデータ(ファイル)
43.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
が、サーバーサイドの感覚で実装したらこうなった。
43
マスター
アセット
Sakasho
44.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
が、サーバーサイドの感覚で実装したらこうなった。
44
マスター
アセット
Sakasho
DBのテーブルのような、巨大な表をそのままクライアントに転送。
メモリ内に置かれたDBのように扱った。
45.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
前述の「CRATE TABLE」と「typedef struct」は
個人的にこんなイメージ。
45
RDBMS vs 構造体
46.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
キャラクタのパラメータのデータ構造を設計するとして・・
サーバエンジニアの作るデータ
CREATE TABLE character_data (
id int,
名前 varchar,
ライフ int,
攻撃力 int,
防御力 int,
素早さ int
);
※ライフ値の取得
SELECT ライフ FROM character_data WHERE id = 1;
46
サーバサイドのデータの取り扱い
RDBMSの豊富なデータ管理機能を利用できる。
サーバスペックの潤沢なメモリが利用可能。
クライアントからのネットワークアクセスが前提なので、そ
こまで高速な処理は求められない。
47.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
キャラクタのパラメータのデータ構造を設計するとして・・
クライアントエンジニアの作るデータ
typedef struct (
char 名前[ MAX_NAME ],
int ライフ、
int 攻撃力
int 防御力,
int 素早さ
} character_data;
※ライフ値の取得(IDが連番の場合・・)
int life = character_data[ 1 ].life;
47
クライアントサイドのデータの取り扱い
データ管理機能は限定的。
利用できるメモリは限られている。
描画レートを維持するために、高速なアクセスが必要。
データにPKが入らないケースも多い。
※PKはデータ名、ファイル名に入る。
※IDのオフセットによるメモリアクセスが当然高速。
48.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
さて、この実装・・
48
マスター
アセット
Sakasho
49.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
クライアントでもサーバサイドのDBと同じ感覚でデータを扱えるのはよかったか
もしれない・・が。
とにかくデータがデカい。
データ転送に時間がかかり、ゲームの起動が遅いし、メモリの消費量も激しい。
モバイルのインターネット接続はサーバ-DB間ほど速くない。
クライアントはサーバほどメモリが潤沢ではない。
運営を続けるに従ってデータが追加されるので、転送時間もメモリ消費も増加傾向。
低スペック端末では、メモリ不足で起動しなくなるまでのカウントダウンが始まってしまう!
しかも、自前で実装しない限りは、DBほどデータ操作のための機能は充実していない。
開発段階において「巨大な表」はメンテナンス性が低く、トラブルも多かった。
49
50.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
マスタデータのメンテナンス、大変ですね・・
50
Sakasho
開発環境
個人環境 個人環境個人環境
たいてい激しくConflictしますね。
51.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
プリプロセスを導入しましょう
51
52.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
複数のファイルを統合して最終的なマスターとするプリプロセスは有効。
52
Sakasho
開発環境
個人環境個人環境 個人環境
プリプロセスで統合
53.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
どういう単位でデータを分割するかは重要な戦略。
配信・ダウンロード単位がいいの?
作業者によって分割しておくのがいいのか?
データの有効期限も重要。
一覧性が開発効率に大きく寄与する場合は分割しない選択も。
最近のDeNAのゲーム開発では、作業者によって分割されたデータをダウンロー
ド単位にパッケージしつつ、バランス調整等で一覧性があったほうが利便性で勝
るデータについては、まとめておく・・・というハイブリッドなプランがトレン
ド。
全てをランタイムで処理する必要はなく、プリプロセスでできることは、あらか
じめ処理しておくというのも有効。
53
54.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
RDBMS vs 構造体
ただし、この話の思想は若干オジさん的です。
(※とにかくメモリは節約!節約!!・・の世代)
モバイル端末でもマシンスペックの進歩が著しく、
今後CPUパワーやメモリは余り気味になるかも知れません。
ランタイムの処理効率と開発効率のバランスは適切に!
54
55.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
Webサーバ vs (アプリの)ゲームサーバ
55
56.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
Webサーバ vs ゲームサーバ
クライアントにゲームロジックや各種制御を寄せるという戦略と、Sakasho開発が先行したこと
もあり、サーバ開発当初は設計思想を切り替えられないメンバー、目指す世界観が理解できない
メンバーが続出。
サーバサイドエンジニアが、「Web頭」から「アプリ頭」への切り替えに、半年くらい時間がか
かることもしばしば。
一方、クライアント開発に転向したエンジニアは、もっとはやく新しい技術をキャッチアップし
ていった。ゼロベースでフラットに学習できることや、プロジェクトとして締め切りがあり、手
を動かして問題を解決していくことによる学習効果が高かったからだと思われる。
現在は複数のアプリタイトルが運用され、開発中の案件も多い。Webサーバを開発してきたエン
ジニアがアプリのゲームサーバ開発を学習する環境も整ってきたので、キャッチアップ期間も短
縮されきた・・はず。
56
57.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
Webサーバ vs ゲームサーバ
が、まだゲームサーバ開発への切り替えに苦労する人が多く、
キャッチアップ期間もかなりかかる!
57
58.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
Webサーバ vs ゲームサーバ
なぜキャッチアップに時間がかかるのだろう?
そもそも論で、やはり設計思想の切り替えには一定の学習コストが必要。
クライアント開発スキルが低いので、クライアント環境の構築やクライアント側のソースコードを確認す
ることによる学習が難しい。
既存のサーバ側のコードを読んでも、クライアント側の処理がわからないので、全体像が掴みにくい。
しかも汎用的に使われているので、ユースケースが様々でさらにわかりにくい。
「コード読め!コラ!」って言われて読んだけどやっぱりよくわからん…という状況
そんな状況で運用中のタイトルも多くなっているので、運用タスクも多い。
言われてみると確かに難易度が高い。。
58
59.
Copyright (C) DeNACo.,Ltd. All Rights Reserved.
Webサーバ vs ゲームサーバ
振り返ってみると・・
「ネイティブシフト」をしてみたら、実はサーバサイドが一番辛かった。
・・というお話でした。
59