Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
BrainWarsの
アーキテクチャ
ダウンロード突破!万
@matsukaz
2015.03.19
- OpsWorks & DynamoDB編 -
@matsukaz
松下 雅和
株式会社トランスリミット
エンジニア
@matsukaz
松下 雅和
株式会社トランスリミット
エンジニア
• インフラ全般 (AWS, Chef)
• サーバ (Rails, Socket.IO, fabric)
• フロント (cocos2d-x, C++)
• 開発/運用支援 (開発用Docker, Adminサーバ)
• ChatOps推進 ...
書籍
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 S...
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
Easy Deployment,
Auto Scale
(Load & Time)
EC2
ユーザデー...
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
EC2
SNS
CloudWatch
Route 53
Slack
リアルタイム対戦
Socket S...
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
CloudWatch
Route 53
リアルタイム対戦
Socket Server
API Serv...
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
CloudWatch
Route 53
リアルタイム対戦
Socket Server
API Serv...
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL)
CloudWatch
Route 53
リアルタイム対戦
Socket Server
API Serv...
MySQL
ELB
EC2
EC2
S3
OpsWorks
ElastiCache
(Redis)
DynamoDB
RDS
(MySQL) SES SNS SQS
Easy Deployment,
Auto Scale
(Load & Tim...
BrainWars
OpsWorks
×
OpsWorksの特徴
• Chefを利用したアプリケーション管理サービス
• 環境構築とアプリケーションのデプロイを自動化
• 幅広いアーキテクチャをデフォルトでサポート
• Chefのレシピ追加などでカスタマイズも可能
• ELBと自動連携...
Instances ELB利用
EIP付与
コストを考慮
して1aのみ(※)
想定外の負荷対応
ピーク時間のみ
※Multi-AZでは、AZ毎に同じ台数のサーバを配置するのが一般的なため
工夫している点
• Chefのレシピ追加
• ephemeral diskをマウントして有効活用
• file descriptorなどのチューニング
• monitプロセスを再起動

(チューニング内容が反映されていないため)
• Cloud...
工夫している点
• カスタムAMI、EBS-Bootによる起動速度向上

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

RangeにはトレーニングID (25種類)
• データ量は約80GB、アイテム数は1億弱
• 通常はWrite...
通常対戦時
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候補
• デザイナー
• プランナー
5億DL〜 17億DL〜5億DL〜
世界をターゲットに
DL数で億超えを目指す
社内勉強会 T-Cube
(Translimit Tech Talk)
バランスボールや
スタンディングデスク
お待ちしてます!
BrainWarsのアーキテクチャ(OpsWorks & DynamoDB編)
Upcoming SlideShare
Loading in …5
×

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

24,119 views

Published on

2015年3月19日に開催されたAWS Startup Tech Meetup #006のプレゼン資料です。
BrainWarsの全体アーキテクチャ、及びOpsWorksとDynamoDBにフォーカスを当てた内容です。

Published in: Technology

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

  1. 1. BrainWarsの アーキテクチャ ダウンロード突破!万 @matsukaz 2015.03.19 - OpsWorks & DynamoDB編 -
  2. 2. @matsukaz 松下 雅和 株式会社トランスリミット エンジニア
  3. 3. @matsukaz 松下 雅和 株式会社トランスリミット エンジニア
  4. 4. • インフラ全般 (AWS, Chef) • サーバ (Rails, Socket.IO, fabric) • フロント (cocos2d-x, C++) • 開発/運用支援 (開発用Docker, Adminサーバ) • ChatOps推進 (slack, hubot*3) • その他必要なことはなんでも
 (コーヒー豆購入, 卓球王者,
 バランスボール&スタンディングデスク布教) 主な担当
  5. 5. 書籍
  6. 6. BrainWars 知ってますか?
  7. 7. ゲームの流れ
  8. 8. ホーム バトル開始!
  9. 9. 同一リーグの ユーザと対戦 マッチング
  10. 10. スタンプによる コミュニケーション 3ラウンド・バトル (現時点で) 25種類のゲームの 中からランダムで決定 x3 1ラウンド 20秒バトル
  11. 11. バトル結果 3ラウンドの 合計点数で勝敗決定 各種SNSへ 結果を共有
  12. 12. 毎週日曜24時に ランキング確定と リーグが昇降格 ランキング
  13. 13. 面白そうでしょ? (・∀・)
  14. 14. わずか8ヶ月で 1000万突破!
  15. 15. 海外ユーザ比率 95.7%
  16. 16. 男女比ほぼ同じ 20代が約半数
  17. 17. AKB48もハマる! 乃木坂46や 芸人まで
  18. 18. 創業者たち ( ´-`)。oO(ラーメン屋…?) 高場社長 工藤CTO デザイナー 花城氏
  19. 19. BrainWarsの アーキテクチャ
  20. 20. 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 全体構成
  21. 21. 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 プレイ中
  22. 22. 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 メール送信
  23. 23. 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
  24. 24. 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, コイン付与, …
  25. 25. 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
  26. 26. 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
  27. 27. BrainWars OpsWorks ×
  28. 28. OpsWorksの特徴 • Chefを利用したアプリケーション管理サービス • 環境構築とアプリケーションのデプロイを自動化 • 幅広いアーキテクチャをデフォルトでサポート • Chefのレシピ追加などでカスタマイズも可能 • ELBと自動連携 • オートスケール設定
  29. 29. Instances ELB利用 EIP付与 コストを考慮 して1aのみ(※) 想定外の負荷対応 ピーク時間のみ ※Multi-AZでは、AZ毎に同じ台数のサーバを配置するのが一般的なため
  30. 30. 工夫している点 • Chefのレシピ追加 • ephemeral diskをマウントして有効活用 • file descriptorなどのチューニング • monitプロセスを再起動
 (チューニング内容が反映されていないため) • CloudWatch連携(独自メトリクス、ALARM)
  31. 31. 工夫している点 • カスタムAMI、EBS-Bootによる起動速度向上
 (7分以上 → 2分弱に短縮) http://blog.celingest.com/en/2014/04/25/benckmark-boot-time- comparison-opsworks/ 参考データ
  32. 32. 課題 • デプロイすると勝手にELBと連携しちゃう… メンテ状態に切り替えて、 ELBからEC2切り離して、 アプリをデプロイっと! さてEC2に直接アクセスで サーバの動作確認を…えっ? すでにELBで外部に公開されてる?! ヽ(=´▽`=)ノ ∑(゚д゚lll)
  33. 33. BrainWars DynamoDB ×
  34. 34. DynamoDBの特徴 ご存知ですよね? (時間なくて書けなかった…)
  35. 35. Tables • バトルログ • ユーザがバトルしたときの操作ログ • PKはHash & Range、HashにはユーザID、
 RangeにはトレーニングID (25種類) • データ量は約80GB、アイテム数は1億弱 • 通常はWriteのみ、Readは後述するケースのみ
  36. 36. 通常対戦時 Socket Server API Server host guest 待機中ユーザが 2人になると マッチング ② socket接続 socket接続 ① ①
  37. 37. 通常対戦時 Socket Server API Server host guest 問題の取得 問題データ を共有 ③ ④
  38. 38. 通常対戦時 Socket Server API Server host guest 結果の送信 操作データ を相互送信 結果の送信 ⑤ ⑥ ⑥ 操作ログ保存 ⑦
  39. 39. 相手がいなかったら どうしよう? ((((;゚Д゚))))
  40. 40. 相手がいないとき Socket Server API Server host マッチング 待ち ② socket接続 ① ・・・
  41. 41. 相手がいないとき Socket Server API Server host タイムアウトで 切断 ③・・・ ゴーストを 要求 ④ 対戦相手を ランダムで選んで 操作ログを返却 ⑤
  42. 42. 相手がいないとき Socket Server API Server host ・・・ 結果の送信 ⑦ 操作ログ保存 ⑧ ghost 操作ログと 対戦 ⑥
  43. 43. スタンプは? 無反応になる?
  44. 44. ちょっとした ロジックで 反応するように実装
  45. 45. 弊社デザイナー 「いやぁ、♥送ったらいっぱい♥きたわ」 「オレ、モテるかもしんねー(*ノω・*)テヘ」 社長 「昨晩はsocketサーバ落ちてたわ」 「それゴーストですよ」
  46. 46. socketサーバ 落ちたらどうしよう? ((((;゚Д゚))))
  47. 47. socket死亡時 Socket Server API Server host 接続失敗 ② socket接続 ① ・・・ あとは相手が いないときと動きは一緒! 緊急時の動作も兼ねてた!! ありがたやーヽ(=´▽`=)ノ
  48. 48. 宣伝
  49. 49. ただいま メンバーを募集中! • エンジニア • プロデューサー • CFO/COO候補 • デザイナー • プランナー
  50. 50. 5億DL〜 17億DL〜5億DL〜 世界をターゲットに DL数で億超えを目指す
  51. 51. 社内勉強会 T-Cube (Translimit Tech Talk) バランスボールや スタンディングデスク
  52. 52. お待ちしてます!

×