SlideShare a Scribd company logo
1 of 50
Download to read offline
Copyright © DeNA Co.,Ltd. All Rights Reserved.
January 29, 2016
Takehiko YOKOTA
Makoto HARUYAMA
DeNA 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を使っており、それに即
した作りになっている。
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Rack::PerformanceLog
○ DeNA専用のパフォーマンス調査用のログを出すrackミドルウェア。
○ 一行追加すればOK
DeNAで運用するための要件を満たすためのモ
ジュール
Rubyの導入期
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: 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を使ったアプリケーションの運用期
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
$ 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
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を使っている
○ 大規模なアプリケーションの開発・運用に
必要な仕組みを整備しました

More Related Content

What's hot

メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?Takuya Ueda
 
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfirek8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfireYahoo!デベロッパーネットワーク
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話Tier_IV
 
Topology Managerについて / Kubernetes Meetup Tokyo 50
Topology Managerについて / Kubernetes Meetup Tokyo 50Topology Managerについて / Kubernetes Meetup Tokyo 50
Topology Managerについて / Kubernetes Meetup Tokyo 50Preferred Networks
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2Preferred Networks
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話Kentaro Yoshida
 
ヤフーのクラウドネイティブへの取り組みとそれを支えるシステム開発 #CNDT2019 #OSDT2019 #RoomE #1E4
ヤフーのクラウドネイティブへの取り組みとそれを支えるシステム開発 #CNDT2019 #OSDT2019 #RoomE #1E4ヤフーのクラウドネイティブへの取り組みとそれを支えるシステム開発 #CNDT2019 #OSDT2019 #RoomE #1E4
ヤフーのクラウドネイティブへの取り組みとそれを支えるシステム開発 #CNDT2019 #OSDT2019 #RoomE #1E4Yahoo!デベロッパーネットワーク
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例sairoutine
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)NTT DATA Technology & Innovation
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceToru Makabe
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016Atsushi Odagiri
 
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発Amazon Web Services Japan
 
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...NTT DATA Technology & Innovation
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)NTT DATA Technology & Innovation
 
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)gree_tech
 

What's hot (20)

継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfirek8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話
 
Topology Managerについて / Kubernetes Meetup Tokyo 50
Topology Managerについて / Kubernetes Meetup Tokyo 50Topology Managerについて / Kubernetes Meetup Tokyo 50
Topology Managerについて / Kubernetes Meetup Tokyo 50
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 
ヤフーのクラウドネイティブへの取り組みとそれを支えるシステム開発 #CNDT2019 #OSDT2019 #RoomE #1E4
ヤフーのクラウドネイティブへの取り組みとそれを支えるシステム開発 #CNDT2019 #OSDT2019 #RoomE #1E4ヤフーのクラウドネイティブへの取り組みとそれを支えるシステム開発 #CNDT2019 #OSDT2019 #RoomE #1E4
ヤフーのクラウドネイティブへの取り組みとそれを支えるシステム開発 #CNDT2019 #OSDT2019 #RoomE #1E4
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
 
Yahoo! JAPANのデータ基盤とHadoop #dbts2016
Yahoo! JAPANのデータ基盤とHadoop #dbts2016Yahoo! JAPANのデータ基盤とHadoop #dbts2016
Yahoo! JAPANのデータ基盤とHadoop #dbts2016
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016
 
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発
 
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
 
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
 
Spark SQL - The internal -
Spark SQL - The internal -Spark SQL - The internal -
Spark SQL - The internal -
 

Viewers also liked

制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)dena_study
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装dena_study
 
Game BaaS Implemented in Ruby
Game BaaS Implemented in RubyGame BaaS Implemented in Ruby
Game BaaS Implemented in Rubydena_study
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術dena_study
 
FINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについてFINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについてdena_study
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)dena_study
 
Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発dena_study
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術dena_study
 
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門dena_study
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方dena_study
 

Viewers also liked (10)

制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装
 
Game BaaS Implemented in Ruby
Game BaaS Implemented in RubyGame BaaS Implemented in Ruby
Game BaaS Implemented in Ruby
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術
 
FINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについてFINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについて
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
 
Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
 
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
 

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

DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechconDeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechconDeNA
 
マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話Makoto Haruyama
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage PlatformMasaki Nakagawa
 
Nifty cloud c4 sa meetup
Nifty cloud c4 sa meetupNifty cloud c4 sa meetup
Nifty cloud c4 sa meetupYuichi Saotome
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすShunsuke Maeda
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbixsoftlayerjp
 
OSSコミッタの生活とその必要性
OSSコミッタの生活とその必要性OSSコミッタの生活とその必要性
OSSコミッタの生活とその必要性Hirofumi Ichihara
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestMasaki Nakagawa
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップKoichiro Sumi
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)NTT DATA OSS Professional Services
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Makoto Haruyama
 
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechcon
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechconMobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechcon
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechconDeNA
 
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ− のサマリ
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ−  のサマリ社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ−  のサマリ
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ− のサマリSatoshi Yokoi
 
Drupalによる大規模サイトの設計・実装 において何に気をつけるべきか
Drupalによる大規模サイトの設計・実装において何に気をつけるべきかDrupalによる大規模サイトの設計・実装において何に気をつけるべきか
Drupalによる大規模サイトの設計・実装 において何に気をつけるべきかdgcircus
 
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDSYuki Kanazawa
 
Enterprise Redmine
Enterprise RedmineEnterprise Redmine
Enterprise RedmineDai FUJIHARA
 

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

DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechconDeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
 
マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform
 
Nifty cloud c4 sa meetup
Nifty cloud c4 sa meetupNifty cloud c4 sa meetup
Nifty cloud c4 sa meetup
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbix
 
OSSコミッタの生活とその必要性
OSSコミッタの生活とその必要性OSSコミッタの生活とその必要性
OSSコミッタの生活とその必要性
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in Test
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
 
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechcon
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechconMobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechcon
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechcon
 
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ− のサマリ
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ−  のサマリ社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ−  のサマリ
社員数100名の壁を越える タイミングに在籍する、 組織・サービスを支える プロダクトチームの 苦悩と喜び−ランサーズ− のサマリ
 
Drupalによる大規模サイトの設計・実装 において何に気をつけるべきか
Drupalによる大規模サイトの設計・実装において何に気をつけるべきかDrupalによる大規模サイトの設計・実装において何に気をつけるべきか
Drupalによる大規模サイトの設計・実装 において何に気をつけるべきか
 
CData API Server ハンズオン
CData API Server ハンズオンCData API Server ハンズオン
CData API Server ハンズオン
 
【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS【JAWS DAYS 2014】ランサーズを支えるRDS
【JAWS DAYS 2014】ランサーズを支えるRDS
 
Enterprise Redmine
Enterprise RedmineEnterprise Redmine
Enterprise Redmine
 
Paa s and oss
Paa s and ossPaa s and oss
Paa s and oss
 
20180319 ccon sync kintone
20180319 ccon sync kintone20180319 ccon sync kintone
20180319 ccon sync kintone
 

More from Makoto Haruyama

backbone.jsの使用例 その1
backbone.jsの使用例 その1backbone.jsの使用例 その1
backbone.jsの使用例 その1Makoto Haruyama
 
fluent-plugin-resque_stat
fluent-plugin-resque_statfluent-plugin-resque_stat
fluent-plugin-resque_statMakoto Haruyama
 
初心者エンジニアのシステム構築失敗談
初心者エンジニアのシステム構築失敗談初心者エンジニアのシステム構築失敗談
初心者エンジニアのシステム構築失敗談Makoto Haruyama
 
初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談Makoto Haruyama
 
Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Makoto Haruyama
 
分散ファイルストレージ
分散ファイルストレージ分散ファイルストレージ
分散ファイルストレージMakoto Haruyama
 
Automation tech casual_talks_1_20120717
Automation tech casual_talks_1_20120717Automation tech casual_talks_1_20120717
Automation tech casual_talks_1_20120717Makoto Haruyama
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
20110622 haruyama webso]cket
20110622 haruyama webso]cket20110622 haruyama webso]cket
20110622 haruyama webso]cketMakoto Haruyama
 

More from Makoto Haruyama (11)

backbone.jsの使用例 その1
backbone.jsの使用例 その1backbone.jsの使用例 その1
backbone.jsの使用例 その1
 
Fluentd in Co-Work
Fluentd in Co-WorkFluentd in Co-Work
Fluentd in Co-Work
 
fluent-plugin-resque_stat
fluent-plugin-resque_statfluent-plugin-resque_stat
fluent-plugin-resque_stat
 
初心者エンジニアのシステム構築失敗談
初心者エンジニアのシステム構築失敗談初心者エンジニアのシステム構築失敗談
初心者エンジニアのシステム構築失敗談
 
初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談
 
Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2
 
Yapc2012 ltthon
Yapc2012 ltthonYapc2012 ltthon
Yapc2012 ltthon
 
分散ファイルストレージ
分散ファイルストレージ分散ファイルストレージ
分散ファイルストレージ
 
Automation tech casual_talks_1_20120717
Automation tech casual_talks_1_20120717Automation tech casual_talks_1_20120717
Automation tech casual_talks_1_20120717
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
20110622 haruyama webso]cket
20110622 haruyama webso]cket20110622 haruyama webso]cket
20110622 haruyama webso]cket
 

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

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