Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 50 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (9)

Advertisement

Similar to DeNAのゲーム開発を支える Game Backend as a Service (20)

Advertisement

Recently uploaded (20)

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を使っている ○ 大規模なアプリケーションの開発・運用に 必要な仕組みを整備しました

×