More Related Content
PDF
PDF
PDF
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer PDF
分散トレーシング技術について(Open tracingやjaeger) PDF
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割 PDF
PDF
M20_Azure SQL Database 最新アップデートをまとめてキャッチアップ [Microsoft Japan Digital Days] PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか What's hot
PDF
LayerXのQAチームで目指したい動き方 (社内資料) PDF
PDF
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021 PDF
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編 PDF
インフラエンジニアの綺麗で優しい手順書の書き方 PDF
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する PDF
PDF
PDF
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 PDF
PDF
PDF
PPTX
PDF
PDF
PDF
【マーケティング・テクノロジーフェア 大阪 2023】 データから正しい意思決定を行うために 〜全社横断で実施したデータ活用プロジェクトの取... Viewers also liked
PPT
制作を支えたツール達 (パズル戦隊デナレンジャー) PDF
ガールアックス:リアルタイム通信処理の効率的な実装 PDF
Game BaaS Implemented in Ruby PDF
FFRKを支えるWebアプリケーションフレームワークの技術 PDF
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて PDF
FINAL FANTASY
Record Keeper 演出データについて PDF
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー) PPTX
PPTX
FINAL FANTASY Record Keeperのマスターデータを支える技術 PDF
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門 PDF
Similar to DeNAのゲーム開発を支える Game Backend as a Service
PPTX
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon PDF
PDF
PPTX
Rails on GKEで運用するWebアプリケーションの紹介 PDF
PDF
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋 PPTX
DeNAのネイティブアプリにおけるサーバ開発の現在と未来 PPTX
PDF
PPTX
レガシーな Perl システムに DDD (ドメイン駆動設計)を取り入れる PDF
ゲーム会社でのRuby : rails活用事例 PDF
PPTX
ネットワークエンジニアがWeb開発をやってみて思ったこと PPTX
PDF
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術 PPTX
PDF
PDF
PDF
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q PPTX
iOSアプリ開発のCI環境 - Jenkins編 - More from Makoto Haruyama
PDF
PDF
PDF
fluent-plugin-resque_stat PDF
KEY
KEY
Mysql casual fukuoa_vlo_2 KEY
KEY
KEY
Automation tech casual_talks_1_20120717 KEY
My sql casual_in_fukuoka_vol1 PPTX
20110622 haruyama webso]cket DeNAのゲーム開発を支える Game Backend as a Service
- 1.
Copyright © DeNACo.,Ltd. All Rights Reserved.
January 29, 2016
Takehiko YOKOTA
Makoto HARUYAMA
DeNA Co., Ltd.
のゲーム開発を支える
Game Backend as a Service
- 2.
Copyright © DeNACo.,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.
- 4.
- 5.
Copyright © DeNACo.,Ltd. All Rights Reserved.
どうやって支えているか?
ネイティブアプリ用プラットフォーム
Sakasho
- 6.
Copyright © DeNACo.,Ltd. All Rights Reserved.
今日お話すること
1. Sakashoとは
2. Sakashoの構成について
3. Rubyを使った開発について
4. その他の技術
5. Sakashoチームの体制について
6. まとめ
6
- 7.
- 8.
Copyright © DeNACo.,Ltd. All Rights Reserved.
Sakashoとは
ネイティブアプリゲーム開発に
必要とされるサーバー機能を
提供するゲームプラットフォーム
ゲーム開発におけるサーバー機能を
Sakashoが一括で受け持つ
ことで開発・運用コストを削減
運用のしやすさも見据えたゲームの
作り方のルールもある程度強いる
8
- 9.
Copyright © DeNACo.,Ltd. All Rights Reserved.
ゲーム開発・運用に必要なAPIの提供
● ユーザー情報API
● マスターデータ配信API
● ログインボーナスAPI など
9
Sakashoが提供している機能
- 10.
Copyright © DeNACo.,Ltd. All Rights Reserved.
SDK
● 課金やPush通知など、OSに依存している機能について
簡単に使えるインターフェースの提供
● Unity、C++のゲームエンジンに対応
10
Sakashoが提供している機能
- 11.
Copyright © DeNACo.,Ltd. All Rights Reserved.
WebView用インターフェースの提供
● お知らせの配信
● 掲示板
● 利用規約など
11
Sakashoが提供している機能
- 12.
Copyright © DeNACo.,Ltd. All Rights Reserved.
ゲーム専用サーバーとの連携機能
● ゲーム専用サーバーからSakashoにアクセスできる
Web APIを提供
● ゲーム専用サーバーを介しての
ユーザー情報の取得などに対応
12
Sakashoが提供している機能
- 13.
Copyright © DeNACo.,Ltd. All Rights Reserved.
Sakashoの機能一覧(一部抜粋)
● マスターデータ配信
● アセット配信
● プレイヤー管理
● お知らせ管理
● アイテム管理
● ログインボーナス
● お問合せ機能
● 課金
● ログ管理
13
● ランキング
● 掲示板
● 補填機能
● メンテナンス
● Push通知
● プレイヤー検索機能
● ギルド
● アプリのバージョン管理
● CS運用ツール
Sakashoが提供している機能
- 14.
- 15.
- 16.
- 17.
Copyright © DeNACo.,Ltd. All Rights Reserved.
マイクロサービス?
役割毎に10の独立したAPIコード群がある
○ メリット
■ 他のAPIへの影響を考えずにデプロイできる
■ リソースを細かく調整できる
○ デメリット
■ 運用工数がかかる(gemの更新とか)
■ 結局サービス毎に人を専用にアサインとかしなかったので、全員
全部見る状態
コード量も少ない(API全部ファイル数が700程度、行数3万行)のでこの規模
だと管理工数のほうが大きい
Sakashoの構成について
- 18.
- 19.
Copyright © DeNACo.,Ltd. All Rights Reserved.
○ MySQLのMaster/Slave構成 + sharding
○ MHAでMasterの高可用性
○ MySQLへの接続は都度接続
○ DNSサーバーはMyDNSを使って、DeNA独自の拡張も入っている
DB周りは、基本インフラチームの指針にそっており、DeNAのオーソドックス
な構成になっています
Sakashoの構成について
DBに関して
- 20.
- 21.
Copyright © DeNACo.,Ltd. All Rights Reserved.
Rubyを書ける人が多いチーム
○ Rubyで開発、運用 > Perlでの開発・運用
○ 何かあってもフォローできる人材がいる
採用面
○ Rubyでサービス開発を経験している人材の増加
Rubyの選択
21
Rubyを使った開発
PerlからRubyへの移行対応も責任をもって進めた
- 22.
Copyright © DeNACo.,Ltd. All Rights Reserved.
● Rubyの導入期
● Rubyを使った開発期
● Rubyで書かれたアプリケーションの運用期
Rubyを使った開発と運用
22
Rubyを使った開発
- 23.
- 24.
Copyright © DeNACo.,Ltd. All Rights Reserved.
DeNAで運用するための要件を満たすためのモ
ジュール
Rubyの導入期
ResolverMyDNS
○ MyDNSにアクセウし名前解決をするためのモジュール
○ DNSキャッシュもしている
○ DNSサーバーにDeNA用に拡張したMyDNSを使っており、それに即
した作りになっている。
- 25.
Copyright © DeNACo.,Ltd. All Rights Reserved.
Rack::PerformanceLog
○ DeNA専用のパフォーマンス調査用のログを出すrackミドルウェア。
○ 一行追加すればOK
DeNAで運用するための要件を満たすためのモ
ジュール
Rubyの導入期
- 26.
Copyright © DeNACo.,Ltd. All Rights Reserved.
社内rubygemsサーバーの構築
社内専用gemの管理・配布のため
○ Gem in a Boxを使っている
Rubyの導入期
- 27.
Copyright © DeNACo.,Ltd. All Rights Reserved.
小さいサービスで実績を作る
○ 社内サービスをリリース
■ 社内用アプリ配信ツール(Rails) iota
実績とテスト
27
Rubyの導入期
- 28.
- 29.
Copyright © DeNACo.,Ltd. All Rights Reserved.
1. API サーバー : Sinatra + Sequel + Jbuilder
a. 省メモリ・ハイパフォーマンス
b. JSONしか返さない
2. 管理 ツール : Ruby on Rails
a. アクセス数は限られている
b. Web UIを簡単に作れる
c. 多少パフォーマンスが犠牲にしても、開発スピードを上げる
フレームワーク選定
29
Rubyを使った開発期
- 30.
Copyright © DeNACo.,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.
Copyright © DeNACo.,Ltd. All Rights Reserved.
ridgepole
https://github.com/winebarrel/ridgepole
● ファイルの内容を実際のスキーマとの差分があればそれを自動的に
検知し、DDLを発行してくれる
● 1テーブル1ファイルで表現
● shardingにも対応したスクリプトを用意
スキーマ管理
31
Rubyを使った開発期
- 32.
Copyright © DeNACo.,Ltd. All Rights Reserved.
Sakashoの共通ロジックをgemにする
○ API毎のリクエスト・レスポンスの共通処理の切り出し
○ モデルの共通化
DBのコネクション管理
○ APIではコネクション管理用の軽いラッパーを用意
■ コードの中で明示的にMaster or Slaveなのかを書く
○ 管理ツール(Rails)ではSwitchPointを使用
その他
32
Rubyを使った開発期
- 33.
- 34.
Copyright © DeNACo.,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.
Copyright © DeNACo.,Ltd. All Rights Reserved.
PicojsonRuby
○ rubyの標準ライブラリを使ってJSONをparseすると元のJSONの大き
さの約10倍くらいのメモリを消費する
○ Proxyサーバーで共通のkey valueを1つだけ追加したいだけ
○ C++でかかれたpicojsonをrubyから呼び出せるようにして、JSONの
操作をC++で行うようにした
パフォーマンス向上
35
Rubyを使ったアプリケーションの運用期
- 36.
Copyright © DeNACo.,Ltd. All Rights Reserved.
Stackprof
○ https://github.com/tmm1/stackprof
○ SakashoのAPIサーバーに下記のようなコードを仕込んでいる
Rubyのプロファイリング
36
Rubyを使ったアプリケーションの運用期
- 37.
Copyright © DeNACo.,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.
Copyright © DeNACo.,Ltd. All Rights Reserved.
Unicorn::ConfiguratorFromEnv
○ Unicornのworker数を環境変数で設定できる
○ アプリケーションのコードを修正せずに
インフラチームだけで対応できる
require するだけでOK
worker数をすぐに調整できるようにする
38
Rubyを使ったアプリケーションの運用期
- 39.
Copyright © DeNACo.,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.
- 41.
Copyright © DeNACo.,Ltd. All Rights Reserved.
AWSも活用しています
○ S3
■ 履歴等のデータの保存
■ ファイル配信
○ SNS
■ push通知
■ 全ユーザーに配信が簡単にできる
AWS
41
その他の技術
- 42.
- 43.
Copyright © DeNACo.,Ltd. All Rights Reserved.
チーム
○ 8人から12人くらい
■ ブラウザタイトルからアプリタイトルへ移行する際にsakashoの運
用を経験することが多い
リリースサイクル
○ 2週間に一度のペースでリリース
○ 2週間でできることやる
Sakasho専任チーム
43
Sakashoチーム
- 44.
- 45.
Copyright © DeNACo.,Ltd. All Rights Reserved.
● 要望確確認会: リリースに含める
フィーチャーを検討
● Sakasho定例: リリースに含める予
定のフィーチャーをチームにシェア
● QA Kickoff: リリースに予定の
フィーチャーをQAに伝え、リリース
するフィーチャーとリリース日を決
める
● リリース告知: ゲームデベロッパに
アナウンスする。
リリースサイクルを細かく
45
● 仕様書コンプリート
● 開発開始
● SDKのスケルトン提出
● フィーチャーコンプリート
● QA開始
● サインオフ(QA完了)
● リリース
● QA確認
● ゲームデベロッパにリリースした旨をア
ナウンス
● Sakasho定例: フェーズの振り返り
Sakashoチーム
- 46.
Copyright © DeNACo.,Ltd. All Rights Reserved.
他部署との連携
46
ゲームの開発・運用には色々な部署が関わっています
○ インフラ
○ CS
○ QA(Sakasho自体のQAとゲームのQA)
○ マーケティング(特にプロモーション関連)
○ バックオフィス関連
■ 法務
■ 経理
○ 各ゲーム開発を調整するチーム
Sakashoチーム
- 47.
Copyright © DeNACo.,Ltd. All Rights Reserved.
他部署との連携
47
色々な人達との調整も含めてSakashoが引き受けます
○ CS向けやマーケティング向けのツールも提供
■ レポーティング機能
■ お問合せ対応ツール
■ HadoopログAPIの提供
○ わからないことがあったら
■ 基本社内にユーザーがいるので、聞きに行く!
Sakashoチーム
- 48.
- 49.
Copyright © DeNACo.,Ltd. All Rights Reserved.
ゲーム開発を支えるサービス
49
iota
○ アプリ配信ツール
○ iOSアプリでは社内用の証明書にリザインする
○ 30 GB / day くらいの転送量が発生している一大社内サービス
(ゲーム以外も利用)
TwitterDM送信ツール
○ スケジュール配信可能
Sakasho以外のサービス
- 50.
Copyright © DeNACo.,Ltd. All Rights Reserved.
まとめ
ゲーム開発を支えるプラットフォームSakasho
○ Sakashoがサーバー側の運用を一括で受け持つことで
各ゲームタイトルはゲーム開発に集中できる
Sakashoのサーバーサイドの開発はRubyを使っている
○ 大規模なアプリケーションの開発・運用に
必要な仕組みを整備しました