1. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
FINAL
FANTASY
Record
Keeperを⽀支える
Webアプリケーションフレームワークの技術
株式会社ディー・エヌ・エー
Japanリージョン
ゲーム事業本部
技術・編成部
開発基盤グループ
越智
琢正
takumasa.ochi@dena.com
3. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
アジェンダ
! FFRKを⽀支えるWebアプリケーションフレームワーク(GunyaSiF)
! フレームワークの改良良
Before
FFRK
⁃ Gadget
Server,
Feature
Phoneからの脱却
⁃ Hot
Deployの実装
! フレームワークの改良良
After
FFRK
⁃ Sessionの効率率率化
3
4. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
FFRKを⽀支える
Webアプリケーションフレームワーク
(GunyaSiF)
4
5. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
FFRKを⽀支えるWebアプリケーションフレームワーク(GunyaSiF)
GunyaSiFとは?
! 2013年年頃に作られたPerl,
Amon2ベースのフレームワーク1
! ポスト
MobaSiF2
時代の内製フレームワークとして作られた
! 紆余曲折を経て、今はFINAL
FANTASY
Record
Keeper
を⽀支えている
5
1. DeNAが開発した新たなフレームワーク「GunyaSiF」とは?h;p://next.rikunabi.com/tech/docs/ct_s03600.jsp?p=002398
2. 【YAPC::Asia
2008】モバゲータウンのフレームワーク「MobaSiF」公開
h;p://codezine.jp/ar[cle/detail/2528
6. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
FFRKを⽀支えるWebアプリケーションフレームワーク(GunyaSiF)
GunyaSiFが⽀支えているゲーム
! 実は、ブラウザアプリから、iPhone,
Androidアプリまで様々
6
8. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
Before
FFRK
8
9. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
Before
FFRK
Gadget
Server,
Feature
Phoneからの脱却
9
10. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
Before
FFRK
GunyaSiFはやや特殊な環境下で⽣生まれた
! 2013年年、当時としては普通だった環境
⁃ Feature
Phone
/
Smart
Phone
の同時対応
⁃ Mobage
の
Gadget
Server
を通した環境
• 認証済みのユーザーが、特定のProxy
Serverを介してGame
Serverに
リクエストを送ってくるような環境
! しかし、時代は瞬く間に移り変わった
⁃ 市場をうめつくしていく
Smart
Phone
• 実のところ、GunyaSiFを利利⽤用したFPタイトルは⽇日の⽬目を⾒見見なかった
⁃ Game
Serverが前⾯面に⽴立立ち、よりオープンなシステムへ
• JS
SDKを利利⽤用した認証等、認証が必須ではない世界
⁃ ネイティブアプリの台頭
10
11. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
Before
FFRK
時代に合わせてGunyaSiFも変化しなけ
ればならない
しかし、既存の全アプリの完全な動作を
担保しつつ、時代を追うのはメンテナン
スコスト
&
実装難易易度度が⾼高い
バージョンを切切る決断!
11
13. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
Before
FFRK
GunyaSiF
v0.2では、SPAである「おさんぽホ
ッコリーナ」や「レボリューションスタジ
アム」、GunyaSiF初のアプリタイトルであ
る「にゃんパズル」が無事にリリースされた。
が、FFRKをリリースするためには、もう⼀一つ⼤大
きな壁が存在した。
13
14. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
Before
FFRK
Hot
Deployの実装
14
15. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
Before
FFRK
GunyaSiFにはAtomicな形のHot
Deployは無かった
! 特殊な構成環境が原因の1つ
⁃ 最低3レポジトリ以上から構成
(submoduleとかではない…)
⁃ 複数アプリを同居させる環境あり
⁃ Deploy元にも先も、特殊な環境が必要
その結果……
Hot
Deployは先⼈人により挑戦されるものの、諦められていた…
! Hot
Deployが無い世界では、職⼈人芸
が繰り広げられていた…
⁃ ファイルの依存関係、再起動タイミングまで計算に⼊入れる
⁃ ファイルの反映順序に気を使った
2度度蒔き、3度度蒔き
15
16. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
Before
FFRK
しかし、キャッシュ不不整合のリスクが
⾮非常に⾼高く、運⽤用エンジニアもただただ⾟辛い
FFRKでは、Client
Cacheの特性上、不不整
合が致命的となることが分かった
ということで、作りました
16
17. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
Before
FFRK
Capistrano::GunyaSiF
! 背景
⁃ 複雑なdeployにも対応でき、社内外で実績もある
Capistranoを採⽤用
! 概要
⁃ 開発者は、Capistrano
3
の流流儀に従ったDSLを書くだけ
⁃ 複数レポジトリを独⽴立立にcloneして、role毎に良良い感じに構築
⁃ rsyncをベースとして、ネットワーク負荷を削減
! エンジニアの⼼心理理的負荷削減や、Perl特有の問題の為に
⁃ コミットハッシュ、ファイル差分レベルでのDry-‐‑‒run機能
⁃ Server::Starter
以下のプロセスの世代交代検知タスク
⁃ Xslateのプリコンパイルタスク(現在検討中)
⁃ 等など……
! 結果
⁃ Hot
Deployが可能になり、運⽤用⼯工数とリスクを⼤大幅削減
⁃ QA/開発環境も同⼀一⼿手法で構築可能になり、開発⼯工数も⼤大幅削減
17
18. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
Before
FFRK
そして、無事にFFRKのリリース⽇日を迎
えたのであった
$
cap
production
deploy
(ッターン
18
19. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
After
FFRK
19
20. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
AAer
FFRK
FFRKの⼤大ヒットにより、フレームワー
クとして、初めて晒されるレベルの負荷
がかかる
当然、これまで全く問題が無かったとこ
ろから、問題が出てくる
20
21. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
AAer
FFRK
Sessionの効率率率化
21
22. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
AAer
FFRK
FFRKリリース後のとある⽇日
インフラの偉い⼈人
「この調⼦子でDAUが◯◯万来るとMySQL
のMaster負荷が危険⽔水域になる。
GunyaSiFが投げてるクエリも原因っぽ
いから、なんとかしてね。」
「!!!」
22
23. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
コードを眺めること、数⼗十秒
嫌な予感が的中する。。。。。
23
フレームワークの改良良
AAer
FFRK
24. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
Sessionを常にMySQLのMasterから
SELECTしている……
/(^o^)\
Sessionは⾊色んなタイトルの⾊色んな場
所で使われてるので、中⾝身だけ変えて、
Slaveに負荷を逃がす…
24
フレームワークの改良良
AAer
FFRK
25. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
フレームワークの改良良
AAer
FFRK
HTTP::Session2::MultiStore(設計)
! 既存のSessionオブジェクトを下⽅方互換を保ちつつ、内部設計変更更
! HTTP::Session2を複数のStore先を保持できるように拡張
⁃ get,
set,
remove
等の
I/Fを持つ
Storeであれば、KVSでも
ClientStoreでも複数登録可能
! ⾃自動的な参照先の切切替
⁃ 1リクエスト中のデータをプロセスキャッシュ
⁃ Sessionへの操作から良良い感じに
Master
/
Slaveの向き先を⾃自動決定
⁃ Masterへのfallbackと明⽰示的な
切切替機構の搭載により
必要最低限なコードで、
レプリケーション遅延を制御可能
タイトル側のコードには、基本的に
変更更の必要性なし【重要】
25
Master
Session
Slave1
Cached
data
from
Slave
Cached
data
from
Master
Slave2
Switching
get/set/
delete/expire…