DeNAのゲーム開発を支える Game Backend as a Service
-
Upload
makoto-haruyama -
Category
Services
-
view
16.089 -
download
8
Transcript of DeNAのゲーム開発を支える Game Backend as a Service
Copyright © DeNA Co.,Ltd. All Rights Reserved.
January 29, 2016
Takehiko YOKOTAMakoto HARUYAMADeNA Co., Ltd.
のゲーム開発を支える
Game Backend as a Service
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
春山 誠
Copyright © DeNA Co.,Ltd. All Rights Reserved.
を支える技術
Copyright © DeNA Co.,Ltd. All Rights Reserved.
なにを支えているのか?
4
DeNAのゲーム事業の裏側
Copyright © DeNA Co.,Ltd. All Rights Reserved.
どうやって支えているか?
ネイティブアプリ用プラットフォーム
Sakasho
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
1. Sakashoとは
2. Sakashoの構成について
3. Rubyを使った開発について
4. その他の技術
5. Sakashoチームの体制について
6. まとめ
6
Copyright © DeNA Co.,Ltd. All Rights Reserved.
7
Sakashoとは
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Sakashoとは
ネイティブアプリゲーム開発に
必要とされるサーバー機能を
提供するゲームプラットフォーム
ゲーム開発におけるサーバー機能を
Sakashoが一括で受け持つ
ことで開発・運用コストを削減
運用のしやすさも見据えたゲームの
作り方のルールもある程度強いる
8
Copyright © DeNA Co.,Ltd. All Rights Reserved.
ゲーム開発・運用に必要なAPIの提供
● ユーザー情報API
● マスターデータ配信API
● ログインボーナスAPI など
9
Sakashoが提供している機能
Copyright © DeNA Co.,Ltd. All Rights Reserved.
SDK
● 課金やPush通知など、OSに依存している機能について
簡単に使えるインターフェースの提供
● Unity、C++のゲームエンジンに対応
10
Sakashoが提供している機能
Copyright © DeNA Co.,Ltd. All Rights Reserved.
WebView用インターフェースの提供
● お知らせの配信
● 掲示板
● 利用規約など
11
Sakashoが提供している機能
Copyright © DeNA Co.,Ltd. All Rights Reserved.
ゲーム専用サーバーとの連携機能
● ゲーム専用サーバーからSakashoにアクセスできる
Web APIを提供
● ゲーム専用サーバーを介しての
ユーザー情報の取得などに対応
12
Sakashoが提供している機能
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Sakashoの機能一覧(一部抜粋)
● マスターデータ配信
● アセット配信
● プレイヤー管理
● お知らせ管理
● アイテム管理
● ログインボーナス
● お問合せ機能
● 課金
● ログ管理
13
● ランキング
● 掲示板
● 補填機能
● メンテナンス
● Push通知
● プレイヤー検索機能
● ギルド
● アプリのバージョン管理
● CS運用ツール
Sakashoが提供している機能
Copyright © DeNA Co.,Ltd. All Rights Reserved.
主なリリースタイトル
14
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Sakashoの構成について
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Sakashoの構成について
Copyright © DeNA Co.,Ltd. All Rights Reserved.
マイクロサービス?
役割毎に10の独立したAPIコード群がある
○ メリット
■ 他のAPIへの影響を考えずにデプロイできる
■ リソースを細かく調整できる
○ デメリット
■ 運用工数がかかる(gemの更新とか)
■ 結局サービス毎に人を専用にアサインとかしなかったので、全員
全部見る状態
コード量も少ない(API全部ファイル数が700程度、行数3万行)のでこの規模
だと管理工数のほうが大きい
Sakashoの構成について
Copyright © DeNA Co.,Ltd. All Rights Reserved.
18
Sakashoの構成について
Copyright © DeNA Co.,Ltd. All Rights Reserved.
○ MySQLのMaster/Slave構成 + sharding
○ MHAでMasterの高可用性
○ MySQLへの接続は都度接続
○ DNSサーバーはMyDNSを使って、DeNA独自の拡張も入っている
DB周りは、基本インフラチームの指針にそっており、DeNAのオーソドックス
な構成になっています
Sakashoの構成について
DBに関して
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Rubyを使った開発
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Rubyを書ける人が多いチーム
○ Rubyで開発、運用 > Perlでの開発・運用
○ 何かあってもフォローできる人材がいる
採用面
○ Rubyでサービス開発を経験している人材の増加
Rubyの選択
21
Rubyを使った開発
PerlからRubyへの移行対応も責任をもって進めた
Copyright © DeNA Co.,Ltd. All Rights Reserved.
● Rubyの導入期
● Rubyを使った開発期
● Rubyで書かれたアプリケーションの運用期
Rubyを使った開発と運用
22
Rubyを使った開発
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Rubyの導入期
Copyright © DeNA Co.,Ltd. All Rights Reserved.
DeNAで運用するための要件を満たすためのモジュール
Rubyの導入期
ResolverMyDNS
○ MyDNSにアクセウし名前解決をするためのモジュール
○ DNSキャッシュもしている
○ DNSサーバーにDeNA用に拡張したMyDNSを使っており、それに即
した作りになっている。coreからRubyのバックトレースを取得するための
もの。
https://github.com/gunyarakun/gdbruby
gdbruby
DeNA専用フォーマットの logger
障害検知のための仕組みに乗せるた
めのアダプターも用意している。
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Rack::PerformanceLog
○ DeNA専用のパフォーマンス調査用のログを出すrackミドルウェア。
○ 一行追加すればOK
DeNAで運用するための要件を満たすためのモジュール
Rubyの導入期
DeNA専用のパフォーマンス調査用のログを吐く
rackミドルウェア。
coreからRubyのバックトレースを取得するための
もの。
https://github.com/gunyarakun/gdbruby
gdbruby
DeNA専用フォーマットの logger
障害検知のための仕組みに乗せるた
めのアダプターも用意している。
Copyright © DeNA Co.,Ltd. All Rights Reserved.
社内rubygemsサーバーの構築
社内専用gemの管理・配布のため
○ Gem in a Boxを使っている
Rubyの導入期
Copyright © DeNA Co.,Ltd. All Rights Reserved.
小さいサービスで実績を作る
○ 社内サービスをリリース
■ 社内用アプリ配信ツール(Rails) iota
実績とテスト
27
Rubyの導入期
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Rubyを使った開発期
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を使った開発期
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を使った開発期
Copyright © DeNA Co.,Ltd. All Rights Reserved.
ridgepole
https://github.com/winebarrel/ridgepole
● ファイルの内容を実際のスキーマとの差分があればそれを自動的に
検知し、DDLを発行してくれる
● 1テーブル1ファイルで表現
● shardingにも対応したスクリプトを用意
スキーマ管理
31
Rubyを使った開発期
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Sakashoの共通ロジックをgemにする
○ API毎のリクエスト・レスポンスの共通処理の切り出し
○ モデルの共通化
DBのコネクション管理
○ APIではコネクション管理用の軽いラッパーを用意
■ コードの中で明示的にMaster or Slaveなのかを書く
○ 管理ツール(Rails)ではSwitchPointを使用
その他
32
Rubyを使った開発期
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Rubyを使った
アプリケーションの運用期
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を使ったアプリケーションの運用期
Copyright © DeNA Co.,Ltd. All Rights Reserved.
PicojsonRuby
○ rubyの標準ライブラリを使ってJSONをparseすると元のJSONの大き
さの約10倍くらいのメモリを消費する
○ Proxyサーバーで共通のkey valueを1つだけ追加したいだけ
○ C++でかかれたpicojsonをrubyから呼び出せるようにして、JSONの
操作をC++で行うようにした
パフォーマンス向上
35
Rubyを使ったアプリケーションの運用期
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Stackprof
○ https://github.com/tmm1/stackprof
○ SakashoのAPIサーバーに下記のようなコードを仕込んでいる
Rubyのプロファイリング
36
Rubyを使ったアプリケーションの運用期
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: 0pid status remote_addr host method uri protocol ss22286 A 127.0.0.1 sakasho.test.example GET /server-status?json HTTP/1.0 022289 A 127.0.0.1 sakasho.test.example POST /v1foo HTTP/1.0 022292 A 127.0.0.1 sakasho.test.example GET /v1/bar HTTP/1.0 0
Rubyを使ったアプリケーションの運用期
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Unicorn::ConfiguratorFromEnv
○ Unicornのworker数を環境変数で設定できる
○ アプリケーションのコードを修正せずに
インフラチームだけで対応できる
require するだけでOK
worker数をすぐに調整できるようにする
38
Rubyを使ったアプリケーションの運用期
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Unicornがタイムアウトしたときの調査
Rubyを使ったアプリケーションの運用期
Unicorn::TimeoutBackTracer
○ Unicornのworkerがタイムアウトしたときに、プロセスをkillする前に、
gdbrubyを使用してバックトレースを取得する
○ requireするだけでOK
サーバーのヘルスチェック
https://github.com/mirakui/rack-health
Unicornのエラーログが複数行になってでてきてし
まうため、それを一行にまとめる。
DeNAの運用上、エラーは一行にしたい(監視の仕
組みに依存)
Rack::Health
Unicorn::
LogErrorOneLiner
$ cat /tmp/test-timeout-16768.logcommand: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
Copyright © DeNA Co.,Ltd. All Rights Reserved.
AWS
Copyright © DeNA Co.,Ltd. All Rights Reserved.
AWSも活用しています
○ S3
■ 履歴等のデータの保存
■ ファイル配信
○ SNS
■ push通知
■ 全ユーザーに配信が簡単にできる
AWS
41
その他の技術
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Sakashoチーム
Copyright © DeNA Co.,Ltd. All Rights Reserved.
チーム
○ 8人から12人くらい
■ ブラウザタイトルからアプリタイトルへ移行する際にsakashoの運
用を経験することが多い
リリースサイクル
○ 2週間に一度のペースでリリース
○ 2週間でできることやる
Sakasho専任チーム
43
Sakashoチーム
Copyright © DeNA Co.,Ltd. All Rights Reserved.
リリースサイクル
Copyright © DeNA Co.,Ltd. All Rights Reserved.
● 要望確確認会: リリースに含める
フィーチャーを検討
● Sakasho定例: リリースに含める予
定のフィーチャーをチームにシェア
● QA Kickoff: リリースに予定の
フィーチャーをQAに伝え、リリース
するフィーチャーとリリース日を決
める
● リリース告知: ゲームデベロッパに
アナウンスする。
リリースサイクルを細かく
45
● 仕様書コンプリート
● 開発開始
● SDKのスケルトン提出
● フィーチャーコンプリート
● QA開始
● サインオフ(QA完了)
● リリース
● QA確認
● ゲームデベロッパにリリースした旨をア
ナウンス
● Sakasho定例: フェーズの振り返り
Sakashoチーム
Copyright © DeNA Co.,Ltd. All Rights Reserved.
他部署との連携
46
ゲームの開発・運用には色々な部署が関わっています
○ インフラ
○ CS
○ QA(Sakasho自体のQAとゲームのQA)
○ マーケティング(特にプロモーション関連)
○ バックオフィス関連
■ 法務
■ 経理
○ 各ゲーム開発を調整するチーム
Sakashoチーム
Copyright © DeNA Co.,Ltd. All Rights Reserved.
他部署との連携
47
色々な人達との調整も含めてSakashoが引き受けます
○ CS向けやマーケティング向けのツールも提供
■ レポーティング機能
■ お問合せ対応ツール
■ HadoopログAPIの提供
○ わからないことがあったら
■ 基本社内にユーザーがいるので、聞きに行く!
Sakashoチーム
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Sakasho以外にも
Copyright © DeNA Co.,Ltd. All Rights Reserved.
ゲーム開発を支えるサービス
49
iota
○ アプリ配信ツール
○ iOSアプリでは社内用の証明書にリザインする
○ 30 GB / day くらいの転送量が発生している一大社内サービス
(ゲーム以外も利用)
TwitterDM送信ツール
○ スケジュール配信可能
Sakasho以外のサービス
Copyright © DeNA Co.,Ltd. All Rights Reserved.
まとめ
ゲーム開発を支えるプラットフォームSakasho
○ Sakashoがサーバー側の運用を一括で受け持つことで
各ゲームタイトルはゲーム開発に集中できる
Sakashoのサーバーサイドの開発はRubyを使っている
○ 大規模なアプリケーションの開発・運用に
必要な仕組みを整備しました