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
470
リアルタイム通信を支えるブラナイのサーバ開発と運用(後編)
yoan
August 04, 2016
Tweet
Share
Other Decks in Programming
See All in Programming
複雑なフォームに立ち向かう Next.js の技術選定
macchiitaka
2
170
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
550
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
3
310
チームのテスト力を鍛える
goyoki
3
460
機能追加とリーダー業務の類似性
rinchoku
2
1.3k
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
110
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
HTMLの品質ってなんだっけ? “HTMLクライテリア”の設計と実践
unachang113
4
2.9k
Cache Me If You Can
ryunen344
2
1.5k
AIコーディングAgentとの向き合い方
eycjur
0
270
Laravel Boost 超入門
fire_arlo
3
220
はじめてのMaterial3 Expressive
ym223
2
860
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Rails Girls Zürich Keynote
gr2m
95
14k
Building Adaptive Systems
keathley
43
2.7k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Why Our Code Smells
bkeepers
PRO
339
57k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Automating Front-end Workflow
addyosmani
1370
200k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Done Done
chrislema
185
16k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
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!!