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.

DeNAのゲーム開発を支える Game Backend as a Service

17,178 views

Published on

Techconの資料となります。

Published in: Services
  • Be the first to comment

DeNAのゲーム開発を支える Game Backend as a Service

  1. 1. Copyright © DeNA Co.,Ltd. All Rights Reserved. January 29, 2016 Takehiko YOKOTA Makoto HARUYAMA DeNA Co., Ltd. のゲーム開発を支える Game Backend as a Service
  2. 2. Copyright © DeNA Co.,Ltd. All Rights Reserved. 少し自己紹介 2 ● 2008年 DeNA入社(みんなのウェディング) ● 2010年 エンジニアになる ● 2011年 DeNA退社 -> 福岡へ ● 2013年 DeNAに出戻り ● 2016年 ゲーム事業本部 Makoto HARUYAMA ● GitHub https://github.com/SpringMT ● Twitter https://twitter.com/Spring_MT 春山 誠
  3. 3. Copyright © DeNA Co.,Ltd. All Rights Reserved. を支える技術
  4. 4. Copyright © DeNA Co.,Ltd. All Rights Reserved. なにを支えているのか? 4 DeNAのゲーム事業の裏側
  5. 5. Copyright © DeNA Co.,Ltd. All Rights Reserved. どうやって支えているか? ネイティブアプリ用プラットフォーム Sakasho
  6. 6. Copyright © DeNA Co.,Ltd. All Rights Reserved. 今日お話すること 1. Sakashoとは 2. Sakashoの構成について 3. Rubyを使った開発について 4. その他の技術 5. Sakashoチームの体制について 6. まとめ 6
  7. 7. Copyright © DeNA Co.,Ltd. All Rights Reserved. 7 Sakashoとは
  8. 8. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoとは ネイティブアプリゲーム開発に 必要とされるサーバー機能を 提供するゲームプラットフォーム ゲーム開発におけるサーバー機能を Sakashoが一括で受け持つ ことで開発・運用コストを削減 運用のしやすさも見据えたゲームの 作り方のルールもある程度強いる 8
  9. 9. Copyright © DeNA Co.,Ltd. All Rights Reserved. ゲーム開発・運用に必要なAPIの提供 ● ユーザー情報API ● マスターデータ配信API ● ログインボーナスAPI など 9 Sakashoが提供している機能
  10. 10. Copyright © DeNA Co.,Ltd. All Rights Reserved. SDK ● 課金やPush通知など、OSに依存している機能について 簡単に使えるインターフェースの提供 ● Unity、C++のゲームエンジンに対応 10 Sakashoが提供している機能
  11. 11. Copyright © DeNA Co.,Ltd. All Rights Reserved. WebView用インターフェースの提供 ● お知らせの配信 ● 掲示板 ● 利用規約など 11 Sakashoが提供している機能
  12. 12. Copyright © DeNA Co.,Ltd. All Rights Reserved. ゲーム専用サーバーとの連携機能 ● ゲーム専用サーバーからSakashoにアクセスできる Web APIを提供 ● ゲーム専用サーバーを介しての ユーザー情報の取得などに対応 12 Sakashoが提供している機能
  13. 13. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoの機能一覧(一部抜粋) ● マスターデータ配信 ● アセット配信 ● プレイヤー管理 ● お知らせ管理 ● アイテム管理 ● ログインボーナス ● お問合せ機能 ● 課金 ● ログ管理 13 ● ランキング ● 掲示板 ● 補填機能 ● メンテナンス ● Push通知 ● プレイヤー検索機能 ● ギルド ● アプリのバージョン管理 ● CS運用ツール Sakashoが提供している機能
  14. 14. Copyright © DeNA Co.,Ltd. All Rights Reserved. 主なリリースタイトル 14
  15. 15. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoの構成について
  16. 16. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoの構成について
  17. 17. Copyright © DeNA Co.,Ltd. All Rights Reserved. マイクロサービス? 役割毎に10の独立したAPIコード群がある ○ メリット ■ 他のAPIへの影響を考えずにデプロイできる ■ リソースを細かく調整できる ○ デメリット ■ 運用工数がかかる(gemの更新とか) ■ 結局サービス毎に人を専用にアサインとかしなかったので、全員 全部見る状態 コード量も少ない(API全部ファイル数が700程度、行数3万行)のでこの規模 だと管理工数のほうが大きい Sakashoの構成について
  18. 18. Copyright © DeNA Co.,Ltd. All Rights Reserved. 18 Sakashoの構成について
  19. 19. Copyright © DeNA Co.,Ltd. All Rights Reserved. ○ MySQLのMaster/Slave構成 + sharding ○ MHAでMasterの高可用性 ○ MySQLへの接続は都度接続 ○ DNSサーバーはMyDNSを使って、DeNA独自の拡張も入っている DB周りは、基本インフラチームの指針にそっており、DeNAのオーソドックス な構成になっています Sakashoの構成について DBに関して
  20. 20. Copyright © DeNA Co.,Ltd. All Rights Reserved. Rubyを使った開発
  21. 21. Copyright © DeNA Co.,Ltd. All Rights Reserved. Rubyを書ける人が多いチーム ○ Rubyで開発、運用 > Perlでの開発・運用 ○ 何かあってもフォローできる人材がいる 採用面 ○ Rubyでサービス開発を経験している人材の増加 Rubyの選択 21 Rubyを使った開発 PerlからRubyへの移行対応も責任をもって進めた
  22. 22. Copyright © DeNA Co.,Ltd. All Rights Reserved. ● Rubyの導入期 ● Rubyを使った開発期 ● Rubyで書かれたアプリケーションの運用期 Rubyを使った開発と運用 22 Rubyを使った開発
  23. 23. Copyright © DeNA Co.,Ltd. All Rights Reserved. Rubyの導入期
  24. 24. Copyright © DeNA Co.,Ltd. All Rights Reserved. DeNAで運用するための要件を満たすためのモ ジュール Rubyの導入期 ResolverMyDNS ○ MyDNSにアクセウし名前解決をするためのモジュール ○ DNSキャッシュもしている ○ DNSサーバーにDeNA用に拡張したMyDNSを使っており、それに即 した作りになっている。
  25. 25. Copyright © DeNA Co.,Ltd. All Rights Reserved. Rack::PerformanceLog ○ DeNA専用のパフォーマンス調査用のログを出すrackミドルウェア。 ○ 一行追加すればOK DeNAで運用するための要件を満たすためのモ ジュール Rubyの導入期
  26. 26. Copyright © DeNA Co.,Ltd. All Rights Reserved. 社内rubygemsサーバーの構築 社内専用gemの管理・配布のため ○ Gem in a Boxを使っている Rubyの導入期
  27. 27. Copyright © DeNA Co.,Ltd. All Rights Reserved. 小さいサービスで実績を作る ○ 社内サービスをリリース ■ 社内用アプリ配信ツール(Rails) iota 実績とテスト 27 Rubyの導入期
  28. 28. Copyright © DeNA Co.,Ltd. All Rights Reserved. Rubyを使った開発期
  29. 29. Copyright © DeNA Co.,Ltd. All Rights Reserved. 1. API サーバー : Sinatra + Sequel + Jbuilder a. 省メモリ・ハイパフォーマンス b. JSONしか返さない 2. 管理 ツール : Ruby on Rails a. アクセス数は限られている b. Web UIを簡単に作れる c. 多少パフォーマンスが犠牲にしても、開発スピードを上げる フレームワーク選定 29 Rubyを使った開発期
  30. 30. Copyright © DeNA Co.,Ltd. All Rights Reserved. 高速化 ○ capistrano-bundle_rsync ○ デプロイサーバでアプリを git clone して bundle install したものを rsyncするためのgem daemontoolsとの連携 ○ インフラチーム http://d.hatena.ne.jp/limitusus/20131225/1387993119 http://blog.livedoor.jp/sonots/archives/40248661.html Deploy 30 Rubyを使った開発期
  31. 31. Copyright © DeNA Co.,Ltd. All Rights Reserved. ridgepole https://github.com/winebarrel/ridgepole ● ファイルの内容を実際のスキーマとの差分があればそれを自動的に 検知し、DDLを発行してくれる ● 1テーブル1ファイルで表現 ● shardingにも対応したスクリプトを用意 スキーマ管理 31 Rubyを使った開発期
  32. 32. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoの共通ロジックをgemにする ○ API毎のリクエスト・レスポンスの共通処理の切り出し ○ モデルの共通化 DBのコネクション管理 ○ APIではコネクション管理用の軽いラッパーを用意 ■ コードの中で明示的にMaster or Slaveなのかを書く ○ 管理ツール(Rails)ではSwitchPointを使用 その他 32 Rubyを使った開発期
  33. 33. Copyright © DeNA Co.,Ltd. All Rights Reserved. Rubyを使った アプリケーションの運用期
  34. 34. Copyright © DeNA Co.,Ltd. All Rights Reserved. パフォーマンス向上 ○ picojson_ruby 監視 ○ stackprof ○ rack-server_status 運用ツール ○ unicorn-timeout_backtracer ○ unicorn-configurator_from_env ○ unicorn-log_error_one_liner 運用時 34 Rubyを使ったアプリケーションの運用期
  35. 35. Copyright © DeNA Co.,Ltd. All Rights Reserved. PicojsonRuby ○ rubyの標準ライブラリを使ってJSONをparseすると元のJSONの大き さの約10倍くらいのメモリを消費する ○ Proxyサーバーで共通のkey valueを1つだけ追加したいだけ ○ C++でかかれたpicojsonをrubyから呼び出せるようにして、JSONの 操作をC++で行うようにした パフォーマンス向上 35 Rubyを使ったアプリケーションの運用期
  36. 36. Copyright © DeNA Co.,Ltd. All Rights Reserved. Stackprof ○ https://github.com/tmm1/stackprof ○ SakashoのAPIサーバーに下記のようなコードを仕込んでいる Rubyのプロファイリング 36 Rubyを使ったアプリケーションの運用期
  37. 37. Copyright © DeNA Co.,Ltd. All Rights Reserved. Rack::ServerStatus ○ workerの状況を返すエンドポイントを追加する rackミドルウェア ○ workerが枯渇して大障害になった経緯から作成 枯渇するとアラートが飛んでくるようになっている Workerの状態監視 37 2016-01-25 19:23:15.643716 [host名 sakasho.test.example] BusyWorkers: 3, IdleWorkers: 0 pid status remote_addr host method uri protocol ss 22286 A 127.0.0.1 sakasho.test.example GET /server-status?json HTTP/1.0 0 22289 A 127.0.0.1 sakasho.test.example POST /v1foo HTTP/1.0 0 22292 A 127.0.0.1 sakasho.test.example GET /v1/bar HTTP/1.0 0 Rubyを使ったアプリケーションの運用期
  38. 38. Copyright © DeNA Co.,Ltd. All Rights Reserved. Unicorn::ConfiguratorFromEnv ○ Unicornのworker数を環境変数で設定できる ○ アプリケーションのコードを修正せずに インフラチームだけで対応できる require するだけでOK worker数をすぐに調整できるようにする 38 Rubyを使ったアプリケーションの運用期
  39. 39. Copyright © DeNA Co.,Ltd. All Rights Reserved. Unicornがタイムアウトしたときの調査 Rubyを使ったアプリケーションの運用期 Unicorn::TimeoutBackTracer ○ Unicornのworkerがタイムアウトしたときに、プロセスをkillする前に、 gdbrubyを使用してバックトレースを取得する ○ requireするだけでOK $ cat /tmp/test-timeout-16768.log command: gdb -silent -nw /sake/.rbenv/versions/2.1.3/bin/ruby 16603 environ: ruby_version: c_backtrace: #0 0x00007ff11bd1c2f3 in select () from /lib64/libc.so.6 #1 0x00007ff11ceba8f6 in rb_fd_select (max=13, read=0x7fff469285f0, write=0x0, except=0x0, timeout=0x7fff46928340) at thread.c:3336
  40. 40. Copyright © DeNA Co.,Ltd. All Rights Reserved. AWS
  41. 41. Copyright © DeNA Co.,Ltd. All Rights Reserved. AWSも活用しています ○ S3 ■ 履歴等のデータの保存 ■ ファイル配信 ○ SNS ■ push通知 ■ 全ユーザーに配信が簡単にできる AWS 41 その他の技術
  42. 42. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakashoチーム
  43. 43. Copyright © DeNA Co.,Ltd. All Rights Reserved. チーム ○ 8人から12人くらい ■ ブラウザタイトルからアプリタイトルへ移行する際にsakashoの運 用を経験することが多い リリースサイクル ○ 2週間に一度のペースでリリース ○ 2週間でできることやる Sakasho専任チーム 43 Sakashoチーム
  44. 44. Copyright © DeNA Co.,Ltd. All Rights Reserved. リリースサイクル
  45. 45. Copyright © DeNA Co.,Ltd. All Rights Reserved. ● 要望確確認会: リリースに含める フィーチャーを検討 ● Sakasho定例: リリースに含める予 定のフィーチャーをチームにシェア ● QA Kickoff: リリースに予定の フィーチャーをQAに伝え、リリース するフィーチャーとリリース日を決 める ● リリース告知: ゲームデベロッパに アナウンスする。 リリースサイクルを細かく 45 ● 仕様書コンプリート ● 開発開始 ● SDKのスケルトン提出 ● フィーチャーコンプリート ● QA開始 ● サインオフ(QA完了) ● リリース ● QA確認 ● ゲームデベロッパにリリースした旨をア ナウンス ● Sakasho定例: フェーズの振り返り Sakashoチーム
  46. 46. Copyright © DeNA Co.,Ltd. All Rights Reserved. 他部署との連携 46 ゲームの開発・運用には色々な部署が関わっています ○ インフラ ○ CS ○ QA(Sakasho自体のQAとゲームのQA) ○ マーケティング(特にプロモーション関連) ○ バックオフィス関連 ■ 法務 ■ 経理 ○ 各ゲーム開発を調整するチーム Sakashoチーム
  47. 47. Copyright © DeNA Co.,Ltd. All Rights Reserved. 他部署との連携 47 色々な人達との調整も含めてSakashoが引き受けます ○ CS向けやマーケティング向けのツールも提供 ■ レポーティング機能 ■ お問合せ対応ツール ■ HadoopログAPIの提供 ○ わからないことがあったら ■ 基本社内にユーザーがいるので、聞きに行く! Sakashoチーム
  48. 48. Copyright © DeNA Co.,Ltd. All Rights Reserved. Sakasho以外にも
  49. 49. Copyright © DeNA Co.,Ltd. All Rights Reserved. ゲーム開発を支えるサービス 49 iota ○ アプリ配信ツール ○ iOSアプリでは社内用の証明書にリザインする ○ 30 GB / day くらいの転送量が発生している一大社内サービス (ゲーム以外も利用) TwitterDM送信ツール ○ スケジュール配信可能 Sakasho以外のサービス
  50. 50. Copyright © DeNA Co.,Ltd. All Rights Reserved. まとめ ゲーム開発を支えるプラットフォームSakasho ○ Sakashoがサーバー側の運用を一括で受け持つことで 各ゲームタイトルはゲーム開発に集中できる Sakashoのサーバーサイドの開発はRubyを使っている ○ 大規模なアプリケーションの開発・運用に 必要な仕組みを整備しました

×