SlideShare a Scribd company logo
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
FINAL	
  FANTASY	
  Record	
  Keeperを⽀支える
Webアプリケーションフレームワークの技術	
  
株式会社ディー・エヌ・エー	
  
Japanリージョン	
  ゲーム事業本部	
  
技術・編成部	
  開発基盤グループ	
  
越智	
  琢正	
  takumasa.ochi@dena.com	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
⾃自⼰己紹介	
  
!  越智琢正(おち	
  たくまさ)	
  
!  お仕事	
  
⁃  Webアプリケーションフレームワーク(GunyaSiF)のメンテナ	
  
⁃  Game⽤用	
  BaaS	
  の開発	
  
⁃  某開発中タイトルの	
  エンジニア	
  リーダー	
  
!  略略歴	
  
⁃  〜~2013:	
  超⼩小型⼈人⼯工衛星(50cm級)の研究開発	
  
•  主に姿勢制御系を担当、開発7割、研究3割	
  
•  ハードウェアからソフトウェア、姿勢解析や実験の治具設計まで何でも屋	
  
⁃  2013〜~:株式会社ディー・エヌ・エーに新卒⼊入社	
  
•  未経験の為、新卒研修でWebアプリやPerlを1から叩き込まれる1	
  
2	
  1.	
  ⼤大規模Perl初⼼心者研修を⽀支える技術	
  h;p://www.slideshare.net/DaisukeTamada/perl-­‐26371335	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
アジェンダ	
  
!  FFRKを⽀支えるWebアプリケーションフレームワーク(GunyaSiF)	
  
!  フレームワークの改良良	
  Before	
  FFRK	
  
⁃  Gadget	
  Server,	
  Feature	
  Phoneからの脱却	
  
⁃  Hot	
  Deployの実装	
  
!  フレームワークの改良良	
  After	
  FFRK	
  
⁃  Sessionの効率率率化	
  
3	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
FFRKを⽀支える
Webアプリケーションフレームワーク
(GunyaSiF)	
  
4	
  
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	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
FFRKを⽀支えるWebアプリケーションフレームワーク(GunyaSiF)	
  
GunyaSiFが⽀支えているゲーム	
  
!  実は、ブラウザアプリから、iPhone,	
  Androidアプリまで様々	
  
6	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
FFRKを⽀支えるWebアプリケーションフレームワーク(GunyaSiF)	
  
GunyaSiFメンテナのお仕事	
  
!  調整役	
  
⁃  タイトルや部署間で⼈人をつないで、業務改善	
  
⁃  フレームワークの進化の為に、タイトルコードに触ることも	
  
!  相談役	
  
⁃  設計や実装、障害やバグ等で困ってる⼈人を助ける	
  
!  ネトスト	
  
⁃  IRCやGitHub等でGunyaSiFについて話す⼈人をウォッチして需要調査	
  
!  マッチポンプ	
  
⁃  問題が顕在化する前に、⾃自分でIssueを上げて解決する	
  
!  破壊と創造	
  
⁃  ここが今⽇日の本題	
  
⁃  かっこ良良く⾔言ってみただけで、あんまりクリエイティブではない、むしろ
地道で泥泥臭いお仕事。	
  様々なタイトルの意⾒見見を吸い上げ、必要ない場所は
消す。要求されている物は作る	
  ……	
  
⁃  ただし、破壊と創造をしていいのは、既存のアプリ全てがキチンと動くこ
とを担保した上でのこと……	
  
7	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良
Before	
  FFRK	
  
8	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  Before	
  FFRK	
  
Gadget	
  Server,
Feature	
  Phoneからの脱却	
  
9	
  
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	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  Before	
  FFRK	
  
  時代に合わせてGunyaSiFも変化しなけ
ればならない	
  
  しかし、既存の全アプリの完全な動作を
担保しつつ、時代を追うのはメンテナン
スコスト	
  &	
  実装難易易度度が⾼高い	
  
  バージョンを切切る決断!	
  
11	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  Before	
  FFRK	
  
GunyaSiF	
  v0.2の誕⽣生	
  
!  v0.1を安定運⽤用ブランチへとして、v0.2を新⽣生GunyaSiFとする	
  
⁃  運⽤用アプリが存在しない状態で、躊躇ない⼤大規模改修を⾏行行う	
  
!  要らないものを徹底的に捨てる	
  
⁃  Gadget	
  Server、	
  FP対応のコードを捨てる	
  
⁃  ⼼心情的には勿体なく、つらいが、時代に合わせる為に割り切切る	
  
!  フレームワークの徹底的リファクタリング&修正	
  
⁃  密結合をしていたモジュールの分離離	
  
⁃  設計に限界が訪れたモジュールの再設計&再実装	
  
⁃  Gadget	
  Serverのおかげで、顕在化しなかったバグの修正	
  
!  結果	
  
⁃  累累計数万⾏行行に及ぶ削除&	
  更更新	
  
⁃  メンテナンス性、堅牢牢性、拡張性の向上	
  
⁃  ⾃自由度度の⾼高いWebアプリ	
  や	
  Nativeアプリへ挑む準備が完了了	
   12	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  Before	
  FFRK	
  
  GunyaSiF	
  v0.2では、SPAである「おさんぽホ
ッコリーナ」や「レボリューションスタジ
アム」、GunyaSiF初のアプリタイトルであ
る「にゃんパズル」が無事にリリースされた。	
  
が、FFRKをリリースするためには、もう⼀一つ⼤大
きな壁が存在した。	
  
13	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  Before	
  FFRK	
  
Hot	
  Deployの実装	
  
14	
  
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	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  Before	
  FFRK	
  
  しかし、キャッシュ不不整合のリスクが	
  
  ⾮非常に⾼高く、運⽤用エンジニアもただただ⾟辛い	
  
  FFRKでは、Client	
  Cacheの特性上、不不整
合が致命的となることが分かった	
  
  ということで、作りました	
  
16	
  
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	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  Before	
  FFRK	
  
  そして、無事にFFRKのリリース⽇日を迎
えたのであった	
  
  $	
  cap	
  production	
  deploy	
  (ッターン	
  
18	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良
After	
  FFRK	
  
19	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  AAer	
  FFRK	
  
  FFRKの⼤大ヒットにより、フレームワー
クとして、初めて晒されるレベルの負荷
がかかる	
  
  当然、これまで全く問題が無かったとこ
ろから、問題が出てくる	
  
20	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  AAer	
  FFRK	
  
Sessionの効率率率化	
  
21	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  AAer	
  FFRK	
  
FFRKリリース後のとある⽇日
インフラの偉い⼈人	
  
	
  「この調⼦子でDAUが◯◯万来るとMySQL
のMaster負荷が危険⽔水域になる。
GunyaSiFが投げてるクエリも原因っぽ
いから、なんとかしてね。」
	
  「!!!」	
  
22	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
コードを眺めること、数⼗十秒
嫌な予感が的中する。。。。。	
  
23	
  
フレームワークの改良良	
  AAer	
  FFRK	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Sessionを常にMySQLのMasterから
SELECTしている……
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /(^o^)\
Sessionは⾊色んなタイトルの⾊色んな場
所で使われてるので、中⾝身だけ変えて、
Slaveに負荷を逃がす…	
  
24	
  
フレームワークの改良良	
  AAer	
  FFRK	
  
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…	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  AAer	
  FFRK	
  
HTTP::Session2::MultiStore	
  (結果)	
  
!  Masterへの参照系負荷を20分の1以下まで削減	
  
⁃  1700	
  [QPS]	
  =>	
  75	
  [QPS]	
  
⁃  Slaveに負荷を分散	
  
⁃  スケールアウト可能な状態に	
  
!  勿論論、サービスを⽌止めずにhot	
  deploy	
  
!  負荷の削減幅が⼤大きく、頭では理理解していても、何か問題が発⽣生し
ているのではないかと、deploy時の冷冷汗が⽌止まらなかった……	
  
26	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  AAer	
  FFRK	
  
HTTP::Session2::MultiStore	
  (結果詳細)	
  
27	
  
Masterの負荷削減	
  
約	
  -­‐	
  1600	
  QPS	
  
Slave1台当たりの負荷上昇	
  
約	
  +900	
  QPS	
  
Slave1台当たりの負荷上昇	
  
約	
  +900	
  QPS	
  
灰⾊色の部分が参照系クエリ。横軸が時間。縦軸が負荷。最⼩小値はゼロ	
  
17:40の反映後にMasterの負荷が急激に減少。Slaveは増加	
  
負荷を2台に分散	
  
Masterの参照系負荷を20分の1にして、負荷分散に成功	
  
※	
  全体として負荷が増えたように⾒見見えるのは、負荷が上昇トレンドであることや	
  
ロジックのオーバーヘッドが原因として考えられる。また、運⽤用優先でデプロイを⾏行行って
いる為、正確な実験データではないことをご承知いただきたい。	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
この他にも、嬉しい悲鳴を上げながら
、⾊色んな改良良を重ねて来ました。
28	
  
フレームワークの改良良	
  AAer	
  FFRK	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
フレームワークの改良良	
  AAer	
  FFRK	
  
その他の改良良点	
  
!  MySQLのMHAに対応する為のDNS	
  Resolverを⼊入れ替え	
  
⁃  DNSプロトコルを⽤用いず、MyDNSのDBを直接引く形式に	
  
⁃  重みゼロのレコードも取得可能	
  
⁃  MyDNSへの負荷を⼤大きく削減	
  
!  MySQLへのConnection管理理部分を全⾯面的に修正	
  
⁃  同時接続数を約2分の1に削減	
  
29	
  
オレンジの部分が同時接続数。横軸が時間。	
  
18:20分頃の反映を境に、2分の1程度度に減少	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
まとめ	
  
!  FFRKを⽀支えるGunyaSiFはPerl,	
  Amon2ベースの内製フレームワーク	
  
!  ⼀一旦、サービスインしたフレームワークであっても、時代に合わせ
て進化させていく必要がある	
  
!  FFRKを⽀支えられるようになるまでに、GunyaSiFにも多くの改良良や
調整が加えられてきた	
  
!  フレームワークの舵取りや、設計・実装が功を奏し、利利⽤用者に喜ば
れる時がメンテをしていて⼀一番楽しい	
  
!  DeNAでは、⼀一緒に働いてくれるサーバーサイドエンジニアを募集し
ています!	
  
30	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
ご静聴ありがとうございました	
  
31	
  

More Related Content

PDF
Effective web performance tuning for smartphone
dena_study
 
PDF
FFRK cocos2d xレイヤーの最適化
dena_study
 
PDF
DeNA流cocos2d xとの付き合い方
dena_study
 
PPTX
Unityで本格戦国シュミレーションRPG 開発
dena_study
 
PPT
FINAL FANTASY Record Keeper の作り方
dena_study
 
PDF
FINAL FANTASY
 Record Keeper 演出データについて
dena_study
 
PDF
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
dena_study
 
PDF
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
Nobutaka Takushima
 
Effective web performance tuning for smartphone
dena_study
 
FFRK cocos2d xレイヤーの最適化
dena_study
 
DeNA流cocos2d xとの付き合い方
dena_study
 
Unityで本格戦国シュミレーションRPG 開発
dena_study
 
FINAL FANTASY Record Keeper の作り方
dena_study
 
FINAL FANTASY
 Record Keeper 演出データについて
dena_study
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
dena_study
 
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
Nobutaka Takushima
 

What's hot (20)

PDF
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
dena_study
 
PPT
制作を支えたツール達 (パズル戦隊デナレンジャー)
dena_study
 
PDF
ガールアックス:リアルタイム通信処理の効率的な実装
dena_study
 
PDF
DeNAのゲーム開発を支える技術 (クライアントサイド編)
denatech2016
 
PPTX
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
 
PDF
FINAL FANTASY
 Record Keeper アニメーション制作の濃ゆい話
Toshiharu Shirai
 
PPTX
Unityネイティブプラグインマニアクス #denatechcon
DeNA
 
PDF
Unity開発で週イチ呑み会を支える技術
kazuya noshiro
 
PPTX
消滅都市 Cocos2d-xでの演出・UIあれこれ
Shun Noguchi
 
PDF
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
Web Technology Corp.
 
PPTX
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA
 
PDF
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
Web Technology Corp.
 
PDF
エフェクト、アニメーション、演出のデータ作るの大変じゃないですか? DeNAではこうしてます。
DeNA_Creators
 
PPTX
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
Toshiharu Sugiyama
 
PPTX
DeNAのプログラミング教育の取り組み #denatechcon
DeNA
 
PDF
DeNAの動画配信サービスを支えるインフラの内部 #denatechcon
DeNA
 
PPTX
AndApp開発における全て #denatechcon
DeNA
 
PPTX
DeNAの最新のマスタデータ管理システム Oyakata の全容
sairoutine
 
PPTX
革新的ブラウザゲームを支えるプラットフォーム技術
Toru Yamaguchi
 
PPTX
DeNA private cloudのその後 #denatechcon
DeNA
 
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
dena_study
 
制作を支えたツール達 (パズル戦隊デナレンジャー)
dena_study
 
ガールアックス:リアルタイム通信処理の効率的な実装
dena_study
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
denatech2016
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
 
FINAL FANTASY
 Record Keeper アニメーション制作の濃ゆい話
Toshiharu Shirai
 
Unityネイティブプラグインマニアクス #denatechcon
DeNA
 
Unity開発で週イチ呑み会を支える技術
kazuya noshiro
 
消滅都市 Cocos2d-xでの演出・UIあれこれ
Shun Noguchi
 
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
Web Technology Corp.
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA
 
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
Web Technology Corp.
 
エフェクト、アニメーション、演出のデータ作るの大変じゃないですか? DeNAではこうしてます。
DeNA_Creators
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
Toshiharu Sugiyama
 
DeNAのプログラミング教育の取り組み #denatechcon
DeNA
 
DeNAの動画配信サービスを支えるインフラの内部 #denatechcon
DeNA
 
AndApp開発における全て #denatechcon
DeNA
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
sairoutine
 
革新的ブラウザゲームを支えるプラットフォーム技術
Toru Yamaguchi
 
DeNA private cloudのその後 #denatechcon
DeNA
 
Ad

Similar to FFRKを支えるWebアプリケーションフレームワークの技術 (20)

PPTX
Quiznowを支える技術 #yapcasia
Yosuke Furukawa
 
PDF
Spring3.1概要x di
Yuichi Hasegawa
 
PPTX
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
sairoutine
 
PDF
DeNAのゲーム開発を支える Game Backend as a Service
Makoto Haruyama
 
PDF
クラウドセキュリティ基礎 #seccamp
Masahiro NAKAYAMA
 
PDF
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
MorioImai
 
PDF
AndroidでFeliCaの履歴を読もう
treby
 
PPTX
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNA
 
PDF
クラウドセキュリティ基礎
Masahiro NAKAYAMA
 
PDF
私がMuninに恋する理由 - インフラエンジニアでも監視がしたい! -
Masahito Zembutsu
 
PDF
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
 
PPT
第2回 分散システム本読書会
Kenji Ohtsuka
 
PDF
A Survery of Approaches to Adaptive Securityの紹介
Nobukazu Yoshioka
 
PDF
Osc2008 Opensuse Moonlinx
Kazuhisa Hara
 
PDF
NiFi amateur struggled story
Jun Ichinose
 
PDF
DeNAインフラの今とこれから - 今編 -
Tomoya Kabe
 
PDF
ROMA のアーキテクチャと社内事例
Rakuten Group, Inc.
 
PDF
Data Center As A Computer 2章前半
Akinori YOSHIDA
 
PPTX
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
 
PDF
デブサミ2010 これからのアーキテクチャを見通す
Yusuke Suzuki
 
Quiznowを支える技術 #yapcasia
Yosuke Furukawa
 
Spring3.1概要x di
Yuichi Hasegawa
 
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる
sairoutine
 
DeNAのゲーム開発を支える Game Backend as a Service
Makoto Haruyama
 
クラウドセキュリティ基礎 #seccamp
Masahiro NAKAYAMA
 
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
MorioImai
 
AndroidでFeliCaの履歴を読もう
treby
 
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNA
 
クラウドセキュリティ基礎
Masahiro NAKAYAMA
 
私がMuninに恋する理由 - インフラエンジニアでも監視がしたい! -
Masahito Zembutsu
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
 
第2回 分散システム本読書会
Kenji Ohtsuka
 
A Survery of Approaches to Adaptive Securityの紹介
Nobukazu Yoshioka
 
Osc2008 Opensuse Moonlinx
Kazuhisa Hara
 
NiFi amateur struggled story
Jun Ichinose
 
DeNAインフラの今とこれから - 今編 -
Tomoya Kabe
 
ROMA のアーキテクチャと社内事例
Rakuten Group, Inc.
 
Data Center As A Computer 2章前半
Akinori YOSHIDA
 
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
 
デブサミ2010 これからのアーキテクチャを見通す
Yusuke Suzuki
 
Ad

FFRKを支えるWebアプリケーションフレームワークの技術

  • 1. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   FINAL  FANTASY  Record  Keeperを⽀支える Webアプリケーションフレームワークの技術   株式会社ディー・エヌ・エー   Japanリージョン  ゲーム事業本部   技術・編成部  開発基盤グループ   越智  琢正  [email protected]  
  • 2. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   ⾃自⼰己紹介   !  越智琢正(おち  たくまさ)   !  お仕事   ⁃  Webアプリケーションフレームワーク(GunyaSiF)のメンテナ   ⁃  Game⽤用  BaaS  の開発   ⁃  某開発中タイトルの  エンジニア  リーダー   !  略略歴   ⁃  〜~2013:  超⼩小型⼈人⼯工衛星(50cm級)の研究開発   •  主に姿勢制御系を担当、開発7割、研究3割   •  ハードウェアからソフトウェア、姿勢解析や実験の治具設計まで何でも屋   ⁃  2013〜~:株式会社ディー・エヌ・エーに新卒⼊入社   •  未経験の為、新卒研修でWebアプリやPerlを1から叩き込まれる1   2  1.  ⼤大規模Perl初⼼心者研修を⽀支える技術  h;p://www.slideshare.net/DaisukeTamada/perl-­‐26371335  
  • 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  
  • 7. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   FFRKを⽀支えるWebアプリケーションフレームワーク(GunyaSiF)   GunyaSiFメンテナのお仕事   !  調整役   ⁃  タイトルや部署間で⼈人をつないで、業務改善   ⁃  フレームワークの進化の為に、タイトルコードに触ることも   !  相談役   ⁃  設計や実装、障害やバグ等で困ってる⼈人を助ける   !  ネトスト   ⁃  IRCやGitHub等でGunyaSiFについて話す⼈人をウォッチして需要調査   !  マッチポンプ   ⁃  問題が顕在化する前に、⾃自分でIssueを上げて解決する   !  破壊と創造   ⁃  ここが今⽇日の本題   ⁃  かっこ良良く⾔言ってみただけで、あんまりクリエイティブではない、むしろ 地道で泥泥臭いお仕事。  様々なタイトルの意⾒見見を吸い上げ、必要ない場所は 消す。要求されている物は作る  ……   ⁃  ただし、破壊と創造をしていいのは、既存のアプリ全てがキチンと動くこ とを担保した上でのこと……   7  
  • 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  
  • 12. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  Before  FFRK   GunyaSiF  v0.2の誕⽣生   !  v0.1を安定運⽤用ブランチへとして、v0.2を新⽣生GunyaSiFとする   ⁃  運⽤用アプリが存在しない状態で、躊躇ない⼤大規模改修を⾏行行う   !  要らないものを徹底的に捨てる   ⁃  Gadget  Server、  FP対応のコードを捨てる   ⁃  ⼼心情的には勿体なく、つらいが、時代に合わせる為に割り切切る   !  フレームワークの徹底的リファクタリング&修正   ⁃  密結合をしていたモジュールの分離離   ⁃  設計に限界が訪れたモジュールの再設計&再実装   ⁃  Gadget  Serverのおかげで、顕在化しなかったバグの修正   !  結果   ⁃  累累計数万⾏行行に及ぶ削除&  更更新   ⁃  メンテナンス性、堅牢牢性、拡張性の向上   ⁃  ⾃自由度度の⾼高いWebアプリ  や  Nativeアプリへ挑む準備が完了了   12  
  • 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…  
  • 26. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  AAer  FFRK   HTTP::Session2::MultiStore  (結果)   !  Masterへの参照系負荷を20分の1以下まで削減   ⁃  1700  [QPS]  =>  75  [QPS]   ⁃  Slaveに負荷を分散   ⁃  スケールアウト可能な状態に   !  勿論論、サービスを⽌止めずにhot  deploy   !  負荷の削減幅が⼤大きく、頭では理理解していても、何か問題が発⽣生し ているのではないかと、deploy時の冷冷汗が⽌止まらなかった……   26  
  • 27. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  AAer  FFRK   HTTP::Session2::MultiStore  (結果詳細)   27   Masterの負荷削減   約  -­‐  1600  QPS   Slave1台当たりの負荷上昇   約  +900  QPS   Slave1台当たりの負荷上昇   約  +900  QPS   灰⾊色の部分が参照系クエリ。横軸が時間。縦軸が負荷。最⼩小値はゼロ   17:40の反映後にMasterの負荷が急激に減少。Slaveは増加   負荷を2台に分散   Masterの参照系負荷を20分の1にして、負荷分散に成功   ※  全体として負荷が増えたように⾒見見えるのは、負荷が上昇トレンドであることや   ロジックのオーバーヘッドが原因として考えられる。また、運⽤用優先でデプロイを⾏行行って いる為、正確な実験データではないことをご承知いただきたい。  
  • 28. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   この他にも、嬉しい悲鳴を上げながら 、⾊色んな改良良を重ねて来ました。 28   フレームワークの改良良  AAer  FFRK  
  • 29. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  AAer  FFRK   その他の改良良点   !  MySQLのMHAに対応する為のDNS  Resolverを⼊入れ替え   ⁃  DNSプロトコルを⽤用いず、MyDNSのDBを直接引く形式に   ⁃  重みゼロのレコードも取得可能   ⁃  MyDNSへの負荷を⼤大きく削減   !  MySQLへのConnection管理理部分を全⾯面的に修正   ⁃  同時接続数を約2分の1に削減   29   オレンジの部分が同時接続数。横軸が時間。   18:20分頃の反映を境に、2分の1程度度に減少  
  • 30. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   まとめ   !  FFRKを⽀支えるGunyaSiFはPerl,  Amon2ベースの内製フレームワーク   !  ⼀一旦、サービスインしたフレームワークであっても、時代に合わせ て進化させていく必要がある   !  FFRKを⽀支えられるようになるまでに、GunyaSiFにも多くの改良良や 調整が加えられてきた   !  フレームワークの舵取りや、設計・実装が功を奏し、利利⽤用者に喜ば れる時がメンテをしていて⼀一番楽しい   !  DeNAでは、⼀一緒に働いてくれるサーバーサイドエンジニアを募集し ています!   30  
  • 31. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   ご静聴ありがとうございました   31