photonのipv6対応情報 & server構築ポイント

Post on 14-Apr-2017

458 Views

Category:

Internet

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Photon の IPv6 対応情報& Server 構築ポイント

Photon 運営事務局シニアテクニカルアドバイザー並木 健太郎

アジェンダ• Photon のご紹介• iOS の IPv6 対応• Photon における IPv6 対応• Photon Server 構築ポイント• Photon 最新情報

Photonのご紹介

Photon のしくみ• すべてのクライアント (= プレイヤー ) はサーバーへ接続する• サーバーはクライアント間の通信をリレーする役割• サーバー自身は基本的には処理を行わないが、 Webhooks や Plugin を利用してカスタマイズも可能

Photon

Client Client Client

SDK SDK SDK

Photon のサービス形態• クラウド型サービス• サーバーはサービス提供元で運用• クライアントに SDK を組み込むだけで利用可能

• ミドルウェア型サービス• ソフトウェアとしてご提供、お客さまで運用• サーバーサイドのカスタマイズが自由に

Photon Cloud のラインナップ汎用性の優れたスタンダードな Realtime

Unity 向けに特化された Unity Networking

Chat に特化したサービスの Chat

音声通話を簡単に導入できる Voice

Photon Enterprise Cloud• Photon Cloud の上位サービスとして、

Photon Enterprise Cloud をご用意しています• Photon Cloud では難しいと思われる場合でも、 Enterprise Cloud なら大丈夫です!

Cloud vs. Enterprise CloudCloud• Public サービス ( 共有 )• 10,000CCU まで• Webhooks 対応• 複数タイトル共有不可• サーバー設定変更不可

Enterprise Cloud• Private サービス ( 専有 )• CCU 上限なし• Webhooks & Plugin 対応• 複数タイトル共有可能• サーバー設定変更可能

iOSの IPv6対応

iOS の IPv6 対応とは• 昨年 (2015) の WWDC にて、 iOS 9 において IPv6 への移行を発表• Apple Store に登録する iOS アプリの IPv6対応を必須とする– 当初は 2015 年末からと言っていたが、一旦未定になり、今年の 5/4 に 6/1 からと発表になった

どういうこと?• キャリアネットワークから iOS 端末に付与される IP アドレスが

IPv6 のみとなっても大丈夫なようにしておく出典 : iOS Developer Library

10.0.10.1

2001:db8:0:0:1::1

てことは…• IPv4 ネットワークに接続されていることを前提にしているアプリは問題になるということは、• IPv4 でしか使えない API の利用や、 IPv4アドレスを直接扱っていると問題となる

IPv4 でしか使えない API• IPv4 のみに対応したデータ型– uint32_t, in_addr, sockaddr_t

• IPv4 のみに対応した API– inet_aton, gethostbyname

• IPv4 のみでしか使えない使い方をした API– gethostbyname2(hostname, AF_INET);

IPv4 アドレスの扱い• 接続先として、 IPv4 アドレス形式で持っている– "192.168.1.1"– "http://172.16.10.1/api/v1"

• ネットワーク接続の確認として、– IPv4 アドレスを持っているかどうか– "0.0.0.0" に接続できるかどうか

どうすればいいの?• アドレスファミリに依存しない高レイヤーのフレームワーク、 API を使う– NSURLSession, CFNetwork

• Apple 曰く、 HTTP の通信はどちらかを使っているから、みんな影響ないでしょ?– まぁ HTTP だけならね…

HTTP 以外の通信• Socket を直接使ってる場合の対応法– CFNetwork に移行する– アドレスファミリ AF_INET6 にも対応する

どっちもどっちかな…

サーバー側は…?• クライアント側は IPv6 対応しなきゃいけないのはわかったけど、サーバー側はどうするの?• クライアントのネットワークはキャリアだったりユーザー任せだからいいけど、サーバー側って自分たちの管理だし、それも IPv6 対応するのってものすごく大変では…?

サーバーは大丈夫!• サーバー側は " 基本的には " 何もしなくていいです• キャリアが IPv6<-

>IPv4 ネットワーク間の変換を行ってくれます ( 将来 )出典 : iOS Developer Library

DNS64• IPv4 アドレス (=A レコード ) しか持たない場合でも、 IPv4 を内包した IPv6 アドレスを生成する• クライアントには

IPv6 として見える出典 : iOS Developer Library

NAT64• DNS64 で生成された

IPv6 アドレスへの接続をアドレス変換して IPv4 ネットワーク上で接続• クライアントとサーバーそれぞれは

Gateway と接続する形となる出典 : iOS Developer Library

一般的なまとめ• アプリは IPv6 対応 API を使いましょう• サーバー側は IPv6 クライアント群はすべて NAT 配下からアクセスがあると思えば基本は OK

Photonにおける IPv6対応

Photon にとっての IPv6 対応• Photon にとっては棘の道でした…– Photon のプロトコルに起因する問題– Photon の接続に関する問題– Unity の対応に関する問題

• 今は全て解決しています!

プロトコルに起因する問題• トランスポートとして基本は UDP を利用– 高レベル API の利用は難しい– 高効率のための独自ロジック

• Client SDK を改修することにより対応

接続に関する問題• Photon を利用する際、一般的に複数回の接続が発生する– Name Server -> Master Server -> Game Server ->

Master Server -> Game Server …• 接続先を指示する際のアドレス表記の問題が発生!

Photon のサーバーレイヤー• クラウドの場合は 3段

– Name Server (NS)– Master Server (MS)– Game Server (GS)

• Photon Server の場合は 2段– Master Server (MS)– Game Server (GS) 出典 : doc.photonengine.com

次のサーバーへの接続• ルーム作成時は MS よりルームを作るべき GSのアドレスをもらう• 今までの実装では IPv4のアドレスをクライアントに渡していたので、

IPv6 ネットワークでは接続できない

Client MS GS

ルーム作成GS アドレス通知

"192.168.1.1"

接続不可!接続

IPv6 への対応法 〜 Native〜• GS は IPv4 と IPv6 それぞれのアドレスを持ち、それを MS へ通知しておく• MS は Client との接続のアドレスファミリを確認して、アドレスファミリと一致したアドレスを返す

Client MS GS

ルーム作成GS アドレス通知

"fe80:xxxx:…"AF判定

接続

IPv6 への対応法 〜 Bridge〜• GS は IPv4 と「ホスト名」を持ち、それを MS へ通知しておく• Client は IPv6 接続の場合に

IPv6 フラグを立ててリクエストする• MS はフラグを確認して、フラグ立っている場合はホスト名を返す

Client MS GS

ルーム作成 w/IPv6

GS アドレス通知"gs1.aaa.com"

フラグ確認接続

Unity に関する問題• Photon は Unity と一緒に使われるケースが多い• Unity のソケット部分は

IPv6 で全然動かず• サービス提供元の Exit

Games が尽力して Unityのバグフィックスを行った

IPv6 対応バージョン• Client SDK– Native SDK: 4.1.0.0 以降– .NET SDK: 4.1.0.0 以降– PUN: 1.67 以降

• Server SDK: 4.0.28 以降• Cloud サービス : 対応済

対応させるための設定は?• Photon Cloud 利用の場合– 対応する SDK にバージョンアップすれば OK– 接続の設定などは一切変更する必要なし

• Photon Server 利用の場合– 対応する SDK(Client, Server) にバージョンアップ– Master Server の接続先にホスト名 (FQDN) を設定する– Game Server の PublicHostName の設定を行う

Master Server の接続先設定• Native SDK の場合int main(void) { … client.connect( serverAddress: L"ms.game.some.com”, serverType: ServerType::MASTER_SERVER );

• PUN の場合

Photon IPv6 まとめ• 今は全て IPv6 に対応済み• Cloud 利用の場合は Client SDK のアップデートで OK• Server 利用の場合は、 Client & Server SDKのアップデート、各サーバーへの FQDN 設定、接続先の FQDN 設定、 GS の FQDN 設定

Photon Server構築のポイント

構築のポイント• Photon Server のインストールは非常に簡単!– exe を実行して展開、 Photon Control を起動して、インスタンスを起動

• 実運用するにあたり、複数台の設定や IPv6に関する設定などをご紹介

Master Server と Game Server• 実運用においては、複数台構成になることがほとんど• 2種類のサーバーがある– ロビー & バランシングを行う Master Server–ゲームの実処理を行う Game Server

それぞれの設定方法• 実は、 Photon のヘルプセンターに記事があります!こちらをご覧ください!– https://support.photonengine.jp/hc/ja/articles/

214923898

IPv6 Bridge 接続への対応• IPv6 の項目でも話ましたが、 IPv6 Bridge 接続に対応させるには追加の設定が必要• Game Server の Photon.LoadBalancing.dll.config を編集– 162 行目からの PublicHostName に FQDN を記載

• <setting name="PublicHostName" serializeAs="String”><value>gs1.game.some.com</value></setting>

台数はどう決めればいいの?• ゲームの内容次第です!(きっぱり)• なんて言ってちゃ身も蓋もないので、おおまかな目安を伝授します!

Game Server• 4Core CPU / 4GB Memory のサーバーで 1000-

2000CCU を目安• 上記スペックで 1000CCU を基準として、負荷試験を行って上限をアップする検討を• スケールアップより、スケールアウトが効果的• 大きなサーバーで数を収めるのではなく、小さなサーバーで数を調整するほうが柔軟に対応可能

Master Server• 4Core CPU / 4GB Memory で 40000CCU が目安• 実際はロビー・ルーム数の影響が大きい• 大規模な利用を想定する場合は、予め複数のクラスタセット (Master&Game のセット ) を利用することを想定してクライアントを設計を

パフォーマンスチューニング• よく聞かれますが…、基本は Windows も Photon もデフォルト設定でお使いください!• MMO のような使い方は別ですが、一般的な MO のような使い方なら下手にいじらないほうがよいです w

最後に

新サービス• 新しいサービスがリリース予定!– Photon Swarm– Photon Thunder– Photon TrueSync

• 詳細は改めてお知らせします!

今後の予定• 8/3(水 ) XFLAG(mixi) x Photon勉強会@GMO Yours• 8/24-26 CEDEC 2016@横浜セッション、 Photon ワークショップ

PlayCanvas ワークショップこの後も続々開催予定!

ヘルプセンター始めました• ナレッジベースや、コミニュティ ( フォーラム )機能のあるヘルプセンターを開設しました• コンテンツの充実化を図っていきますので、ぜひご利用ください!• https://support.photonengine.jp/hc/ja

お問い合わせ• メールアドレス– developer@photonengine.jp

• Web もご覧ください– http://photonengine.jp/

• ヘルプセンター– https://support.photonengine.jp/hc/ja

最後に…一緒に働ける仲間を大募集中!詳細はこちら↓

ありがとうございました!developer@photonengine.jp

top related