P2Pでマルチプレイヤ・ゲームを行うには: 理想と現実 飯村 卓司 1 自己紹介 • 電通大出身です – 大学にはかなり長い間在籍しました • どうやったら長期間在籍できるかは別途ご相談を • NAIST – 奈良先端科学技術大学院大学と長い名前 – 現在修士2年 – NAIST良いトコ一度はおいで • ゲームゲームと浮ついたことを言っていても ちゃんと研究として認めてくれ… ていると信じています 2 ネットワーク・ゲーム 一言でネットワーク・ゲームといってもいろいろあります – 1人~10人程度まで • ルーレット、囲碁、オセロ、麻雀 主にすばやい動作の必要ないもの – 数人~数十人、百人程度まで • FPS、RTS 主にすばやい動作が必要なもの – 数百人~数千、数万人 • RPG、アバター(チャット) 主に多人数ということに重点を置き、他人とのかかわりを 重視するもの ネットワーク・ゲームのうち、複数人が同時に遊ぶものを Multi-player Online Game (MOG)と呼びます 3 MOGをとりまく諸所の単語 • ゲームの種類 – テーブル, FPS, RTS, RPG, アバター • 課金方法 – 一ヶ月固定料金、アイテム課金 • サーバの運用形態 – マッチング・サーバ、中央集権サーバ • 外部との連携 – オフライン・イベント、ピザの宅配、メッセンジャ 4 1ユーザの立場から… サーバがあると困るんです • 今までのゲーム – ゲーム機、ソフト、オプションの全てを買うことが できた • ネットワーク・ゲーム – ゲーム機、ソフト、オプションは買えても、サーバ は買えないことが多い だから、サーバがなくなると 遊べなくなってしまうんです 5 ぶっちゃけ鉄騎大戦のサービスがいつ終わるかと戦々恐々なんです サーバがなくなると、何が起こる? • マッチング・サーバ形式 – ゲームの進行はユーザ・ノードで行うので、 ゲームを続けることができる – サーバの管理していたデータは消える • 中央集権サーバ形式 – ゲームの進行役がいなくなるので、 ゲームの続行が不可能 ゲームの進行役が居なくなることと、データが消えることが問題 ・ゲームの進行役をサーバにやらせてはいけない ・ゲームのデータをサーバに持たせてはいけない 6 サーバをなくそう! サーバがなくなってもユーザ・ノードはなくならない 何故なら、ゲームを遊ぶためには遊ぶ人、即ち ユーザ・ノードが必要だから。 ゲームの進行役もデータの保管も ユーザ・ノードで行う 要するにP2P 最近のゲーム用PCやゲーム機は能力高いものが多いので なんとかなるかも とりあえずやってみよう! 7 当面の目標と解決策 目標 ゲーム進行を妨げる要因を中央集権化させない – 消滅することでゲーム進行を妨げる要因 • ゲームの進行役 • データの消滅 – 消滅することでゲーム進行を妨げない要因 • ユーザへの課金 ゲームの進行役とデータの消滅を救う 8 大まかに考えると • ゲーム進行役の分散 – データを分割することでのサーバ機能の分散 – ゲームのルールを知っているノードによる管理 その他に必要な事 • 応答性の重視 • データ消滅への対策 – 複数のノードで保持しあう 9 提案: Zoned Federation Model • (1)サーバ機能の分散 – 局所性と構造を元に データを分割 – Zone ゲームワールド全体 Zone X Zone W X • (2)分割されたデータの 一貫性保持 W – 調停ノードの導入 – Zone owner Y • (3)応答性の維持 – 調停ノードとデータ要求ノードの 直接接続 • (4)データの保管 – データの管理と保管を分離 – DHTを用いてデータ保管 Zone Z Z V Zone V Zone Y 10 (1)サーバ機能の分散 局所性と構造に着目 • データおける局所性:あるノードの用いるデータは全体の一部 – 全体の一部のデータのみを把握することでゲーム世界の共有が可能 – サーバ機能はデータを単位として分割可能 • ゲームにおけるデータの構造 – 座標、方向、数、状態など様々 – ある程度の関連性を持つ Game MapA 川の場所 町の場所 MapB 森の場所 村の場所 プレイヤの現在地 プレイヤA プレイヤB Map • 関連性を基にした分割 – 柔軟な分割単位の指定 • 文字列による分割単位へのアクセス Zone:データ分割の単位 ログイン情報 11 (2)分割されたデータの一貫性保持 ゲーム進行に伴う各Zoneのデータの変更が生じる。 各ゲーム参加ノードがデータの変更を要求する。 調停ノードが必要 – 各分割単位(Zone)ごとに一つの管理ノードが必要 – 調停ノードがゲームのルールを知っている必要がある • ゲーム参加ノードが管理ノードを行う 12 Zoneの分割統治 • データ管理ノードの決定 – 指名制 • ゲーム参加ノードの事前登録 • 指名のための複雑化 – 立候補制 • ゲーム参加ノードのみが立候補 • 指名部分を分離による単純化 • 本提案では立候補制を選択 – インフラが複雑化することを避ける 13 (3)応答性の維持 • ゲームは応答性に敏感 – 200ms以下での応答性が必要 • 人間がストレスを感じる • クライアント・サーバ形での実現手法 – クライアントとサーバを直接接続する • 中継ノードを介さない • 本提案での実現手法 – 調停ノードとデータを必要とするノードを直接接続する – クライアント・サーバ形と同程度の応答性を確保 14 (4)データの保管 • データの保管とデータの管理を分割 – データの保管にデータの管理能力は必要ない – 複数ゲームでのデータ保管 • Distributed Hash Table (DHT) の利用 – DHT • 複数のノードでハッシュ表を共有 • 検索に対してO(log N)のノードを 経由することで検索可能 ゲーム(データ管理) ゲームA ゲームB ゲームC – ZoneをHash Keyとする – Zoneに関係するデータを全て保存 • データ管理ノードの決定 • データ要求ノードの登録 • Zoneのデータの記録 DHT データ保管 15 ちょっと宣伝・・・ 現在できている実装 • libcookai – ライブラリとして提供 • C言語にて実装 Game Program – 動作確認済みプラットホーム • • • • • NetBSD- (1.6, 2.0*) FreeBSD-4.*/ -5.* Vine Linux 2.6 Sun OS 5.8 Mac OS X – http://libcookai.sourceforge.net • Pastry libcookai Network DHT – オンラインゲームに特化させたPastry実装 • C言語にて実装 • Hash関数としてSHA-1を使用 – 破られたというけれど大丈夫? • PastryはMS lab. だけどパテント大丈夫? – DHTであれば良いのでDHT層は分離可能 • Distributed Rally-X – サンプル実装 16 問題点 サーバ機能をユーザ・ノードへと分散した時の問題 – 悪意のあるノード • • • • データの改竄 チート 個人情報など取り扱い注意データの管理 不正を行ったノードの排除 • お金の取らせ方 – 課金情報の管理 – いろいろな課金方法 • ゲーム参加ノードの一定量確保 – 遊んでいる人の数が減った場合のデータ保管 • サーバ機能の分離による問題 – 課金無しで遊べてしまう可能性 – ベンダの手を離れたゲームをベンダは許すのか • ゲーム特有の問題 – 速度の確保 17 悪意のあるノードの問題(1) • データ改竄、チート – 中継ノードによる攻撃 主にDHT層での攻撃 – 接続したノードそのものからの攻撃 主に調停ノードとデータを必要とするノードの間での攻撃 • 対策 – 相対的に多い(であろう)善意のノードによる監視 • 多数決論理での排除 – 機械的判定 – 人間による判定 • 善意のノードのふりをする悪意のあるノード群からの攻撃に弱い – ゲームベンダなどによる抜き打ち検査 • 特権ノードを用いての排除 – 抜き打ち検査用に作業logを記録/報告 • ゲームベンダがサポートをやめたときの問題の再発 – その他の対策 • 複数の経路を使っての防御 – 完全な乱数とXORしたデータの二つを複数経路を用いて送信 – データ保管ノードを複数のDHTを用いて検索 18 悪意のあるノードの問題(2) • 個人情報など取り扱い注意データの管理 – 自由に検索できることによる問題 – どこまでが取り扱い注意の個人情報なのか • 課金情報 • 友達情報 • ハイスコア、個人所有のキャラクタ 対策 • 自由に検索できなくする • 取り扱い注意データ用サーバの導入 – 課金情報などの管理 • 対象鍵暗号などでの個人情報の隠蔽 – 暗号鍵を所持している者が接続することで解除 – 手元に持っていることと同じ – 実は無意味 19 悪意のあるノードの問題(3) • 不正を行ったノードの排除 – DHTオーバレイからの排除 • 接続時に判定 – 一時的なIPアドレスによる規制 – ユーザ名とパスワードの組などでのログインによる規制 • 発見次第排除 20 お金の取らせ方 お金を稼げないと企業は参入しない • 課金情報の管理 – 個人情報保管問題とかぶる • 課金サーバの導入 – お金はベンダによるサービスに対する対価 • GMによる監視 • ベンダ主導イベント • 新規要素の追加 無くても(一応)ゲームの続行は可能か? • いろいろな課金方法のサポート – 月額課金 • 接続時に認証 – アイテム課金 • 課金を行った者のみが使うことのできるデータ • 個々のデータそれぞれに対して認証が必要 データを分割している場合、個々のデータに対する認証はコスト高 • 認証を行うデータの保管場所 – 暗号化などをしない場合は認証されたノードにしかデータを置けない – 暗号化をしても不安だとすれば、サーバを用意するしかない? 21 ゲーム参加ノードの一定量確保 • 遊んでいる人の数とデータ保管は反比例 – プレイ人口の変化 • 一日の変化 夜は多いけれど朝には減る • 時間のたつにつれて減少するプレイ人口 さすがに10年も経ってしまったゲームは…… – 対策 • データ保存期間の設定 – 保存する期間の違うデータのサポート (重要なデータはできるだけ取っておくように) – お金を払った人のデータは優先して残す • 保存期間とユーザ数に対する保存量の比率によるデータ削除 – ひとつのノードが保持するデータ量を一定量までにする (うまく分散させる必要がある。特にノード数が減った場合) • データ保管のみを行うサービス – データの保管のみであることから、ゲームベンダである必要は無い 22 ISPなどによるデータ保管サービス ISPも巻き込んだ運用形態 ユーザ ゲームベンダ ISP ネットワーク 回線の提供 マネジメント AAA サーバ アカウント管理 コンテンツ コンテンツ サーバ ゲームプレイヤ 新しいイベントや ゲームの提供 バックアップ CPU資源 ストレージ資源 ストレージ サーバ CPU サーバ 耐障害性の確保 23 サーバ機能の分離による問題 • 課金無しで遊べてしまう可能性 クライアントのみ入手すればユーザ・ノードだけで遊ぶこと ができる • ゲーム本体の販売での売り上げ 既存のコピーソフトの問題と同じ問題を抱える – ネットワークを用いた認証はしやすい • サービスの充実によるユーザの引きとめ – ベンダ主導イベント – 新要素の定期的な配信 • ベンダの手を離れたゲームをベンダは許すのか – これを許してもらわないことには話を続けられない? – ベンダ不在による管理不能状態 • 不正防止パッチのサポート停止 24 その他の問題 • ゲーム特有の問題 – 速度を確保しなければならない • PKIを使っての認証は時間がかかる • 問題はサーバをなくすだけで解決するのか – サービスの停止には怯えるのだろうか – 問題の本質は別のところにあったりはしないか • P2P的問題 – 初期ノード問題、NAT越え 25 問題点のまとめ • 問題山積みです – P2Pにすることによる問題 • 悪意のあるノード • 取り扱い注意データ • ユーザ数の減少 – ベンダの存在による問題 • 課金 • サーバレスを許さないベンダ – ゲーム特有の問題 • 速度を確保しようとするとPKIは大変カモ – 問題はサーバ機能の分散で解決したのか? • 結局サービスの停止に怯えるのではないだろうか • けれど、(一応)遊び続けることはできそうだ 26 未来像 • 地球の裏側のノードが昼間のゲーム人口減少を支える? – データがノードを追って地球をぐるぐると移動していく… • 複数ゲームの 同じネットワーク・ゲーム・プラットホームの使用 – ゲーム間での情報共有が容易に • 同タイトルの新版へのデータ移行 – EverQuestとEverQuest2の間で~ • 別タイトルでのデータ共有 – ポケモンなんたらとピカチュウなんたらの間で~ ゲーム人口の特定ゲームへの固定化を避ける • 作り捨てMOGの発生 – アップデートなどが無い、長期のサポートが無い • ゲーム以外との情報共有 – IM (now playing TEKKI TAISEN) – ピザ宅配 いろいろ考えて!そろそろ新しいMOGがほしいよ! 27 時間の許す限りディスカッション 意見募集! 名刺忘れました。[email protected] をメモって頂けるとうれしいです せっかく作ったのにー 28
© Copyright 2024 ExpyDoc