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
- 各サーバのテストを行うサンプルプログラムです。