モンスターストライクのリアルタイム通信を支える技術
by
Genta Kamitani
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
モンスターストライクの リアルタイム通信を支える技術 開発本部 CTO室 SREグループ 神谷 元太 Battle Conference U30 2019 XFLAG
Slide 2
Slide 2 text
自己紹介 ● 神谷 元太 ● Twitter: @cloudear8 ● 2018年 株式会社ミクシィに新卒入社 ● 開発本部 CTO室 SREグループ ● モンスターストライク(モンスト)の 開発・運用等を担当
Slide 3
Slide 3 text
発表の流れ ● モンストの大まかな構成 ● STUN/TURNについて ● モンストでのTURNの使い方 ● まとめ
Slide 4
Slide 4 text
モンストのマルチプレイについて ● 最大4人で協力してクエストを攻略する ● アクションRPG ○ リアルタイムに行動を同期する必要 ● ホスト、ゲストという概念が存在する
Slide 5
Slide 5 text
モンストの大まかな構成 app TURN batch DB guest queue cache host
Slide 6
Slide 6 text
モンストの大まかな構成 app TURN batch DB guest queue cache host
Slide 7
Slide 7 text
モンストの大まかな構成 ● クエスト外用のサーバー(app) ○ 普通のHTTPサーバー ● クエスト内用のサーバー(TURN) ○ ホスト─ゲスト間でクエストの進行状況を同期する app TURN guest host
Slide 8
Slide 8 text
STUN/TURNとは
Slide 9
Slide 9 text
理想 ● ホストとゲストが直接やりとりできると嬉しい! guest host guest guest
Slide 10
Slide 10 text
現実 ● 多くの場合直接通信はできない guest host guest guest N A T N A T N A T N A T ホストどこ…?
Slide 11
Slide 11 text
Session Traversal Utilities for NAT (STUN) ● RFC5389 ● インターネット側から見たIPアドレス、ポートを取得するプロトコル ● 他の拡張と組み合わせて使う client STUN N A T 僕のIPアドレスは? 203.0.113.45 です
Slide 12
Slide 12 text
Traversal Using Relays around NAT (TURN) ● RFC5766 ● STUNの拡張 ● 端末間の通信を仲介する ● UDP, TCP, TLS-over-TCPに対応 client TURN N A T peer N A T
Slide 13
Slide 13 text
TURN Extensions for TCP Allocations ● RFC6062 ● TURNでTCPを使うための拡張 ● クライアントはサーバーと二種類のコネクションを張る ● モンストではこれを使う client TURN N A T peer N A T
Slide 14
Slide 14 text
モンストでのTURNの使い方
Slide 15
Slide 15 text
サーバー構成のおさらい ● クライアント == ホスト ● ピア == ゲスト app TURN guest host peer client == ==
Slide 16
Slide 16 text
TURNサーバーのDiscovery ● appサーバーからTURNのIPアドレスを取得 ○ ロードバランシングも兼ねている ● DNSを使ったDiscoveryは行っていない ● ALTERNATE-SERVER も使っていない host app TURNはどこ? 198.51.100.67:3478 か 198.51.100.68:3478 をみてね
Slide 17
Slide 17 text
ホスト・ゲストのマッチングからゲーム開始まで ● ホストがTURNサーバーと接続 ● TURNの情報をapp経由でゲストとやり取り ● ゲストがホストに接続できたらクエスト開始 app TURN host guest
Slide 18
Slide 18 text
ホスト・ゲストのマッチングからゲーム開始まで ● ホストがTURNサーバーと接続 ● TURNの情報をapp経由でゲストとやり取り ● ゲストがホストに接続できたらクエスト開始 app TURN host guest ゲストは 198.51.100.67:12345 に繋いでね どこに繋げば マルチできるの?
Slide 19
Slide 19 text
ホスト・ゲストのマッチングからゲーム開始まで ● ホストがTURNサーバーと接続 ● TURNの情報をapp経由でゲストとやり取り ● ゲストがホストに接続できたらクエスト開始 app TURN host guest
Slide 20
Slide 20 text
IPv6対応 ● TURNのIPv4アドレスを受け取る ● IPv4アドレスから機械的にドメインを生成 ● DNS64サーバーからIPv6アドレスを取得 ● NAT64でIPv4に変換されてTURNに届く app TURNはどこ? 198.51.100.67:3478 か 198.51.100.68:3478 をみてね host
Slide 21
Slide 21 text
IPv6対応 ● まずはTURNのIPv4アドレスを受け取る ● IPv4アドレスから機械的にドメインを生成 ● DNS64サーバーからIPv6アドレスを取得 ● NAT64でIPv4に変換されてTURNに届く 198.51.100.67 ↓ ip-198-51-100-67.example.com host
Slide 22
Slide 22 text
IPv6対応 ● まずはTURNのIPv4アドレスを受け取る ● IPv4アドレスから機械的にドメインを生成 ● DNS64サーバーからIPv6アドレスを取得 ● NAT64でIPv4に変換されてTURNに届く DNS64 ip-198-51-100-67.example.com AAAA 64:ff9b::c633:6443 host
Slide 23
Slide 23 text
IPv6対応 ● まずはTURNのIPv4アドレスを受け取る ● IPv4アドレスから機械的にドメインを生成 ● DNS64サーバーからIPv6アドレスを取得 ● NAT64でIPv4に変換されてTURNに届く 64:ff9b::c633:6443 TURN NAT64 198.51.100.67 host
Slide 24
Slide 24 text
まとめ
Slide 25
Slide 25 text
まとめ ● クエスト内とクエスト外で仕組みが大きく違う ● ホスト─ゲスト間の通信はTURNサーバー経由 ● IPv6対応はDNS64 + NAT64
Slide 26
Slide 26 text
おまけ
Slide 27
Slide 27 text
モンスターストライクスタジアム ● 最大4対4でクエストのクリア時間を競う ● TURNのコネクションは二種類 ○ チーム内のホスト─ゲスト間の通信用 ○ チーム同士のクエスト進行情報の共有用 ← new! TURN host guest TURN host guest TURN
Slide 28
Slide 28 text
大会での観戦用端末 ● TURNのコネクションは三種類 ○ チーム内のホスト─ゲスト間の通信用 ○ チーム同士のクエスト進行情報の共有用 ○ 観戦用端末へのクエスト情報同期用 ← new! TURN host guest TURN host guest TURN TURN TURN 観戦用 観戦用
Slide 29
Slide 29 text
ご清聴ありがとうございました