MM-Suite

What's new

MM-Suiteとは何か?

MM-Suiteは、通信用ミドルウェアである VCEを用いた サーバー集中型リアルタイムオンラインゲームのスケルトンコードです。 VCEのクラスタリング機能を用いた高度な負荷分散を備えたゲームサーバーを 簡単に開発できます。 Win32 DirectXを用いた、ひととおりの操作が可能なクライアント プログラムも添付されているため、 すぐにサーバに接続してインクリメンタルな開発に着手することができます。 各サーバはパッケージ展開後すぐにLinuxマシン上でコンパイル・実行できます。

MM-Suite 設計上のポリシー

MM-Suiteは、開発効率を高め、 プログラムの動作速度(コストパフォーマンス)を向上させ、 ダウンタイムを軽減するために、以下のような設計ポリシーを持っています。

シングルスレッド

pthread等を用いたスレッディングは、CPUが1個か2個しかないような 安価なマシンでは、大した性能向上につながらない。 さらに、オンラインゲームサイトにとって、 マシンが2台以上必要なことは明白であるため、 結局マルチプロセスにすることが必要である。 したがって、MM-Suiteではシングルスレッド・マルチプロセスの クラスタリング構成とした。

client-server 3階層構造

MM-Suiteでは,以下の図に示すように、 アプリケーションを3階層にわけて実装します。
ゲームの内容(ロジックやルール)はGMSVに集中的に実装され、 キャラクター情報の保存やメッセージング、認証、ロック管理などは、 単機能のバックエンドサーバとして別々に実装され、 別プロセスとして動作します。 GMSVにはゲームのバージョンアップごとにバグが混入し、 しばしばクラッシュすることになるので、 これらのバックエンド機能を別プロセスにすることで、 全体のダウンタイムを減少させることができます。 また、別のマシンにプロセスを分担させることにより、 性能向上を計ることができます。

統一的なメンテナンス用API

複数のゲームを一人の管理者がメンテナンスできるようにならない限り、 オンラインゲームのメンテナンスコストは下がらない。MM-Suiteではこれを実現するために、 すべてのサーバが統一されたフォーマットの状態ファイルを 出力し、それをリモートからSSHなどにより取得することでメンテナンス 作業を行うことができます。 また、バックエンドのサーバやSWPなど、 GMSVプロセス以外はすべてどのゲームでも共通に使えるようにし、 設備のパフォーマンスの無駄が省けるようになっています。 これらに加えて,リモートからMM-Suiteのサーバに接続して メンテナンス効率を向上させる方法も実装されています。 また、VCEに含まれる管理ツール(VCE-admin)対応のコードも組込まれて います。

シンプルで共通なデータベースの構造

MM-Suiteのバックエンドでは, できるだけシンプルでどのゲームでも共通に使えるデータベースの デザインを心掛けています。

内容

MM-Suiteには以下のような部分から成り立っています。

GMSV (GameServer)
ゲームのコンテンツ本体。ゲーム内容を変更するときは、このサーバの コードと、このサーバが読み込むデータファイルだけを変更することになります。
SWP (SwitchingProxy)
VCEに標準添付のコネクションスイッチング用中継サーバ。 通信の処理(暗号、セッション管理など)を一手に引きうけます。
AUTHSV (Authorization server)
ユーザーIDの認証機能だけを提供する認証サーバです。
DBSV (Database server)
ゲームのキャラクターなどを保管するデータサーバです。 NFS にすると性能低下がひどいので、MySQLを使って高速化しています。 このサーバにアクセスするための認証は、AUTHSV によって提供されることを前提とします。
GUILDSV (Guild server)
ゲーム内でキャラクターが参加可能なコミュニティ、 ギルドを管理するサーバです。 ギルド内チャットや、 キャラクターごとに保存可能な一言メッセージの機能などを提供します。 メンバーリストやメッセージの保存には MySQL を用います。
MSGSV (Message server)
インスタントメッセージの処理をするサーバです。 オフラインメッセージを保管する機能をもっています。
LOCKSV (Lock server)
ユーザID単位でロック(排他制御)を行うサーバです。
wincli (Windows Client)
Win32 DirectXサンプルクライアントです。
tester
各サーバのテストを行うサンプルプログラムです。