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
Genta Kamitani
July 06, 2019
Programming
8
11k
モンスターストライクのリアルタイム通信を支える技術
Genta Kamitani
July 06, 2019
Tweet
Share
More Decks by Genta Kamitani
See All by Genta Kamitani
ミクシィの技術選定
genkami
0
59
ガチャを1から作り直した話 ─規模の拡大につれて開発速度を落とさないための取り組みについて─
genkami
7
4.5k
pt-query-digestをリアルタイムに取りたい!
genkami
0
180
運用未経験の新卒がモンストのメンテに入るまでにやったこと
genkami
0
1.9k
Other Decks in Programming
See All in Programming
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
2
660
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.3k
CSC509 Lecture 11
javiergs
PRO
0
180
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
100
役立つログに取り組もう
irof
28
9.6k
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
Outline View in SwiftUI
1024jp
1
330
Tauriでネイティブアプリを作りたい
tsucchinoko
0
370
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
150
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
OnlineTestConf: Test Automation Friend or Foe
maaretp
0
110
イベント駆動で成長して委員会
happymana
1
320
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
The Language of Interfaces
destraynor
154
24k
4 Signs Your Business is Dying
shpigford
180
21k
Designing the Hi-DPI Web
ddemaree
280
34k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
GitHub's CSS Performance
jonrohan
1030
460k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
It's Worth the Effort
3n
183
27k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
A designer walks into a library…
pauljervisheath
203
24k
Why Our Code Smells
bkeepers
PRO
334
57k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
Transcript
モンスターストライクの リアルタイム通信を支える技術 開発本部 CTO室 SREグループ 神谷 元太 Battle Conference
U30 2019 XFLAG
自己紹介 • 神谷 元太 • Twitter: @cloudear8 • 2018年 株式会社ミクシィに新卒入社
• 開発本部 CTO室 SREグループ • モンスターストライク(モンスト)の 開発・運用等を担当
発表の流れ • モンストの大まかな構成 • STUN/TURNについて • モンストでのTURNの使い方 • まとめ
モンストのマルチプレイについて • 最大4人で協力してクエストを攻略する • アクションRPG ◦ リアルタイムに行動を同期する必要 • ホスト、ゲストという概念が存在する
モンストの大まかな構成 app TURN batch DB guest queue cache host
モンストの大まかな構成 app TURN batch DB guest queue cache host
モンストの大まかな構成 • クエスト外用のサーバー(app) ◦ 普通のHTTPサーバー • クエスト内用のサーバー(TURN) ◦ ホスト─ゲスト間でクエストの進行状況を同期する app
TURN guest host
STUN/TURNとは
理想 • ホストとゲストが直接やりとりできると嬉しい! guest host guest guest
現実 • 多くの場合直接通信はできない guest host guest guest N A T
N A T N A T N A T ホストどこ…?
Session Traversal Utilities for NAT (STUN) • RFC5389 • インターネット側から見たIPアドレス、ポートを取得するプロトコル
• 他の拡張と組み合わせて使う client STUN N A T 僕のIPアドレスは? 203.0.113.45 です
Traversal Using Relays around NAT (TURN) • RFC5766 • STUNの拡張
• 端末間の通信を仲介する • UDP, TCP, TLS-over-TCPに対応 client TURN N A T peer N A T
TURN Extensions for TCP Allocations • RFC6062 • TURNでTCPを使うための拡張 •
クライアントはサーバーと二種類のコネクションを張る • モンストではこれを使う client TURN N A T peer N A T
モンストでのTURNの使い方
サーバー構成のおさらい • クライアント == ホスト • ピア == ゲスト app
TURN guest host peer client == ==
TURNサーバーのDiscovery • appサーバーからTURNのIPアドレスを取得 ◦ ロードバランシングも兼ねている • DNSを使ったDiscoveryは行っていない • ALTERNATE-SERVER も使っていない
host app TURNはどこ? 198.51.100.67:3478 か 198.51.100.68:3478 をみてね
ホスト・ゲストのマッチングからゲーム開始まで • ホストがTURNサーバーと接続 • TURNの情報をapp経由でゲストとやり取り • ゲストがホストに接続できたらクエスト開始 app TURN
host guest
ホスト・ゲストのマッチングからゲーム開始まで • ホストがTURNサーバーと接続 • TURNの情報をapp経由でゲストとやり取り • ゲストがホストに接続できたらクエスト開始 app TURN
host guest ゲストは 198.51.100.67:12345 に繋いでね どこに繋げば マルチできるの?
ホスト・ゲストのマッチングからゲーム開始まで • ホストがTURNサーバーと接続 • TURNの情報をapp経由でゲストとやり取り • ゲストがホストに接続できたらクエスト開始 app TURN
host guest
IPv6対応 • TURNのIPv4アドレスを受け取る • IPv4アドレスから機械的にドメインを生成 • DNS64サーバーからIPv6アドレスを取得 • NAT64でIPv4に変換されてTURNに届く app
TURNはどこ? 198.51.100.67:3478 か 198.51.100.68:3478 をみてね host
IPv6対応 • まずはTURNのIPv4アドレスを受け取る • IPv4アドレスから機械的にドメインを生成 • DNS64サーバーからIPv6アドレスを取得 • NAT64でIPv4に変換されてTURNに届く 198.51.100.67
↓ ip-198-51-100-67.example.com host
IPv6対応 • まずはTURNのIPv4アドレスを受け取る • IPv4アドレスから機械的にドメインを生成 • DNS64サーバーからIPv6アドレスを取得 • NAT64でIPv4に変換されてTURNに届く DNS64
ip-198-51-100-67.example.com AAAA 64:ff9b::c633:6443 host
IPv6対応 • まずはTURNのIPv4アドレスを受け取る • IPv4アドレスから機械的にドメインを生成 • DNS64サーバーからIPv6アドレスを取得 • NAT64でIPv4に変換されてTURNに届く 64:ff9b::c633:6443
TURN NAT64 198.51.100.67 host
まとめ
まとめ • クエスト内とクエスト外で仕組みが大きく違う • ホスト─ゲスト間の通信はTURNサーバー経由 • IPv6対応はDNS64 + NAT64
おまけ
モンスターストライクスタジアム • 最大4対4でクエストのクリア時間を競う • TURNのコネクションは二種類 ◦ チーム内のホスト─ゲスト間の通信用 ◦ チーム同士のクエスト進行情報の共有用 ←
new! TURN host guest TURN host guest TURN
大会での観戦用端末 • TURNのコネクションは三種類 ◦ チーム内のホスト─ゲスト間の通信用 ◦ チーム同士のクエスト進行情報の共有用 ◦ 観戦用端末へのクエスト情報同期用 ←
new! TURN host guest TURN host guest TURN TURN TURN 観戦用 観戦用
ご清聴ありがとうございました