[P2P]P2Pゲームの可能性
まずは未踏ユースの公募結果を見て欲しい。
これを見るとP2P絡みとして
・G-rated Grid Game:G3 ~ Gridの付加価値としてのグリッドゲーム(グリゲー)
・多人数P2Pネットワークを利用した新たなネットワークゲーム
というようにゲームのトピックが2点採用されている。
非常に面白い試みだと思うし、今後もウォッチをしたいが、現状のMMORPGレベルのゲームを作るには相当の困難が予想される。
まず何が問題なのだろうか?少し考えてみたので課題点を列挙してみよう。
今回はゲームの中で一番難しいリアルタイムプレイのMMORPGを例に取ろう。
1)遅延をどう制御するか?処理をある複数ノードを使って負荷分散を行うとすれば、ゲーム自体の遅延の原因としてユーザからそのノードへの検索時間、ネットワークの遅延等が考えられる。特にノードが離脱・参加が多い状態ではこれはかなりシビアに効いて来るはず。ただターン制のゲームであれば、ユーザにこの遅延はあまり影響がないだろう。ノードの検索を高速化するにはDHTを使えば良いだろう。
2)分散ストレージをどのように実現するか?MMORPGではマップ、アイテム、ユーザのステータス等膨大な情報が必要である。仮にこれをHDDのストレージ上に情報を展開すると、かなり処理速度が低下するのではないかと思われる。おそらく情報はノードに分散配置して、データを基本的にはメモリで展開する事になり、ノードが離脱したら、そのノードの情報をすばやく引き継ぐ仕組みが必要である。解決策の一つとしてDHTのように、情報を数個のノードに複製し、絶えず互いのノードの状態をチェックする事が考えられるだろう。
3)処理の引継ぎ、タスクの連携、分散方法。これについてはグリッドでいろいろと考えられているので問題ないかもしれない。
4)課金・認証をどうするか?課金・認証はP2Pが最も不得意な分野の一つである。対策の一つとしては安易であるが認証用サーバを立てて、まずユーザはそこにアクセスしないと、他のノードに接続できないようにする事が考えられる。この辺の制御も上手く考えなければならない。
5)ノードの情報をつかって上手くネットワークを構築できるか?例えばCPUパワーが大きかったり、回線帯域が大きいノードは一種のスーパーノードの役割を持つ事になるだろう。その制御によってパフォーマンスが大分変わるだろう。
6)どこまでサーバに任せるか?チャットやIM、アイテム交換がP2Pでもできるだろう。サーバは課金とノードの制御ぐらいなのか?このバランスがゲームの作りを大きく左右する。
このように書いてみると、確かに多人数参加型のゲームは「ゲームの方法」:例えばターン制(昔の「信長の野望」とかかな。)などにすれば、遅延などの困難さを回避できるので、上手く実現できるかもしれない。
全てをいきなりP2Pで実現するのは無理なので、すこしずつ簡単なところからP2Pへ移行できるところを作ることになるだろう。
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- iPhoneのスクリーンショットを自動的にメールに投稿するテクニック[IFTTT](2014.11.23)
- WebRTC研究会開催のお知らせ(2014年12月開催予定)(2014.08.24)
- 「Gunosyオフィスツアー」を振り返る〜世界一のニュースアプリを目指すために(2014.06.01)
- Gunosyオフィスツアーの参加者募集を開始しました!(5月9日[金]開催)(2014.04.29)
- 第4回Twitter研究会(5/18[土])の講演スケジュール(2013.05.10)
この記事へのコメントは終了しました。
コメント
はじめまして。P2Pを使ったMMOGについて研究・開発している者です。僕もこのようなことについてはいくつか考えを持っていて、そのうちのいくつかは実装して動作することまで確認してみました。
かなり長くなりそうですが、それぞれについてコメントさせていただきます。
1) の遅延の問題は、直接つないでのデータ配送に勝るものはないと思うので、管理するデータをある程度分割して、それぞれ直にデータを送るのがいいと思います。僕は、ZFMというモデルを導入して、この問題を解決しています。
論文へのリンクを下に貼っておくので、もしよろしかったらご参照ください。
2) のストレージについては、おっしゃるとおり、DHTなどに分散させて持たせるなどの方法になるかと思います。
ただ、DHTノードが減りすぎてきたときの対処は考えておく必要があります。実践的対策には、少なくなってきたノードでは扱いきれないデータを一手に引き受けるSuperノードを持たせることは避けられないと考えており、そのSuperノードのあり方を考慮していかなければいけないと感じています。
3) についてですが、グリッドの枠組みとP2Pの枠組みはかなり違うので別に考える必要があると考えています。ここでは、P2Pの枠組みでの自分の意見を書きます。
まず、処理の引継ぎについては、引き継がれる情報を必要としているノード集合が処理の引継ぎを行うことで、スムーズな引継ぎができるのではないでしょうか。また、僕はP2Pオーバレイ層と(ゲーム)アプリケーション層でのそれぞれの処理は分けて考える必要があると考えています。タスクの連携などは上のアプリケーション層で考えるべきことで、P2Pオーバレイ層で扱おうとするとP2Pオーバレイ層がアプリケーション特化になりかねなく望ましくありません。上位のアプリケーション層での連携は、データ構造をたとえば階層構造などにするなどしてタスクの連携が可能だと思います。分散方法は、データを、ある程度、関連性のある塊として分割することで実現できると思います。
4) のAAAについてで、課金をP2Pで行うことは実質不可能でしょうが、認証・承認についてはP2Pでもかなりの部分まで出来ると考えています。簡単な一例として、認証・承認の必要なデータに鍵をかけ、鍵を知っている人にのみベンダーからのデータを読み書きさせるなどの方法が考えられます。
5) は難しい問題で、現在いろんな場所で活発に研究されている分野だと感じています。僕もこの分野の研究成果を自分のZFMにどう取り込むかを考えているところです。P2Pオーバーレイからの帯域やネットワーク的位置からの判断やアプリケーションからの要求などを受けて決定すべきであると考えています。
6) の話はAAAに関しての話題で4)と本質的には同じ話なのではないでしょうか
長々とコメントしてご迷惑でなければよいのですが……
僕の今までの研究は以下の論文にまとめているつもりです。よろしかったら見てみてください
http://www.acm.org/sigs/sigcomm/sigcomm2004/workshops_papers.html#netgames07
投稿: puu | 2004.09.14 04:48