(57)【特許請求の範囲】
【請求項１】
データ処理を行う複数のプロセスと、前記プロセスが処理を行うデータのキーレンジを指示する指示部と、処理対象のデータを振り分ける振り分け部とを備えるノードで構成される計算機システムであって、
第一のキーレンジのデータを処理する第一のプロセスから第一のキーレンジの一部のキーレンジである第三のキーレンジのデータ処理を第二のキーレンジのデータを処理する第二のプロセスで処理するとき、
前記指示部は第一のプロセスへ第一のキーレンジから第三のキーレンジを除いた範囲である更新後の第一のキーレンジを示す情報を含む第一のレンジ更新情報を送付し、
第二のプロセスへ第二のキーレンジに第三のキーレンジを加えた範囲である更新後の第二のキーレンジを示す情報を含む第二のレンジ更新情報を送付し、
振り分け部へ前記第一のプロセスに対応付けられた更新後の第一のキーレンジと第二のプロセスに対応付けられた更新後の第二のキーレンジを含む第三のレンジ更新情報を送付し、
前記振り分け部は第三のレンジ更新情報を受け付けたとき、第一のプロセスと第二のプロセスへ振り分けるデータの範囲を変更し、
第一のプロセスは第一のレンジ更新情報を受け付けたとき、更新後の第一のキーレンジのデータ処理を実行し、
第二のプロセスは第二のレンジ更新情報を受け付けたとき、更新後の第二のキーレンジのデータ処理を実行することを特徴とする計算機システム。
【請求項２】
請求項１の計算機システムにおいて、
計算機システムは複数のノードを備え、同じキーレンジのデータを処理するプロセスは複数のノードに割当てられ、同じキーレンジのデータを割当てられたプロセスはグループを構成することを特徴とする計算機システム。
【請求項３】
請求項２の計算機システムにおいて、
第二のプロセスが第二のレンジ更新情報を受け付けたとき、第三のキーレンジのデータを処理するために必要な関連データのコピーを保持していなければ、
少なくとも第一のプロセスに第三のキーレンジのデータに対応した関連データのコピーを送付するよう要求し、
第一のプロセスは前記第二のプロセスから要求のあった前期関連データを第二のプロセスへ送付し、
第二のプロセスは第一のプロセスから前記関連データを受け取った後に、更新後の第二のキーレンジのデータ処理を実行することを特徴とする計算機システム。
【請求項４】
請求項２の計算機システムにおいて、
グループ間で処理するデータ量に偏りがでたときにキーレンジの変更を指示するリバランス指示部を備え、
リバランス指示部がキーレンジの変更を指示するレンジ更新指示をノードの指示部へ送付し、
ノードの振り分け部は、他のノードの振り分け部と通信を行うことで、振り分け部に送付されたレンジ更新情報を他の振り分け部へ原子的配信し、
前記ノードの前記プロセスは、グループ情報を参照し、グループに含まれるプロセスへ前記プロセスに送付されたレンジ更新情報を原子的配信することを特徴とする計算機システム。
【請求項５】
請求項４の計算機システムにおいて、
前記リバランス指示部は、前記レンジ更新指示を、前記複数のノードの複数のノードへ送付することを特徴とする計算機システム。
【請求項６】
請求項３の計算機システムにおいて、
前記第二のプロセスは第三のキーレンジの処理対象のデータを一時的に蓄える電文退避部を備え、
第二のプロセスは、第一のプロセスから関連データを受け取るまでの間、第三のキーレンジのデータを前記電文退避部に蓄え、第一のプロセスから第三のキーレンジの処理対象のデータを受け付けた後は、更新後の第二のキーレンジのデータ処理を実行することを特徴とする計算機システム。
【請求項７】
データ処理を行う複数のプロセスと、前記プロセスが処理を行うデータのキーレンジを指示する指示部と、処理対象のデータを振り分ける振り分け部とを備えるノードで構成される計算機システムで実行されるデータ処理方法であって、
第一のキーレンジのデータを処理する第一のプロセスから第一のキーレンジの一部のキーレンジである第三のキーレンジのデータ処理を第二のキーレンジのデータを処理する第二のプロセスで処理するとき、
前記指示部は第一のプロセスへ第一のキーレンジから第三のキーレンジを除いた範囲である更新後の第一のキーレンジを示す情報を含む第一のレンジ更新情報を送付し、
第二のプロセスへ第二のキーレンジに第三のキーレンジを加えた範囲である更新後の第二のキーレンジを示す情報を含む第二のレンジ更新情報を送付し、
振り分け部へ前記第一のプロセスに対応付けられた更新後の第一のキーレンジと第二のプロセスに対応付けられた更新後の第二のキーレンジを含む第三のレンジ更新情報を送付し、
前記振り分け部は第三のレンジ更新情報を受け付けたとき、第一のプロセスと第二のプロセスへ振り分けるデータの範囲を変更し、
第一のプロセスは第一のレンジ更新情報を受け付けたとき、更新後の第一のキーレンジのデータ処理を実行し、
第二のプロセスは第二のレンジ更新情報を受け付けたとき、更新後の第二のキーレンジのデータ処理を実行することを特徴とするデータ処理方法。
【請求項８】
請求項７のデータ処理方法において、
計算機システムは複数のノードを備え、同じキーレンジのデータを処理するプロセスは複数のノードに割当てられ、同じキーレンジのデータを割当てられたプロセスはグループを構成することを特徴とするデータ処理方法。
【請求項９】
請求項８のデータ処理方法において、
第二のプロセスが第二のレンジ更新情報を受け付けたとき、第三のキーレンジのデータを処理するために必要な関連データのコピーを保持していなければ、
少なくとも第一のプロセスに第三のキーレンジのデータに対応した関連データのコピーを送付するよう要求し、
第一のプロセスは前記第二のプロセスから要求のあった前期関連データを第二のプロセスへ送付し、
第二のプロセスは第一のプロセスから前記関連データを受け取った後に、更新後の第二のキーレンジのデータ処理を実行することを特徴とするデータ処理方法。
【請求項１０】
請求項８のデータ処理方法において、
グループ間で処理するデータ量に偏りがでたときにキーレンジの変更を指示するリバランス指示部を備え、
リバランス指示部がキーレンジの変更を指示するレンジ更新指示をノードの指示部へ送付し、
ノードの振り分け部は、他のノードの振り分け部と通信を行うことで、振り分け部に送付されたレンジ更新情報を他の振り分け部へ原子的配信し、
前記ノードの前記プロセスは、グループ情報を参照し、グループに含まれるプロセスへ前記プロセスに送付されたレンジ更新情報を原子的配信することを特徴とするデータ処理方法。
【請求項１１】
請求項１０のデータ処理方法において、
前記リバランス指示部は、前記レンジ更新指示を、前記複数のノードの複数のノードへ送付することを特徴とするデータ処理方法。
【請求項１２】
請求項９のデータ処理方法において、
前記第二のプロセスは第三のキーレンジの処理対象のデータを一時的に蓄える電文退避部を備え、
第二のプロセスは、第一のプロセスから関連データを受け取るまでの間、第三のキーレンジのデータを前記電文退避部に蓄え、第一のプロセスから第三のキーレンジの処理対象のデータを受け付けた後は、更新後の第二のキーレンジのデータ処理を実行することを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の計算機から構成される分散データベースに関する。
【背景技術】
【０００２】
近年、Ｗｅｂを用いたアプリケーションを実行する計算システムにおいてデータ量が爆発的に増大しており、複数のサーバにデータを分散させることによって、データへのアクセス性能を向上させるシステムが様々知られている。例えば、ＲＤＢＭＳ（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）では、データを所定のレンジ（例えば、キーレンジなど）毎に分割し、分割されたデータを複数のサーバに配置することによって、システム全体のアクセス性能を向上させる方法が知られている。【０００３】
また、キャッシュサーバ等に用いられるシステムとして、ＫＶＳ（Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ）等のＮｏＳＱＬ（Ｎｏｔ  ｏｎｌｙ  ＳＱＬ）データベースが知られている。ＫＶＳには、データ（バリュー）と、データの識別子（キー）とがペアとなったレコードが複数格納される。【０００４】
ＫＶＳでは、データに高速にアクセス可能な揮発性の記憶媒体、例えばメモリに、データを格納する構成（メモリストア）、データ格納の永続性に優れる不揮発性の記録媒体、例えば、ＳＳＤ（Ｓｏｒｉｄ  Ｓｔａｔｅ  Ｄｉｓｋ）やＨＤＤ等に、データを格納する構成（ディスクストア）、又は、前述したものを併用する構成等の種々の構成がとられている。【０００５】
インメモリ型ＫＶＳは、ディスク型ＫＶＳに比べて、高速なデータアクセスを実現するが、いくつか欠点もある。第一に、物理的制約などにより、ＳＳＤやＨＤＤに比べて一台のサーバに搭載可能なメモリ容量が小さいため、ディスク型ＫＶＳに比べて格納可能なデータ量が小さくなってしまう。第二に、メモリは揮発性の記録媒体であるため、何らかの障害でサーバが停止するとメモリ上のデータが消滅してしまう。【０００６】
上記欠点を克服したシステムが、インメモリ型分散ＫＶＳ（以下、分散ＫＶＳ）である。分散ＫＶＳは、複数のサーバからクラスタを構成して、そのクラスタに含まれるサーバのメモリ上に構成されるＫＶＳである。第一の欠点に対しては、複数のサーバ上にあるメモリを統合することで、一台のサーバでは保持できないメモリ容量を確保できる。第二の欠点に対しては、複数のサーバ間で同じデータを複製しておくことで、一部のサーバが停止してもデータの消滅を回避できる。【０００７】
分散ＫＶＳを構成する各サーバは、他のサーバとは重複しないレンジを担当し、そのレンジに含まれるデータの集合（以下、パーティション）を格納する。さらに、各サーバは他のサーバが管理しているパーティションの複製を格納する。【０００８】
そして、分散ＫＶＳには、管理サーバのような特別なサーバが存在しないもしくは多重化させているため、単一点障害が存在しない。すなわち、任意のサーバに障害が発生した場合であっても、他のサーバが複製されたパーティションに基づいて処理を継続できるため、計算機システムが停止することがない。したがって、分散ＫＶＳは耐障害性も確保される。【０００９】
ここで、分散ＫＶＳに格納するデータ量が多くなることで、サーバの負荷が上昇した、または格納可能なデータ量が無くなった際の対策の一つとして、クラスタに新しいサーバを追加するスケールアウトがある。スケールアウトでは、サーバが担当するレンジの変更を行う処理（以下、リバランス処理）が行われる。また、一部のサーバだけにデータが偏ることで、システムのスループットが低下した際の対策の一つとしてデータの偏りを解消する際もリバランス処理が行われる。【００１０】
前述したような、リバランス処理については、特許文献１に記載された技術が知られている。【００１１】
特許文献１には、既存レンジとそれに対応する既存パーティションに対して、リバランス後の新しいパーティションを用意し、既存パーティションから新しいパーティションへデータをコピーし、コピー完了後に、既存レンジとそれに対応する既存パーティションから、新しいレンジとそれに対応する新しいパーティションへアクセスを切り替える処理を行うことで、リバランス処理が実現できることが記載されている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】米国公報第２０１１／０２２５１２２号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１３】
分散ＫＶＳを利用するアプリケーションは、銀行口座やインターネットショッピング等のオンラインシステム上の商取引にも適用される。そのため、アプリケーションが処理を継続できるように、分散ＫＶＳを停止させることなくサーバ間の負荷を調整するリバランス処理を実行する必要がある。【００１４】
しかし、特許文献１では、新パーティションへのデータコピー完了後、レンジを移動させるために既存パーティションから新パーティションへデータアクセスを切り替える瞬間、システムが最も脆弱になる。【００１５】
たとえば、既存パーティションを持つサーバ群と新パーティションを持つサーバ群に対して、データアクセス切り替えを通知する必要があるが、１台でもデータアクセス切り替えを通知できなかった場合、リバランス処理が完遂できずシステムが停止することが考えられる。【００１６】
また、既存パーティションを持つサーバ群の一部に対して、通信タイムアウトなどによりデータアクセス切り替えを通知できなかった際、システムの停止を避けるため、上記サーバが停止したと判断し、残りのサーバだけでデータアクセスの切り替えを実行する方法が容易に考えられる。ここで、上記サーバがまだ稼働しており、かつデータアクセスを受け付けていた場合、既存パーティションと新パーティション間でデータの一貫性は崩れてしまう。【００１７】
具体例として、パーティションＡとパーティションＢを１つの新パーティションに併合するケースにおいて、パーティションＡを格納するサーバＡと、パーティションＢ及び新パーティションを格納するサーバがサーバＡ以外である場合で説明する。サーバＡに対してデータアクセスの切り替えを通知できないとサーバＡが停止したと判断し、データアクセスの切り替えを行う。ここでサーバＡがまだ稼働しており、かつデータアクセスを受け付けていた場合、新パーティションへコピーされたパーティションＡのデータ更新は、サーバＡが停止したとシステムが判断済みであるため、パーティションＡには反映されない。したがって、サーバＡがまだ停止していないことにシステムが気付くまで、パーティションＡと新パーティションへコピーされたパーティションＡの間でデータの一貫性が崩れてしまう。【００１８】
また、通信タイムアウトなどによりデータアクセス切り替えを通知できなかった場合にはシステムの停止とデータの一貫性の崩壊を両方回避するため、データアクセス制御部、既存パーティション及び新パーティションを各々多重化し、かつ多重化した構成要素に対して定足数（Ｑｕｏｒｕｍ）以上が応答したら合意されたとみなすことで、データの一貫性を保証し、データアクセスの切り替えを実行する方法も考えられる。ここで、基幹スイッチの故障などにより、これまで相互に通信可能なネットワークが複数の小さなネットワークに分断された場合、システムが停止する場合がある。【００１９】
具体例として、パーティションＡとパーティションＢを１つの新パーティションに併合するケースにおいて、２つのパーティション、１つの新パーティション及び、データアクセス制御部も含めて計４つの構成要素が各々５つに多重化されていた場合を考える。この場合、データアクセスの切り替えを実行するためには、各構成要素の定足数３以上で相互通信可能なネットワークが構築されている必要があり、サーバ数は最大１２台（＝構成要素４×定足数３）となる。ここで、ネットワーク分断が起きた場合、最大１２台のサーバが同一の小さなネットワークに残存できず、データアクセスの切り替えを実行できない場合がある。
【課題を解決するための手段】
【００２０】
本願において開示される発明の代表的な一例を示せば以下の通りである。【００２１】
データ処理を行う複数のプロセスと、前記プロセスが処理を行うデータのキーレンジを指示する指示部と、処理対象のデータを振り分ける振り分け部とを備えるノードで構成される計算機システムであって、
第一のキーレンジのデータを処理する第一のプロセスから第一のキーレンジの一部のキーレンジである第三のキーレンジのデータ処理を第二のキーレンジのデータを処理する第二のプロセスで処理するとき、
前記指示部は第一のプロセスへ第一のキーレンジから第三のキーレンジを除いた範囲である更新後の第一のキーレンジを示す情報を含む第一のレンジ更新情報を送付し、第二のプロセスへ第二のキーレンジに第三のキーレンジを加えた範囲である更新後の第二のキーレンジを示す情報を含む第二のレンジ更新情報を送付し、振り分け部へ前記第一のプロセスに対応付けられた更新後の第一のキーレンジと第二のプロセスに対応付けられた更新後の第二の新キーレンジを含む第三のレンジ更新情報を送付し、
前記振り分け部は第三のレンジ更新情報を受け付けたとき、第一のプロセスと第二のプロセスへ振り分けるデータの範囲を変更し、
第一のプロセスは第一のレンジ更新情報を受け付けたとき、更新後の第一のキーレンジのデータ処理を実行し、
第二のプロセスは第二のレンジ更新情報を受け付けたとき、更新後の第二のキーレンジのデータ処理を実行する。
【発明の効果】
【００２２】
本発明によれば、分散ＫＶＳを用いたシステムの信頼性を改善できる。
【図面の簡単な説明】
【００２３】
【図１】実施例における計算機システムの構成、リバランス指示装置の詳細及びクライアント装置の詳細を説明するブロック図である。
【図２】実施例における計算機装置の詳細を説明するブロック図である。
【図３（ａ）】リバランス処理の概要の説明図である。
【図３（ｂ）】リバランス処理の概要の説明図である。
【図３（ｃ）】リバランス処理の概要の説明図である。
【図３（ｄ）】リバランス処理の概要の説明図である。
【図３（ｅ）】リバランス処理の概要の説明図である。
【図３（ｆ）】リバランス処理の概要の説明図である。
【図４】実施例１における構成情報の一例を示す説明図である。
【図５】実施例１におけるシステムレンジ情報の一例を示す説明図である。
【図６】実施例１におけるグループ情報の一例を示す説明図である。
【図７】実施例１におけるデータストア部に格納されるデータの形式を示す説明図である。
【図８】実施例における通信メッセージ体系を示す説明図である。
【図９】実施例１におけるリバランス指示部の処理を説明するフローチャートである。
【図１０】実施例１における原子的配信部の処理を説明するフローチャートである。
【図１１】実施例１における電文実行部の処理を説明するフローチャートである。
【図１２】実施例１におけるバリア管理部の処理を説明するフローチャートである。
【図１３】実施例１におけるコピー先ノードにおけるコピー部の処理を説明するフローチャートである。
【図１４】実施例１におけるコピー元ノードにおけるコピー部の処理を説明するフローチャートである。
【発明を実施するための形態】
【実施例１】
【００２４】
まず、概要について説明する。【００２５】
図１は、実施例１における計算機システムの構成、クライアント装置３００の詳細及びリバランス指示装置２００の詳細を示すブロック図である。【００２６】
計算機システムは、複数の計算機装置１００、リバランス指示装置２００、及びクライアント装置３００から構成される。リバランス指示装置２００は計算機装置１００が役割を兼任してもよい。その際にリバランス指示装置２００を多重化し、冗長性を持たせてもよい。各計算機装置１００間、リバランス指示装置２００と計算機装置１００間及び計算機装置１００とクライアント装置３００間は、ネットワーク３５０を介して互いに接続される。ネットワーク３５０は、ＬＡＮ、ＷＡＮ及びＳＡＮ等の有線及び無線の種々の構成が考えられる。計算機装置１００、リバランス指示装置２００、及びクライアント装置３００が通信できるものであればどのようなネットワークであってもよい。なお、ネットワーク３５０には、複数のネットワーク装置（図示省略）が含まれる。ネットワーク装置は、例えば、スイッチ及びゲートウェイなどが含まれる。【００２７】
ここで、図１におけるリバランス指示装置２００及びクライアント装置３００の詳細を説明する前に図２における計算機装置１００の詳細を先に説明する。【００２８】
図２は、実施例１における計算機装置１００の詳細を説明するブロック図である。【００２９】
計算機装置１００は、ネットワークインタフェース１０１、プロセッサ１０２、補助記憶装置１０３及び主記憶装置１０４を備え、計算機システムを構成する。計算機装置１００は、他の計算機装置１００、リバランス指示装置２００及びクライアント装置３００から送られる指示８００にしたがって各種処理を実行する。各計算機装置１００の構成は少なくとも図２に示す構成要素を持っていれば良い。【００３０】
なお、計算機装置１００は、キーボード、マウス、タッチパネル等の入力装置及びディスプレイ等の出力装置を備えていてもよい。【００３１】
ネットワークインタフェース１０１は、ネットワーク３５０を介して他の装置と接続するためのインタフェースである。【００３２】
プロセッサ１０２は、主記憶装置１０４に格納されるプログラムで実現された各処理部を実行する。本実施例では各処理部はプログラムで実現しているが、ハードウェアとして実現されても良い。プロセッサ１０２がプログラムを実行することによって、計算機装置１００が備える機能を実現することができる。以下、プログラムを主語に処理を説明する場合には、プロセッサ１０２によって、プログラムが実行されていることを示す。【００３３】
補助記憶装置１０３は、各種情報を格納する。補助記憶装置１０３は、例えば、ＨＤＤ又はＳＳＤ等が考えられる。なお、補助記憶装置１０３上に分散ＫＶＳを構築するディスクストア（図示省略）が構築されてもよい。【００３４】
主記憶装置１０４は、プロセッサ１０２が実行するプログラム及び当該プログラムの実行に必要な情報を格納する。主記憶装置１０４は、例えば、メモリ等が考えられる。【００３５】
本実施例の主記憶装置１０４上には、ノード１１０を実現するためのプログラムが格納されている。なお、１つの計算機装置１００には複数のノード１１０が存在してもよい。【００３６】
ノード１１０は指示受信部１２０、振り分け部１３０、指示部１４０、バリア管理部１５０、コピー部１６０及び複数のプロセス１７０を実現するためのプログラムで構成されている。【００３７】
また、振り分け部１３０は、原子的配信部１３１、電文貯蓄部１３２及びノードレンジ情報更新部１３３で構成されている。また、必要な情報としてノードレンジ情報５０６を保持している。なお、ノードレンジ情報５０６は図５におけるシステムレンジ情報５００と同じ構造である。【００３８】
バリア管理部１５０は必要な情報として、通知済みプロセス情報１５１を保持している。なお、通知済みプロセス情報１５１の説明は図１２で述べる。【００３９】
プロセス１７０は、原子的配信部１７１、電文貯蓄部１７２、電文実行部１７３、データストア部７００及び電文退避部１８０で構成されている。また、プロセス１７０は必要な情報として、プロセスレンジ情報５０５、グループ情報６００と退避プロセスレンジ情報１８１を保持している。なお、プロセスレンジ情報５０５及び退避プロセスレンジ情報１８１は図５におけるシステムレンジ情報５００と同じ構造である。【００４０】
ここで、主記憶装置１０４に格納されるプログラム及び情報について説明する。【００４１】
指示受信部１２０は、計算機装置１００、クライアント装置３００及びリバランス指示装置２００から送られた指示８００を受け取り、当該指示８００の内容に応じて、指示８００を振り分け部１３０、指示部１４０、またはコピー部１６０に中継する。【００４２】
指示部１４０は、指示受信部１２０から受け取った指示８００に基づいて、後述するレンジ更新処理を実行する。動作の詳細は図９で述べる。【００４３】
コピー部１６０は、指示受信部１２０から受け取った指示８００に基づいて、後述するグループ内プロセスコピー処理を実行する。動作の詳細は図１３及び図１４で述べる。【００４４】
プロセス１７０は一つのレンジを担当する処理単位である。プロセス１７０は「状態」及び「イベント」を用いて対象の振る舞いが表現されるシステム（状態マシンやオートマトンとも呼ばれる）であって、内部に現在の状態を保持し、外部からイベントが入力された場合、予め決定されたルールにしたがって、現在の状態を次の状態へ「状態遷移」させる。【００４５】
ここで、ＫＶＳ内で保存しているキーに対するデータを「状態」、当該キーに対するデータ更新等の操作を「イベント」、当該操作に対する当該データの更新処理を「状態遷移」と見立てた場合、ＫＶＳはキー毎のプロセス１７０の集合として扱うことができる。【００４６】
ただし、キー毎のプロセス１７０の集合を運用する場合、プロセス１７０の数が膨大となるため現実的ではない。例えば、キーのデータ長が４バイトである場合、４バイトで表現できるキーの数（２の３２乗）より、必要となるプロセス１７０の数は約４２億個になる。【００４７】
したがって、ＫＶＳは特定のレンジに含まれるキーの集合毎に一つのプロセス１７０を運用する方が望ましい。レンジはハッシュ値の範囲を表し、各データのキーからハッシュ値を算出し、算出したハッシュ値が含まれるレンジを担当するプロセス１７０がそのデータを格納するものとする。この方式をＣｏｎｓｉｓｔｅｎｔ  Ｈａｓｈｉｎｇ法と呼ぶ。上記方式以外にもＲａｎｇｅ法及びＬｉｓｔ法等の方式を採用しても良い。【００４８】
そして、分散ＫＶＳをプロセス１７０で実現しようとする場合、データを複製し合う複数のプロセス１７０間でデータの一貫性を維持するため、複数のプロセス１７０に同一の振る舞いを実行させる必要がある。なお、データを複製し合うために同一の振る舞いを実行するプロセス１７０の集合を「グループ」と呼ぶ。グループに属する全プロセス１７０が同一の振る舞いを実行するためには、グループに属する全プロセス１７０に同一イベントを同一の入力順で入力する必要がある。そこで、イベントを入力する順番を決定するために原子的配信部１７１が使用される。【００４９】
原子的配信部１７１は、同じグループに属するプロセス１７０の原子的配信部１７１と通信できる。グループに関する情報をグループ情報６００に格納されている。そして、例えば分散合意アルゴリズムを用いて、グループ内で同一の電文９００を同一の順序で配信する。当該配信方法を原子的配信と呼ぶ（他にも全順序ブロードキャストや原子的ブロードキャストとも呼ばれることがある）。動作の詳細は図１０の説明で述べる。【００５０】
電文貯蓄部１７２は、原子的配信部１７１で原子的配信された電文９００をＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）方式で一時的に貯蓄する。【００５１】
電文実行部１７３は、電文貯蓄部１７２から電文９００を取り出し、データストア部７００が管理するデータに対し、電文９００に対応した各種処理を行う。各種処理は、例えばデータの書き込み、データの上書き、及びデータの削除などである。動作の詳細は図１１で述べる。【００５２】
振り分け部１３０は、指示受信部１２０から受け取ったデータ更新指示８０２に基づいて、データ更新等の操作を行う。動作の詳細は図９で述べる。【００５３】
原子的配信部１３１は、全てのノード１１０に含まれる原子的配信部１３１と通信できる。ただし、振り分け部１３０はプロセス１７０が保持するグループ情報６００に相当する情報を保持しておらず、指示部１４０から指定されたグループ情報６００に基づいて原子的配信する。動作の詳細は図１０の説明で述べる。【００５４】
電文貯蓄部１３２は、原子的配信部１３１で原子的配信された電文９００をＦＩＦＯ方式で一時的に貯蓄する。【００５５】
ノードレンジ情報更新部１３３は、電文貯蓄部１３２に蓄えられたレンジ更新電文９０１を取り出して、ノードレンジ情報５０６を更新する。【００５６】
バリア管理部１５０は、後述するレンジ更新処理を行う２つのグループに属するプロセス１７０間の実行タイミングを制御する。動作の詳細は図１２で述べる。【００５７】
計算機装置１００の説明が終了したので、図１におけるリバランス指示装置２００及びクライアント装置３００の説明に戻る。【００５８】
リバランス指示装置２００は、ネットワークインタフェース２０１、プロセッサ２０２、補助記憶装置２０３、及び主記憶装置２０４を備え、計算機装置１００に対してリバランス処理を制御する。【００５９】
ネットワークインタフェース２０１は、ネットワーク３５０を介して他の装置と接続するためのインタフェースである。【００６０】
プロセッサ２０２は、主記憶装置２０４に格納されるプログラムを実行する。プロセッサ２０２がプログラムを実行することによって、リバランス指示装置２００が備える機能を実現することができる。以下、プログラムを主語に処理を説明する場合には、プロセッサ２０２によって、プログラムが実行されていることを示す。【００６１】
補助記憶装置２０３は、各種情報を格納する。補助記憶装置２０３は、例えば、ＨＤＤ又はＳＳＤ等が考えられる。【００６２】
主記憶装置２０４は、プロセッサ２０２が実行するプログラム及び当該プログラムの実行に必要な情報を格納する。主記憶装置２０４は、例えば、メモリ等が考えられる。【００６３】
本実施例の主記憶装置２０４上には、性能監視部２１３、リバランス指示部２１２及び構成情報管理部２１１を実現するためのプログラムが格納される。また、主記憶装置２０４上には、必要な情報として構成情報４００及びシステムレンジ情報５００が格納される。【００６４】
ここで、主記憶装置２０４に格納されるプログラム及び情報について説明する。【００６５】
リバランス指示部２１２は、リバランス処理を実現するために、各ノード１１０に対して指示８００を送る。動作の詳細は、図９で述べる。【００６６】
構成情報管理部２１１は、ノード１１０及びノード１１０に含まれるプロセス１７０の構成に関する構成情報４００を管理する。動作の詳細は、図９で述べる。【００６７】
性能監視部２１３は、各グループの性能指標を定期的に収集している。その収集結果からグループ間で性能指標の偏りを検出した場合、その偏りを是正するためにリバランス指示部２１２にリバランス処理を指示する。動作の詳細は、図９で述べる。【００６８】
クライアント装置３００は、ネットワークインタフェース３０１、プロセッサ３０２、補助記憶装置３０３、及び主記憶装置３０４を備え、ノード１１０に対してデータ更新指示８０２を送る。【００６９】
ネットワークインタフェース３０１は、ネットワーク３５０を介して他の装置と接続するためのインタフェースである。【００７０】
プロセッサ３０２は、主記憶装置３０４に格納されるプログラムを実行する。プロセッサ３０２がプログラムを実行することによって、クライアント装置３００が備える機能を実現することができる。以下、プログラムを主語に処理を説明する場合には、プロセッサ３０２によって、プログラムが実行されていることを示す。【００７１】
補助記憶装置３０３は、各種情報を格納する。補助記憶装置３０３は、例えば、ＨＤＤ又はＳＳＤ等が考えられる。【００７２】
主記憶装置３０４は、プロセッサ３０２が実行するプログラム及び当該プログラムの実行に必要な情報を格納する。主記憶装置３０４は、例えば、メモリ等が考えられる。【００７３】
本実施例の主記憶装置３０４上には、アプリケーション３１１、及びクライアント情報管理部３１２を実現するためのプログラムが格納される。【００７４】
ここで、主記憶装置３０４に格納されるプログラム及び情報について説明する。【００７５】
アプリケーション３１１は、クライアント情報管理部３１２にデータ更新等の操作を依頼する。また、アプリケーション３１１は、クライアント情報管理部３１２から返される依頼結果を受けとる。【００７６】
クライアント情報管理部３１２は、アプリケーション３１１から依頼されたデータ更新等の操作からデータ更新指示８０２を作成し、構成情報管理部２１１から最新のシステムレンジ情報５００及び構成情報４００を取得して、データ処理を担当するノード１１０を検索し、該当ノード１１０へ作成したデータ更新指示８０２を送り、該当ノード１１０からのデータ更新指示８０２の実行結果であるデータ更新完了応答８５２を受け取るとアプリケーション３１１に依頼結果を返す。なお、データ更新指示８０２及びデータ更新完了応答８５２の説明は、図８で述べる。【００７７】
なお、本実施例では、計算機装置１００、リバランス指示装置２００及びクライアント装置３００が備える機能を、ソフトウェアを用いて実現しているが、専用のハードウェアを用いて同一の機能を実現してもよい。【００７８】
図３（ａ）−（ｆ）は、リバランス処理の概要の説明図である。【００７９】
この例では、ハッシュ値は１〜２０００の間で求められ、１〜２０００までのレンジでシステムが取り扱う全データが格納できるとする。ここで、１〜１０００のレンジαに含まれる丸で表わされるデータを処理するグループＡ、１００１〜１７００のレンジβに含まれる四角で表わされるデータを処理するグループＢ及び１７０１〜２０００のレンジγに含まれる三角で表わされるデータを処理するグループＣでデータ更新等の操作を処理する分散ＫＶＳについて説明する。【００８０】
図３（ａ）のようにグループＡはレンジαに含まれる３個のデータを処理しており、各データはノード１とノード２上に存在するグループＡに属するプロセス１７０のデータストア部７００で多重化されているため、グループＡは計６個（＝３個×２多重）のデータを保持している。同様に、グループＢはレンジβに含まれる７個のデータを処理しており、各データはノード１とノード３上に存在するグループＢに属するプロセス１７０のデータストア部７００で多重化されているため、グループＢは計１４個（＝７個×２多重）のデータを保持している。さらに同様に、グループＣはレンジγに含まれる５個のデータを処理しており、各データはノード２とノード３上に存在するグループＣに属するプロセス１７０のデータストア部７００で多重化されているため、グループＣは計１０個（＝５個×２多重）のデータを保持している。【００８１】
このため各グループ間で負荷に偏りが生じている。そこで、レンジβの範囲を狭め、レンジαの範囲を広げることにより偏りを無くすため、移動グループの作成、グループの分割操作、移動グループの移動、グループの併合操作及び移動グループの削除というステップを実施することによりリバランスする処理を説明する。【００８２】
図３（ｂ）は図３（ａ）の状態から、グループの分割操作の準備として、グループＢを含むノード１１０に、レンジ範囲が無い空レンジを担当する、一時的に使用する移動グループＤを作成した状態を示している。具体的には、ノード１とノード３がグループＢに属するプロセス１７０を含むため、ノード１とノード３に移動グループＤを作成する。なお、空レンジを、図３（ｂ）のように、空レンジと記述する。【００８３】
図３（ｃ）は図３（ｂ）の状態から、グループの分割操作を行い、グループＢのレンジβと移動グループＤのレンジδを更新した状態を示している。また、グループの分割操作を行う際、移動グループＤが新しく担当するレンジでグループＢが格納しているデータについては、グループＢから移動グループＤへ移動させる。なお、移動グループＤが担当するデータは図中では菱形で表される。【００８４】
図３（ｄ）は図３（ｃ）の状態から、グループの併合操作の準備として、グループＡを含むノード１１０に移動グループＤを移動させた状態を示している。移動グループＤを移動させるため、まずノード３が保持する移動グループＤに属するプロセス１７０及び当該プロセス１７０が保持するデータをノード２にコピーし、コピーしたプロセス１７０を移動グループＤに属させる（図中の”１．コピー”）。ここで、あるグループに属するプロセス１７０を別のノード１１０にコピーし、かつ同じグループに属させることをグループ内プロセスコピー処理と呼ぶ。ちなみに、図３（ｄ）ではノード３上に存在する移動グループＤに属するプロセス１７０をコピー元として用いてグループ内プロセスコピー処理を実施しているが、ノード１上に存在する移動グループＤに属するプロセス１７０をコピー元として用いてグループ内プロセスコピー処理を実施しても良い。そして、グループの併合操作上で邪魔となるノード３上に存在する移動グループＤに属するプロセス１７０を削除する（図中の”２．削除”）。ここで、あるグループに属するプロセス１７０の一部を削除することをグループ内プロセス削除処理と呼ぶ。【００８５】
図３（ｅ）は図３（ｄ）の状態から、グループの併合操作を行い、グループＡのレンジαと移動グループＤのレンジδを更新した状態を示している。また、グループの併合操作を行う際、グループＡが新しく担当するレンジで移動グループＤが格納しているデータについては、移動グループＤからグループＡへ移動させる。【００８６】
図３（ｆ）は図３（ｅ）の状態から、一時的に作成した移動グループＤを削除し、リバランス処理が完了した状態を示している。これにより図３の（ａ）と比べて、グループＡのレンジαが１〜１０００から１〜１５００に、グループＢのレンジβが１００１〜１７００から１５０１〜１７００に変更され、また、グループＡとグループＢに格納されるデータ数を各々10個（=5個×2多重）に均等化されている。【００８７】
ここで、グループの分割操作とグループの併合操作は、「レンジ更新処理」と呼ばれる処理によって実現する。具体的には、グループの分割操作は、グループＢが担当するレンジβと移動グループＤが担当するレンジδを、１００１〜１７００と−から、１５０１〜１７００と１００１〜１５０１に更新することで実現する。また、グループの併合操作は、移動グループＤが担当するレンジδとグループＡが担当するレンジαを、１００１〜１５０１と１〜１０００から、−とレンジ１〜１５００に更新することで実現する。なお、レンジ更新処理後にレンジが狭まるグループを移動元グループ、レンジが広がるグループを移動先グループ、移動元グループに属するプロセス１７０を移動元プロセス１７０、そして移動先グループに属するプロセス１７０を移動先プロセス１７０と呼ぶ。【００８８】
したがって、移動グループの作成・削除、レンジ更新処理及びグループ内プロセスコピー・削除処理によりリバランスを実現できる。【００８９】
図４は、実施例１における構成情報４００の一例を示す説明図である。【００９０】
構成情報４００は、各計算機装置１００上に存在するノード１１０とそのノード１１０内に配置されるグループに関する情報を格納する。具体的には、構成情報４００は、計算機装置ＩＤ列４０１、ノードＩＤ列４０２とグループ情報列４０３を含む。【００９１】
計算機装置ＩＤ列４０１は、計算機装置１００を一意に識別するための識別子（計算機装置ＩＤ）を格納する。【００９２】
ノードＩＤ列４０２は、ノード１１０を一意に識別するための識別子（ノードＩＤ）を格納する。【００９３】
グループ情報列４０３は、グループを識別するための識別子（グループＩＤ）のリストを格納する。【００９４】
図５は、実施例１におけるシステムレンジ情報５００の一例を示す説明図である。【００９５】
システムレンジ情報５００は、各グループが担当するレンジに関する情報を格納する。具体的には、グループＩＤ列５０１とレンジ列５０２を含む。【００９６】
グループＩＤ列５０１は、グループＩＤを格納する。【００９７】
レンジ列５０２は、グループが担当するレンジを格納する。なお、空レンジである場合は“−”が格納される。【００９８】
ここでノードレンジ情報５０６が格納する情報は、当該ノード１１０上に存在するグループに関するレコードだけである。例えば図３（ａ）のノード１の場合、グループＡに属するプロセス１７０とグループＢに属するプロセス１７０がノード１上に存在するため、ノードレンジ情報５０６は、図５のシステムレンジ情報５００が保持するレコードのうち、グループＡとグループＢに関するレコードだけ格納している。【００９９】
さらにプロセスレンジ情報５０５が格納する情報は、当該プロセス１７０が属しているグループに関するレコードだけである。例えば図３（ａ）のグループＡに属するプロセス１７０の場合、図５のシステムレンジ情報５００が保持するレコードのうち、プロセスレンジ情報５０５はグループＡに関するレコードだけ格納している。【０１００】
図６は、実施例１におけるグループ情報６００に格納されるデータの形式を示す説明図である。【０１０１】
グループ情報６００は、プロセス１７０の原子的配信部１７１が電文９００を原子的配信する対象であるグループに属するプロセス１７０が存在するノード１１０に関する情報を格納する。グループ情報６００は、ノードＩＤ列６０１を含む。【０１０２】
ノードＩＤ列６０１は、ノードＩＤを格納する。【０１０３】
図７は、実施例１におけるデータストア部７００に格納されるデータの形式を示す説明図である。【０１０４】
実施例１では、データストア部７００はデータ管理情報７０３を格納する。データ管理情報７０３には、キー及びバリューから構成されるデータが複数含まれる。以下、キー及びバリューから構成されるデータをキーバリュー型データとも記載する。【０１０５】
データ管理情報７０３は、Ｋｅｙ列７０１およびＶａｌｕｅ列７０２を含む。【０１０６】
Ｋｅｙ列７０１は、データを識別するための識別子（キー）を格納する。Ｖａｌｕｅ列７０２は、実際のデータ（バリュー）を格納する。【０１０７】
クライアント装置３００を操作するユーザは、キーを指定して分散ＫＶＳにデータを保存し、また、キーを指定して分散ＫＶＳから所望のデータを取得することができる。【０１０８】
なお、データストア部７００に格納されるデータの形式は、図７に示すものに限定されず、例えば、キーのハッシュ値及びバリューを対応づけた形式のデータであってもよい。【０１０９】
図８は、取り扱う通信メッセージを示す説明図である。【０１１０】
通信メッセージには、リバランス指示部２１２にリバランス処理を指示するための通信メッセージであるリバランス指示１０００、ノード１１０にレンジ更新処理などの各種処理の実行を指示するための通信メッセージである指示８００、指示８００に対する応答８５０、そして原子的配信部１３１や原子的配信部１７１で原子的配信する通信メッセージである電文９００がある。【０１１１】
リバランス指示１０００は、性能監視部２１３などからリバランス指示部２１２に送られる通信メッセージである。リバランス指示１０００は、レンジ更新情報によって構成される。レンジ更新情報とは、図５のシステムレンジ情報５００と似ており、グループＩＤ列と新レンジ列のレコードを複数格納したテーブルである。【０１１２】
指示８００には、レンジ更新指示８０１、データ更新指示８０２、グループ内プロセスコピー準備指示８１１、グループ内プロセスコピー実行指示８１２、グループ情報更新指示８１３、データストア部コピー指示８１４、移動グループ作成指示８３１、グループ内プロセス削除指示８３２そして移動グループ削除指示８３３がある。【０１１３】
応答８５０には、レンジ更新完了応答８５１、データ更新完了応答８５２、グループ内プロセスコピー準備完了応答８６１、グループ内プロセスコピー実行完了応答８６２、移動グループ作成完了応答８８１、グループ内プロセス削除完了応答８８２及び移動グループ削除完了応答８８３がある。【０１１４】
電文９００には、レンジ更新電文９０１、データ更新電文９０２、コピー開始電文９１１及び電文退避開放電文９２１がある。【０１１５】
データ更新指示８０２は、処理対象のデータの一つであり、データ更新等の操作、すなわちデータに対する更新処理の実行を要求するための指示８００である。本実施例のデータに対する更新処理には、データの書き込み、データの上書き、及びデータの削除などが含まれる。【０１１６】
データ更新電文９０２も、処理対象のデータの一つであり、データ更新指示８０２と同じ内容を格納している。【０１１７】
データ更新完了応答８５２は、データ更新指示８０２を受け取った振り分け部１３０がクライアント情報管理部３１２にデータに対する更新処理の完了を通知するために送る応答８５０である。データ更新完了応答８５２は、データに対する更新処理の実行結果によって構成される。【０１１８】
レンジ更新指示８０１は、レンジ更新処理でノード１１０に送る指示８００である。レンジ更新指示８０１は、レンジ更新処理毎にユニークに生成されたバリアＩＤとレンジ更新情報によって構成される。【０１１９】
レンジ更新電文９０１は、レンジ更新処理で振り分け部１３０の原子的配信部１３１とプロセス１７０の原子的配信部１７１が各グループ内で原子的配信する電文９００である。レンジ更新電文９０１は、レンジ更新指示８０１と同様に、バリアＩＤとレンジ更新情報によって構成される。【０１２０】
レンジ更新完了応答８５１は、レンジ更新指示８０１を受け取った指示部１４０がリバランス指示部２１２にレンジ更新処理の完了を通知するために送る応答８５０である。レンジ更新完了応答８５１は、特に情報を保持しない。【０１２１】
グループ内プロセスコピー準備指示８１１、グループ内プロセスコピー実行指示８１２、グループ情報更新指示８１３、データストア部コピー指示８１４、コピー開始電文９１１、グループ内プロセスコピー準備完了応答８６１及びグループ内プロセスコピー実行完了応答８６２はグループ内プロセスコピー処理で用いる通信メッセージである。【０１２２】
ここで、グループ内プロセスコピー処理に関する用語をいくつか定義する。まず、グループ内プロセスコピー処理の対象であるグループをコピー対象グループと呼ぶ。グループ内プロセスコピー処理によって新しく生成されるプロセス１７０をコピー先プロセス１７０と呼び、コピー先プロセス１７０が存在するノード１１０をコピー先ノード１１０と呼ぶ。そして、グループ内プロセスコピー処理実行前のコピー対象グループに属するプロセス１７０のうち、コピー先プロセス１７０に対してデータストア部コピー指示８１４を送るプロセス１７０をコピー元プロセス１７０と呼び、コピー元プロセス１７０が存在するノード１１０をコピー元ノード１１０と呼ぶ。また、原子的配信部１７１が参照するグループ情報６００において、コピー先ノード１１０を含める前のグループを旧グループ、コピー先ノード１１０を含めた後のグループを新グループと呼ぶ。また、この新グループを表すグループ情報６００を新グループ情報と呼ぶ。【０１２３】
グループ内プロセスコピー準備指示８１１は、リバランス指示部２１２からコピー先ノード１１０に送られる指示８００である。グループ内プロセスコピー準備指示８１１は、コピー対象グループのグループＩＤによって構成される。【０１２４】
グループ内プロセスコピー準備完了応答８６１は、グループ内プロセスコピー準備指示８１１を受け取ったコピー先ノード１１０がリバランス指示部２１２にコピー先プロセス１７０の準備完了を通知するための応答８５０である。グループ内プロセスコピー準備完了応答８６１は特に情報を保持していない。【０１２５】
グループ内プロセスコピー実行指示８１２は、リバランス指示部２１２からコピー元ノード１１０に送られる指示８００である。グループ内プロセスコピー実行指示８１２は、コピー対象グループのグループＩＤと、コピー先ノード１１０のノードＩＤによって構成される。【０１２６】
グループ情報更新指示８１３は、コピー元ノード１１０からコピー先ノード１１０に送られる指示８００である。グループ情報更新指示８１３は、新グループ情報によって構成される。【０１２７】
コピー開始電文９１１は、コピー元プロセス１７０の原子的配信部１７１において、旧グループに属するプロセス１７０に原子的配信される電文９００である。コピー開始電文９１１は、新グループ情報、コピー先ノード１１０のノードＩＤとコピー元ノード１１０のノードＩＤによって構成される。【０１２８】
データストア部コピー指示８１４は、コピー元プロセス１７０からコピー先ノード１１０に送られる指示８００である。データストア部コピー指示８１４は、コピー元プロセス１７０のデータストア部７００に格納された全てのデータをコピーするために必要な情報によって構成される。【０１２９】
グループ内プロセスコピー実行完了応答８６２は、データストア部コピー指示８１４を受け取ったコピー先ノード１１０がリバランス指示部２１２にコピー先プロセス１７０のコピー完了を通知するための応答８５０である。グループ内プロセスコピー実行完了応答８６２は特に情報を保持していない。【０１３０】
移動グループ作成指示８３１及び移動グループ作成完了応答８８１は、移動グループの作成処理で用いる通信メッセージである。【０１３１】
移動グループ作成指示８３１は、構成情報管理部２１１から移動グループを作成するノード１１０に送られる指示８００である。移動グループ作成指示８３１は、処理対象である移動グループのグループＩＤと移動グループを作成するノード１１０のノードＩＤ一覧で構成されたグループ情報６００によって構成される。【０１３２】
移動グループ作成完了応答８８１は、移動グループ作成指示８３１を受け取ったノード１１０が移動グループに属するプロセス１７０の作成完了を通知するための応答８５０である。移動グループ作成完了応答８８１は特に情報を保持していない。【０１３３】
グループ内プロセス削除指示８３２及びグループ内プロセス削除完了応答８８２は、グループ内プロセス削除処理で用いる通信メッセージである。【０１３４】
グループ内プロセス削除指示８３２は、構成情報管理部２１１からグループ内プロセス削除処理を行うノード１１０の全てに送られる指示８００である。グループ内プロセス削除指示８３２は処理対象グループのグループＩＤによって構成される。【０１３５】
グループ内プロセス削除完了応答８８２は、グループ内プロセス削除指示８３２を受け取ったノード１１０が処理対象グループに属するプロセス１７０の削除完了を通知するための応答８５０である。グループ内プロセス削除完了応答８８２は特に情報を保持していない。【０１３６】
移動グループ削除指示８３３及び移動グループ削除完了応答８８３は、移動グループの削除処理で用いる通信メッセージである。【０１３７】
移動グループ削除指示８３３は、構成情報管理部２１１から移動グループを削除するノード１１０の全てに送られる指示８００である。移動グループ削除指示８３３は、処理対象である移動グループのグループＩＤによって構成される。【０１３８】
移動グループ削除完了応答８８３は、移動グループ削除指示８３３を受け取ったノード１１０が移動グループに属するプロセス１７０の削除完了を通知するための応答８５０である。移動グループ削除完了応答８８３は特に情報を保持していない。【０１３９】
図９は、実施例１におけるリバランス指示部２１２の処理を示したフローチャートである。【０１４０】
まず、性能監視部２１３は、各グループに属するプロセス１７０のデータストア部７００が格納するデータ数や各グループに属するプロセス１７０の電文実行部１７３が単位時間当たりに処理する電文数などの性能指標を定期的に収集している。そして、上記収集結果から、グループ間での性能指標の偏りを検出する。性能指標の偏りを検出した場合、その偏りを是正できるレンジを算出する。算出したレンジに基づいて、リバランス指示部２１２に指示するためのリバランス指示１０００を作成し、リバランス指示部２１２に送る。【０１４１】
例えば、図３（ａ）の場合、性能監視部２１３がグループＢに含まれるデータの数に偏りがあることを検知できるため、その偏りを是正できる新しいレンジを算出する。ここで、グループＢに含まれるデータ内の４個（=２個×２多重）がレンジ１００１〜１５００に含まれていることから、レンジ１００１〜１５００をグループＡのレンジαへ移動させれば偏りを是正できるため、グループＩＤ列“グループＡ”と新レンジ列”１〜１５００”のレコードとグループＩＤ列“グループＢ”と新レンジ列“１５０１〜１７００”のレコードを格納したレンジ更新情報を含んだリバランス指示１０００を作成し、リバランス指示部２１２に送る。【０１４２】
リバランス指示部２１２は、性能監視部２１３からリバランス指示１０００を受け付ける（ステップＳ１０１）。【０１４３】
リバランス指示１０００を受け付けたリバランス指示部２１２は、リバランス指示１０００に含まれるレンジ更新情報、システムレンジ情報５００と構成情報４００から、レンジが狭まるリバランス元グループ、レンジが広がるリバランス先グループ、リバランス元グループを含むリバランス元ノード１１０そしてリバランス先グループを含むリバランス先ノード１１０を割り出す（ステップＳ１０２）。【０１４４】
例えば、図３（ａ）の場合、構成情報４００は図４の構成情報４００と同じデータを格納しており、システムレンジ情報５００も図５のシステムレンジ情報５００と同じデータを格納している。そして、レンジ更新情報は、性能監視部２１３の説明で挙げた例より、グループＩＤ列“グループＡ”と新レンジ列“１〜１５００”のレコードとグループＩＤ列“グループＢ”と新レンジ列“１５０１〜１７００”のレコードを格納している。ここで、システムレンジ情報５００と当該レンジ更新情報の両方に存在するグループはグループＡとグループＢである。そして、グループＡは、システムレンジ情報５００のレンジ列５０２とレンジ更新情報の新レンジ列を比較すると、レンジが１〜１０００から１〜１５００に広がっているため、リバランス先グループであることが割り出せる。グループＢも同様に、レンジが１００１〜１７００から１５０１〜１７００に狭まっているため、リバランス元グループであることが割り出せる。そして、構成情報４００より、各グループを保持するノード１１０が割り出せるため、リバランス元ノード１１０がノード１とノード３であり、リバランス先ノード１１０がノード１とノード２であることが割り出せる。【０１４５】
次に、グループの分割操作を行う準備として、リバランス元ノード１１０に空レンジを担当する移動グループを作成する（ステップＳ１０３）。【０１４６】
例えば、図３（ｂ）の場合、リバランス指示部２１２は、リバランス元ノード１１０であるノード１とノード３に、空レンジを担当する移動グループＤを作成するように構成情報管理部２１１へ依頼する。【０１４７】
具体的には、依頼を受けた構成情報管理部２１１は、移動グループを識別できるユニークなグループＩＤを生成し、生成されたグループＩＤと、ノード１のノードＩＤ及びノード３のノードＩＤが含まれたグループ情報６００を格納した移動グループ作成指示８３１をノード１とノード３に送る。移動グループ作成指示８３１を受け取ったノード１１０の指示部１４０は、移動グループ作成指示８３１に含まれるグループＩＤとグループ情報６００を用いて、ノードレンジ情報５０６に移動グループＤに関するレコードを追加し、移動グループＤに属するプロセス１７０を作成する。移動グループＤに属するプロセス１７０が作成できた指示部１４０は、構成情報管理部２１１に移動グループ作成完了応答８８１を送る。ノード１とノード３の両方から移動グループ作成完了応答８８１を受け取った構成情報管理部２１１は、構成情報４００のノード１とノード３に関するレコードのグループ情報列４０３に移動グループＤを追加し、システムレンジ情報５００に移動グループＤに関するレコードを追加し、リバランス指示部２１２に移動グループが作成できたことを通知する。なお、上記以外にも、移動グループに属する１個目のプロセス１７０は移動グループ作成指示８３１を用いて作成し、移動グループに属する２個目以降のプロセス１７０は、後述するグループ内プロセスコピー処理を用いて作成しても良い。【０１４８】
次に、グループの分割操作を行うため、リバランス元グループと移動グループの間でレンジ更新処理を行うためのレンジ更新指示８０１を作成し、リバランス元ノード１１０へ送る（ステップＳ１０４）。【０１４９】
例えば、図３（ｃ）の場合、ステップＳ１０１の説明で挙げた例より、レンジ１００１〜１７００を担当していたグループＢはレンジ１５０１〜１７００を担当するようにリバランス指示１０００が入力されているため、移動グループＤに移動させるレンジはレンジ１００１〜１５００である。そこで、リバランス指示部２１２は、グループＩＤ列“グループＢ”と新レンジ列“１５０１〜１７００”のレコードとグループＩＤ列“グループＤ”と新レンジ列“１００１〜１５００”のレコードを格納したレンジ更新情報を含んだレンジ更新指示８０１を作成し、リバランス元ノード１１０であるノード１とノード３に送る。そして、レンジ更新指示８０１を送ったリバランス元ノード１１０からレンジ更新完了応答８５１を１つ以上受け取った場合、システムレンジ情報５００を更新し、グループの分割操作を終了させる。【０１５０】
ノード１１０におけるレンジ更新処理の詳細については図１０以降を用いて後述する。【０１５１】
次に、グループの併合操作を行う準備として、リバランス先ノード１１０のうち、移動グループに属するプロセス１７０が存在しないノード１１０が存在するかどうかの判定を行う（ステップＳ１０５）。当該ノード１１０が存在する場合、後述するグループ内プロセスコピー処理を実行する。【０１５２】
例えば、図３（ｄ）の場合、構成情報４００より、リバランス先ノード１１０であるノード２には移動グループＤに属するプロセス１７０を存在しないことが割り出せるため、ノード３からノード２へ後述するグループ内プロセスコピー処理を実行する。そして、グループ内プロセスコピー処理が完了した際、構成情報４００のノード２に関するレコードのグループ情報列４０３に移動グループＤを追加する。【０１５３】
さらに、グループの併合操作を行う準備として、リバランス先ノード１１０以外に移動グループに属するプロセス１７０を含むノード１１０を探して、当該ノード１１０に対してグループ内プロセス削除処理を実行する（ステップＳ１０６）。【０１５４】
例えば、図３（ｄ）の場合、構成情報４００より、リバランス先ノード１１０ではないノード３上に移動グループＤに属するプロセス１７０が存在するため、構成情報管理部２１１を用いて、当該プロセス１７０に対するグループ内プロセス削除処理を実行する。【０１５５】
具体的には、依頼を受けた構成情報管理部２１１は、移動グループＤのグループＩＤを格納したグループ内プロセス削除指示８３２をノード３に送る。グループ内プロセス削除指示８３２を受け取ったノード３の指示部１４０は、グループ内プロセス削除指示８３２に含まれるグループＩＤに基づいて、ノードレンジ情報５０６から移動グループＤに関するレコードを削除し、移動グループＤに属するプロセス１７０を削除する。移動グループＤに属するプロセス１７０が削除できた指示部１４０は、構成情報管理部２１１にグループ内プロセス削除完了応答８８２を送る。ノード３からグループ内プロセス削除完了応答８８２を受け取った構成情報管理部２１１は、構成情報４００のノード３に関するレコードのグループ情報列４０３から移動グループＤを削除し、リバランス指示部２１２にグループ内プロセス削除処理が実行できたことを通知する。【０１５６】
そして、グループの併合操作を行うため、移動グループとリバランス先グループの間でレンジ更新処理を行うためのレンジ更新指示８０１を作成し、リバランス先ノード１１０へ送る（ステップＳ１０７）。【０１５７】
例えば、図３（ｄ）の場合、ステップＳ１０１の処理において、レンジ１〜１０００を担当していたグループＡはレンジ１〜１５００を担当するようにリバランス指示１０００が入力されているため、移動させるレンジはレンジ１００１〜１５００である。そこで、リバランス指示部２１２は、グループＩＤ列“グループＡ”と新レンジ列“１〜１５００”のレコードとグループＩＤ列“グループＤ”と新レンジ列空レンジのレコードを格納したレンジ更新情報を含んだレンジ更新指示８０１を作成し、リバランス先ノード１１０であるノード１とノード２に送る。そして、レンジ更新指示８０１を送ったリバランス先ノード１１０からレンジ更新完了応答８５１を１つ以上受け取った場合、システムレンジ情報５００を更新し、グループ併合操作を終了させる。【０１５８】
最後に、不要となった移動グループを削除する（ステップＳ１０８）。【０１５９】
例えば、図３（ｅ）の場合、リバランス先ノード１１０であるノード１及びノード２に移動グループＤに属するプロセス１７０が存在するため、移動グループＤを削除するように構成情報管理部２１１へ依頼する。【０１６０】
具体的には、依頼を受けた構成情報管理部２１１は、移動グループＤのグループＩＤを格納した移動グループ削除指示８３３をノード１とノード２に送る。移動グループ削除指示８３３を受け取ったノード１とノード３の指示部１４０は、移動グループ削除指示８３３に含まれるグループＩＤを基づいて、ノードレンジ情報５０６から移動グループＤに関するレコードを削除し、移動グループＤに属するプロセス１７０を削除する。移動グループＤに属するプロセス１７０が削除できた指示部１４０は、構成情報管理部２１１に移動グループ削除完了応答８８３を送る。ノード１とノード２の両方から移動グループ削除完了応答８８３を受け取った構成情報管理部２１１は、構成情報４００のノード１とノード２に関するレコードのグループ情報列４０３から移動グループＤを削除し、システムレンジ情報５００から移動グループＤに関するレコードを削除し、リバランス指示部２１２に移動グループが削除できたことを通知する。なお、上記以外にも、移動グループＤに属するプロセス１７０が最後の１個になるまでは上述したグループ内プロセス削除処理によって削除し、最後の１個は移動グループ削除指示８３３を用いて削除しても良い。【０１６１】
このように、振り分け部１３０やレンジ更新処理を行うグループに属するプロセス１７０など、レンジ更新処理に関わる各構成要素を同一ノード１１０に局在化させることで、ネットワーク分断が起きたとしても、高々定足数分のノード１１０が同一のネットワークに残存すればレンジの変更が可能であるため、構成要素が分散しているケースに比べて、ネットワークが分断された際にシステムが停止する可能性が減らせる。【０１６２】
例えば図３の規模を拡大して、計算機装置１００及びノード１１０が１２個存在し、データが５多重化されている場合、各グループに属するプロセス１７０の数は５であり、各グループ定足数は３である。そのため、ネットワーク分断の障害が起きたとしても、レンジ更新処理は、ネットワーク分断後の小さなネットワークに、レンジ更新処理を行っている計算機装置１００が３個存在できれば続行できる。リバランス処理も、ネットワーク分断後の小さなネットワークに、リバランス処理を行っている計算機装置１００が４個存在できれば続行できる。【０１６３】
ここで、指示部１４０の動作を説明する。【０１６４】
指示部１４０は、指示受信部１２０からレンジ更新指示８０１を受け取る。【０１６５】
指示部１４０は、レンジ更新指示８０１から、レンジ更新電文９０１を送る移動先プロセス１７０と移動元プロセス１７０を割り出し、レンジ更新電文９０１の作成を行う。【０１６６】
例えば、図３（ｂ）の場合に受け取るレンジ更新指示８０１に含まれるレンジ更新情報には、グループＩＤ列“グループＢ”と新レンジ列“１５０１〜１７００”のレコードとグループＩＤ“グループＤ”と新レンジ列“１００１〜１５０１”のレコードが格納されている。したがって、ノードレンジ情報５０６のレンジ列５０２と比較することで、レンジ更新電文９０１を送る移動元グループがグループＢであり、移動先グループがグループＤであることが割り出せる。そして、本実施例では１つのノード上に同じグループに属するプロセス１７０は２つ以上存在しないため、移動先グループと移動元グループのグループＩＤより、移動先プロセス１７０と移動先プロセス１７０も割り出せる。【０１６７】
指示部１４０は割り出した移動元プロセス１７０及び移動先プロセス１７０の原子的配信部１７１に作成したレンジ更新電文９０１を送る。送られたレンジ更新電文９０１は各プロセス１７０が属する各グループ内で原子的配信される。【０１６８】
さらに指示部１４０は、振り分け部１３０の原子的配信部１３１に対して、作成したレンジ更新電文９０１と移動元プロセス１７０（もしくは移動先プロセス１７０）が保持するグループ情報６００を送る。送られたレンジ更新電文９０１は一緒に送られたグループ情報６００に基づいたノード１１０の原子的配信部１３１へ原子的配信される。なお、レンジ更新処理のために移動元グループと移動先グループは同じノードに局在化させられていることから、移動元プロセス１７０が保持するグループ情報６００と移動先プロセス１７０が保持するグループ情報６００の内容は同一であるため、指示部１４０は振り分け部１３０の原子的配信部１３１にどちらのグループ情報６００を送っても良い。【０１６９】
最後に指示部１４０は、同一ノード１１０上に存在する移動元プロセス１７０の電文実行部１７３が当該レンジ更新電文９０１に基づいてプロセスレンジ情報５０５を更新し、かつ同一ノード１１０上に存在する移動先プロセス１７０の電文実行部１７３が当該レンジ更新電文９０１に基づいてプロセスレンジ情報５０５を更新し、かつ同一ノード１１０上に存在するノードレンジ情報更新部１３３が当該レンジ更新電文９０１に基づいてノードレンジ情報５０６を更新したことを検知できた時、リバランス指示部２１２にレンジ更新完了応答８５１を送る。【０１７０】
続いて、振り分け部１３０の動作を説明する。【０１７１】
振り分け部１３０は指示受信部１２０からデータ更新指示８０２を受けとる。【０１７２】
データ更新指示８０２を受け取った振り分け部１３０は、データ更新電文９０２を作成し、ノードレンジ情報５０６に基づいて、データ更新電文９０２を送るグループを特定し、特定したグループに属するプロセス１７０の原子的配信部１７１にデータ更新電文９０２を送る。【０１７３】
例えば、図３（ａ）の場合、ノード１のノードレンジ情報５０６は、ノード１上にグループＡとグループＢが存在するため、図５のシステムレンジ情報５００のうち、グループＡとグループＢに関するレコードを格納している。そして、ノード１が受け取ったデータ更新指示８０２に含まれるデータのキーのハッシュ値が１３００だった時、ノードレンジ情報５０６より、当該データ更新指示８０２を実行できるグループがグループＢであると分かるため、データ更新指示８０２からデータ更新電文９０２を作成し、同一ノード１１０上に存在するグループＢに属するプロセス１７０の原子的配信部１７１に作成したデータ更新電文９０２を送る。【０１７４】
最後に振り分け部１３０は、当該データ更新電文９０２を送ったプロセス１７０の電文実行部１７３が当該データ更新電文９０２に基づいてデータストア部７００を更新したことを検知できた時、データ更新指示８０２を送ってきたクライアント情報管理部３１２にデータ更新完了応答８５２を送る。【０１７５】
図１０は、実施例１における原子的配信部１７１が実行する処理を説明するフローチャートである。【０１７６】
まず、原子的配信部１７１は振り分け部１３０、指示部１４０もしくはコピー部１６０から電文９００を受け取る（ステップＳ２０１）。【０１７７】
次に受け取った電文９００を、グループ情報６００に基づいて、同一グループに属するプロセス１７０内で原子的配信する（ステップＳ２０２）。【０１７８】
例えば、図３（ａ）の場合、ノード１上に存在するグループＡに属するプロセス１７０の原子的配信部１７１と、ノード２上に存在するグループＡに属するプロセス１７０の原子的配信部１７１は同じグループＡに含まれており、どちらかの原子的配信部１７１が受け取った電文９００はそれぞれの原子的配信部１７１に原子的配信され、それぞれの原子的配信部１７１に同一の電文９００が同一の順序で配信される。【０１７９】
なお、Ｓ２０３以降の処理は、Ｓ２０１の処理を実行した原子的配信部１７１以外にも、他の原子的配信部１７１から原子的配信された電文９００を受け取った原子的配信部１７１も実行する。【０１８０】
まず、原子的配信された電文９００がコピー開始電文９１１であるかどうかの判定を行う（ステップＳ２０３）。ここで、当該電文９００がコピー開始電文９１１であった場合に実行される処理であるステップＳ２１１、ステップＳ２１２及びステップＳ２１３ブロックの説明については、グループ内プロセスコピー処理で用いられるため、後述する。【０１８１】
電文９００がコピー開始電文９１１ではなかった場合、当該電文９００を電文貯蓄部１７２に蓄える（ステップＳ２０４）。【０１８２】
なお、原子的配信部１３１の動作も、振り分け部１３０から電文９００と一緒に送られたグループ情報６００を用いることと原子的配信された電文９００を電文貯蓄部１３２に蓄えること以外は、原子的配信部１７１と同様である。【０１８３】
図１１は、実施例１における電文実行部１７３が実行する処理を説明するフローチャートである。本フローチャートは、原子的配信部１７１などが電文貯蓄部１７２に電文９００を蓄えるたびに実行される。【０１８４】
まず、電文実行部１７３は電文貯蓄部１７２に蓄えられている電文９００を取り出す（ステップＳ３０１）。【０１８５】
そして、取り出した電文９００が、レンジ更新電文９０１であるかどうかの判定を行う（ステップＳ３０２）。【０１８６】
取り出した電文９００がレンジ更新電文９０１ではなかった場合、取り出した電文９００がコピー開始電文９１１であるかどうかの判定を行う（ステップＳ３０３）。【０１８７】
さらに、取り出した電文９００がコピー開始電文９１１でもなかった場合、取り出した電文９００はデータ更新電文９０２であるため、プロセスレンジ情報５０５に基づいて、データ更新電文９０２に含まれる処理対象のデータが当該グループの担当するレンジの範囲内であるかの判定を行う（ステップＳ３０４）。【０１８８】
当該グループの担当するレンジの範囲内だった場合、データ更新電文９０２に含まれる更新処理を実行し（ステップＳ３０５）、それ以外は何もしない。【０１８９】
例えば、図３（ａ）において、グループＢに属するプロセス１７０の電文実行部１７３が取り出したデータ更新電文９０２に含まれるデータのキーのハッシュ値が１３００だった場合、当該プロセス１７０のプロセスレンジ情報５０５に格納されたグループＢのレンジは１００１〜１７００であるため、当該電文実行部１７３は当該データ更新電文９０２に含まれる更新処理を実行する。【０１９０】
次に、ステップＳ３０３の処理において、取り出した電文９００がコピー開始電文９１１であった場合に行うステップＳ３２１のブロックの説明は、グループ内プロセスコピー処理で用いられるため、後述する。【０１９１】
最後に、ステップＳ３０２の処理において、取り出した電文９００がレンジ更新電文９０１であった場合、当該プロセス１７０のプロセスレンジ情報５０５とレンジ更新電文９０１に含まれるレンジ更新情報を比較し、レンジ更新処理前後でのレンジの変化量から、グループ間で移動させるレンジと移動先プロセス１７０及び移動元プロセス１７０を割り出す（ステップＳ３１１）。【０１９２】
例えば、図３（ｂ）でグループの分割操作を行う場合、レンジ更新電文９０１に含まれるレンジ更新情報には、グループＩＤ列“グループＢ”と新レンジ列“１５０１〜１７００”のレコードとグループＩＤ列“グループＤ”と新レンジ列“１００１〜１５０１”のレコードが格納されている。また、グループＢに属するプロセス１７０のプロセスレンジ情報５０５は、図５のシステムレンジ情報５００のうち、グループＢに関するレコードを格納している。さらに、グループＤに属するプロセス１７０のプロセスレンジ情報５０５は、グループＩＤ列５０１“グループＤ”とレンジ列５０２空レンジであるレコードを格納している。そして、グループＢに属するプロセス１７０の電文実行部１７３は、当該プロセスレンジ情報５０５と当該レンジ更新情報より、グループＢのレンジβが１００１〜１７００から１５０１〜１７００に狭まっていることから、移動元グループがグループＢであり、移動先グループがグループＤであり、そして移動させるレンジが１００１〜１５００であることを割り出せる。また、グループＤに属するプロセス１７０の電文実行部１７３は、当該プロセスレンジ情報５０５と当該レンジ更新情報より、レンジが−から１００１〜１５００に広がっていることから、移動先グループがグループＤであり、移動元グループがグループＢであり、そして移動させるレンジが１００１〜１５００であることを割り出せる。そして、移動元グループと移動先グループが割り出せれば、本実施例では１つのノード上に同じグループに属するプロセス１７０は２つ以上存在しないため、移動元プロセス１７０及び移動先プロセス１７０も割り出せる。【０１９３】
次に、当該プロセス１７０が移動元プロセス１７０であるかどうかの判定を行う（ステップＳ３１２）。【０１９４】
当該プロセス１７０が移動元プロセス１７０であった場合、同一ノード１１０上に存在する移動先プロセス１７０のデータストア部７００に対して、当該プロセス１７０のデータストア部７００より、移動させるレンジに含まれたデータを移動する（ステップＳ３１３）。【０１９５】
例えば、図３（ｂ）におけるノード１の場合、グループＢに属する移動元プロセス１７０の電文実行部１７３は、移動させるレンジ１００１〜１５００に２つのデータが含まれているため、ノード１上に存在するグループＤに属する移動先プロセス１７０のデータストア部７００に対して、当該データを移動する。なお、ノード３上に存在する移動先プロセス１７０と移動元プロセス１７０の間においても、ノード１と同様の処理が、ノード１とは独立して行われている。【０１９６】
そして、電文実行部１７３は、バリア管理部１５０に通知する（ステップＳ３１４）。バリア管理部１５０の動作は図１２で説明する。【０１９７】
最後に、レンジ更新電文９０１に含まれるレンジ更新情報に基づいて、当該プロセス１７０のプロセスレンジ情報５０５に含まれる当該グループに関するレコードのレンジ列５０２を新しいレンジに更新する（ステップＳ３１５）。【０１９８】
以上より、振り分け部１３０は、当該振り分け部１３０のノードレンジ情報５０６に基づいてデータ更新電文９０２をグループに振り分け、振り分けられたグループに属するプロセス１７０は、当該プロセス１７０のプロセスレンジ情報５０５に基づいてデータ更新電文９０２を実行する。したがって、振り分け部１３０におけるレンジ更新電文９０１の原子的配信が間に合わず、古いレンジに基づいてデータ更新電文９０２を誤ったグループに属するプロセス１７０へ振り分けられたとしても、データ更新電文９０２を実行するプロセス１７０が新しいプロセスレンジ情報５０５に基づいて更新処理の実行可否を判断するため、データの一貫性が保証できる。さらに、原子的配信部１７１及び原子的配信部１３１は定足数からの応答に基づいて電文９００の配信順序を決定することもできるため、一部のサーバに通知できないことによってシステムが停止することも無くなる。【０１９９】
図１２は、実施例１におけるバリア管理部１５０が実行する処理を説明するフローチャートである。【０２００】
まず、リバランス指示部２１２は、ステップＳ１０４及びステップＳ１０７の処理においてレンジ更新指示８０１を作成する際、システムでユニークなバリアＩＤを作成する。そして、レンジ更新指示８０１及びレンジ更新電文９０１に当該バリアＩＤを含めておく。【０２０１】
さらに、バリア管理部１５０が保持する通知済みプロセス情報１５１は、バリアＩＤとグループＩＤをペアにしたレコードを複数保持するテーブルである。なお、バリアＩＤとグループＩＤをペアにしたレコードを通知済みプロセスレコードと呼ぶ。【０２０２】
バリア管理部１５０は、当該ノード１１０に含まれる移動先プロセス１７０もしくは移動元プロセス１７０の電文実行部１７３から通知される（ステップＳ４０１）。その際、通知してきた電文実行部１７３より、上述したバリアＩＤと、当該グループ、移動元グループ及び移動先グループのグループＩＤを受け取る。【０２０３】
通知されたバリア管理部１５０は、通知してきた電文実行部１７３が初回通知であるかどうかを判定する（ステップＳ４０２）。初回通知である場合は、ステップＳ４０３の処理を実行する。２回目以降の通知である場合は、何もせずに本処理を終了する。【０２０４】
具体的には、バリア管理部１５０は、通知してきた電文実行部１７３から受け取ったバリアＩＤと当該グループのグループＩＤから通知済みプロセスレコードを作成し、通知済みプロセス情報１５１に当該レコードと同一であるレコードが存在するかどうかを判定する。同一であるレコードが存在しない場合は初回通知であると判定する。そして、初回通知であると判定された際、当該レコードを通知済みプロセス情報１５１に追加する。【０２０５】
初回通知であった場合のバリア管理部１５０は、今回の通知により、移動先プロセス１７０と移動元プロセス１７０の両方がバリア管理部１５０に通知済み状態であるかどうかを判定する（ステップＳ４０３）。【０２０６】
具体的には、バリア管理部１５０は、通知してきた電文実行部１７３から受け取ったバリアＩＤ、移動元グループのグループＩＤと移動先グループのグループＩＤを用いて、バリアＩＤと移動元グループのグループＩＤより移動元プロセス１７０の通知済みプロセスレコードを、バリアＩＤと移動先グループのグループＩＤより移動先プロセス１７０の通知済みプロセスレコードを作成する。そして、移動先プロセス１７０の通知済みプロセスレコードと同一であるレコードと移動元プロセス１７０の通知済みプロセスレコードと同一であるレコードが通知済みプロセス情報１５１に両方存在するどうかを判定する。両方存在していた場合は移動先プロセス１７０と移動元プロセス１７０の両方が通知済み状態であると判定する。【０２０７】
今回の通知で移動先プロセス１７０と移動元プロセス１７０の両方が通知済み状態ではなかった場合、今回通知してきた電文実行部１７３を待機させる（ステップＳ４０４）。【０２０８】
今回の通知で移動先プロセス１７０と移動元プロセス１７０の両方が通知済み状態であった場合、ステップＳ４０４の処理で待機させている電文実行部１７３を再開させる（ステップＳ４０５）。【０２０９】
例えば、図３（ｂ）のノード１において、グループＤに属する移動先プロセス１７０の電文実行部１７３が先にバリア管理部１５０に通知してきた場合、通知済みプロセス情報１５１にはグループＢに属する移動元プロセス１７０の通知済みプロセスレコードが存在しないため、ステップＳ４０４の処理において当該移動先プロセス１７０の電文実行部１７３は待機させられる。その後、当該移動元プロセス１７０の電文実行部１７３も当該バリア管理部１５０に通知を行った場合、当該移動先プロセス１７０と当該移動元プロセス１７０の通知済みプロセスレコードが通知済みプロセス情報１５１に存在するため、待機させていた当該移動先プロセス１７０の電文実行部１７３を再開させる。なお、ノード３上に存在するバリア管理部１５０でも、ノード１と同様の処理が、ノード１とは独立して行われている。【０２１０】
以上より、移動先プロセス１７０の電文実行部１７３と移動元プロセス１７０の電文実行部１７３がバリア管理部１５０で合流するまで待ち合わせるため、移動先プロセス１７０の電文実行部１７３は、移動元プロセス１７０の電文実行部１７３がステップＳ３１３を実行した（移動させるレンジに含まれたデータを移動した）後に、電文貯蓄部１７２に蓄えられたデータ更新電文９０２を実行することができる。【０２１１】
以上により、データの一貫性と無停止性を確保したレンジ更新処理が行われる。【０２１２】
次に、グループ内プロセスコピー処理の実施例を示す。【０２１３】
グループ内プロセスコピー処理の手順は、
１．コピー先ノード１１０はデータストア部７００が空であるコピー先プロセス１７０を作成し、
２．旧グループに属しているプロセス１７０のグループ情報６００にコピー先ノード１１０のノードＩＤを加え、
３．コピー先プロセス１７０のグループ情報６００を新グループ情報に更新し、
４．コピー元プロセス１７０は、グループ情報６００にコピー先ノード１１０のノードＩＤが加わる直前までに電文貯蓄部１７２に蓄えられていたデータ更新電文９０２を全て実行し、
５．コピー元プロセス１７０は、データストア部７００に格納された全データをコピー先プロセス１７０に送り、
６．コピー先プロセス１７０は、受け取ったデータによりデータストア部７００に全データをコピーし、
７．コピー先プロセス１７０は、電文貯蓄部１７２に蓄えられている電文９００の取り出しを開始することによって実現する。【０２１４】
具体的な各構成部の処理について説明を行う。【０２１５】
図９のステップＳ１１１、ステップＳ１１２、ステップＳ１１３及びステップＳ１１４は、実施例１におけるリバランス指示部２１２がグループ内プロセスコピー処理を実行する際の動作を説明するフローチャートのブロックである。【０２１６】
リバランス指示部２１２はグループ内プロセスコピー準備指示８１１をコピー先ノード１１０へ送る（ステップＳ１１１）。【０２１７】
次に、リバランス指示部２１２はコピー先ノード１１０からグループ内プロセスコピー準備完了応答８６１を受け取る（ステップＳ１１２）。【０２１８】
コピー先ノード１１０からグループ内プロセスコピー準備完了応答８６１を受け取ったリバランス指示部２１２は、グループ内プロセスコピー実行指示８１２をコピー元ノード１１０に送る（ステップＳ１１３）。【０２１９】
最後に、リバランス指示部２１２はコピー先ノード１１０からグループ内プロセスコピー実行完了応答８６２を受け取る（ステップＳ１１４）。【０２２０】
図１３は、実施例１におけるコピー先ノード１１０におけるコピー部１６０が実行する処理を説明するフローチャートである。【０２２１】
まず、指示受信部１２０を介して、リバランス指示部２１２から送られたグループ内プロセスコピー準備指示８１１が受け取る（ステップＳ５０１）。【０２２２】
グループ内プロセスコピー準備指示８１１を受け取ったコピー部１６０は、グループ内プロセスコピー準備指示８１１からコピー対象グループのグループＩＤに基づいて、コピー先プロセス１７０を作成する（ステップＳ５０２）。ただし、この時点で作成されたコピー先プロセス１７０のデータストア部７００は１つのデータも含まない。また、コピー先プロセス１７０の原子的配信部１７１はこの時点ではコピー対象グループに属しておらず、電文実行部１７３は停止しているものとする。【０２２３】
例えば、図３（ｄ）の場合、コピー先ノード１１０であるノード２のコピー部１６０にグループ内プロセスコピー準備指示８１１が送られ、グループ内プロセスコピー準備指示８１１に含まれるコピー対象グループのグループＩＤはグループＤであることから、ノード２のコピー部１６０はグループＤに属するコピー先プロセス１７０を作成する。【０２２４】
コピー先プロセス１７０を作成したコピー部１６０はリバランス指示部２１２にグループ内プロセスコピー準備完了応答８６１を送る（ステップＳ５０３）。【０２２５】
次に、コピー元ノード１１０よりグループ情報更新指示８１３を受け取る（ステップＳ５０４）。【０２２６】
コピー元ノード１１０からグループ情報更新指示８１３を受け取ったコピー部１６０は、グループ情報更新指示８１３に含まれる新グループ情報に基づいて、コピー先プロセス１７０のグループ情報６００を更新する（ステップＳ５０５）。【０２２７】
さらに、コピー元ノード１１０からデータストア部コピー指示８１４を受け取る（ステップＳ５０６）。【０２２８】
コピー元ノード１１０からデータストア部コピー指示８１４を受け取ったコピー部１６０は、データストア部コピー指示８１４に含まれる情報に基づいて、コピー先プロセス１７０のデータストア部７００にデータを書き込み、コピー先プロセス１７０の電文実行部１７３を動作させる（ステップＳ５０７）。【０２２９】
最後に、リバランス指示部２１２に対して、グループ内プロセスコピー処理が終わったことを示すグループ内プロセスコピー実行完了応答８６２を送る（ステップＳ５０８）。【０２３０】
図１４は、実施例１におけるコピー元ノード１１０におけるコピー部１６０の動作について説明するフローチャートである。【０２３１】
まず、リバランス指示部２１２から送られたグループ内プロセスコピー実行指示８１２が受け取る（ステップＳ６０１）。【０２３２】
次に、グループ内プロセスコピー実行指示８１２に含まれたコピー対象グループのグループＩＤよりコピー元プロセス１７０を割り出し、割り出したコピー元プロセス１７０のグループ情報６００にグループ内プロセスコピー実行指示８１２に含まれたコピー先ノード１１０のノードＩＤを加えた新グループ情報を作成する。そして、作成した新グループ情報を含んだグループ情報更新指示８１３を作成し、コピー先ノード１１０に送る（ステップＳ６０２）。【０２３３】
さらに、ステップＳ６０２で作成した新グループ情報、グループ内プロセスコピー実行指示８１２に含まれたコピー先ノード１１０のノードＩＤ及び当該ノード１１０のノードＩＤからコピー開始電文９１１を作成し、コピー元プロセス１７０の原子的配信部１７１に送る（ステップＳ６０３）。【０２３４】
例えば、図３（ｄ）の場合、コピー元ノード１１０であるノード３のコピー部１６０は、グループ内プロセスコピー実行指示８１２を受け取る。そして、グループ内プロセスコピー実行指示８１２には、コピー先ノード１１０がノード２であることと、コピー対象グループがグループＤであることが含まれている。グループＤに属するコピー元プロセス１７０のグループ情報６００はノード１とノード３であるため、新グループ情報は、ノード１、ノード２とノード３の計三つのノードＩＤを格納することになる。そして、新グループ情報を含んだグループ情報更新指示８１３をコピー先ノード１１０であるノード２に送る。そして、コピー先ノード１１０のノードＩＤとしてノード２、コピー元ノード１１０のノードＩＤとしてノード３、上記新グループ情報を含んだコピー開始電文９１１を作成し、グループＤに属するコピー元プロセス１７０の原子的配信部１７１に送る。【０２３５】
図１０のステップＳ２１１、ステップＳ２１２及びステップＳ２１３のブロックは、実施例１における原子的配信部１７１がグループ内プロセスコピー処理を実行する際の動作を説明するフローチャートのブロックである。【０２３６】
コピー開始電文９１１を受け取った原子的配信部１７１は、コピー開始電文９１１に含まれる新グループ情報に基づいて、グループ情報６００を更新する（ステップＳ２１１）。【０２３７】
次に、コピー開始電文９１１に含まれるコピー元ノード１１０のノードＩＤに基づいて、当該ノード１１０がコピー元ノード１１０であるかどうかを判定する（ステップＳ２１２）。【０２３８】
当該ノード１１０がコピー元ノード１１０であった場合、当該コピー開始電文９１１を電文貯蓄部１７２に蓄える（ステップＳ２１３）。当該ノード１１０がコピー元ノード１１０以外であった場合、何も行わない。【０２３９】
図１１のステップＳ３２１は、実施例１における電文実行部１７３がプロセス１７０のグループ内プロセスコピー処理を実行する際の動作を説明するフローチャートのブロックである。【０２４０】
ステップＳ３０３の処理において、電文貯蓄部１７２から取り出した電文９００がコピー開始電文９１１であった場合、当該プロセス１７０のデータストア部７００の全データを参照してデータストア部コピー指示８１４を作成し、コピー開始電文９１１に含まれたコピー先ノード１１０のノードＩＤに基づいて、作成したデータストア部コピー指示８１４をコピー先ノード１１０に送る（ステップＳ３２１）。【０２４１】
以上により、データの一貫性と無停止性を確保したプロセス１７０のグループ内プロセスコピー処理が行われる。【０２４２】
なお、本実施例の説明では、一つのグループに属しているプロセス１７０は一つのノード１１０上に高々一つだけ存在することを前提に説明しているため、プロセス１７０を識別するための識別子（プロセスＩＤ）などのプロセス１７０に関する情報は省略している。一つのグループに属しているプロセス１７０が一つのノード１１０上に二つ以上存在する場合、構成情報４００や通信メッセージなどにプロセスＩＤやプロセス個数などを含み、各ノード１１０は当該ノード１１０上に存在するプロセス１７０がどのグループに属しているのかを示す情報（ノード構成情報）を保持することになる。
【実施例２】
【０２４３】
実施例１ではレンジ更新処理を行う際に、移動先プロセス１７０の電文実行部１７３がレンジ更新電文９０１を実行してから、移動元プロセス１７０の電文実行部１７３がレンジ更新電文９０１を実行するまでの間、ステップＳ４０４の処理により、移動先プロセス１７０の電文実行部１７３は待機させられる。【０２４４】
そこで、移動先プロセス１７０の電文実行部１７３は移動元プロセス１７０の電文実行部１７３がレンジ更新電文９０１を実行するまで待たずに、レンジ更新処理前のレンジで担当していたデータ更新電文９０２を処理できるようにする。ただし、レンジ更新処理後のレンジで新たに担当すべきデータ更新電文９０２を取り出した場合は当該データ更新電文９０２を一時的に退避させる。【０２４５】
その後、レンジ更新電文９０１を実行した移動元プロセス１７０の電文実行部１７３は、同一ノード１１０上に存在する移動先プロセス１７０の電文実行部１７３へ割り込む。それ以降は、実施例１と同様、レンジ更新処理後のレンジでデータ更新電文９０２を処理する。【０２４６】
そして、割り込まれた移動先プロセス１７０の電文実行部１７３は、一時的に退避させていたデータ更新電文９０２を全て取り出して実行する。それ以降は、実施例１と同様、レンジ更新処理後のレンジでデータ更新電文９０２を処理する。【０２４７】
なお、本実施例２では、割り込みの一例として、移動元プロセス１７０の電文実行部１７３が電文退避開放電文９２１を移動先プロセス１７０の電文貯蓄部１７２に投入しているが、計算機装置１００が提供する割り込み機構を利用してもよい。【０２４８】
以下、実施例１との差異を中心に実施例２について説明する。【０２４９】
図２の電文退避部１８０と退避プロセスレンジ情報１８１は実施例２における計算機装置１００の詳細を示すブロック図である。【０２５０】
実施例２のシステム構成において、プロセス１７０は、一時的にデータ更新電文９０２を蓄積するための電文退避部１８０と、電文退避部１８０に退避させるデータ更新電文９０２を割り出すための退避プロセスレンジ情報１８１を有する。なお、電文退避部１８０は、電文貯蓄部１７２と同様、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）方式で貯蓄するキューである。また、退避プロセスレンジ情報１８１の初期値は空レンジである。【０２５１】
実施例２におけるバリア管理部１５０が実行する処理を説明するフローチャートを図１２からの差異により述べる。【０２５２】
まず、ステップＳ４０３の処理において移動先プロセス１７０と移動元プロセス１７０の両方が通知済み状態ではなかった場合、ステップＳ４０４の処理を実行せず、代わりにバリア管理部１５０に通知してきたプロセス１７０が移動先プロセス１７０であるかどうかの判定を行う。【０２５３】
上記判定において、バリア管理部１５０に通知してきたプロセス１７０が移動先プロセス１７０であった場合、移動先プロセス１７０の退避プロセスレンジ情報１８１に移動先プロセス１７０のレンジ更新処理前後の差分となるレンジをセットする。反対にバリア管理部１５０に通知してきたプロセス１７０が移動元プロセス１７０であった場合、何もしない。【０２５４】
最後に、ステップＳ４０３の処理において移動先プロセス１７０と移動元プロセス１７０の両方が通知済み状態であった場合、ステップＳ４０５の処理を実行せず、代わりにバリア管理部１５０に通知してきたプロセス１７０が移動元プロセス１７０であるかどうかの判定を行う。【０２５５】
上記判定において、バリア管理部１５０に通知してきたプロセス１７０が移動元プロセス１７０であった場合、電文退避開放電文９２１を移動先プロセス１７０の電文貯蓄部１７２に蓄える。なお、電文退避開放電文９２１は、割り込みシグナルであるため、特にデータを保持しない電文９００である。反対にバリア管理部１５０に通知してきたプロセス１７０が移動先プロセス１７０であった場合、何もしない。【０２５６】
実施例２における電文実行部１７３が実行する処理を説明するフローチャートを図１１からの差異により説明する。【０２５７】
まず、ステップＳ３０２の処理の直前に、電文貯蓄部１７２から取り出した電文９００が電文退避開放電文９２１であるかどうかを判定する。取り出した電文９００が電文退避開放電文９２１であった場合、退避プロセスレンジ情報１８１に空レンジをセットし、電文退避部１８０内に蓄えられたデータ更新電文９０２を全て取り出して実行し、本処理を終了する。逆に取り出した電文９００が電文退避開放電文９２１ではなかった場合、ステップＳ３０２の処理を実行する。【０２５８】
最後に、ステップＳ３０５の処理を行う直前に、データ更新電文９０２に含まれる処理対象のデータが当該プロセス１７０の退避プロセスレンジ情報１８１に含まれるレンジの範囲内であるかどうかを判定する。当該レンジの範囲外であった場合、実施例１と同様、ステップＳ３０５の処理を行う。逆に当該レンジの範囲内であった場合、電文退避部１８０に当該データ更新電文９０２を蓄え、ステップＳ３０５の処理を実行せずに本処理を終了する。【０２５９】
以上により、移動先プロセス１７０の電文実行部１７３は移動元プロセス１７０の電文実行部１７３がレンジ更新電文９０１を実行するのを待たずに、古いレンジで担当していたデータ更新電文９０２を実行することができる。【０２６０】
なお、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体（例えば、非一時的な記憶媒体）に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。【０２６１】
以上、添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【図１】
0006007340.tif 000002
【図２】
0006007340.tif 000003
【図３（ａ）】
0006007340.tif 000004
【図３（ｂ）】
0006007340.tif 000005
【図３（ｃ）】
0006007340.tif 000006
【図３（ｄ）】
0006007340.tif 000007
【図３（ｅ）】
0006007340.tif 000008
【図３（ｆ）】
0006007340.tif 000009
【図４】
0006007340.tif 000010
【図５】
0006007340.tif 000011
【図６】
0006007340.tif 000012
【図７】
0006007340.tif 000013
【図８】
0006007340.tif 000014
【図９】
0006007340.tif 000015
【図１０】
0006007340.tif 000016
【図１１】
0006007340.tif 000017
【図１２】
0006007340.tif 000018
【図１３】
0006007340.tif 000019
【図１４】
0006007340.tif 000020