MUN 2.0 以降のシステム構成について

目次

  概要
  MUN 2.0 の特性
  MUN 2.0 システム構成図
  MUN サーバプロセスについて
  サーバプロセス(1) mun_master
  サーバプロセス(2) mun_resolver
  サーバプロセス(3) mun_proxy
  サーバプロセス(4) mun_room


概要

MUN 2.0 の クライアント および サーバのシステムについて

  MUN 2.0 のリリースに合わせ、「オンプレミス版MUNサーバ」の一般公開が始まりました。
  ここでは、その MUN サーバを含め、MUN 2.0 のシステム構成について説明いたします。


MUN 2.0 の特性

新世代型リアルタイム通信エンジン Monobit Revolution Server (以下 MRS) を採用!

  弊社では、従来より提供しておりましたモノビットエンジンの全機能を一新し、オンラインゲームやネットワークアプリの開発・運用に際し、
  より高速かつ高性能なリアルタイム通信エンジンとして、MRS を開発し、リリースいたしました。

  MUN 2.0 は、MRS をコアライブラリとして、より高速に、より高性能なUnity 向け通信ライブラリとして、
  MRS とほぼ同時にリリースしております。

  なお、MRS の内部資料については以下のページにて公開しておりますので、詳細につきましてはこちらをご覧ください。

     Monobit Revolution Server (MRS) のご案内
        http://www.monobitengine.com/mrs/

従来の TCP に加え、UDP および RUDP の通信プロトコルのサポートを開始!

  MUN 2.0 より、長らくお客様よりご要望の多かった、UDP による通信プロトコルのサポートを開始いたしました。
  これにより、従来のTCPに加え、より高速・低スループットの通信を可能にしました。

  また、UDPの通信プロトコル採用に合わせ、より信頼性の高く、かつTCPよりもオーバーヘッドの少ない
  RUDP(Reliable-UDP)の機能を備えた通信処理も可能にしています。

「オンプレミス版 MUN サーバ」を一般公開!

  MUN 2.0 より、「オンプレミス版 MUN サーバ」を一般公開いたしました。
  これにより、お客様にて独自に設置していただく任意のサーバ上に、MUN のサーバプロセスを導入することが可能です。

    ※ 一般公開版の「オンプレミス版 MUN サーバ」には、同時接続数 100 までの制限を設けておりますが、
      別途弊社にお申込みいただくことで、同時接続数上限解除や専属のサポートを付与するサービスもご提供いたします。
      制限解除版のご提供を希望されるお客様は、以下のページよりお問い合わせください。
        http://www.monobitengine.com/contact

C++ および C# によるサーバサイドプログラミングを可能に!

  また、一般公開された MUN サーバのプログラムは、MRS のコアライブラリを除き、すべて C++ および C# で完全公開されておりますので、
  現在提供しているメソッド単位、あるいは MRS の機能を踏まえた範疇にて、自由にカスタマイズできます。
  従来の MUN では不可能であった、よりセキュアなサーバサイドプログラミングとしてサービスをリリースすることを可能にします。


MUN 2.0 システム構成図

MUN サーバ、および MUN クライアントを含む、システム全体の構成図

  MUN 2.0 リリース現在における、MUN サーバ、および MUN クライアントを含めた
  MUNパッケージとして提供しているシステム全体の構成図は以下の通りです。

  この図で使われている用語、ならびに関連する情報については、このページにて後述します。


MUN サーバプロセスについて

概要

  上述の MUN 2.0 システム構成図 に記載している各種サーバプロセスについて、簡単に説明していきます。

mun_master

  MUN サーバのバックエンドのサーバプロセスで、MUNサーバで管理する全クライアント/全ロビー/全ルームに関するデータベースを保有します。
  詳細については、サーバプロセス(1) mun_master をご覧ください。

mun_resolver

  MUN サーバのフロンエンドのサーバプロセスで、MUNクライアントが最初に接続するサーバプロセスです。
  後述する mun_proxy サーバのうち「その時点で最も負荷の低いプロセス」について、MUNクライアントに接続情報を通知します。
  詳細については、サーバプロセス(2) mun_resolver をご覧ください。

mun_proxy

  MUN サーバのフロントエンドのサーバプロセスで、ルーム未入室状態にある(=ロビー未入室または入室状態にある) MUN クライアントについて管理します。
  詳細については、サーバプロセス(3) mun_proxy をご覧ください。

mun_room

  MUN サーバのフロントエンドのサーバプロセスで、ルーム入室状態にある MUN クライアントについて管理します。
  詳細については、サーバプロセス(4) mun_room をご覧ください。


サーバプロセス(1) mun_master

各種 MUN サーバプロセスに対するデータベース管理を含む、バックエンドで動作するコアサーバ

  mun_master は MUN のマルチサーバプロセスの1構成要素で、このプロセス以外に動作している 各種 MUN サーバプロセスに対し、
  MUNクライアントからの各種要求に合わせた情報を授受する、データベース機能を兼ねたサーバプロセスです。

  データベース機能の他にも、MUN クライアントの認証処理、ルーム入室におけるマッチング処理など、
  MUN のサーバが受け持つコアな制御を受け持ちます。

  なお現在のところ、mun_master のサーバプロセスは、その特性上、
  提供するサービス管轄内において、スケールアウトさせることはできません。
  これについては今後改良される予定です。

主な機能

機能 説明
mun_room サーバの接続情報を保持 MUNサーバシステム上に存在するすべての mun_room サーバプロセスについて、
MUNクライアントが接続するために必要となるアドレス情報を保有します。
mun_room サーバの負荷監視 mun_room サーバプロセス自体の負荷情報について、mun_room サーバプロセスより定期的に受け取り、
MUN クライアントからの接続に対して負荷が平均的になるよう、常に調整します。
MUN クライアントの認証制御 MUN クライアントが MUN サーバに接続する際、
mun_proxy サーバプロセスを通じて、クライアントの認証処理を実行します。
ここで言う認証処理とは、以下の内容について内容を照合し、適正なものについて、
「同一の情報を持つクライアントごとに、接続レイヤーを分ける」処理を指します。
 ・ MUN クライアントのバージョン
 ・ MonobitAuthenticationCode.asset で登録されている認証キー
 ・ MonobitEngine.MonobitNetwork.ConnectServer() メソッド実行時の引数(ゲームバージョン)
ロビー制御 MUN クライアントがロビーを作成/入室/退室する際、mun_proxy サーバプロセスを通じて、
ロビーの作成/入室/退室処理を実行します。
マッチング制御 MUN クライアントがルームを作成する際、mun_proxy サーバプロセスを通じて、
適切な mun_room サーバプロセスのアドレスを、ルーム作成側の MUN クライアントに通知します。
また同様に、MUN クライアントがルームに入室する際、mun_proxy サーバプロセスを通じてリクエストを受け取り、
適切なルーム情報を持つ mun_room サーバプロセスのアドレスを、ルーム入室側の MUN クライアントに通知します。


サーバプロセス(2) mun_resolver

MUNサーバシステム内で最も低負荷の mun_proxy サーバプロセスのアドレス情報を返す、フロントエンドで動作するロケーションサーバ

  mun_resolver は MUN のマルチサーバプロセスの1構成要素で、かつ、MUN クライアントが最初に接続することになるサーバプロセスです。
  MUNサーバシステム内で動作している mun_proxy のサーバプロセスのうち、最も負荷の低いものについて、
  そのアドレス情報を MUN クライアントに関し通知するサーバプロセスです。

  なお現在のところ、mun_resolver のサーバプロセスは、その特性上、提供するサービス管轄内において、スケールアウトさせることはできません。
  これについては mun_master のサーバプロセス同様、今後改良される予定です。

主な機能

機能 説明
mun_proxy サーバの接続情報を保持 MUNサーバシステム上に存在するすべての mun_proxy サーバプロセスについて、
MUNクライアントが接続するために必要となるアドレス情報を保有します。
mun_proxy サーバの負荷監視 mun_proxy サーバプロセス自体の負荷情報について、mun_proxy サーバプロセスより定期的に受け取り、
MUN クライアントからの接続に対して負荷が平均的になるよう、常に調整します。
mun_proxy サーバのアドレス通知 MUN クライアントが接続してきた際、その時点で最も負荷の低い mun_proxy サーバのアドレス情報について
MUN クライアントに通知します。
通知を受けた MUN クライアントは、その情報を元に mun_proxy サーバへの接続を試みます。


サーバプロセス(3) mun_proxy

非ルーム入室中の MUN クライアントの各種要求を mun_master サーバプロセスに通知する、フロントエンドで動作するリレーサーバ

  mun_proxy はMUN のマルチサーバプロセスの1構成要素で、MUN クライアントが MUN サーバにログインしてから入室するまで、
  またルームを退室してから再入室(または MUN サーバからログアウト)するまでの、MUN クライアントからの各種要求を受け付けます。
  実質的には それらの要求について適宜 mun_master に送信し、結果を MUNクライアントに通知するリレーサーバとしての役割を果たします。

  mun_proxy のサーバプロセスは、動的なスケールアウトに対応しています。
  サーバシステムを運用中の段階でも、システムを停止させることなく、動的にサーバプロセスを増加させることが可能です。

主な機能

機能 説明
MUN クライアント識別 ID の発行 MUNサーバシステム上で稼働する全てのサーバプロセスに対し、
MUN クライアントを特定するために用いられる、一意のユニークIDを発行します。
この ID は自身の mun_proxy のサーバプロセスはもちろんのこと、
mun_master, mun_room のサーバプロセスにおいて MUN クライアントを識別するために用いられます。
非ルーム入室中の MUN クライアントの各種要求の受信 MUN クライアントから以下の要求があった場合、適宜受信し、
必要に応じて、mun_master のサーバプロセスに要求をリクエストします。
 ・ ロビーの作成、入室、退室要求
 ・ ルームの作成、入室、退室要求
 ・ プレイヤー検索要求
 ・ 入室中のロビー情報の取得要求(MUN クライアントの内部処理)
 ・ ルーム一覧情報の取得要求(MUN クライアントの内部処理)
要求に対し、mun_master のサーバプロセスから MUNクライアントに返信する情報を受け取った場合、
リクエストを要求してきた MUN クライアントに対し返信します。
mun_resolver サーバに、アドレス情報と負荷状況を通知 mun_resolver のサーバプロセスに接続した際、自身が持つ「MUN クライアントの接続アドレス情報」を送信します。
また一定時間ごとに、mun_resolver のサーバプロセスに対し、自身の負荷状況について通知します。


サーバプロセス(4) mun_room

ルーム入室中の MUN クライアントの各種要求について処理する、フロントエンドで動作するルーム管理サーバ

  mun_room はMUN のマルチサーバプロセスの1構成要素で、ルーム入室中の MUN クライアントからの各種要求を受け付けます。
  ルームの外にいる MUN クライアントに対し各種要求を受け付ける mun_proxy のサーバプロセスと、この mun_room のサーバプロセスがセットで
  MUN クライアントとサーバ間との通信の殆どが行われます。

  mun_proxy は MUN クライアントと mun_master のサーバプロセスとを仲介するリレーサーバとしての役割を果たしますが、
  mun_room で取り扱われる MUN クライアントの要求処理のほぼすべては「RPCメッセージの送受信」と「オブジェクトの同期処理」に集約され、
  これらの送信要求は mun_room が受け取った後、「要求を出した MUN クライアントと同一ルームに存在する他の MUN クライアントの全部または一部」に対して直接返信されます。
  したがって、mun_room のサーバプロセスは mun_master のサーバプロセスの負荷に、ほとんどと言って良いほど影響を及ぼしません。
    ※ 唯一、MUNクライアントの入退室の際に mun_master に対して通信を行なう程度です。

  mun_room のサーバプロセスは、mun_proxy のサーバプロセスと同等に、動的なスケールアウトに対応しています。
  サーバシステムを運用中の段階でも、システムを停止させることなく、動的にサーバプロセスを増加させることが可能です。

主な機能

機能 説明
MUN クライアントからのルームログイン制御 mun_room サーバプロセスのアドレス情報は、MUN クライアントのルーム作成/入室要求に対し、
mun_master のサーバプロセスから mun_proxy のサーバプロセスを介し、通知されます。
その通知された MUN クライアント が mun_room のサーバプロセスに接続してきた際に、
 ・ mun_master でルーム作成/入室リクエストを受け付けたクライアント認証情報
 ・ MUN クライアントが接続してきた際に、ほぼ同時に送信されてくる、自身のクライアント認証情報
が整合しているかどうかを判別するために、 mun_master のサーバプロセスに確認情報を送信します。
その後、mun_master から適正な処理結果を受けた時点で、MUN クライアントにログイン結果を通知します。
MUN クライアント側からのルーム内情報の送受信制御 MUN クライアントから送信されてくる各種ルーム内情報について、同一ルーム内に存在する
他の MUN クライアントと情報共有するように、適宜処理を行ないます。
具体的には、以下の情報に対し、MUNクライアント間で相互送受信します。
 ・ オブジェクトの位置・姿勢情報(特に指定が無い限り、同一ルーム内の他の MUN クライアントに等しく送信します。)
 ・ ルームパラメータの更新情報(同一ルーム内の他の MUN クライアントに等しく送信します。)
 ・ RPCメッセージ(指定により、同一ルーム内の MUN クライアントのうちの一部または全部に送信します。)