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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
yoan
August 04, 2016
Programming
1
470
リアルタイム通信を支えるブラナイのサーバ開発と運用(後編)
yoan
August 04, 2016
Tweet
Share
Other Decks in Programming
See All in Programming
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
390
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
6
680
NetBSD+Raspberry Piで 本物のPSGを鳴らすデモを OSC駆動の7日間で作った話 / OSC2026Osaka
tsutsui
1
100
CSC307 Lecture 01
javiergs
PRO
0
690
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
280
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
470
並行開発のためのコードレビュー
miyukiw
1
1.3k
高速開発のためのコード整理術
sutetotanuki
1
410
Metaprogramming isn't real, it can't hurt you
okuramasafumi
0
100
MUSUBIXとは
nahisaho
0
140
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
140
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
The untapped power of vector embeddings
frankvandijk
1
1.6k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
110
Joys of Absence: A Defence of Solitary Play
codingconduct
1
290
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
160
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
The Language of Interfaces
destraynor
162
26k
Visualization
eitanlees
150
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
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!!