Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Genta Kamitani

July 06, 2019
Tweet

More Decks by Genta Kamitani

Other Decks in Programming

Transcript

  1. モンスターストライクの

    リアルタイム通信を支える技術

    開発本部 CTO室 SREグループ

    神谷 元太

    Battle Conference U30 2019

    XFLAG


    View full-size slide

  2. 自己紹介

    ● 神谷 元太

    ● Twitter: @cloudear8

    ● 2018年 株式会社ミクシィに新卒入社

    ● 開発本部 CTO室 SREグループ

    ● モンスターストライク(モンスト)の

    開発・運用等を担当


    View full-size slide

  3. 発表の流れ

    ● モンストの大まかな構成

    ● STUN/TURNについて

    ● モンストでのTURNの使い方

    ● まとめ


    View full-size slide

  4. モンストのマルチプレイについて

    ● 最大4人で協力してクエストを攻略する

    ● アクションRPG

    ○ リアルタイムに行動を同期する必要

    ● ホスト、ゲストという概念が存在する


    View full-size slide

  5. モンストの大まかな構成
    app

    TURN

    batch

    DB

    guest

    queue

    cache

    host


    View full-size slide

  6. モンストの大まかな構成
    app

    TURN

    batch

    DB

    guest

    queue

    cache

    host


    View full-size slide

  7. モンストの大まかな構成

    ● クエスト外用のサーバー(app)

    ○ 普通のHTTPサーバー

    ● クエスト内用のサーバー(TURN)

    ○ ホスト─ゲスト間でクエストの進行状況を同期する

    app

    TURN

    guest

    host


    View full-size slide

  8. STUN/TURNとは


    View full-size slide

  9. 理想

    ● ホストとゲストが直接やりとりできると嬉しい!

    guest

    host

    guest

    guest


    View full-size slide

  10. 現実

    ● 多くの場合直接通信はできない

    guest

    host

    guest

    guest

    N

    A

    T

    N

    A

    T

    N

    A

    T

    N

    A

    T

    ホストどこ…?


    View full-size slide

  11. Session Traversal Utilities for NAT (STUN)

    ● RFC5389

    ● インターネット側から見たIPアドレス、ポートを取得するプロトコル

    ● 他の拡張と組み合わせて使う

    client
 STUN

    N

    A

    T

    僕のIPアドレスは? 203.0.113.45 です

    View full-size slide

  12. Traversal Using Relays around NAT (TURN)

    ● RFC5766

    ● STUNの拡張

    ● 端末間の通信を仲介する

    ● UDP, TCP, TLS-over-TCPに対応

    client
 TURN

    N

    A

    T

    peer

    N

    A

    T


    View full-size slide

  13. TURN Extensions for TCP Allocations

    ● RFC6062

    ● TURNでTCPを使うための拡張

    ● クライアントはサーバーと二種類のコネクションを張る

    ● モンストではこれを使う

    client
 TURN

    N

    A

    T

    peer

    N

    A

    T


    View full-size slide

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


    View full-size slide

  15. サーバー構成のおさらい

    ● クライアント == ホスト

    ● ピア == ゲスト

    app

    TURN

    guest

    host

    peer

    client
 ==

    ==


    View full-size slide

  16. TURNサーバーのDiscovery

    ● appサーバーからTURNのIPアドレスを取得

    ○ ロードバランシングも兼ねている

    ● DNSを使ったDiscoveryは行っていない

    ● ALTERNATE-SERVER も使っていない

    host
 app

    TURNはどこ?
 198.51.100.67:3478 か

    198.51.100.68:3478 をみてね


    View full-size slide

  17. ホスト・ゲストのマッチングからゲーム開始まで

    ● ホストがTURNサーバーと接続

    ● TURNの情報をapp経由でゲストとやり取り

    ● ゲストがホストに接続できたらクエスト開始


    app

    TURN

    host
 guest


    View full-size slide

  18. ホスト・ゲストのマッチングからゲーム開始まで

    ● ホストがTURNサーバーと接続

    ● TURNの情報をapp経由でゲストとやり取り

    ● ゲストがホストに接続できたらクエスト開始


    app

    TURN

    host
 guest

    ゲストは
    198.51.100.67:12345

    に繋いでね

    どこに繋げば

    マルチできるの?


    View full-size slide

  19. ホスト・ゲストのマッチングからゲーム開始まで

    ● ホストがTURNサーバーと接続

    ● TURNの情報をapp経由でゲストとやり取り

    ● ゲストがホストに接続できたらクエスト開始


    app

    TURN

    host
 guest


    View full-size slide

  20. IPv6対応

    ● TURNのIPv4アドレスを受け取る

    ● IPv4アドレスから機械的にドメインを生成

    ● DNS64サーバーからIPv6アドレスを取得

    ● NAT64でIPv4に変換されてTURNに届く

    app

    TURNはどこ?
 198.51.100.67:3478 か

    198.51.100.68:3478 をみてね

    host


    View full-size slide

  21. IPv6対応

    ● まずはTURNのIPv4アドレスを受け取る

    ● IPv4アドレスから機械的にドメインを生成

    ● DNS64サーバーからIPv6アドレスを取得

    ● NAT64でIPv4に変換されてTURNに届く

    198.51.100.67

    ↓

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

    host


    View full-size slide

  22. IPv6対応

    ● まずはTURNのIPv4アドレスを受け取る

    ● IPv4アドレスから機械的にドメインを生成

    ● DNS64サーバーからIPv6アドレスを取得

    ● NAT64でIPv4に変換されてTURNに届く

    DNS64

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

    AAAA
 64:ff9b::c633:6443

    host


    View full-size slide

  23. IPv6対応

    ● まずはTURNのIPv4アドレスを受け取る

    ● IPv4アドレスから機械的にドメインを生成

    ● DNS64サーバーからIPv6アドレスを取得

    ● NAT64でIPv4に変換されてTURNに届く

    64:ff9b::c633:6443

    TURN

    NAT64

    198.51.100.67

    host


    View full-size slide

  24. まとめ


    View full-size slide

  25. まとめ

    ● クエスト内とクエスト外で仕組みが大きく違う

    ● ホスト─ゲスト間の通信はTURNサーバー経由

    ● IPv6対応はDNS64 + NAT64


    View full-size slide

  26. おまけ


    View full-size slide

  27. モンスターストライクスタジアム

    ● 最大4対4でクエストのクリア時間を競う

    ● TURNのコネクションは二種類

    ○ チーム内のホスト─ゲスト間の通信用

    ○ チーム同士のクエスト進行情報の共有用 ← new!

    TURN

    host
 guest

    TURN

    host

    guest

    TURN


    View full-size slide

  28. 大会での観戦用端末

    ● TURNのコネクションは三種類

    ○ チーム内のホスト─ゲスト間の通信用

    ○ チーム同士のクエスト進行情報の共有用

    ○ 観戦用端末へのクエスト情報同期用 ← new!

    TURN

    host
 guest

    TURN

    host

    guest

    TURN

    TURN
 TURN
 観戦用

    観戦用


    View full-size slide

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


    View full-size slide