Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

10,929 views

Published on

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

Published in: Engineering
  • Be the first to comment

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

  1. 1. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   FINAL  FANTASY  Record  Keeperを⽀支える Webアプリケーションフレームワークの技術   株式会社ディー・エヌ・エー   Japanリージョン  ゲーム事業本部   技術・編成部  開発基盤グループ   越智  琢正  takumasa.ochi@dena.com  
  2. 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. 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. 4. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   FFRKを⽀支える Webアプリケーションフレームワーク (GunyaSiF)   4  
  5. 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. 6. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   FFRKを⽀支えるWebアプリケーションフレームワーク(GunyaSiF)   GunyaSiFが⽀支えているゲーム   !  実は、ブラウザアプリから、iPhone,  Androidアプリまで様々   6  
  7. 7. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   FFRKを⽀支えるWebアプリケーションフレームワーク(GunyaSiF)   GunyaSiFメンテナのお仕事   !  調整役   ⁃  タイトルや部署間で⼈人をつないで、業務改善   ⁃  フレームワークの進化の為に、タイトルコードに触ることも   !  相談役   ⁃  設計や実装、障害やバグ等で困ってる⼈人を助ける   !  ネトスト   ⁃  IRCやGitHub等でGunyaSiFについて話す⼈人をウォッチして需要調査   !  マッチポンプ   ⁃  問題が顕在化する前に、⾃自分でIssueを上げて解決する   !  破壊と創造   ⁃  ここが今⽇日の本題   ⁃  かっこ良良く⾔言ってみただけで、あんまりクリエイティブではない、むしろ 地道で泥泥臭いお仕事。  様々なタイトルの意⾒見見を吸い上げ、必要ない場所は 消す。要求されている物は作る  ……   ⁃  ただし、破壊と創造をしていいのは、既存のアプリ全てがキチンと動くこ とを担保した上でのこと……   7  
  8. 8. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良 Before  FFRK   8  
  9. 9. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  Before  FFRK   Gadget  Server, Feature  Phoneからの脱却   9  
  10. 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. 11. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  Before  FFRK     時代に合わせてGunyaSiFも変化しなけ ればならない     しかし、既存の全アプリの完全な動作を 担保しつつ、時代を追うのはメンテナン スコスト  &  実装難易易度度が⾼高い     バージョンを切切る決断!   11  
  12. 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. 13. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  Before  FFRK     GunyaSiF  v0.2では、SPAである「おさんぽホ ッコリーナ」や「レボリューションスタジ アム」、GunyaSiF初のアプリタイトルであ る「にゃんパズル」が無事にリリースされた。   が、FFRKをリリースするためには、もう⼀一つ⼤大 きな壁が存在した。   13  
  14. 14. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  Before  FFRK   Hot  Deployの実装   14  
  15. 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. 16. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  Before  FFRK     しかし、キャッシュ不不整合のリスクが     ⾮非常に⾼高く、運⽤用エンジニアもただただ⾟辛い     FFRKでは、Client  Cacheの特性上、不不整 合が致命的となることが分かった     ということで、作りました   16  
  17. 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. 18. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  Before  FFRK     そして、無事にFFRKのリリース⽇日を迎 えたのであった     $  cap  production  deploy  (ッターン   18  
  19. 19. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良 After  FFRK   19  
  20. 20. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  AAer  FFRK     FFRKの⼤大ヒットにより、フレームワー クとして、初めて晒されるレベルの負荷 がかかる     当然、これまで全く問題が無かったとこ ろから、問題が出てくる   20  
  21. 21. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  AAer  FFRK   Sessionの効率率率化   21  
  22. 22. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   フレームワークの改良良  AAer  FFRK   FFRKリリース後のとある⽇日 インフラの偉い⼈人    「この調⼦子でDAUが◯◯万来るとMySQL のMaster負荷が危険⽔水域になる。 GunyaSiFが投げてるクエリも原因っぽ いから、なんとかしてね。」  「!!!」   22  
  23. 23. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   コードを眺めること、数⼗十秒 嫌な予感が的中する。。。。。   23   フレームワークの改良良  AAer  FFRK  
  24. 24. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Sessionを常にMySQLのMasterから SELECTしている……                                        /(^o^)\ Sessionは⾊色んなタイトルの⾊色んな場 所で使われてるので、中⾝身だけ変えて、 Slaveに負荷を逃がす…   24   フレームワークの改良良  AAer  FFRK  
  25. 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. 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. 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. 28. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   この他にも、嬉しい悲鳴を上げながら 、⾊色んな改良良を重ねて来ました。 28   フレームワークの改良良  AAer  FFRK  
  29. 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. 30. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   まとめ   !  FFRKを⽀支えるGunyaSiFはPerl,  Amon2ベースの内製フレームワーク   !  ⼀一旦、サービスインしたフレームワークであっても、時代に合わせ て進化させていく必要がある   !  FFRKを⽀支えられるようになるまでに、GunyaSiFにも多くの改良良や 調整が加えられてきた   !  フレームワークの舵取りや、設計・実装が功を奏し、利利⽤用者に喜ば れる時がメンテをしていて⼀一番楽しい   !  DeNAでは、⼀一緒に働いてくれるサーバーサイドエンジニアを募集し ています!   30  
  31. 31. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   ご静聴ありがとうございました   31  

×