cedec 2015: playgroundとluaによる...

68
このスライドはCEDEC2015で発表した「PlaygroundLuaによ る大規模モバイルオンラインゲーム開発のレベルアップ」の Part III 通信周りのレベルアップ」の部分です。 スライド全体は https://cedil.cesa.or.jp/cedil_sessions/view/1345 をご覧ください。 発表原稿 : https://gist.github.com/hasipon/155f3bb80f3a314ee96f はじめに

Upload: takuya-hashimoto

Post on 15-Apr-2017

438 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

このスライドはCEDEC2015で発表した「PlaygroundとLuaによる大規模モバイルオンラインゲーム開発のレベルアップ」の「Part III 通信周りのレベルアップ」の部分です。

スライド全体はhttps://cedil.cesa.or.jp/cedil_sessions/view/1345をご覧ください。

発表原稿 :https://gist.github.com/hasipon/155f3bb80f3a314ee96f

はじめに

Page 2: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

Playgroundでゲーム作るよ

Page 3: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

背景

HTTPサーバ

クライアント(ブラウザ)

HTML

ガラケー向けゲーム

Page 4: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

背景

スマホ向けゲーム

HTTPサーバ

クライアント(Playground)

JSON踏襲⇒

HTTPサーバ

クライアント(ブラウザ)

HTML

ガラケー向けゲーム

Page 5: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

背景

スマホ向けゲーム

HTTPサーバ

クライアント(Playground)

JSON踏襲⇒

HTTPサーバ

クライアント(ブラウザ)

HTML

ガラケー向けゲーム

サーバ開発

サーバ開発

クライアント開発

Page 6: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

通信API

サーバ開発

クライアント開発

通信API設計

わかりやすい役割分担

わかりやすいスケジュール

Page 7: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

通信API

通信API設計とは?

→こんな感じのもの

リクエスト先 main.php/my/changeName/リクエスト内容 { "name":"新しい名前" }レスポンスデータサンプル { "before_name":"以前の名前",  "after_name":"新しい名前" }

Page 8: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

設計の踏襲

ガラケー向けゲーム

HTML生成はサーバ側↓

基本的に操作するたびに通信

スマホ向けゲーム

Page 9: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

設計の踏襲

ガラケー向けゲーム

HTML生成はサーバ側↓

基本的に操作するたびに通信

スマホ向けゲーム

基本的に操作するたびに通信

踏襲

Page 10: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

発生した問題

ガラケー向けゲーム

HTML生成はサーバ側↓

基本的に操作するたびに通信

スマホ向けゲーム

基本的に操作するたびに通信

踏襲

海外向けゲームだったので

サーバを米国に

Page 11: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

発生した問題

ガラケー向けゲーム

HTML生成はサーバ側↓

基本的に操作するたびに通信

スマホ向けゲーム

基本的に操作するたびに通信

踏襲

日本から遊ぶと

通信待ちがひどい

海外向けゲームだったので

サーバを米国に

Page 12: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

なぜ通信待ちがひどいのか

● 操作するたびに通信しているから

通信頻度が多すぎる

● RTT が 180ms 程度あった

● 物理的に限界がある

Page 13: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

どうやって通信待ちをごまかすか

サーバ開発

クライアント開発

通信API設計

Page 14: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

どうやって通信待ちをごまかすか

ここから見なおさなくては…

サーバ開発

クライアント開発

通信API設計

Page 15: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

どうやって通信待ちをごまかすか

ここから見なおさなくては…

サーバ開発

クライアント開発

通信API設計

大規模な改修

Page 16: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

どうやって通信待ちをごまかすか

「スケジュール上

開発終盤なので急ぎで」

ここから見なおさなくては…

サーバ開発

クライアント開発

通信API設計

大規模な改修

今ここ

Page 17: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

どうやって通信待ちをごまかすか

「スケジュール上

開発終盤なので急ぎで」

ここから見なおさなくては…

サーバ開発

クライアント開発

通信API設計

大規模な改修

今ここ

Page 18: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

「スケジュール上

開発終盤なので急ぎで」

ここから見なおさなくては…

サーバ開発

クライアント開発

通信API設計

大規模な改修

短期的成果を得るために場当たり的

対応

今ここ

どうやって通信待ちをごまかすか

Page 19: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

「スケジュール上

開発終盤なので急ぎで」

ここから見なおさなくては…

サーバ開発

クライアント開発

通信API設計

大規模な改修

短期的成果を得るために場当たり的

対応

今ここ

場当たり的対応

場当たり的対応

場当たり的対応

積み重なる

場当たり的対応

どうやって通信待ちをごまかすか

Page 20: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

小規模な修正すら困難になっていく…

場当たり的対応

場当たり的対応

Page 21: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

ガラケー向けゲーム

HTML生成はサーバ側↓

基本的に操作するたびに通信

スマホ向けゲーム

基本的に操作するたびに通信

踏襲これが良くなかった →

反省点

Page 22: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

最初から、操作するたびに

通信しないように設計したい

Page 23: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

対策

操作するたびに通信しないようにするには?

Page 24: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

対策

操作するたびに通信しないようにするには?

→ 通信結果をキャッシュしよう

Page 25: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

対策

通信APIの種類ごとにキャッシュしてみる

API 1 API 2 API 3

キャッシュ キャッシュ

Page 26: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

発生した問題

他のAPIのレスポンスに影響を与えるときなどに

キャッシュ間の不整合が発生する

API 1 API 2 API 3

キャッシュ キャッシュ

影響不整合

Page 27: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

発生した問題

他のAPIのレスポンスに影響を与えるときなどに

キャッシュ間の不整合が発生する

API 1 API 2 API 3

キャッシュ キャッシュ

影響不整合

クライアントの複雑化に伴って

修正コストが増大していく…

Page 28: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

反省点

通信APIの種類ごとにキャッシュしてみる

API 1 API 2 API 3

キャッシュ キャッシュ

↑ これが良くなかったなぜ通信APIの種類ごとなのか?

Page 29: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

反省点

キャッシュ実装はクライアント開発の領域

→サーバ開発から切り離してしまった

API 1 API 2 API 3

キャッシュ キャッシュ

サーバ開発

クライアント開発

Page 30: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

キャッシュ実装と

サーバ開発を統合できないか?

Page 31: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

MVVMとサーバ

View ViewModel Model

クライアント

Page 32: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

MVVMとサーバ

View ViewModel Model

クライアント

サーバ

サーバとの通信はModelの役割

Page 33: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

MVVMとサーバ

View ViewModel Model

クライアント

サーバ

クライアント開発 サーバ開発

Page 34: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

MVVMとサーバ

View ViewModel Model

クライアント

サーバ

こうあるべきではないか?

Page 35: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

開発体制の変更

サーバ開発

クライアント開発

サーバ

キャッシュ

サーバ

Model

従来の開発体制 現在の開発体制

ViewModel

Page 36: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

開発体制の変更

サーバ開発

クライアント開発

サーバ

キャッシュ

サーバ

Model

従来の開発体制 現在の開発体制

ViewModel

クライアント開発が通信つなぎこみ

Page 37: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

開発体制の変更

サーバ開発

クライアント開発

サーバ

キャッシュ

サーバ

Model

従来の開発体制 現在の開発体制

ViewModel

クライアント開発が通信つなぎこみ

サーバ開発が通信つなぎこみ

Page 38: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

開発体制の変更

サーバ開発

クライアント開発

サーバ

キャッシュ

サーバ

Model

従来の開発体制 現在の開発体制

ViewModel

クライアント開発に通信APIを提供

Page 39: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

開発体制の変更

サーバ開発

クライアント開発

サーバ

キャッシュ

サーバ

Model

従来の開発体制 現在の開発体制

ViewModel

クライアント開発に通信APIを提供

クライアント開発にModelの関数を提供

Page 40: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

開発体制の変更

サーバ開発

クライアント開発

サーバ

キャッシュ

サーバ

Model

従来の開発体制 現在の開発体制

ViewModel

ViewModelに影響しない通信APIの変更がサーバ開発に閉じる

Page 41: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

開発体制の変更

サーバ開発

クライアント開発

サーバ

キャッシュ

サーバ

Model

従来の開発体制 現在の開発体制

ViewModel

ViewModelに影響しない通信APIの変更がサーバ開発に閉じる

通信頻度削減のための

修正がしやすくなる

Page 42: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

Modelの構成

API 1 API 2 API 3

キャッシュ キャッシュ

従来の方法 サーバ

Page 43: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

Modelの構成

API 1 API 2 API 3

現在の方法

Model

サーバ

Page 44: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

Modelの構成

API 1 API 2 API 3

現在の方法

Model

関数1 関数2

状態1 状態2

サーバ

Modelは状態と関数から構成される

Page 45: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

Modelの構成

API 1 API 2 API 3

現在の方法

Model

関数1 関数2

状態1 状態2

サーバ

Modelの関数はViewModelにデータを加工して渡す

Page 46: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

Modelの構成

API 1 API 2 API 3

現在の方法

Model

関数1 関数2

状態1 状態2

サーバ

Modelの関数はサーバと通信する

Page 47: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

Modelの構成

API 1 API 2 API 3

現在の方法

Model

関数1 関数2

状態1 状態2

サーバ

Modelの関数は状態を変更する

Page 48: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

比較

API

キャッシュ

従来の方法

API

状態

現在の方法

Model

あまり変わってない…?

Page 49: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

比較

API

キャッシュ

従来の方法

API

状態

現在の方法

Model

設計順序が変わっている

Page 50: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

比較

API

キャッシュ

従来の方法

API

状態

現在の方法

Model

Modelの状態の設計に合わせてサーバを設計できる

通信内容やサーバの処理を効率化しやすい

Page 51: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

Modelの実装と

サーバ開発を統合できた!

Page 52: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (1)

サーバ開発者もクライアントで動作するコードを書く必要がある

Page 53: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (1)

サーバ開発者もクライアントで動作するコードを書く必要がある

→ サーバ開発者もLuaを書く

Page 54: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (1)

サーバ開発者もクライアントで動作するコードを書く必要がある

→ サーバ開発者もLuaを書く

→ がんばる

Page 55: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (1)

サーバ開発者もクライアントで動作するコードを書く必要がある

→ サーバ開発者もLuaを書く

→ がんばる

→ 純粋なLuaに閉じるようにする

Page 56: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (2)

サーバ開発者とクライアント開発者の両方が

クライアントで動作するコードを書く

Page 57: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (2)

サーバ開発者とクライアント開発者の両方が

クライアントで動作するコードを書く

→ ひとつの機能に同時に両者が関わる

Page 58: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (2)

サーバ開発者とクライアント開発者の両方が

クライアントで動作するコードを書く

→ ひとつの機能に同時に両者が関わる

→ UIとロジックの分離がより厳密に要求される

Page 59: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (2)

サーバ開発者とクライアント開発者の両方が

クライアントで動作するコードを書く

→ ひとつの機能に同時に両者が関わる

→ UIとロジックの分離がより厳密に要求される

→ そもそも分離していないのは、smart UI アンチパターン

Page 60: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (3)

通信API設計の変更頻度が上がる

Page 61: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (3)

通信API設計の変更頻度が上がる

→クライアントとサーバの対応関係が複雑になる

Page 62: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

難しい点 (3)

通信API設計の変更頻度が上がる

→クライアントとサーバの対応関係が複雑になる

→ソースコードリポジトリ統合

Page 63: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

ソースコードリポジトリ統合

従来 クライアントリポジトリの

アセットによる肥大化

クライアントとサーバの

対応関係は人間が判断

アセット

クライアント

サーバ

Page 64: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

ソースコードリポジトリ統合

現在 アセットリポジトリ独立で

クライアントのブランチ切り替えも高速に

同じブランチなら

対応関係があると

考えて良い

アセット

クライアント

サーバ

Page 65: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

良かった点(1)

当初の目的通り、通信頻度削減に成功

→ クライアント側でのデータ保持を前提に

サーバ・通信APIを設計してあるので、

クライアントで保持したデータを

積極的に利用でき、通信頻度が下がる

Page 66: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

良かった点(2)

クライアント・サーバにまたがる修正が簡単に

→クライアントへの影響を気にして

修正を躊躇するケースが減った

Page 67: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

良かった点(3)

クライアント・サーバ統合テストの導入・自動化

→サーバだけのテストでは

クライアント側のデータ保持がカバーされない

→テスト自動化の観点からもソースコードリポジトリ統合は良かった

Page 68: CEDEC 2015: PlaygroundとLuaによる 大規模モバイルオンラインゲーム開発のレベルアップ Part3

レベルアップまとめ

● レベル1○ 操作するたびに通信しないようにするには、

最初からちゃんと設計しないと難しいことがわかった

● レベル2○ キャッシュの実装は複雑化すると難しいことがわかった

● レベル3○ Model開発とサーバ開発を統合できた