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