(57)【要約】【課題】分散処理でオンラインゲームを実行するゲームサーバ装置に関して、オンラインゲームのプレイヤーが現在いる空間から隣の空間に移動する際の処理遅延を緩和する。【解決手段】ゲーム空間を所定の単位に分割した空間を担当するステートフル型のゲームサーバ装置１であって、自身の担当する空間に存在するプレイヤーの状態データの原本を保存する原本データ管理部１１と、隣接する空間を担当する他のゲームサーバ装置１へ、状態データのレプリカをコピーするレプリカ配置部１２と、を備え、原本データ管理部１１は、隣接する空間に居たプレイヤーが自身の担当する空間に移動したことを検出すると、当該プレイヤーの状態データのレプリカを原本として保存する、ことを特徴とする。【選択図】図３
2017037446.tif 000002
【特許請求の範囲】
【請求項１】
ゲーム空間を所定の単位に分割した空間を担当するステートフル型のゲームサーバ装置であって、
自身の担当する空間に存在するプレイヤーの状態データの原本を保存する原本データ管理部と、
隣接する空間を担当する他のゲームサーバ装置へ、前記状態データのレプリカをコピーするレプリカ配置部と、を備え、
前記原本データ管理部は、
前記隣接する空間に居たプレイヤーが前記自身の担当する空間に移動したことを検出すると、当該プレイヤーの状態データのレプリカを原本として保存する、
ことを特徴とするゲームサーバ装置。
【請求項２】
前記レプリカ配置部は、前記プレイヤーの現在位置から所定の距離に及ぶ範囲を含む空間を担当するゲームサーバ装置へ、当該プレイヤーの状態データのレプリカをコピーする、
ことを特徴とする請求項１に記載のゲームサーバ装置。
【請求項３】
前記レプリカ配置部は、前記プレイヤーの速度ベクトルから、次に移動する空間を予測し、当該予測した空間を担当するゲームサーバ装置へ、当該プレイヤーの状態データのレプリカをコピーする、
ことを特徴とする請求項１に記載のゲームサーバ装置。
【請求項４】
自身のゲームサーバ装置の負荷を監視する負荷監視部と、
前記負荷が所定の値を超えた場合には、自身の担当する空間を細分割して、当該細分割した空間の一つを新たなゲームサーバ装置に割り当てる空間分割部と、
前記細分割前の空間に隣接する空間を担当する他のゲームサーバ装置に、前記細分割を反映した空間情報を通知する空間分割通知部と、
前記細分割前の空間を担当する他のゲームサーバ装置から前記空間情報を受信した場合、自身の担当する空間の境界情報を更新する境界情報算出部と、をさらに備える、
ことを特徴とする請求項１から請求項３のいずれか一項に記載のゲームサーバ装置。
【請求項５】
ゲーム空間を所定の単位に分割した空間を担当するステートフル型のゲームサーバ装置における分散処理方法であって、
前記ゲームサーバ装置が、
自身の担当する空間に存在するプレイヤーの状態データの原本を保存するステップと、
隣接する空間を担当する他のゲームサーバ装置へ、前記状態データのレプリカをコピーするステップと、
前記隣接する空間に居たプレイヤーが前記自身の担当する空間に移動したことを検出すると、当該プレイヤーの状態データのレプリカを原本として保存するステップと、を実行する、
ことを特徴とする分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オンラインゲームを実行するゲームサーバ装置の分散処理の技術に関する。
【背景技術】
【０００２】
非特許文献１には、ＭＭＯ（Massively Multiplayer Online）形式のオンラインゲームにて、ゲームの世界を地理的な構造に基づいて分割し、別のサーバプロセス、あるいはサーバマシンに処理を割り当てる空間分割法（空間の地理的分割）に関する技術が開示されている。非特許文献１には、１つのゲーム空間を上下左右に４等分して個々の分割された空間をサーバ１〜４が担当することの説明図がある。
【０００３】
ユーザが操作するプレイヤー（ゲームキャラクタ）は、分割されたゲーム空間のいずれかに存在してプレイする。同じ分割空間に存在するすべてのプレイヤーのプレイに関する処理は、その分割空間を担当するサーバが担当する。空間分割法を用いることで、分割空間ごとの分散処理を実現し、リアルタイム処理の負荷全体を軽減することができる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】中嶋謙互  著、「オンラインゲームを支える技術  壮大なプレイ空間の舞台裏」、技術評論社、p.236-238.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プレイヤーが現在いる空間から隣の空間に移動する場合、そのプレイヤーのプレイに関する処理を担当するサーバが切り替わる。このような担当サーバの切り替えでは、プレイヤーの状態データを移行させるための処理遅延が発生し、プレイが一時的に中断する。リアルタイム性を強く要求するオンラインゲームでは、このような処理遅延やプレイの一時的中断はサービス品質の低下をもたらすという問題がある。しかし、非特許文献１にはこのような問題を解決する手段について、具体的には言及していない。
【０００６】
そこで、本発明は、上記事情に鑑みて、分散処理でオンラインゲームを実行するゲームサーバ装置に関して、オンラインゲームのプレイヤーが現在いる空間から隣の空間に移動する際の処理遅延を緩和することを課題とする。
【課題を解決するための手段】
【０００７】
前記課題を解決するために、請求項１に記載の発明は、ゲーム空間を所定の単位に分割した空間を担当するステートフル型のゲームサーバ装置であって、自身の担当する空間に存在するプレイヤーの状態データの原本を保存する原本データ管理部と、隣接する空間を担当する他のゲームサーバ装置へ、前記状態データのレプリカをコピーするレプリカ配置部と、を備え、前記原本データ管理部は、前記隣接する空間に居たプレイヤーが前記自身の担当する空間に移動したことを検出すると、当該プレイヤーの状態データのレプリカを原本として保存する、ことを特徴とする。
【０００８】
また、請求項５に記載の発明は、ゲーム空間を所定の単位に分割した空間を担当するステートフル型のゲームサーバ装置における分散処理方法であって、前記ゲームサーバ装置が、自身の担当する空間に存在するプレイヤーの状態データの原本を保存するステップと、隣接する空間を担当する他のゲームサーバ装置へ、前記状態データのレプリカをコピーするステップと、前記隣接する空間に居たプレイヤーが前記自身の担当する空間に移動したことを検出すると、当該プレイヤーの状態データのレプリカを原本として保存するステップと、を実行する、ことを特徴とする。
【０００９】
請求項１，５に記載の発明によれば、プレイヤーが隣接空間に移動した場合、ゲームサーバ装置間で当該プレイヤーの状態データを移行させる代わりに、隣接空間を担当するゲームサーバ装置が、すでにコピー済みのレプリカを原本に切り替えてプレイヤーの処理を継続することができる。よって、状態データの移行に伴う処理遅延やプレイの一時中断を回避しサービス品質の低下をもたらすことはない。
したがって、分散処理でオンラインゲームを実行するゲームサーバ装置に関して、オンラインゲームのプレイヤーが現在いる空間から隣の空間に移動する際の処理遅延を緩和することができる。
【００１０】
また、請求項２に記載の発明は、請求項１に記載のゲームサーバ装置であって、前記レプリカ配置部は、前記プレイヤーの現在位置から所定の距離に及ぶ範囲を含む空間を担当するゲームサーバ装置へ、当該プレイヤーの状態データのレプリカをコピーする、ことを特徴とする。
【００１１】
請求項２に記載の発明によれば、状態データのレプリカの配置先を絞り込むことができるため、レプリケーション負荷を小さくすることができる。
【００１２】
また、請求項３に記載の発明は、請求項１に記載のゲームサーバ装置であって、前記レプリカ配置部は、前記プレイヤーの速度ベクトルから、次に移動する空間を予測し、当該予測した空間を担当するゲームサーバ装置へ、当該プレイヤーの状態データのレプリカをコピーする、ことを特徴とする。
【００１３】
請求項３に記載の発明によれば、状態データのレプリカの配置先を絞り込むことができるため、レプリケーション負荷を小さくすることができる。
【００１４】
また、請求項４に記載の発明は、請求項１から請求項３のいずれか一項に記載のゲームサーバ装置であって、自身のゲームサーバ装置の負荷を監視する負荷監視部と、前記負荷が所定の値を超えた場合には、自身の担当する空間を細分割して、当該細分割した空間の一つを新たなゲームサーバ装置に割り当てる空間分割部と、前記細分割前の空間に隣接する空間を担当する他のゲームサーバ装置に、前記細分割を反映した空間情報を通知する空間分割通知部と、前記細分割前の空間を担当する他のゲームサーバ装置から前記空間情報を受信した場合、自身の担当する空間の境界情報を更新する境界情報算出部と、をさらに備える、ことを特徴とする。
【００１５】
請求項４に記載の発明によれば、空間の細分割によって、過負荷となったゲームサーバ装置に対して、新たなゲームサーバ装置が負荷を分担することができるため、システムのダウンを回避することができる。
【発明の効果】
【００１６】
本発明によれば、分散処理でオンラインゲームを実行するゲームサーバ装置に関して、オンラインゲームのプレイヤーが現在いる空間から隣の空間に移動する際の処理遅延を緩和することができる。
【図面の簡単な説明】
【００１７】
【図１】本実施形態の分散処理システム全体の構成図である。
【図２】サーバ−空間対応テーブルのデータ構造を示す図である。
【図３】本実施形態のゲームサーバ装置の機能構成図である。
【図４】プレイヤー状態（原本）に対して、プレイヤー状態（レプリカ）を隣接空間に配置することを説明する図である。
【図５】レプリカ判定距離に基づいて、プレイヤー状態（レプリカ）を隣接空間に配置することを説明する図である。
【図６】プレイヤーの速度ベクトルに基づいて、プレイヤー状態（レプリカ）を隣接空間に配置することを説明する図である。
【図７】過負荷のサーバが担当する空間の細分割を説明する図である。
【図８】空間の細分割に応じた境界情報、および、プレイヤー状態のレプリカの配置を説明する図である。
【図９】プレイヤーの隣接空間への移動に関する処理を示すフローチャートである。
【図１０】空間の細分割に関する処理を示すフローチャートである。
【発明を実施するための形態】
【００１８】
本発明を実施するための形態（実施形態）について、図面を参照しながら詳細に説明する。
【００１９】
（全体構成）
図１に示すように、本実施形態の分散処理システムは、本実施形態のゲームサーバ装置１（図２参照）となる複数のサーバ１−１，１−２，・・・，１−ｎと、振り分け装置２−１，２−２，・・・，２−ｎと、ロードバランサ３と、を備えている。サーバ１−１，１−２，・・・，１−ｎと、振り分け装置２−１，２−２，・・・，２−ｎと、ロードバランサ３と、図１中のクライアント４−１，・・・，４−ｎとは、ネットワーク（図示せず）を介して通信可能に接続されている。
【００２０】
サーバ１−１，１−２，・・・，１−ｎは、ＭＭＯ形式のオンラインゲームを実現するアプリケーションを有し、オンラインゲームのゲームイベントに関する処理を実行するステートフル型のサーバである。オンラインゲームのゲーム空間（説明の便宜上、２次元とするが、１次元、３次元のゲーム空間にも本発明を適用可。）は、空間分割法によって所定の単位に分割されている。サーバ１−１，１−２，・・・，１−ｎの各々は、分割されたゲーム空間の各々を担当する。図１には、１つのゲーム空間が空間Ａ，Ｂ，Ｃ，Ｄ，・・・に分割されており、サーバ１−１，１−２，・・・，１−ｎが、分割された空間Ａ，Ｂ，Ｃ，Ｄ，・・・のうち１つを担当する様子が示されている。
【００２１】
サーバ１−１，１−２，・・・，１−ｎの各々は、自身の担当する空間に存在するプレイヤーに関するさまざまな処理を実行する。例えば、当該処理には、クライアント４−１，・・・，４−ｎからのプレイヤー操作要求に応じた処理、プレイヤー同士の相互干渉（例：チャット、アイテム交換）に関する処理がある。担当空間内のプレイヤーの位置はプレイヤー操作要求に従って随時変化する（周知）。また、本実施形態では、従来と同様に処理遅延緩和のために、異なる担当空間に存在するプレイヤー同士の相互干渉は処理の対象外とするが、処理遅延の問題を解消できればこの限りではない。
【００２２】
サーバ１−１，１−２，・・・，１−ｎの各々は、互いに最新情報をやり取りして同期することができる。最新情報には、サーバ１−１，１−２，・・・，１−ｎのＩＰ（Internet Protocol）アドレスや、後記のサーバ−空間対応テーブルＴ１がある。上記のように、空間という連続した情報と、サーバ１−１，１−２，・・・，１−ｎの各々とを対応させる構成をとるため、従来のように、サーバ増減を行ってもその増減に伴う影響範囲を、関連する少数のサーバのみにとどめることができる。
【００２３】
図１中のクライアント４−１，・・・，４−ｎは、オンラインゲームのユーザからの入力を受け付け、ゲーム空間上のプレイヤーを操作する計算機である。クライアント４−１，・・・，４−ｎは、ユーザからの入力を受け付けると、ゲーム空間上のプレイヤーの現在位置をキーとして含むプレイヤー操作要求をロードバランサ３に送信する。なお、プレイヤーの現在位置は、ＫＶＳ（Key Value Store）システムにおけるプレイヤー（Value）のキー（Key）となる。
【００２４】
ロードバランサ３は、クライアント４−１，・・・，４−ｎから受信したプレイヤー操作要求を、例えば、ラウンドロビンによって、振り分け装置２−１，２−２，・・・，２−ｎのいずれかにランダムに送信する。
【００２５】
振り分け装置２−１，２−２，・・・，２−ｎは、ロードバランサ３から受信したプレイヤー操作要求をサーバ１−１，１−２，・・・，１−ｎに振り分ける。振り分け装置２−１，２−２，・・・，２−ｎの各々は、サーバ−空間対応テーブルＴ１を有している。振り分け装置２−１，２−２，・・・，２−ｎはそれぞれ、同期処理をとることで、各自のサーバ−空間対応テーブルＴ１を同じにすることができる。
【００２６】
図２に示すように、サーバ−空間対応テーブルＴ１は、空間名、空間左上頂点座標、空間縦長さ、空間横長さ、担当サーバといった欄を設定する。サーバ−空間対応テーブル５０は、ゲーム空間を分割した空間ごとに作成されたレコードを有し、各レコードについて、前記欄の値を格納している。
【００２７】
「空間名」の欄には、ゲーム空間を上下左右の所定の単位に分割した該当空間の名称が格納される。
「空間左上頂点座標」の欄には、分割された該当空間の左上頂点の座標値が格納される。
「空間縦長さ」の欄には、分割された該当空間の縦方向の長さを示す値が格納される。
「空間横長さ」の欄には、分割された該当空間の横方向の長さを示す値が格納される。
「担当サーバ」の欄には、分割された該当空間担当するサーバの識別番号が格納される。
なお、サーバ−空間対応テーブルＴ１の空間名、空間左上頂点座標、空間縦長さ、空間横長さは、分割した空間ごとの「空間情報」を構成する。
【００２８】
振り分け装置２−１，２−２，・・・，２−ｎは、ロードバランサ３から受信したプレイヤー操作要求に含まれるキーを読み取り、プレイヤーの現在位置を把握し、サーバ−空間対応テーブルＴ１を参照して、プレイヤーの現在位置を含む空間を担当するサーバを特定し、特定したサーバにプレイヤー操作要求を振り分けることができる。
【００２９】
（ゲームサーバ装置１の構成）
図３に示すように、本実施形態のゲームサーバ装置１は、処理部１０、通信部２０、および、記憶部３０を備える。
【００３０】
通信部２０は、通信回線を介して情報を送受信する通信インターフェースによって構成され、内部バスなどを介して処理部１０に接続されている。処理部１０は、他のゲームサーバ装置１や、振り分け装置２−１，２−２，・・・，２−ｎと、情報の送受信を行うことができる。
【００３１】
記憶部３０は、例えば、ハードディスク、フラッシュメモリ、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）などの記憶装置である。記憶部３０は、オンラインゲームを実現するためのアプリケーションを記憶している（図示略）。また、記憶部３０は、複数のゲームサーバ装置１間で実行される分散処理を実現するためのプログラム（分散処理プログラム）を記憶している（図示略）。また、記憶部３０は、例えば、振り分け装置２−１，２−２，・・・，２−ｎのサーバ−空間対応テーブルＴ１と同じサーバ−空間対応テーブルＴ１、自身の担当空間の境界情報Ｔ２、自身の担当空間内に存在するプレイヤーの状態データの原本（Ｄ１）、自身の担当空間に隣接する空間に存在するプレイヤーの状態データのレプリカ（Ｄ２）を記憶している。
【００３２】
自身の担当空間の境界情報Ｔ２は、自身の担当空間と隣接空間との境界を、隣接空間ごとに示す情報である。境界情報Ｔ２は、サーバ−空間対応テーブルＴ１の内容に基づいて作成することができる。隣接空間が自身の担当空間の上下左右に位置する場合には、境界は線であり、境界を、ゲーム空間の座標の点集合で表現することができる。また、隣接空間が自身の担当空間の右上、右下、左下、左上に位置する場合には、境界は点であり、境界を、ゲーム空間の１座標で表現することができる。
【００３３】
処理部１０は、ゲームサーバ装置１が実行する処理の全体を司る。処理部１０は、例えば、記憶部３０が記憶するプログラムをＣＰＵ（Central Processing Unit）が記憶部３０のＲＡＭに展開して実行することによって実現される。処理部１０は、原本データ管理部１１と、レプリカ配置部１２と、負荷監視部１３と、空間分割部１４と、空間分割通知部１５と、境界情報算出部１６と、いった機能部を備えている。
【００３４】
原本データ管理部１１は、ゲームサーバ装置１自身が担当する空間に存在するプレイヤーの状態データの原本を保存する。ゲームサーバ装置１の記憶部３０に記憶される状態データの原本（Ｄ１）は、ゲームサーバ装置１自身の担当空間に存在するプレイヤーのものである。自身の担当空間に存在するプレイヤーが他の空間に移動した場合には、原本データ管理部１１は、当該プレイヤーの状態データの原本をレプリカに切り替えて記憶部３０に保存する。また、原本データ管理部１１は、隣接する空間に居たプレイヤーが自身の担当する空間に移動したことを検出すると、当該プレイヤーの状態データの原本を記憶部３０に記憶する。このとき、原本データ管理部１１は、事前に保存していた当該プレイヤーの状態データのレプリカを用いる。
【００３５】
レプリカ配置部１２は、ゲームサーバ装置１自身が担当する空間に存在するプレイヤーに関して、当該プレイヤーの状態データのレプリカを、隣接する空間を担当する他のゲームサーバ装置１へコピー（配置）する。ゲームサーバ装置１の記憶部３０に記憶される状態データのレプリカ（Ｄ２）は、ゲームサーバ装置１自身の担当空間に隣接する空間に存在するプレイヤーのものである。
【００３６】
負荷監視部１３は、ゲームサーバ装置１自身の負荷を監視する。負荷監視部１３が監視する負荷は、例えば、ＣＰＵ使用率やメモリ使用量があるが、これらに限定されない。
【００３７】
空間分割部１４は、負荷監視部１３が監視する負荷が、所定の値を超えた場合には、自身の担当する空間を細分割して、当該細分割した空間の一つを新たなゲームサーバ装置１に割り当てる。空間分割部１４は、担当空間の細分割を反映するように自身のサーバ−空間対応テーブルＴ１の内容を書き換える。よって、空間分割部１４は、空間情報も細分割を反映するように書き換える。
【００３８】
空間分割通知部１５は、空間分割部１４による細分割前の空間に隣接する空間を担当する他のゲームサーバ装置１に、この細分割を反映した空間情報を通知する。
【００３９】
境界情報算出部１６は、細分割前の空間を担当する他のゲームサーバ装置１の空間分割通知部１５から通知された空間情報を受信した場合、受信した空間情報に基づいて、自身の担当する空間の境界情報を更新する。
【００４０】
（プレイヤーの隣接空間への移動に関する詳細）
ゲームサーバ装置１は、自身の担当空間に存在するプレイヤーの状態データ原本を有する。図４には、ゲーム空間を、空間Ａ〜空間Ｋ、・・・に分割し、ゲームサーバ装置１に対応するサーバ１〜サーバ１１、・・・が各空間を担当した場合において、サーバ６が担当する空間ＦにプレイヤーＡ、Ｂ（丸印で表現）が存在する様子が示されている。サーバ６の原本データ管理部１１は、プレイヤーＡのプレイヤー状態ａ（原本）と、プレイヤーＢのプレイヤー状態ｂ（原本）とを保存している。なお、「プレイヤー状態」という語は、「プレイヤーの状態データ」と同義である。
【００４１】
ここで、サーバ６は、境界情報Ｔ２を用いて、空間Ｆに隣接する空間Ａ，Ｂ，Ｃ，Ｅ，Ｇ，Ｉ，Ｊ，Ｋを迅速に特定することができる。サーバ６のレプリカ配置部１２は、空間Ａ，Ｂ，Ｃ，Ｅ，Ｇ，Ｉ，Ｊ，Ｋを担当するサーバ１，２，３，５，７，９，１０，１１へ、プレイヤー状態ａ，ｂのレプリカをコピーする。
【００４２】
例えば、プレイヤーＡが空間Ｆから空間Ｇに移動した場合、空間Ｇを担当するサーバ７の原本データ管理部１１は、プレイヤーＡを検出すると、既にコピー済みのプレイヤー状態ａのレプリカを原本として保存する。これにより、従来行われていた、プレイヤーＡの移動に伴うサーバ６，７間の状態データ移行処理を省略することができる。よって、サーバ７は、プレイヤーＡに対する処理を迅速に開始することができ、空間移動時のゲーム中断時間を大幅に短縮することができる。
【００４３】
また、プレイヤーＡの移動元となる空間Ｆは、移動先の空間Ｇから見て新たな隣接空間となる。このため、サーバ６は、プレイヤーＡのプレイヤー状態ａの原本をレプリカとして継続利用する。このとき、サーバ７のレプリカ配置部１２が、サーバ６に対し、プレイヤー状態ａの原本をレプリカとして保存するように指示する。
【００４４】
上記のように、隣接空間のすべてにレプリカを配置（コピー）すると、レプリケーション負荷が非常に大きいため、ゲームサーバ装置１の処理に相応の影響が生じる可能性が有る。このため、プレイヤーの移動先を予測してレプリカの配置先を絞り込む方法が考えられる。
【００４５】
（レプリカの配置先の絞り込み方法１）
例えば、プレイヤーの現在位置から所定の距離に及ぶ範囲を含む空間にのみレプリカを配置する。レプリケーションに要する時間内にプレイヤーが移動可能となる距離（開発者が予め規定）に対して、この距離よりも大きいという条件を満たす任意の距離をレプリカ配置の判定基準となるレプリカ判定距離として設定する。
【００４６】
そして、プレイヤーの位置から隣接空間との境界までの距離を逐次算出し、レプリカ判定距離と比較して、境界がレプリカ判定距離内にある場合に、当該隣接空間を担当するサーバへレプリカをコピーする。換言すれば、
プレイヤーの位置座標：（Ｘｐ，Ｙｐ）
レプリカ判定距離：ｒ
各空間の境界を構成する座標：（Ｘｓ，Ｙｓ）
レプリカ配置判定式：（Ｘｐ−Ｘｓ）２  ＋  （Ｙｐ−Ｙｓ）２  ＜  ｒ２
とした場合、
上記レプリカ判定式を満たす（Ｘｓ，Ｙｓ）を持つ隣接空間にレプリカを配置する。なお、上下の隣接空間に対しては、Ｘｐ−Ｘｓ＝０として上記レプリカ配置判定式を用いる。また、左右の隣接空間に対しては、Ｙｐ−Ｙｓ＝０として上記レプリカ配置判定式を用いる。
【００４７】
図５によれば、プレイヤーＡが空間Ｆ内の図５に示す位置に配置されているとすると、プレイヤーＡの現在位置からレプリカ判定距離に及ぶ範囲を含む空間は、空間Ｂ，Ｃ，Ｇとなる。このため、空間Ｆを担当するサーバ６のレプリカ配置部１２は、空間Ｂ，Ｃ，Ｇを担当するサーバ２，３，７のみへ、プレイヤー状態ａのレプリカをコピーする。
また、プレイヤーＢが空間Ｆ内の図５に示す位置に配置されているとすると、プレイヤーＢの現在位置からレプリカ判定距離に及ぶ範囲を含む空間は、空間Ａ，Ｂ，Ｅとなる。このため、空間Ｆを担当するサーバ６のレプリカ配置部１２は、空間Ａ，Ｂ，Ｅを担当するサーバ１，２，５のみへ、プレイヤー状態ａのレプリカをコピーする。
【００４８】
（レプリカの配置先の絞り込み方法２）
例えば、プレイヤーの位置を所定周期ごとに保持し、保持した位置の履歴から速度ベクトルを算出し、速度ベクトルを元にして、移動が継続した場合にプレイヤーの移動先となる空間を特定し、その特定した空間の境界に到達するまでにかかる時間を算出する。
【００４９】
そして、この算出した時間がレプリケーションに要する時間以下である場合に、移動先となる隣接空間を担当するサーバへレプリカをコピーする。換言すれば、
プレイヤーの位置座標：（Ｘｐ，Ｙｐ）
プレイヤーの速度ベクトル：（Ｖｘ，Ｖｙ）
レプリケーションに要する時間：ｔ
速度ベクトルと交わる、空間の境界の点の座標：（Ｘｓ，Ｙｓ）
とした場合、
レプリカ配置判定式（左右方向の隣接空間到達時例）：｜Ｘｓ−Ｘｐ｜/Ｖｘ＜ｔを満たすとき、または、
レプリカ配置判定式（上下方向の隣接空間到達時例）：｜Ｙｓ−Ｙｐ｜/Ｖｙ＜ｔを満たすとき、該当隣接空間にレプリカを配置する。
【００５０】
図６によれば、プレイヤーＡが空間Ｆ内の図６に示す位置に配置されているとすると、プレイヤーＡの速度ベクトルは、空間Ｂとの境界と交わる。このため、空間Ｆを担当するサーバ６のレプリカ配置部１２は、レプリカ配置判定式（上下方向の隣接空間到達時例）を満たすタイミングで、空間Ｂを担当するサーバ２のみへ、プレイヤー状態ａのレプリカをコピーする。
また、プレイヤーＢが空間Ｆ内の図６に示す位置に配置されているとすると、プレイヤーＢの速度ベクトルは、空間Ｇとの境界と交わる。このため、空間Ｆを担当するサーバ６のレプリカ配置部１２は、レプリカ配置判定式（左右方向の隣接空間到達時例）を満たすタイミングで、空間Ｇを担当するサーバ７のみへ、プレイヤー状態ｂのレプリカをコピーする。
【００５１】
（プレイヤーの移動に伴う負荷の偏りに関する詳細）
プレイヤーは（イベントの進行具合などの考慮しなければ）分割されたゲーム空間を自由に移動することができる。このため、サーバ間での負荷の偏りが発生する可能性があり、特定の空間に多数のプレイヤーが集中し、その空間を担当するサーバが過負荷になり、システムがダウンするおそれがある。また、プレイヤーの位置は、プレイヤー操作要求によって随時変化する。このため、各サーバの担当空間を上記のように上下左右に均一に分割して設定するのではなく、負荷を予測して、負荷に応じて空間の大きさや形状をアレンジするように設定することは困難である。
【００５２】
そこで、ゲームサーバ装置１は、負荷監視部１３によって、担当空間ごとの負荷を監視し、プレイヤーの移動などによって負荷が閾値を超えた場合には、空間分割部１４によって担当空間を細分割する。例えば、空間を細分割する方法の一例として、２次元座標で示される領域の面積が半分になるように、縦または横に空間を細分割する。
図７には、空間Ｂを担当するサーバ２が、プレイヤーが空間Ｂに集中し過負荷になったため、空間分割部１４によって空間Ｂを縦に細分割する様子が図示されている。空間Ｂは細分割されて、左半分は空間Ｂ１、右半分は空間Ｂ２となる。
【００５３】
細分割された空間Ｂについて、空間Ｂ１はサーバ２が引き継ぐ一方、空間Ｂ２は新たなサーバ２ａを増設し割り当てる。サーバ２は、新たなサーバ２ａに所定のデータを移行して、サーバ２ａに処理を引き継がせる。このデータには、空間Ｂ２に存在するプレイヤーの状態データが含まれる。また、サーバ２は、自身のサーバ−空間対応テーブルＴ１を更新して、空間Ｂ１の領域のこと、空間Ｂ１を担当するサーバ２のこと、空間Ｂ２の領域のこと、空間Ｂ２を担当するサーバ２ａのことを反映させる。その結果、空間Ｂ１，Ｂ２に対応する空間情報が生成される。
また、サーバ２は、振り分け装置２−１，２−２，・・・，２−ｎに対して、振り分け装置２−１，２−２，・・・，２−ｎのサーバ−空間対応テーブルＴ１を更新するように要求して、空間Ｂ１の領域のこと、空間Ｂ１を担当するサーバ２のこと、空間Ｂ２の領域のこと、空間Ｂ２を担当するサーバ２ａのことを反映させる。
【００５４】
細分割される前の空間（図７の空間Ｂ）に隣接する空間（図７の空間Ａ，Ｃ，Ｄ）を担当するゲームサーバ装置１のなかには、自身が担当する空間に存在するプレイヤーの移動先が増加するものが存在する（図７の空間Ｄ）。このため、移動先が増加するゲームサーバ装置１は、当該移動先の増加を即座に認識して、レプリカの再配置を行う必要がある。このことを踏まえて、細分割される前の空間Ｂを担当するサーバ２の空間分割通知部１５は、隣接空間（Ａ，Ｃ，Ｄ）を担当するサーバ（１，３，４）へ、細分割を反映した空間情報を通知する。空間分割通知部１５の通知内容は、例えば、追加された新たなサーバ（図７のサーバ２ａ）の担当空間（図７の空間Ｂ２）の形状が長方形であれば、当該長方形の頂点の座標などを含む。
【００５５】
細分割された空間の隣接空間を担当するゲームサーバ装置１は、境界情報算出部１６によって、細分割される前の空間を担当するゲームサーバ装置１の空間分割通知部１５からの通知内容に基づいて、自身の境界情報を更新する。図８によれば、細分割された空間Ｂ１，Ｂ２に隣接する空間Ｄを担当するサーバ４は、境界情報算出部１６によって、空間Ｄの境界情報（サーバ４の記憶部３０が記憶する境界情報Ｔ２）を、隣接空間Ｂ１，Ｂ２、および、これらの空間の境界線を構成する座標を特定するように更新する。
【００５６】
隣接空間の数が増加した空間を担当するゲームサーバ装置１は、レプリカ配置部１２によって、空間情報および境界情報に基づいて、細分割された空間の各々へ、自身の空間に存在するプレイヤーの状態データのレプリカを配置する。よって、細分割された空間に対してもプレイヤー移動時の処理の引き継ぎは、すでに説明したレプリカから原本への切り替えによって、迅速に行うことができる。図８には、サーバ４が、担当の空間Ｄのプレイヤー状態ｐ（原本）のレプリカを、細分割された空間Ｂ１，Ｂ２に配置する様子が示されている。
【００５７】
また、空間の細分割があっても、隣接空間の数が増加していないゲームサーバ装置１は、細分割によって隣接ではなくなった空間に存在するプレイヤーの状態データのレプリカを廃棄する。図８には明示していないが、細分割前の空間Ｂは、空間Ａ，Ｃに隣接していたが、空間Ｂを空間Ｂ１，Ｂ２に細分割することで、空間Ｂ２は、もはや、空間Ａ，Ｃに隣接しなくなった。このため、細分割前の空間Ｂに存在しており、細分割後の空間Ｂ２に存在するプレイヤーについては、空間Ｂ２を担当するサーバ２ａのレプリカ配置部１２は、対応の状態データを空間Ａ，Ｃに配置しないように処理する。
【００５８】
これまでに説明した機能は、ミドルウェアで実装可能であり、アプリケーションの種別によらず、汎用的に利用可能であるという利点がある。
【００５９】
(処理)
次に、本実施形態のゲームサーバ装置の処理について説明する。
図９は、プレイヤーの隣接空間への移動に関する処理を示すフローチャートである。この処理は、ステップＳ１から開始する。
【００６０】
ステップＳ１にて、ゲームサーバ装置１は、原本データ管理部１１によって、自身の担当空間に存在する担当のプレイヤーに関して、このプレイヤーの状態データの原本を記憶部３０に保存する。また、ゲームサーバ装置１は、原本データ管理部１１によって、クライアントから随時取得するプレイヤー操作要求に応じてプレイヤーの動作処理を実行するとともに、当該プレイヤーの状態データの原本を更新する。
【００６１】
次に、ステップＳ２にて、ゲームサーバ装置１は、レプリカ配置部１２によって、自身の担当空間の隣接空間に、担当プレイヤーの状態データのレプリカをコピーする。このとき、既に説明したように、レプリカ配置部１２は、レプリカ判定距離やプレイヤーの速度ベクトルを用いてレプリカの配置先を絞り込むことができる。また、ゲームサーバ装置１は、レプリカ配置部１２によって、当該プレイヤーの状態データの原本の更新に応じて、当該プレイヤーの状態データのレプリカを更新し、隣接空間にコピーする。
【００６２】
次に、ステップＳ３にて、ゲームサーバ装置１は、担当のプレイヤーが隣接空間へ移動したか否かを判定する。移動した場合（ステップＳ３でＹｅｓ）、当該プレイヤーはもはや担当外になったことを意味し、ステップＳ４に進む。一方、移動していない場合、（ステップＳ３でＮｏ）、ゲームサーバ装置１が当該プレイヤーの担当を継続することを意味し、ステップＳ１に戻る。
【００６３】
ステップＳ４にて、ゲームサーバ装置１は、レプリカ配置部１２によって、プレイヤーの移動先となる隣接空間を担当する他のゲームサーバ装置１に対して、事前にコピーした、移動先のレプリカを原本として切り替えるように指示する。他のゲームサーバ装置１はこの指示に応じて、既に保存している対象プレイヤーの状態データのレプリカを原本として使用し、対象プレイヤーの動作処理を開始する。また、他のゲームサーバ装置１のレプリカ配置部１２は、ゲームサーバ装置１に対し、対象プレイヤーの状態データの原本をレプリカとして保存するように指示する。
【００６４】
ステップＳ５にて、ゲームサーバ装置１は、原本データ管理部１１によって、他のゲームサーバ装置１のレプリカ配置部１２からの指示に応じて、もはや担当外となったプレイヤーの状態の原本をレプリカとして記憶部３０に保存する。
【００６５】
図９の処理によれば、プレイヤーが隣接空間に移動した場合、ゲームサーバ装置間で当該プレイヤーの状態データを移行させる代わりに、隣接空間を担当するゲームサーバ装置が、すでにコピー済みのレプリカを原本に切り替えてプレイヤーの処理を継続することができる。よって、状態データの移行に伴う処理遅延やプレイの一時中断を回避しサービス品質の低下をもたらすことはない。
したがって、分散処理でオンラインゲームを実行するゲームサーバ装置に関して、オンラインゲームのプレイヤーが現在いる空間から隣の空間に移動する際の処理遅延を緩和することができる。
【００６６】
また、レプリカ判定距離やプレイヤーの速度ベクトルを用いて、状態データのレプリカの配置先を絞り込むことができるため、レプリケーション負荷を小さくすることができる。
【００６７】
図１０は、空間の細分割に関する処理を示すフローチャートである。この処理は、ステップＳ１１から開始する。
【００６８】
ステップＳ１１にて、ゲームサーバ装置１は、負荷監視部１３によって、ゲームサーバ装置１自身の負荷を監視する。
【００６９】
次に、ステップＳ１２にて、ゲームサーバ装置１は、負荷監視部１３によって、ゲームサーバ装置１自身の負荷が、予め設定した閾値（例えば、ゲームサーバ装置１の記憶部３０に記憶されている）を超えたか否かを判定する。負荷が閾値を超えた場合（ステップＳ１２でＹｅｓ）、ゲームサーバ装置１が過負荷状態であることを意味し、ステップＳ１３に進む。一方、負荷が閾値を超えていない場合（ステップＳ１２でＮｏ）、ゲームサーバ装置１が過負荷状態はないことを意味し、ステップＳ１１に戻る。
【００７０】
ステップＳ１３にて、ゲームサーバ装置１は、空間分割部１４によって、自身の担当空間を細分割する。このとき、ゲームサーバ装置１は、細分割した空間の一つを引き続き担当し、残りを新たなゲームサーバ装置１に割り当てる。
【００７１】
ステップＳ１４にて、ゲームサーバ装置１は、空間分割部１４によって、自身のサーバ−空間対応テーブルＴ１の内容を更新して、空間分割部１４による細分割を反映する。このとき、細分割された空間の空間情報が生成される。また、ゲームサーバ装置１は、振り分け装置２−１，２−２，・・・，２−ｎに対して、振り分け装置２−１，２−２，・・・，２−ｎのサーバ−空間対応テーブルＴ１を更新するように要求する。振り分け装置２−１，２−２，・・・，２−ｎの各々は、自身のサーバ−空間対応テーブルＴ１を更新して、上記の細分割を反映する。
【００７２】
ステップＳ１５にて、ゲームサーバ装置１は、空間分割通知部１５によって、細分割前の担当空間の隣接空間を担当する隣接サーバへ細分割後の空間情報を通知する。通知を受けた隣接サーバの境界情報算出部１６は、通知内容に応じて自身の境界情報を更新する。
【００７３】
ステップＳ１６にて、ゲームサーバ装置１は、レプリカ配置部１２によって、空間分割部１４による細分割に応じて、担当しているプレイヤーの状態データのレプリカを、隣接空間にコピーする。また、ゲームサーバ装置１は、レプリカ配置部１２によって、当該プレイヤーの状態データの原本の更新に応じて、当該プレイヤーの状態データのレプリカを更新し、隣接空間にコピーする。
【００７４】
図１０の処理によれば、空間の細分割によって、過負荷となったゲームサーバ装置に対して、新たなゲームサーバ装置が負荷を分担することができるため、システムのダウンを回避することができる。
【００７５】
（変形例）
レプリカ配置部１２は、１つの隣接空間に対して、状態データのレプリカを、１つだけでなく２以上配置することができる。
また、本実施形態の空間分割部１４は、１つの空間を２だけでなく、３以上に細分割することができる。この場合、分割する方向は、縦や横に限らず、斜め、折れ線、曲線で分割することもできる。
【００７６】
本実施形態で説明した種々の技術を適宜組み合わせた技術を実現することもできる。
本実施形態で説明したソフトウェアをハードウェアとして実現することもでき、ハードウェアをソフトウェアとして実現することもできる。
その他、ハードウェア、ソフトウェア、フローチャートなどについて、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【符号の説明】
【００７７】
１      ゲームサーバ装置
２−１〜２−ｎ  振り分け装置
３      ロードバランサ
４−１〜４−ｎ      クライアント
１０    処理部
１１    原本データ管理部
１２    レプリカ配置部
１３    負荷監視部
１４    空間分割部
１５    空間分割通知部
１６    境界情報算出部
２０    通信部
３０    記憶部
Ｔ１    サーバ−空間対応テーブル
Ｔ２    境界情報
Ｄ１    状態データの原本
Ｄ２    状態データのレプリカ
【図１】
2017037446.tif 000003
【図２】
2017037446.tif 000004
【図３】
2017037446.tif 000005
【図４】
2017037446.tif 000006
【図５】
2017037446.tif 000007
【図６】
2017037446.tif 000008
【図７】
2017037446.tif 000009
【図８】
2017037446.tif 000010
【図９】
2017037446.tif 000011
【図１０】
2017037446.tif 000012