BrainWarsのアーキテクチャ(OpsWorks & DynamoDB編)

Masakazu Matsushita
Masakazu MatsushitaSoftware Engineer at kaonavi, inc.
BrainWarsの
アーキテクチャ
ダウンロード突破!万
@matsukaz
2015.03.19
- OpsWorks & DynamoDB編 -
@matsukaz
松下 雅和
株式会社トランスリミット
エンジニア
@matsukaz
松下 雅和
株式会社トランスリミット
エンジニア
• インフラ全般 (AWS, Chef)
• サーバ (Rails, Socket.IO, fabric)
• フロント (cocos2d-x, C++)
• 開発/運用支援 (開発用Docker, Adminサーバ)
• ChatOps推進 (slack, hubot*3)
• その他必要なことはなんでも

(コーヒー豆購入, 卓球王者,

バランスボール&スタンディングデスク布教)
主な担当
書籍
BrainWars
知ってますか?
ゲームの流れ
ホーム
バトル開始!
同一リーグの
ユーザと対戦
マッチング
スタンプによる
コミュニケーション
3ラウンド・バトル
(現時点で)
25種類のゲームの
中からランダムで決定
x3
1ラウンド
20秒バトル
バトル結果
3ラウンドの
合計点数で勝敗決定
各種SNSへ
結果を共有
毎週日曜24時に
ランキング確定と
リーグが昇降格
ランキング
面白そうでしょ?
(・∀・)
わずか8ヶ月で
1000万突破!
海外ユーザ比率
95.7%
男女比ほぼ同じ
20代が約半数
AKB48もハマる!
乃木坂46や
芸人まで
創業者たち
( ´-`)。oO(ラーメン屋…?)
高場社長
工藤CTO
デザイナー
花城氏
BrainWarsの
アーキテクチャ
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
EC2
SNS
CloudWatch
Route 53
Slack
リアルタイム対戦
Socket Server
API Server
SES SNS SQS
ISP
Admin Server
APK
全体構成
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
Easy Deployment,
Auto Scale
(Load & Time)
EC2
ユーザデータゴースト用
バトルログ
ランキング,
一時データ
プロフィール画像,
言語ファイル, etc
SNS
CloudWatch
Route 53
Slack
リアルタイム対戦
Socket Server
API Server
SES SNS SQS
ISP
Admin Server
プレイ中
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
EC2
SNS
CloudWatch
Route 53
Slack
リアルタイム対戦
Socket Server
API Server
SES SNS SQS
ISP
メール送信 送信失敗時
Admin Server
メール送信
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
CloudWatch
Route 53
リアルタイム対戦
Socket Server
API Server
EC2
SNS
Slack
プッシュ通知
SES SNS SQS
ISP
Admin Server
device token登録
プッシュ通知
fabric,
rake tasks
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
CloudWatch
Route 53
リアルタイム対戦
Socket Server
API Server
EC2
SNS
Slack
画像削除
SES SNS SQS
ISP
Admin Server
通報, 問合せ対応
fabric,
rake tasks
名前変更, BAN,
コイン付与, …
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
CloudWatch
Route 53
リアルタイム対戦
Socket Server
API Server
EC2
SNS
Slack
SES SNS SQS
ISP
Admin Server
Auto Scale
その他運用
APK
ビルド
Dynamic
DynamoDB
fabric,
rake tasks
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL) SES SNS SQS
Easy Deployment,
Auto Scale
(Load & Time)
EC2
ユーザデータゴースト用
バトルログ
ランキング,
一時データ ISP
プロフィール画像,
言語ファイル, etc
メール送信
SNS
送信失敗時
CloudWatch
Route 53
device token登録
Slack
プッシュ通知
リアルタイム対戦
Socket Server
API Server
Auto Scale
名前変更, BAN,
コイン付与, …
Admin Server
APK
ビルド
画像削除
全体構成
Dynamic
DynamoDB
fabric,
rake tasks
BrainWars
OpsWorks
×
OpsWorksの特徴
• Chefを利用したアプリケーション管理サービス
• 環境構築とアプリケーションのデプロイを自動化
• 幅広いアーキテクチャをデフォルトでサポート
• Chefのレシピ追加などでカスタマイズも可能
• ELBと自動連携
• オートスケール設定
Instances ELB利用
EIP付与
コストを考慮
して1aのみ(※)
想定外の負荷対応
ピーク時間のみ
※Multi-AZでは、AZ毎に同じ台数のサーバを配置するのが一般的なため
工夫している点
• Chefのレシピ追加
• ephemeral diskをマウントして有効活用
• file descriptorなどのチューニング
• monitプロセスを再起動

(チューニング内容が反映されていないため)
• CloudWatch連携(独自メトリクス、ALARM)
工夫している点
• カスタムAMI、EBS-Bootによる起動速度向上

(7分以上 → 2分弱に短縮)
http://blog.celingest.com/en/2014/04/25/benckmark-boot-time-
comparison-opsworks/
参考データ
課題
• デプロイすると勝手にELBと連携しちゃう…
メンテ状態に切り替えて、
ELBからEC2切り離して、
アプリをデプロイっと!
さてEC2に直接アクセスで
サーバの動作確認を…えっ?
すでにELBで外部に公開されてる?!
ヽ(=´▽`=)ノ
∑(゚д゚lll)
BrainWars
DynamoDB
×
DynamoDBの特徴
ご存知ですよね?
(時間なくて書けなかった…)
Tables
• バトルログ
• ユーザがバトルしたときの操作ログ
• PKはHash & Range、HashにはユーザID、

RangeにはトレーニングID (25種類)
• データ量は約80GB、アイテム数は1億弱
• 通常はWriteのみ、Readは後述するケースのみ
通常対戦時
Socket Server
API Server
host guest
待機中ユーザが
2人になると
マッチング ②
socket接続 socket接続
① ①
通常対戦時
Socket Server
API Server
host guest
問題の取得
問題データ
を共有
③
④
通常対戦時
Socket Server
API Server
host guest
結果の送信
操作データ
を相互送信
結果の送信
⑤
⑥
⑥
操作ログ保存
⑦
相手がいなかったら
どうしよう?
((((;゚Д゚))))
相手がいないとき
Socket Server
API Server
host
マッチング
待ち ②
socket接続
①
・・・
相手がいないとき
Socket Server
API Server
host
タイムアウトで
切断 ③・・・
ゴーストを
要求 ④
対戦相手を
ランダムで選んで
操作ログを返却
⑤
相手がいないとき
Socket Server
API Server
host
・・・
結果の送信
⑦
操作ログ保存
⑧
ghost
操作ログと
対戦 ⑥
スタンプは?
無反応になる?
ちょっとした
ロジックで
反応するように実装
弊社デザイナー
「いやぁ、♥送ったらいっぱい♥きたわ」
「オレ、モテるかもしんねー(*ノω・*)テヘ」
社長
「昨晩はsocketサーバ落ちてたわ」
「それゴーストですよ」
socketサーバ
落ちたらどうしよう?
((((;゚Д゚))))
socket死亡時
Socket Server
API Server
host
接続失敗 ②
socket接続
①
・・・
あとは相手が
いないときと動きは一緒!
緊急時の動作も兼ねてた!!
ありがたやーヽ(=´▽`=)ノ
宣伝
ただいま
メンバーを募集中!
• エンジニア
• プロデューサー
• CFO/COO候補
• デザイナー
• プランナー
BrainWarsのアーキテクチャ(OpsWorks & DynamoDB編)
5億DL〜 17億DL〜5億DL〜
世界をターゲットに
DL数で億超えを目指す
社内勉強会 T-Cube
(Translimit Tech Talk)
バランスボールや
スタンディングデスク
お待ちしてます!
1 of 53

More Related Content

What's hot(20)

introduction of WalBintroduction of WalB
introduction of WalB
MITSUNARI Shigeo7K views
Drupal補完計画Drupal補完計画
Drupal補完計画
Kuniyoshi Tone635 views
Open il vol4Open il vol4
Open il vol4
榎本 優樹2.2K views
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
Masahiko Sawada12.4K views
JAMstackは眠らないJAMstackは眠らない
JAMstackは眠らない
Kuniyoshi Tone4.7K views
OS入門OS入門
OS入門
Shuntaro Saiba2.4K views
MongoDB3.2の紹介MongoDB3.2の紹介
MongoDB3.2の紹介
Tetsutaro Watanabe1.6K views

Similar to BrainWarsのアーキテクチャ(OpsWorks & DynamoDB編)(20)

IoT(Bluetooth mesh) × サーバーレスIoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレス
Masahiro NAKAYAMA1.4K views
TypeScript x Bot FrameworkTypeScript x Bot Framework
TypeScript x Bot Framework
Kazumi IWANAGA471 views
AI に取り組むべき4つの領域AI に取り組むべき4つの領域
AI に取り組むべき4つの領域
Daisuke Masubuchi924 views
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 API
Akira Hatsune2.3K views
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
Hirotaka Kawata2.8K views
PostgreSQL Unconference #29 Unicode IVSPostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVS
Noriyoshi Shinoda5K views

More from Masakazu Matsushita(20)

ダブルCTOダブルCTO
ダブルCTO
Masakazu Matsushita2.8K views
BrainWarsを支えるAWSサービスたちBrainWarsを支えるAWSサービスたち
BrainWarsを支えるAWSサービスたち
Masakazu Matsushita13.7K views
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Masakazu Matsushita231.6K views
いつやるの?Git入門いつやるの?Git入門
いつやるの?Git入門
Masakazu Matsushita435K views
カジュアルにMongo dbのbackup機能説明カジュアルにMongo dbのbackup機能説明
カジュアルにMongo dbのbackup機能説明
Masakazu Matsushita12.4K views
海外向けサービスの苦労話海外向けサービスの苦労話
海外向けサービスの苦労話
Masakazu Matsushita3.4K views
Mongo DBを半年運用してみたMongo DBを半年運用してみた
Mongo DBを半年運用してみた
Masakazu Matsushita30.5K views
ニコカレでLife hacksニコカレでLife hacks
ニコカレでLife hacks
Masakazu Matsushita1.2K views
DevLOVEのDevってなんだ?DevLOVEのDevってなんだ?
DevLOVEのDevってなんだ?
Masakazu Matsushita1.2K views
スマフォな生活スマフォな生活
スマフォな生活
Masakazu Matsushita1.3K views
It's up to youIt's up to you
It's up to you
Masakazu Matsushita819 views
JavaScript再入門JavaScript再入門
JavaScript再入門
Masakazu Matsushita5.1K views

BrainWarsのアーキテクチャ(OpsWorks & DynamoDB編)