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

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

34e9b225b73cd31e1cf54ade49015d24?s=128

Genta Kamitani

July 06, 2019
Tweet

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. ご清聴ありがとうございました