Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
リアルタイム通信を支えるブラナイのサーバ開発と運用(後編)
Search
yoan
August 04, 2016
Programming
1
450
リアルタイム通信を支えるブラナイのサーバ開発と運用(後編)
yoan
August 04, 2016
Tweet
Share
Other Decks in Programming
See All in Programming
MySQL のインデックスの種類をおさらいしよう! / overviewing indexes in MySQL
okashoi
0
170
Migrating to Signals: A Practical Workshop
manfredsteyer
PRO
0
290
PHP8の機能を使って堅牢にコードを書く
fendo181
6
2.6k
イベントストーミングによるオブジェクトモデリング・オブジェクト指向プログラミングの適用・開発プロセスの変遷・アーキテクチャの変革 / Object modeling with Event Storming.
nrslib
12
3.2k
もうすぐ新年度、Babylon.jsがお勧めな3個の理由
hideg
0
170
RubyVM を PHP で実装する 〜Hello World を出力するまで〜
memory1994
PRO
1
490
コミュニティに参加したことで起きた変化
ohmori_yusuke
3
130
ここ1~2年くらいで 使えるようになった(主要ブラウザーの最新版 がすべて対応した ) ウェブの新機能について ランダムに喋る!
myzkyy
9
6.5k
自動テスト実行結果の目的を整理する / Organizing objectives of automated test results
twada
PRO
10
2.1k
15分間でふんわり理解するDocker @ Matsuriba MAX
ukwhatn
PRO
1
340
C# 大統一理論推進委員会 会員のための Unity Package Manager プロジェクト構成案
monry
PRO
0
580
Introduction for Open Source Swift Workshop
giginet
PRO
0
290
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
19
1.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.2k
Adopting Sorbet at Scale
ufuk
66
8.5k
What's new in Ruby 2.0
geeforr
335
31k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
242
20k
Designing for Performance
lara
601
67k
The Brand Is Dead. Long Live the Brand.
mthomps
48
22k
BBQ
matthewcrist
78
8.7k
Faster Mobile Websites
deanohume
296
30k
Building Better People: How to give real-time feedback that sticks.
wjessup
350
18k
The Art of Programming - Codeland 2020
erikaheidi
40
12k
Pencils Down: Stop Designing & Start Developing
hursman
115
11k
Transcript
リアルタイム通信を⽀える ブラナイ TM のサーバ開発と運⽤ 2016/08/03
2 ⾃⼰紹介 • 養安元気(ようあん もとき) • XFLAG TM スタジオゲーム開発室 •
2013年 株式会社ミクシィに⼊社 • SNS mixiの運⽤部に配属 • 2014年 モンスターストライク ® サーバチームにジョイン • 2015年 ブラナイの開発/運⽤に従事
3 ブラナイにおける運⽤の⾃動化
概要 4 • ブラナイのサーバ開発をメインで⾏っているのは3⼈ • 今回は⾃動化内容として以下の3つを紹介します • 環境構築 • ゲームデータのインポート
• QAの⽀援
5 環境構築
環境構築 (モンスト) 6 • 環境 • オンプレがメイン • クラウド •
GMOアプリクラウド • ⼀部Appサーバ • AWS • ⼀部Appサーバ • TURNサーバ • インスタンス作成 • aws-cli のラッパーツール • コンフィグを読み込みインスタンス作成 • コンフィグ修正 • マネジメントコンソールで修正 • Security Group • Route53 aws-cli Management console
環境構築 (ブラナイ) 7 Terraform Jenkins • 環境 • すべてAWS •
インスタンス作成 • Terraform • コンフィグ修正 • Terraform GitHub
環境構築 - Terraform 8 • HashiCorp製のインフラ管理ツール • https://www.terraform.io/ • 各種設定をtfファイルに記述し、クラウドに適⽤
• 様々なクラウドに対応 • AWS • GCP • Windows Azure • 詳しくは以前XFLAGで発表した資料を参照 • http://www.slideshare.net/w1mvy/terraform-58090306
photon環境構築 9 • tfファイルにコンフィグ追加 • PullRequestにしてマージ • photonや監視設定を含むAMIをpackerで事前に作成 • Terraformだけでサーバの準備が整う
resource "aws_instance" “photon" { ami = "ami-xxxxxxxx“ instance_type = "m4.large“ count = 1 subnet_id = "subnet-xxxxxxxx“ vpc_security_group_ids = [ "sg-xxxxxxxx", "sg-yyyyyyyy“ ] root_block_device { volume_type = "gp2“ volume_size = "32“ } }
Terraformの利点 その1 10 • PullRequestから作者と⽬的を把握できる • 設定がファイルで残るためバージョン管理が可能 • インスタンスの存在理由がわかる •
過去の作業履歴を参照できる
Terraformの利点 その1 11 • PullRequestから作者と⽬的を把握できる • 設定がファイルで残るためバージョン管理が可能 • インスタンスの存在理由がわかる •
過去の作業履歴を参照できる • 棚卸しが容易 • 不要なインスタンスを削除するPullRequestを作成 • 利⽤しているのであればメンバーがコメント • そうでなければマージしてインスタンス破棄
Terraformの利点 その2 12 • インスタンスのコピーが⼿軽 • 適⽤処理には冪等性がある • 差分だけ適⽤される •
現在の設定ファイル(.tf) = 最新のAWSの状態 • 同じ役割のインスタンスを作成 • モンスト: 作成時と現状の差分を確認 • ブラナイ: 設定をコピーするだけ
Terraformの利点 その2 13 • インスタンスのコピーが⼿軽 • 適⽤処理には冪等性がある • 差分だけ適⽤される •
現在の設定ファイル(.tf) = 最新のAWSの状態 • 同じ役割のインスタンスを作成 • モンスト: 作成時と現状の差分を確認 • ブラナイ: 設定をコピーするだけ • 新規に開発環境を3つ構築したが設定抜けもなく稼働中 • EC2 x 6 • ELB x 1 • Route53 x 1
14 ゲームデータの インポート
ゲームデータのインポートとは 15 • プランナーやデザイナーがデータを作成する • イベント情報 • キャラ情報/画像 • データインポート
• データ配信を⾏うサーバにデータを置く作業 • サーバ • DBサーバ • イベント情報 • キャラ情報 • S3 • キャラ画像 • サウンド
インポートの流れ(モンスト初期) 16 S3 Capistrano ユーザ DB サーバエンジニア プランナー • コマンドを⼿動で作成
• sshしてインポート • 修正ファイル⼀覧
インポートの流れ(hubot利⽤) 17 S3 Capistrano Hubot Slack ユーザ DB サーバエンジニア プランナー
• 修正ファイル⼀覧 • コマンド⽣成 • sshしてインポート
インポートの流れ(現在) 18 S3 Capistrano Jenkins Hubot Slack ユーザ DB サーバエンジニア
プランナー • 修正ファイル⼀覧 • インポート
インポートの流れ(本番環境) 19 S3 Capistrano Jenkins Hubot Slack ユーザ DB サーバエンジニア
プランナー • 修正ファイル⼀覧 • チケット作成
ブラナイ独⾃の問題 • ファイル数がおおい • 現状約2,000ファイル • Slackにインポートコマンドを貼ろうとするも⽂字制限に 引っかかる • 理由
• アクションゲーム • キャラ • ステージ • 各プラットフォームごとにファイル分け • 結果: ファイルのインポート漏れが発⽣ 20
PR-Command-Generator • PullRequestを利⽤して • 修正ファイルリストを表⽰ • コマンドを⽣成 • ステージング/本番環境 •
プランナーは別途Jiraチケットを作成 • Generatorで⽣成されたリストとチケットを⽐較 • サーバエンジニアがインポート 21
データ作成の流れ 22 S3 Capistrano Jenkins Hubot Slack ユーザ DB サーバエンジニア
プランナー • 更新ファイル⼀覧 • コマンド⽣成 • チケット作成 • ⽣成されたファイル ⼀覧と⽐較 GitHub
インポート依頼 23 S3 Capistrano Jenkins Hubot Slack ユーザ DB サーバエンジニア
プランナー GitHub インポートお願いします コマンドはこちらです GitHub はい、実⾏します
結果 • 開発環境ではサーバエンジニアのインポート作業はない • プランナーがHubot と Jenkins経由でインポート • 更新ファイル⼀覧を⽣成することでチケットとの 整合性を確認でき、インポート漏れが減らせた
24
25 QAの⽀援
開発環境でのQA • ある条件を満たした時の挙動を調べる • クエスト100回クリアするミッション報酬は正常か • BOXが満杯のときクエストが開始できないか • レアキャラのSS威⼒は妥当か 26
開発環境でのQA • ある条件を満たした時の挙動を調べる • クエスト100回クリアするミッション報酬は正常か • クエストを100回クリアする • BOXが満杯のときクエストが開始できないか •
BOX満杯までキャラを集める • レアキャラのSS威⼒は妥当か • レアキャラをゲットする 27
開発環境でのQA • ある条件を満たした時の挙動を調べる • クエスト100回クリアするミッション報酬は正常か • クエストを100回クリアする • BOXが満杯のときクエストが開始できないか •
BOX満杯までキャラを集める • レアキャラのSS威⼒は妥当か • レアキャラをゲットする 28 • QAチームがサーバチームにユーザデータの作成を依頼 • QA⽬的によって異なるため作業量が多い
Debug⽤API • ローンチ前は開発環境だけ利⽤できるAPIを⽤意 • クライアントソースはユーザが取得できる • チート⾏為の危険性 • 誤って本番のコードに含まれてしまったら事故 •
DebugAPIの利⽤は危険と判断 29
QA⽀援ツール • ブラウザから操作 • アカウント認証 • サービスに沿った機能 • 例 •
ユーザのランクを上げる • 進化素材全種追加 • ミッション達成 • 環境ごとに機能制限 • 本番環境でキャラやアイテムの操作はできない 30
機能 • キャラ/ミッション/アイテムの付与 • 時間操作(タイムトラベラー) • 未来のイベントをQA • 時間のかかるQA •
イベント終了後でもクエストクリアできるか • イベント⽂⾔の閲覧 • ステージ情報の閲覧 31
(時間があったら)Demo • アイテムの付与 32
(時間があったら)Demo • 時間操作 33
結果 • QA⽤のデータを作る作業が減った 34
今後やりたいこと • Fail Over • MHA • Redis-sentinel • 事故防⽌
• Serverspec • Data Validation機能 35
まとめ • Terraformで環境構築を⾃動化 • インスタンスの追加/削除が容易になった • HubotとJenkinsでインポートを⾃動化 • 開発環境の作業はなくなった •
データの漏れも減らせた • QA⽀援ツールでQAデータの作成を⾃動化 • QA⽤ユーザデータの作成作業を減らせた 36
最後に 37 • ブラナイDASH • 7⽉26⽇ティザーサイト公開 • 8⽉中旬リリース予定 • 事前登録絶賛受付中!!
• http://bks-dash.com
Thank You!!