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
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
310
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
190
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
260
Devvox Belgium - Agentic AI Patterns
kdubois
1
140
alien-signals と自作 OSS で実現する フレームワーク非依存な ロジック共通化の探求 / Exploring Framework-Agnostic Logic Sharing with alien-signals and Custom OSS
aoseyuu
2
210
When Dependencies Fail: Building Antifragile Applications in a Fragile World
selcukusta
0
110
CSC509 Lecture 08
javiergs
PRO
0
230
Domain-centric? Why Hexagonal, Onion, and Clean Architecture Are Answers to the Wrong Question
olivergierke
3
940
なぜGoのジェネリクスはこの形なのか? - Featherweight Goが明かす設計の核心
qualiarts
0
240
はじめてのDSPy - 言語モデルを『プロンプト』ではなく『プログラミング』するための仕組み
masahiro_nishimi
3
13k
pnpm に provenance のダウングレード を検出する PR を出してみた
ryo_manba
1
150
Catch Up: Go Style Guide Update
andpad
0
240
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
How to Ace a Technical Interview
jacobian
280
24k
Done Done
chrislema
185
16k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
115
20k
Reflections from 52 weeks, 52 projects
jeffersonlam
353
21k
A Modern Web Designer's Workflow
chriscoyier
697
190k
A Tale of Four Properties
chriscoyier
161
23k
The Straight Up "How To Draw Better" Workshop
denniskardys
238
140k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
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!!