Your SlideShare is downloading. ×

FFRKを支えるWebアプリケーションフレームワークの技術
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

75
views

Published on

2015年2月9日第四回DeNAゲーム開発勉強会資料

2015年2月9日第四回DeNAゲーム開発勉強会資料

Published in: Engineering

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
75
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   FINAL  FANTASY  Record  Keeperを⽀支える Webアプリケーションフレームワークの技術   株式会社ディー・エヌ・エー   Japanリージョン  ゲーム事業本部   技術・編成部  開発基盤グループ   越智  琢正  takumasa.ochi@dena.com  
  • 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