$30 off During Our Annual Pro Sale. View Details »

モンスターストライクのリアルタイム通信を支える技術

 モンスターストライクのリアルタイム通信を支える技術

Genta Kamitani

July 06, 2019
Tweet

More Decks by Genta Kamitani

Other Decks in Programming

Transcript

  1. モンスターストライクの
 リアルタイム通信を支える技術
 開発本部 CTO室 SREグループ 
 神谷 元太
 Battle Conference

    U30 2019
 XFLAG

  2. 自己紹介
 • 神谷 元太
 • Twitter: @cloudear8
 • 2018年 株式会社ミクシィに新卒入社


    • 開発本部 CTO室 SREグループ
 • モンスターストライク(モンスト)の
 開発・運用等を担当

  3. 発表の流れ
 • モンストの大まかな構成
 • STUN/TURNについて
 • モンストでのTURNの使い方
 • まとめ


  4. モンストのマルチプレイについて
 • 最大4人で協力してクエストを攻略する
 • アクションRPG
 ◦ リアルタイムに行動を同期する必要
 • ホスト、ゲストという概念が存在する


  5. モンストの大まかな構成 app
 TURN
 batch
 DB
 guest
 queue
 cache
 host


  6. モンストの大まかな構成 app
 TURN
 batch
 DB
 guest
 queue
 cache
 host


  7. モンストの大まかな構成
 • クエスト外用のサーバー(app)
 ◦ 普通のHTTPサーバー
 • クエスト内用のサーバー(TURN)
 ◦ ホスト─ゲスト間でクエストの進行状況を同期する
 app


    TURN
 guest
 host

  8. STUN/TURNとは


  9. 理想
 • ホストとゲストが直接やりとりできると嬉しい!
 guest
 host
 guest
 guest


  10. 現実
 • 多くの場合直接通信はできない
 guest
 host
 guest
 guest
 N
 A
 T


    N
 A
 T
 N
 A
 T
 N
 A
 T
 ホストどこ…?

  11. Session Traversal Utilities for NAT (STUN)
 • RFC5389
 • インターネット側から見たIPアドレス、ポートを取得するプロトコル


    • 他の拡張と組み合わせて使う
 client
 STUN
 N
 A
 T
 僕のIPアドレスは? 203.0.113.45 です
  12. Traversal Using Relays around NAT (TURN)
 • RFC5766
 • STUNの拡張


    • 端末間の通信を仲介する
 • UDP, TCP, TLS-over-TCPに対応
 client
 TURN
 N
 A
 T
 peer
 N
 A
 T

  13. TURN Extensions for TCP Allocations
 • RFC6062
 • TURNでTCPを使うための拡張
 •

    クライアントはサーバーと二種類のコネクションを張る
 • モンストではこれを使う
 client
 TURN
 N
 A
 T
 peer
 N
 A
 T

  14. モンストでのTURNの使い方


  15. サーバー構成のおさらい
 • クライアント == ホスト
 • ピア == ゲスト
 app


    TURN
 guest
 host
 peer
 client
 ==
 ==

  16. TURNサーバーのDiscovery
 • appサーバーからTURNのIPアドレスを取得
 ◦ ロードバランシングも兼ねている
 • DNSを使ったDiscoveryは行っていない
 • ALTERNATE-SERVER も使っていない


    host
 app
 TURNはどこ?
 198.51.100.67:3478 か
 198.51.100.68:3478 をみてね

  17. ホスト・ゲストのマッチングからゲーム開始まで
 • ホストがTURNサーバーと接続
 • TURNの情報をapp経由でゲストとやり取り
 • ゲストがホストに接続できたらクエスト開始
 
 app
 TURN


    host
 guest

  18. ホスト・ゲストのマッチングからゲーム開始まで
 • ホストがTURNサーバーと接続
 • TURNの情報をapp経由でゲストとやり取り
 • ゲストがホストに接続できたらクエスト開始
 
 app
 TURN


    host
 guest
 ゲストは 198.51.100.67:12345
 に繋いでね
 どこに繋げば
 マルチできるの?

  19. ホスト・ゲストのマッチングからゲーム開始まで
 • ホストがTURNサーバーと接続
 • TURNの情報をapp経由でゲストとやり取り
 • ゲストがホストに接続できたらクエスト開始
 
 app
 TURN


    host
 guest

  20. IPv6対応
 • TURNのIPv4アドレスを受け取る
 • IPv4アドレスから機械的にドメインを生成
 • DNS64サーバーからIPv6アドレスを取得
 • NAT64でIPv4に変換されてTURNに届く
 app


    TURNはどこ?
 198.51.100.67:3478 か
 198.51.100.68:3478 をみてね
 host

  21. IPv6対応
 • まずはTURNのIPv4アドレスを受け取る
 • IPv4アドレスから機械的にドメインを生成
 • DNS64サーバーからIPv6アドレスを取得
 • NAT64でIPv4に変換されてTURNに届く
 198.51.100.67


    ↓
 ip-198-51-100-67.example.com
 host

  22. IPv6対応
 • まずはTURNのIPv4アドレスを受け取る
 • IPv4アドレスから機械的にドメインを生成
 • DNS64サーバーからIPv6アドレスを取得
 • NAT64でIPv4に変換されてTURNに届く
 DNS64


    ip-198-51-100-67.example.com 
 AAAA
 64:ff9b::c633:6443
 host

  23. IPv6対応
 • まずはTURNのIPv4アドレスを受け取る
 • IPv4アドレスから機械的にドメインを生成
 • DNS64サーバーからIPv6アドレスを取得
 • NAT64でIPv4に変換されてTURNに届く
 64:ff9b::c633:6443


    TURN
 NAT64
 198.51.100.67
 host

  24. まとめ


  25. まとめ
 • クエスト内とクエスト外で仕組みが大きく違う
 • ホスト─ゲスト間の通信はTURNサーバー経由
 • IPv6対応はDNS64 + NAT64


  26. おまけ


  27. モンスターストライクスタジアム
 • 最大4対4でクエストのクリア時間を競う
 • TURNのコネクションは二種類
 ◦ チーム内のホスト─ゲスト間の通信用
 ◦ チーム同士のクエスト進行情報の共有用 ←

    new!
 TURN
 host
 guest
 TURN
 host
 guest
 TURN

  28. 大会での観戦用端末
 • TURNのコネクションは三種類
 ◦ チーム内のホスト─ゲスト間の通信用
 ◦ チーム同士のクエスト進行情報の共有用
 ◦ 観戦用端末へのクエスト情報同期用 ←

    new!
 TURN
 host
 guest
 TURN
 host
 guest
 TURN
 TURN
 TURN
 観戦用
 観戦用

  29. ご清聴ありがとうございました