(57)【要約】【課題】移動するデータが少ない処理を移動することを目的とする。【解決手段】複数の装置を用いて分散処理を行う分散処理システムを制御する制御プログラムであって、前記複数の装置のそれぞれから負荷情報を取得する取得処理と、取得した負荷情報に基づいて、割り当てられた処理の移動元の装置と、割り当てられた処理の移動先の装置とを特定する特定処理と、前記移動元の装置に割り当てられた複数の処理のうち、処理に用いられるデータが前記移動先の装置によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する選択処理と、をコンピュータに実行させる。【選択図】図９
2015194899.tif 000002
【特許請求の範囲】
【請求項１】
複数の装置を用いて分散処理を行う分散処理システムを制御する制御プログラムであって、
前記複数の装置のそれぞれから負荷情報を取得する取得処理と、
取得した負荷情報に基づいて、割り当てられた処理の移動元の装置と、割り当てられた処理の移動先の装置とを特定する特定処理と、
前記移動元の装置に割り当てられた複数の処理のうち、処理に用いられるデータが前記移動先の装置によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する選択処理と、
をコンピュータに実行させる制御プログラム。
【請求項２】
前記特定処理において、前記移動先の装置として複数の装置が特定された場合に、前記移動元の装置が保持するデータと重複するデータを保持する割合が最も高い装置を移動先の装置として特定された前記複数の装置から選択する、請求項１記載の制御プログラム。
【請求項３】
前記特定処理は、取得した負荷が相対的に大きい装置を移動元装置、取得した負荷が相対的に小さい装置を移動先装置として特定するか、又は、取得した負荷が第１の基準を超える装置を前記移動元装置、取得した負荷が前記第１の基準若しくは該第１の基準を下回る第２の基準以下の装置を前記移動先装置として特定する、請求項１または２記載の制御プログラム。
【請求項４】
前記特定処理は、前記分散処理システムから削除する装置が処理を有している場合に、該処理に用いられるデータを保持している率が相対的に高い又は所定の率より高い装置を移動先装置として特定する、
請求項１乃至３のうち何れか１項に記載の制御プログラム。
【請求項５】
前記選択処理は、前記分散処理システムに前記装置を追加したときに、前記負荷情報が前記第１の基準を超える装置がある場合に、該装置に割り当てられた複数の処理のうち、処理に用いられるデータが前記移動先装置によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する、
請求項１乃至３のうち何れか１項に記載の制御プログラム。
【請求項６】
複数の装置を用いて分散処理を行う分散処理システムを制御する制御プログラムであって、
前記複数の装置のうち装置間で保持するデータの重複率に基づいて、移動元の装置と移動先の装置とを特定する特定処理と、
前記移動元の装置に割り当てられた処理のうち、処理に用いられるデータが前記移動先によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する選択処理と、
をコンピュータに実行させる制御プログラム。
【請求項７】
複数の装置を用いて分散処理を行う分散処理システムを制御する制御方法であって、
前記複数の装置のそれぞれから負荷情報を取得する取得処理と、
取得した負荷情報に基づいて、割り当てられた処理の移動元の装置と、割り当てられた処理の移動先の装置とを特定する特定処理と、
前記移動元の装置に割り当てられた複数の処理のうち、処理に用いられるデータが前記移動先の装置によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する選択処理と、
を有する制御方法。
【請求項８】
複数の装置を用いて分散処理を行う分散処理システムを制御する制御装置であって、
前記複数の装置のそれぞれから負荷情報を取得する取得部と、
取得した負荷情報に基づいて、割り当てられた処理の移動元の装置と、割り当てられた処理の移動先の装置とを特定し、前記移動元の装置に割り当てられた複数の処理のうち、処理に用いられるデータが前記移動先の装置によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する管理部と、
を備える制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラム、制御方法および制御装置に関する。
【背景技術】
【０００２】
複数の装置が大量のデータを分散して処理を行う技術がある。大量のデータは、複数のデータの塊となって各装置に配布される。各装置は、配布されたデータの塊を記憶し、記憶したデータを処理する。
【０００３】
処理と該処理の対象となるデータとは同じ装置に記憶されることが好ましい。データと処理とが異なる装置に存在すると、処理がデータに対してアクセスするときに、ネットワークを介したリモートアクセスを行うことになる。
【０００４】
処理がデータに対してリモートアクセスを行うと、ネットワークを介したアクセスになるため、処理速度が低下する。処理とデータとが同じ装置に記憶されると、ローカルアクセスの環境を維持することができ、処理速度が低速になることを抑制できる。
【０００５】
各装置で処理が実行されていくと、１つの装置に同じデータが重複して記憶されることがある。この場合、装置が記憶するデータ量が多くなり、装置の資源（例えば、メモリやハードディスク等）の使用量が増大する。
【０００６】
関連する技術として、コンテンツ取得による負荷の総和を低減するサーバおよびサーバの接続先を切り替える技術が提案されている。また、サーバの負荷状態を検知し、中途状態の処理のサーバ間での引継ぎを行う技術が提案されている。また、ＸＭＬデータをフィルタリングする条件を新規追加するＸｐａｔｈ式の重複量を算出し登録されているＸｐａｔｈ式の配信量の合計と重複量とに基づいて、追加されたＸｐａｔｈ式を処理させる配信サーバを選択する技術が提案されている（例えば、特許文献１〜３参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−２３７６３７号公報
【特許文献２】特開２００２−２８８１４８号公報
【特許文献３】特開２００５−２５０７８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
各装置で負荷や使用量の分散を図るときに、装置から装置にデータの移動が行われる。このとき、ローカルアクセスの観点から、データを移動するときには、処理およびデータはセットで情報処理装置間を移動されることが好ましい。この場合、単に処理およびデータをセットで移動すると、データの移動量が多くなる場合がある。データの移動量が多くなると、ＣＰＵやネットワークの負担が高くなる。
【０００９】
本発明は、１つの側面では、移動するデータが少ない処理を移動することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、複数の装置を用いて分散処理を行う分散処理システムを制御する制御プログラムであって、前記複数の装置のそれぞれから負荷情報を取得する取得処理と、取得した負荷情報に基づいて、割り当てられた処理の移動元の装置と、割り当てられた処理の移動先の装置とを特定する特定処理と、前記移動元の装置に割り当てられた複数の処理のうち、処理に用いられるデータが前記移動先の装置によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する選択処理と、をコンピュータに実行させる。
【発明の効果】
【００１１】
１つの側面として、移動するデータが少ない処理を移動することができる。
【図面の簡単な説明】
【００１２】
【図１】システムの全体構成の一例を示すブロック図である。
【図２】データ中継部の一例を示す図である。
【図３】ノードデータ管理部の一例を示す図である。
【図４】全体データ管理部の一例を示す図である。
【図５】処理およびデータの移動の一例を説明する図である。
【図６】データ追加処理の一例を示すフローチャートである。
【図７】データ削除処理の一例を示すフローチャートである。
【図８】データ修正処理の一例を示すフローチャートである。
【図９】移動処理の一例を示すフローチャート（その１）である。
【図１０】移動処理の一例を示すフローチャート（その２）である。
【図１１】ノード削除時の処理の一例を示すフローチャートである。
【図１２】ノード追加時の処理の一例を示すフローチャートである。
【図１３】管理ノードのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１３】
＜システムの全体構成の一例＞
以下、図面を参照して、実施形態について説明する。図１は、分散処理を実現するシステム１の一例を示している。分散処理は、並列分散処理であってもよい。図１に一例として示すシステム１は、複数の処理ノード２Ａ〜２Ｎ（以下、総称して処理ノード２と称することもある）とネットワークスイッチ３と管理ノード４とを有している。なお、分散処理は、バッチ処理であってもよいし、リアルタイム処理であってもよい。
【００１４】
処理ノード２は、割り当てられた処理を実行する。管理ノード４は、システム１の全体を管理する。処理ノード２および管理ノード４には、例えばコンピュータを適用してもよい。処理ノード２の数は、図１の例には限定されない。管理ノード４は、制御装置の一例である。
【００１５】
各処理ノード２Ａ〜２Ｎと管理ノード４とはネットワークスイッチ３を介して通信することが可能である。また、処理ノード２Ａ〜２Ｎの間でもネットワークスイッチ３を介して通信することが可能である。
【００１６】
処理ノード２について説明する。処理ノード２は、ノード制御部１１とノード記憶部１２と実行部１３とデータ中継部１４とノードデータ管理部１５と移動制御部１６と負荷監視部１７とを備えている。処理ノード２は、装置の一例である。
【００１７】
ノード制御部１１は、処理ノード２の種々の制御を行う。ノード記憶部１２は、処理およびデータを記憶する。例えば、ノード記憶部１２に記憶されている処理には該処理が行う内容が記述されている。データは処理を実行するときに使用される。一例として、処理がクエリの場合、クエリはデータに対して種々の操作を行う。
【００１８】
１つの処理はデータを使用して実行される。処理は１つのデータを使用する場合もあり、複数のデータを使用する場合もある。実行部１３は、ノード記憶部１２に記憶されている処理を実行する。処理が実行されるときには、ノード記憶部１２に記憶されているデータが使用される。
【００１９】
データ中継部１４は、図２の一例で示すように、ノード記憶部１２に記憶されているデータのハッシュ値をインデックスごとに記憶している。実施形態では、データ中継部１４は、ノード記憶部１２に記憶されている処理とノードデータ管理部１５とを中継する。
【００２０】
データ中継部１４は、処理ごとにテーブルを有している。以下、このテーブルをハッシュテーブルＴ１と称する。ハッシュテーブルＴ１は、インデックスとハッシュとを有している。ハッシュはデータのハッシュ値を示している。
【００２１】
例えば、ノード制御部１１がノード記憶部１２に記憶されている各データのハッシュ値を演算し、演算したハッシュ値にインデックスを付して、ノード制御部１１が処理ごとにデータ中継部１４に記憶してもよい。
【００２２】
図２の例では、ハッシュテーブルＴ１の処理１は複数のハッシュ値を有している。１つのハッシュ値には１つのインデックスが割り当てられている。インデックスは、「１」からインクリメントされた値となっている。図２の例では、インデックス１番と２番と３番とはハッシュ値の値が異なっている。つまり、インデックス１番と２番と３番とは異なるデータになっている。
【００２３】
一方、インデックス４番および５番は、インデックス３番とハッシュ値が同じである。つまり、インデックス３番、４番および５番は、同じデータを示している。この場合、処理１は同じデータを複数保持しているため、重複するインデックス４番および５番を削除してもよい。これにより、１つのインデックスと１つのデータとが対応付けられる。
【００２４】
実施形態では、データを識別する値としてハッシュ値を用いているが、データを識別することができれば、ハッシュ値以外の値を使用してもよい。また、処理およびデータの数は任意の数であってよい。例えば、図２では、処理１〜処理３の３つの処理を例示しているが、処理の数は３つには限定されない。また、図３の例では、処理１のハッシュ値、すなわちデータが５つの場合を例示しているが、データの数は５つには限定されない。
【００２５】
また、以下の例では、情報がテーブル形式で管理されている例を示しているが、情報の管理は、テーブル形式には限定されない。例えば、図２では、インデックスとハッシュ値とのテーブル形式の例を示しているが、インデックスとハッシュ値との関連が特定できれば、テーブル形式には限定されない。
【００２６】
また、図２の一例では、自然数のインデックスをハッシュ値ごとに付しているが、インデックスには限定されない。例えば、アルファベットで特定されるキーをインデックスの代わりに用いてもよい。
【００２７】
ノードデータ管理部１５について説明する。図３は、ノードデータ管理部１５の一例を示している。ノードデータ管理部１５は、処理内重複管理テーブルＴ２とノード内データ管理テーブルＴ３とを有している。
【００２８】
処理内重複管理テーブルＴ２は、処理ごとにテーブルを記憶している。テーブルは、ハッシュとサイズとを有している。ハッシュは上述したようなハッシュ値である。サイズは、データのサイズである。図３の一例では、サイズの単位は（Ｋｂｙｔｅ：キロバイト）となっている。ただし、データのサイズはキロバイトには限定されない。
【００２９】
処理内重複管理テーブルＴ２の１つの処理のテーブルは、該処理が使用するデータを示している。例えば、図３の例の場合、ハッシュ値「００００００００」のデータは、データサイズが４キロバイトであり、該データは処理１で使用される。以下、「処理が使用するデータ」を「処理が実行するデータ」と称することもある。
【００３０】
ノード内データ管理テーブルＴ３は、処理ノード２のノード記憶部１２に記憶されている各データのハッシュ値とデータサイズとの対応関係をテーブル形式で記憶している。処理内重複管理テーブルＴ２は処理ごとのテーブルになっているが、ノード内データ管理テーブルＴ３は処理ごとのテーブルにはなっていない。
【００３１】
移動制御部１６は、自身の処理ノード２から他の処理ノード２に処理およびデータを送信する。移動先の処理ノード２および移動対象となる処理については、管理ノード４から通知され、この通知に基づいて、移動制御部１６は処理およびデータの移動制御を行う。
【００３２】
負荷監視部１７は、処理ノード２の負荷を監視している。負荷監視部１７は、処理ノード２の資源の使用量を監視してもよい。例えば、負荷監視部１７は、ＣＰＵ（Central Processing Unit）の負荷を監視してもよい。または、負荷監視部１７は、メモリやディスク（例えば、ハードディスクドライブ）等の資源の使用量を監視してもよい。
【００３３】
次に、管理ノード４について説明する。図１の一例に示すように、管理ノード４は、負荷情報取得部２１と全体データ管理部２２と移動管理部２３とを備えている。負荷情報取得部２１は、ネットワークスイッチ３を介して、各処理ノード２の負荷監視部１７から負荷に関する情報を取得する。以下、この情報を負荷情報と称する。この負荷情報は、メモリやディスクの使用量の情報を含んでもよい。負荷情報取得部２１は、取得部の一例である。
【００３４】
全体データ管理部２２は、全ての処理ノード２の全ての処理の間の重複率を管理する。図４は、全体データ管理部２２の一例を示している。図４で一例として示す全体データ管理部２２は、処理・ノード間重複管理テーブルＴ４と全処理間重複管理テーブルＴ５とを有している。処理・ノード間重複管理テーブルＴ４は、第１テーブルの一例である。全処理間重複管理テーブルＴ５は、第２テーブルの一例である。また、全体データ管理部２２は、管理部の一例である。
【００３５】
処理・ノード間重複管理テーブルＴ４は、処理と処理ノードのデータの重複率との項目を有している。処理・ノード間重複管理テーブルＴ４は、処理と処理ノード２との組み合わせごとに、処理が使用するデータと処理ノード２が記憶しているデータとの重複率を管理する。
【００３６】
例えば、重複率は、「重複率＝（処理ノードが記憶し、且つ処理が実行するデータのデータサイズの合計）／（該処理が実行するデータサイズの合計）」として示すことができる。
【００３７】
管理ノード４は、各処理について、該処理が何れの処理ノード２に記憶されているかを認識している。また、管理ノード４は、処理が実行するデータについても認識している。例えば、管理ノード４は、全ての処理ノード２から、保持している処理および該処理が実行するデータに関する情報を収集してもよい。
【００３８】
従って、上記の「処理ノードが記憶し、且つ処理が実行するデータのデータサイズの合計」を得ることができる。また、全体データ管理部２２は、「該処理が実行するデータサイズの合計」を得ることもできる。
【００３９】
従って、全体データ管理部２２は、上記の式に基づいて、重複率を得ることができる。全体データ管理部２２は、処理とノードとの組み合わせごとに、重複率を管理する。これにより、全体データ管理部２２は、処理・ノード間重複管理テーブルＴ４を管理することができる。
【００４０】
例えば、図４の一例では、処理１とノードＡとは重複率が１００％になっている。ノードＡが処理１を記憶している場合（または、動作している場合）、処理１とノードＡとの重複率は１００％になる。
【００４１】
また、図４の一例では、処理１とノードＢとの重複率は７０％になっている。これは、処理１が実行するデータとノードＢのノード記憶部１２が記憶しているデータとの重複率が７０％であることを示している。
【００４２】
このため、処理１が保持するデータの多くをノードＢのノード記憶部１２が記憶していることになる。一方、処理１とノードＣとの重複率は４４％であるため、処理１が実行するデータとノードＣが記憶しているデータとの重複率はそれほど高くない。
【００４３】
全処理間重複管理テーブルＴ５は、比較基準処理と比較対象処理と重複率との項目を有している。比較基準処理および比較対象処理は、比較を行う２つの処理をそれぞれ示している。重複率は、比較を行う処理間でデータが重複している割合を示している。処理は、該処理の対象となるデータと関連付けられている。
【００４４】
例えば、重複率は、「重複率＝（比較基準処理と比較対象処理とで重複しているデータのデータサイズの合計）／（比較基準処理が実行するデータのデータサイズの合計）」として示すことができる。
【００４５】
上述したように、管理ノード４は、各処理について、該処理が何れの処理ノード２に記憶されているかを認識している。また、管理ノード４は、処理が実行するデータについても認識している。
【００４６】
従って、全体データ管理部２２は、「比較基準処理と比較対象処理とで重複しているデータのデータサイズの合計」および「比較基準処理が実行するデータのデータサイズの合計」を得ることができる。そして、全体データ管理部２２は、比較基準処理と比較対象処理との組み合わせごとに、重複率を得ることができる。これにより、全体データ管理部２２は、全処理間重複管理テーブルＴ５を管理することができる。
【００４７】
図４の一例では、処理１と処理２との重複率は９０％になっている。つまり、処理１と処理２とでは重複しているデータの数が多い。一方、処理１と処理４との重複率は３４％になっている。よって、処理１と処理４とでは重複しているデータの数がそれほど多くない。
【００４８】
移動管理部２３は、処理およびデータの移動の管理を行う。移動管理部２３は、全体データ管理部２２に基づいて、移動元の処理ノード２と移動先の処理ノード２と移動する処理とを特定する。以下、移動元の処理ノードを移動元ノードと称することがある。また、移動先の処理ノードを移動先ノードと称することもある。移動元ノードは、第１装置の一例である。移動先ノードは、第２装置の一例である。
【００４９】
移動管理部２３は、移動元ノードから移動先ノードに処理およびデータを移動するときに、移動するデータ量が少なくなるような処理を移動対象として特定する。このため、移動管理部２３は、移動対象の処理が実行するデータと移動先ノードが記憶するデータとの重複率が高くなるような処理を特定する。
【００５０】
移動管理部２３は、移動元ノードに対して、移動先ノードおよび移動対象の処理に関する情報を通知する。以下、この情報を移動情報と称することもある。このとき、移動管理部２３は、移動情報に、移動対象の処理と共に移動するデータに関する情報を含めることができる。
【００５１】
＜処理およびノードの移動の一例＞
次に、図５を参照して、処理およびノードの移動の一例を示す。処理およびノードの移動は、管理ノード４の移動管理部２３が制御する。図５（Ａ）の例は、ノードＡ、ノードＢおよびノードＣの３つの処理ノード２を示している。図５（Ａ）の例では、ノードＡが移動元ノードであるものとする。
【００５２】
ノードＡのノード記憶部１２は、処理１を記憶している。この処理１は、データＤ１、Ｄ２、Ｄ３およびＤ４を保持している。つまり、処理１はデータＤ１〜Ｄ４を使用して実行を行う。データＤ１〜Ｄ４は、ノードＡのノード記憶部１２に記憶されている。
【００５３】
同様に、ノードＢのノード記憶部１２は、処理２を記憶している。処理２の対象となるデータはＤ１、Ｄ２、Ｄ５およびＤ６であり、これらのデータはノードＢのノード記憶部１２に記憶されている。また、ノードＣのノード記憶部１２は、処理３を記憶している。処理３の対象となるデータはＤ１、Ｄ７、Ｄ８およびＤ９であり、これらのデータはノードＣのノード記憶部１２に記憶されている。
【００５４】
図５の例では、データＤ１〜Ｄ９は全て同じデータサイズであるものとして説明するが、データＤ１〜Ｄ９のデータサイズはそれぞれ異なっていてもよい。データＤ１〜Ｄ９は、例えば、各ノードに配布されたデータの塊を分割した分割データとしてもよい。
【００５５】
図５の例では、ノードＡから処理１を移動する先のノードとしては、ノードＢおよびノードＣがある。移動管理部２３は、処理とデータとはローカルアクセス可能な環境に置かれるように移動される。また、移動管理部２３は、移動するデータ量が少なくなるように処理およびデータを移動する。
【００５６】
移動管理部２３は、全体データ管理部２２の処理・ノード間重複管理テーブルＴ４を参照して、移動する処理およびノードを特定する。このとき、移動管理部２３は、移動先のノードが保持するデータと実行するデータの重複率が高い処理を特定する。
【００５７】
処理１は、データＤ１、Ｄ２、Ｄ３およびＤ４を使用する。ノードＢは、データＤ１、Ｄ２、Ｄ５およびＤ６を記憶している。従って、処理１とノードＢとのデータの重複率は５０％になる。全体データ管理部２２の処理・ノード間重複管理テーブルＴ４には、処理１とノードＢとの重複率が５０％であることが記憶される。
【００５８】
ノードＣは、データＤ１、Ｄ７、Ｄ８およびＤ９を記憶している。従って、処理１とノードＣとの重複率は２５％になる。全体データ管理部２２の処理・ノード間重複管理テーブルＴ４には、処理１とノードＢとの重複率が２５％であることが記憶される。
【００５９】
ノードＡには、処理１の他に処理があるものとする。ただし、処理とノードとの組み合わせのうち、最も重複率が高くなるのは、処理１とノードＢとの組み合わせであるものとする。このため、移動管理部２３は、移動する処理を処理１に特定する。また、移動先ノードをノードＢに特定する。そして、移動管理部２３は、ノードＡに対して、ノードＢに処理１を移動するように制御する。
【００６０】
このとき、図５（Ｂ）に示すように、ノードＢにはデータＤ１およびＤ２が既に記憶されている。処理１と共にデータも移動するが、データＤ１およびＤ２は、移動先のノードＢに既に記憶されていることから、データＤ１およびＤ２は、ノードＢに移動する必要がない。
【００６１】
よって、移動管理部２３は、ノードＡに対して、処理１を移動対象として、データＤ３およびデータＤ４をノードＢに移動するように指示を出す。これにより、ノードＡは、処理１、データＤ３およびデータＤ４をノードＢに移動する。このとき、ノードＡは、ノード記憶部１２から処理１を削除する。この場合には、ノードＡの資源の削減を図ることができる。
【００６２】
ノードＡのノード記憶部１２には、データＤ１およびＤ２が残存する。これらのデータＤ１およびＤ２は、処理１が使用するデータである。よって、ノードＡは、他の処理がデータＤ１およびＤ２を使用していなければ、ノード記憶部１２からデータＤ１およびＤ２を除外（削除）することができる。
【００６３】
ここで、ノードＡからノードＣに処理１を移動した場合を想定する。ノードＣには、データＤ１、Ｄ７、Ｄ８およびＤ９が記憶されている。従って、処理１が保持するデータのうち、ノードＣに記憶されているデータはデータＤ１だけになる。よって、ノードＡからノードＣに処理１を移動する場合には、データＤ２、Ｄ３およびＤ４を移動する必要がある。
【００６４】
このため、ノードＡからノードＢに移動する場合と比較して、データの移動量が多くなる。従って、移動管理部２３は、処理が実行するデータと移動先のノードに記憶されているデータとの重複率が高いノードを移動先ノードとして選択する。これにより、処理１と共に移動するデータ量を少なくすることができる。
【００６５】
且つ、処理１の移動先であるノードＢは、データＤ１、Ｄ２、Ｄ３およびＤ４を記憶している。よって、処理１は、ノードＢの中でデータＤ１、Ｄ２、Ｄ３およびＤ４をローカルアクセスの環境下で使用することができる。これにより、処理速度が低下することを抑制することができる。
【００６６】
＜実施形態の処理の一例＞
次に、実施形態の処理の一例についてフローチャートを参照して説明する。図６は、処理ノード２のノード記憶部１２にデータが追加されたときのフローの一例を示している。ノード記憶部１２には、データが単体で記憶されることもあり、処理と共にデータが記憶されることもある。
【００６７】
データ中継部１４は、ノード記憶部１２に追加して記憶されたデータを使用する処理から、処理名、インデックスおよびデータを取得する（ステップＳ１）。なお、追加されたデータを複数の処理が使用する場合には、データ中継部１４は、処理ごとに、処理名、インデックスおよびデータを取得する。
【００６８】
データ中継部１４は、取得したデータのハッシュ値を計算する（ステップＳ２）。このハッシュ値は、ノード記憶部１２に追加されたデータを特定するハッシュ値になる。データ中継部１４は、演算したハッシュ値にインデックスを付して、データを使用する処理のハッシュテーブルＴ１に記憶する（ステップＳ３）。
【００６９】
データ中継部１４は、更新した箇所に関する情報をデータ管理部に出力する（ステップＳ４）。以下、更新した箇所に関する情報を更新箇所情報と称する。更新箇所情報は、処理名、ハッシュ値およびデータを含んでいる。ノードデータ管理部１５は、入力したデータに基づいて、該データのデータサイズを計算する（ステップＳ５）。
【００７０】
また、ノードデータ管理部１５は、ノード内データ管理テーブルＴ３に、ステップＳ２で計算したハッシュ値が存在するか否かを確認する（ステップＳ６）。ハッシュ値が既に存在している場合（ステップＳ７でＹＥＳ）には、新たにノード記憶部１２に追加して記憶されたデータは既にノード記憶部１２に記憶されていることになる。一方、ハッシュ値が存在していない場合（ステップＳ７でＮＯ）には、新たにノード記憶部１２に記憶されたデータはノード記憶部１２には記憶されていないことになる。
【００７１】
ハッシュ値が存在しない場合には、追加して記憶されたデータはノード記憶部１２に記憶されていない。よって、ノードデータ管理部１５は、ノード記憶部１２に新たなデータを記憶する（ステップＳ８）。
【００７２】
ノードデータ管理部１５は、ノード記憶部１２に新たなデータが記憶されたため、ノード内データ管理テーブルＴ３の情報を追加する更新を行う（ステップＳ９）。新たなデータのハッシュ値は、ステップＳ２により得られている。また、新たなデータのデータサイズは、ステップＳ５により得られている。よって、ノードデータ管理部１５は、ノード内データ管理テーブルＴ３に新たなデータのハッシュ値とデータサイズとを対応させて記憶する。
【００７３】
また、ノードデータ管理部１５は、処理内重複管理テーブルＴ２を追加する更新を行う（ステップＳ１０）。ノードデータ管理部１５は、新たなデータを使用する処理名を入力している。よって、ノードデータ管理部１５は、入力した処理に対応するテーブルに新たなデータのハッシュ値とサイズとを追加する更新を行う。
【００７４】
次に、ステップＳ７で、ハッシュ値が存在していると判定された場合のデータ追加処理について説明する。この場合、ノード記憶部１２には該ハッシュ値のデータが既に存在している。ノードデータ管理部１５は、入力した処理名に基づいて、処理内重複管理テーブルＴ２の入力した処理にハッシュ値が存在するか否かを確認する（ステップＳ１１）。
【００７５】
ハッシュ値が存在している場合（ステップＳ１２でＹＥＳ）には、処理内重複管理テーブルＴ２を更新する必要がないため、データ追加処理を終了する。一方、ハッシュ値が存在していない場合（ステップＳ１２でＮＯ）には、処理内重複管理テーブルＴ２を更新する必要がある。
【００７６】
このため、フローはステップＳ１０に移行する。ノードデータ管理部１５がデータ中継部１４から入力した処理名に対応する処理のテーブルに新たなデータのハッシュ値とデーサイズとを記憶する。そして、データ追加処理が終了する。
【００７７】
次に、図７を参照して、処理ノード２のノード記憶部１２からデータを削除するときのフローの一例を説明する。データ中継部１４は、処理がデータの削除を行うとき、該処理から、処理名、インデックスおよび削除対象のデータを取得する（ステップＳ２１）。
【００７８】
データ中継部１４は、取得した処理名に対応する処理のテーブルから、取得したインデックスのデータ（行）を削除する更新を行う（ステップＳ２２）。データ中継部１４は、ノードデータ管理部１５に更新箇所情報を出力する（ステップＳ２３）。この情報は、処理名およびハッシュ値を含んでいる。
【００７９】
ノードデータ管理部１５は、処理内重複管理テーブルＴ２の該当処理の該当ハッシュ値のデータ（行）を削除する更新を行う（ステップＳ２４）。ノードデータ管理部１５は、入力した処理名により削除対象のデータが使用する処理を特定し、入力したハッシュ値を処理内重複管理テーブルＴ２から削除する。
【００８０】
ノードデータ管理部１５は、処理内重複管理テーブルＴ２の他の処理に削除するハッシュ値が存在するか否かを確認する（ステップＳ２５）。処理ノード２のノード記憶部１２には複数の処理が記憶されている場合がある。この場合、１つの処理が削除しようとしているデータが他の処理で使用している場合がある。この場合、データが削除されると、他の処理は、ローカルアクセスの環境下でデータを使用できなくなる。
【００８１】
このため、ノードデータ管理部１５は、ステップＳ２５の確認の結果、処理内重複管理テーブルＴ２の他の処理のテーブルに同じハッシュ値が存在している場合（ステップＳ２６）、データの削除を行わない。つまり、ノードデータ管理部１５は、ステップＳ２６の判定がＹＥＳの場合には、データの削除を不可にする。
【００８２】
一方、ノードデータ管理部１５は、ステップＳ２６の判定がＮＯの場合、ノード内データ管理部から該当ハッシュ値のデータ（行）を削除する（ステップＳ２７）。そして、ノードデータ管理部１５は、ノード記憶部１２からデータの削除を行う（ステップＳ２８）。以上により、データ削除処理が終了する。
【００８３】
次に、図８を参照して、処理ノード２のノード記憶部１２に記憶されているデータを修正するときのフローの一例を説明する。データ中継部１４は、処理がデータの修正を行うとき、該処理から、処理名、インデックスおよび修正対象のデータを取得する（ステップＳ３１）。
【００８４】
データ中継部１４は、処理から修正対象のデータのインデックスを取得している。データ中継部１４は、該インデックスに対応する修正前のハッシュ値を確認する（ステップＳ３２）。
【００８５】
データ中継部１４は、修正対象のデータを修正した後のデータのハッシュ値を計算する（ステップＳ３３）。例えば、実行部１３が処理を実行しているときに、該処理が要求している修正内容をデータ中継部１４が取得し、データ中継部１４は、取得した修正内容に基づいて、修正後のデータのハッシュ値を計算してもよい。
【００８６】
データ中継部１４は、修正後のハッシュ値とインデックスとを対応付けて、ハッシュテーブルＴ１に記憶する（ステップＳ３４）。そして、データ中継部１４は、ノードデータ管理部１５に更新箇所情報を出力する（ステップＳ３５）。更新箇所情報は、修正を行う処理の処理名、ステップＳ３２で得られた修正前のハッシュ値、ステップＳ３３で得られた修正後のハッシュ値および修正後のデータを含んでいる。
【００８７】
ノードデータ管理部１５は、データ中継部１４から更新箇所情報を入力した後に、図７で示したデータ削除処理を行う（ステップＳ３６）。これにより、ノード記憶部１２から修正前のデータが削除される。
【００８８】
同様に、データ中継部１４のハッシュテーブルＴ１から修正前のデータに関する情報が削除される。また、ノードデータ管理部１５の処理内重複管理テーブルＴ２およびノード内データ管理テーブルＴ３から修正前のデータに関する情報が削除される。
【００８９】
次に、ノードデータ管理部１５は、図６で示したデータ追加処理を行う（ステップＳ３７）。これにより、ノード記憶部１２に修正後のデータが記憶される。同様に、データ中継部１４のハッシュテーブルＴ１に修正後のデータに関する情報が記憶される。また、ノードデータ管理部１５の処理内重複管理テーブルＴ２およびノード内データ管理テーブルＴ３から修正前のデータに関する情報が記憶される。
【００９０】
従って、修正前のデータを削除するデータ削除処理を行い、その後、修正後のデータを追加するデータ追加処理を行うことで、ノードデータ管理部１５は、データの修正処理を行うことができる。
【００９１】
次に、図９および図１０を参照して、管理ノード４が行う処理およびデータの移動処理のフローについて説明する。管理ノード４の負荷情報取得部２１は、各処理ノード２の負荷監視部１７から負荷情報を取得する（ステップＳ４１）。この負荷情報はメトリクスと称されることもある。
【００９２】
ここで、負荷情報の下限閾値および上限閾値について説明する。負荷情報は、処理ノード２の負荷を示しており、負荷が高い処理ノード２は、負荷を軽減する必要がある。例えば、処理ノード２で実行している処理の負荷が高い場合には、該処理ノード２の処理能力が低下する。
【００９３】
従って、処理ノード２の負荷が高い場合には、処理ノード２の負荷を他の処理ノード２に分散することが好ましい。そこで、負荷情報が示す値が上限閾値を超過している場合には、移動管理部２３は、負荷の高い処理ノード２に対して、処理およびデータを他の処理ノード２に移動する通知を出す。
【００９４】
上限閾値は任意に設定することができる。例えば、処理ノード２の負荷が７０％〜８０％を上限閾値に設定することができる。この上限閾値は、予め移動管理部２３に設定されていてもよい。上限閾値は、第１の基準の一例である。
【００９５】
一方、負荷が低い処理ノード２は、処理およびデータを移動する必要はない。処理ノード２の負荷が非常に低い場合には、該処理ノード２をシステム１から削除しても、システム１の運用には影響がないことがある。
【００９６】
このため、システム１の全体のハードウェア資源の使用量を削減する観点から、負荷が非常に低い場合には、該処理ノード２を削除してもよい。そこで、負荷情報が示す値が下限閾値未満のときには、負荷が非常に低い処理ノード２を削除する。
【００９７】
このとき、移動管理部２３は、処理ノード２を削除することに伴う処理を行うように、削除対象の処理ノード２に対して通知する。下限閾値も任意に設定することができる。例えば、処理ノード２の負荷が２０％程度を下限閾値に設定することができる。
【００９８】
下限閾値は、負荷が第１の基準若しくは第１の基準を下回る値としてもよい。下限閾値は、第２の基準の一例である。この下限閾値は、予め移動管理部２３に設定されていてもよい。
【００９９】
図９に示すように、移動管理部２３は、負荷情報取得部２１が取得している負荷情報のうち、負荷が下限閾値未満の処理ノード２があるか否かを判定する（ステップＳ４２）。負荷が下限閾値未満の処理ノード２がある場合には（ステップＳ４２でＹＥＳ）、ノード削除時の処理が行われる（ステップＳ４３）。ノード削除時の処理については後述する。
【０１００】
一方、ステップＳ４２でＮＯと判定された場合には、各処理ノード２は負荷が下限閾値以上となる。従って、処理ノード２の削除は行われない。次に、移動管理部２３は、負荷情報取得部２１が取得している負荷情報のうち、負荷が上限閾値を超過している処理ノード２があるか否かを判定する（ステップＳ４４）。
【０１０１】
負荷が上限閾値を超過している処理ノード２がない場合（ステップＳ４４でＮＯ）、図９で示す「Ａ」のフローに進む。ステップＳ４２がＮＯ、且つステップＳ４４がＮＯの場合、各処理ノード２の負荷は、上限閾値以下であり、且つ下限閾値以上である。つまり、処理ノード２を追加する必要もなく、処理ノード２を削除する必要もない。
【０１０２】
ステップＳ４４でＹＥＳと判定された場合、各処理ノード２のうち何れかの処理ノード２の負荷が上限閾値を超過している。移動管理部２３は、負荷情報取得部２１が取得した負荷情報に基づいて、システム１の全ての処理ノード２の負荷が上限閾値を超過しているか否かを判定する（ステップＳ４５）。
【０１０３】
全ての処理ノード２が上限閾値を超過している場合、処理ノード２を追加する必要がある。そこで、ステップＳ４５でＹＥＳの場合には、ノード追加時の処理が行われる（ステップＳ４６）。ノード追加時の処理については後述する。
【０１０４】
ステップＳ４５でＮＯと判定された場合、各処理ノード２のうち何れかの処理ノード２の負荷は上限閾値を超過しているが、全ての処理ノード２の負荷が上限閾値を超過していない。従って、負荷が上限閾値を超過している処理ノード２が検出される。
【０１０５】
ステップＳ４５でＹＥＳと判定された場合、移動管理部２３は、負荷が上限閾値未満の処理ノード２を抽出する（ステップＳ４７）。抽出される処理ノード２は、負荷が上限閾値未満であるため、負荷に余裕がある。
【０１０６】
ステップＳ４７で抽出される処理ノード２は処理およびデータの移動先ノードになる。移動先ノードは１つの場合もあり、複数の場合もある。移動管理部２３は、負荷が上限閾値を超過した処理ノード２について、重複率が最も高い処理と移動候補ノードとの組み合わせを選択する（ステップＳ４８）。
【０１０７】
このために、移動管理部２３は、全体データ管理部２２を参照する。全体データ管理部２２は、処理・ノード間重複管理テーブルＴ４を有している。上述したように、処理・ノード間重複管理テーブルＴ４は、処理が実行するデータと処理ノード２が記憶しているデータとの重複率を示している。
【０１０８】
例えば、図４の例において、ノードＡの負荷情報が上限閾値を超過しており、ノードＢおよびノードＣの負荷情報が上限閾値未満であるものとする。この場合、移動元の処理ノード２はノードＡになる。また、移動先ノードは、ノードＢまたはノードＣになる。
【０１０９】
ここで、移動先ノードと処理とのうちデータの重複率が最も高い処理は処理１とノードＢとの組み合わせであるものとする。図４の例では、処理１とノードＢとの組み合わせが７０％になっている。
【０１１０】
従って、移動管理部２３は、移動元の処理ノード２をノードＡと特定し、移動先の処理ノード２をノードＢと特定し、移動する処理を処理１と特定する。そして、移動管理部２３は、移動元の処理ノード２であるノードＡに対して、移動先の処理ノード２としてノードＢ、移動する処理として処理１を通知する（ステップＳ４９）。
【０１１１】
この通知を受けたノードＡの移動制御部１６は、処理１とデータとを移動する。ただし、移動先のノードＢと重複しているデータは移動しない。図４の例では、処理１とノードＢとの重複率は７０％になる。よって、処理１とノードＢとで多くのデータが重複しているため、移動するデータ量が少なくなる。
【０１１２】
なお、移動先のノードＢと重複しているデータは移動されないため、該データはノードＡに残存する。残存したデータをノードＡの他の処理が使用しない場合には、ノードＡは該残存したデータを削除することができる。
【０１１３】
以上説明したように、負荷情報が上限閾値を超えているノードを移動元ノードとして、負荷情報が上限閾値以下のノードに処理を移動することで、移動元ノードの負荷が軽減される。
【０１１４】
このとき、移動先ノードが記憶しているデータと最も重複率が高い処理を移動の対象として選定しているため、移動するデータ量が少ない処理を移動することができる。そして、移動先ノードは、移動された処理が使用するデータを記憶しているため、ローカルアクセスの環境を維持することができる。このため、処理が低速になることを抑制することができる。
【０１１５】
上述した例では、移動元に割り当てられた複数の処理のうち、処理に用いられるデータと移動先ノードが記憶しているデータとの重複率が最も高い処理を移動の対象として選択しているが、移動対象の処理は重複率が最も高い処理には限定されない。
【０１１６】
移動元ノードに割り当てられた複数の処理のうち、処理に用いられるデータが移動先ノードによっても利用されている率が相対的に高い又は所定の率よりも高い処理を移動対象としてもよい。所定の率は任意に設定してもよい。
【０１１７】
移動対象となる処理に用いられているデータが移動先ノードによっても利用されている率が相対的に高ければ、移動するデータ量を少なくすることができる。また、移動対象となる処理に用いられているデータが移動先ノードによっても利用されている率が所定の率よりも高い場合でも、移動するデータ量を少なくすることができる。
【０１１８】
また、負荷が上限閾値を超えるノードを移動元ノードとする例を説明したが、負荷が相対的に大きいノードを移動元ノードとしてもよい。また、負荷が下限閾値を下回るノードを移動先ノードとしたが、負荷が相対的に小さいノードを移動先ノードとしてもよい。
【０１１９】
以上は、何れかの処理ノード２において、負荷情報が上限閾値を超過したときに、移動管理部２３が処理およびデータの移動を制御するようにしている。つまり、処理およびデータの移動のトリガとなるのは、何れかの処理ノード２の負荷情報が上限閾値を超過した場合である。
【０１２０】
一方、処理ノード２の負荷情報にかかわらず、処理およびデータの移動を行うようにしてもよい。例えば、全ての処理ノード２の負荷情報が上限閾値を超過しない場合でも、処理およびデータの移動を行うようにしてもよい。
【０１２１】
図９に一例として示すフローにおいて、ステップＳ４４でＮＯと判定された場合、つまり全ての処理ノード２の負荷情報が下限閾値以上、且つ上限閾値以下のときに、フローは「Ａ」に進む。
【０１２２】
図１０は、「Ａ」に進んだ後のフローの一例を示す。移動管理部２３は、処理・ノード間重複管理テーブルＴ４を参照して、処理とノードとの組み合わせを確認する（ステップＳ５１）。処理・ノード間重複管理テーブルＴ４は、処理とノードとの全ての組み合わせを記憶している。そして、処理・ノード間重複管理テーブルＴ４は、組み合わせごとに重複率を記憶している。
【０１２３】
移動管理部２３は、予め重複率の閾値が設定されていてもよい。この重複率の閾値は任意の値を設定することができる。移動管理部２３は、重複率の閾値を超過している組み合わせがあるか否かを判定する（ステップＳ５２）。重複率の閾値を超過している組み合わせがなければ（ステップＳ５２でＮＯ）、フローは「Ｂ」に進む。つまり、図９のステップＳ４１にフローが進む。
【０１２４】
一方、重複率の閾値を超過している組み合わせがある場合（ステップＳ５２でＹＥＳ）、移動管理部２３は、重複率の閾値を超過している処理とノードとの組み合わせを選択する（ステップＳ５３）。処理とノードとの組み合わせのうち、処理は移動対象となる処理であり、ノードは移動先ノードとなる。選択される組み合わせの数は、複数の場合もあり、１つの場合もある。
【０１２５】
移動管理部２３が選択した組み合わせの数が複数の場合、組み合わせの中で、移動元となるノードの負荷情報が最も高いノードを選択する（ステップＳ５４）。移動管理部２３は、各処理のそれぞれが何れの処理ノード２に記憶されている処理であるかを認識している。
【０１２６】
従って、移動管理部２３は、上記の組み合わせの処理のうち、処理が記憶されている処理ノード２の負荷情報を負荷情報取得部２１から取得する。そして、取得した負荷情報のうち最も高い処理ノード２を移動元ノードとして選択する。なお、組み合わせの数が１つの場合には、その組み合わせのノードが移動元ノードとして選択される。
【０１２７】
このステップＳ５４が実行されるのは、図９のステップＳ４４の判定がＮＯの場合である。つまり、各処理ノード２の負荷情報は、上限閾値以下である。よって、システム１の全体としては、安定的な運用が行われていることが多い。
【０１２８】
このときに、ステップＳ５４において、処理とノードとの組み合わせの中で最も負荷情報の高いノードを移動元として選択して、処理およびデータを移動する。これにより、何れかの処理ノード２で負荷情報が閾値を超過するよりも前に、処理およびデータを移動することで、負荷情報が上限閾値を超過する処理ノード２の発生を低減し易くなる。
【０１２９】
ただし、無作為に負荷情報の高いノードを移動元として処理およびデータを移動すると、データの移動量が少ないとしても、処理およびデータの移動による負担が大きくなる。そこで、重複率の閾値を超えている組み合わせがある場合（ステップＳ５２でＹＥＳ）に、処理およびデータを移動することで、処理およびデータを不要に移動することを抑制できる。
【０１３０】
ステップＳ５４が実行された時点で、移動元ノード、移動先ノードおよび移動する処理が特定される。そして、フローは「Ｃ」から図９のステップＳ４９に移行する。移動管理部２３は、ステップＳ４９において、移動元の処理ノード２に対して、移動対象となる処理およびデータと共に移動先の処理ノード２を通知する。そして、ステップＳ５０で、処理およびデータの移動が行われる。
【０１３１】
従って、負荷情報が上限閾値を超過していない場合でも、処理とノードとの組み合わせが重複率の閾値を超過しているときには、重複率の高い処理ノード２に処理およびデータを移動する。これにより、負荷情報が上限閾値を超過する処理ノード２が発生することを低減できる。
【０１３２】
つまり、複数のノードのうちノード間で保持するデータの重複率に基づいて、移動元のノードおよび移動先のノードを特定してもよい。そして、移動元のノードに割り当てられた処理のうち、処理に用いられるデータが移動先ノードによっても利用されている率が高い又は所定の率より高い処理を移動対象の処理として選択することができる。これにより、移動するデータ量を少なくすることができる。
【０１３３】
次に、図９のステップＳ４３のノード削除時の処理について説明する。図１１は、ノード削除時の処理のフローの一例を示している。処理ノード２を削除する前に、移動管理部２３は、削除する処理ノード２は処理を有しているか否かを判定する（ステップＳ６１）。管理ノード４は、各処理が何れの処理ノード２に記憶されているかを認識しているため、ステップＳ６１の判定を行うことができる。
【０１３４】
削除する処理ノード２が処理を有している場合には、処理を他の処理ノード２に移動する必要がある。このとき、移動管理部２３は、移動する処理のデータと最も重複率が高い処理ノード２を移動先として選択する（ステップＳ６２）。移動管理部２３は、処理とノードとの組み合わせごとに重複率を処理・ノード間重複管理テーブルＴ４で管理しているため、移動先を選択することができる。
【０１３５】
そして、移動管理部２３は、選択した移動先の処理ノード２に処理およびデータを移動する。これにより、データの重複率が高い処理ノードを移動先ノードとしているため、移動するデータ量を少なくすることができる。
【０１３６】
そして、移動管理部２３は、ステップＳ６１において、削除する処理ノード２は処理を有しているか否かを判定する。削除する処理ノード２が処理を有している場合には、削除する処理ノード２が処理を有しなくなるまで、ステップＳ６２およびＳ６３を繰り返し行う。
【０１３７】
そして、削除する処理ノード２から処理がなくなったときに（ステップＳ６１でＮＯ）、ノード削除時の処理が終了する。これにより、処理ノード２を削除することが可能になり、処理ノード２が削除される。
【０１３８】
次に、ステップＳ４６のノード追加時の処理について説明する。図１２は、ノード追加時のフローの一例を示している。図１２で一例として示すノード追加時の処理は、システム１に処理ノード２が追加された後の処理になる。
【０１３９】
移動管理部２３は、負荷情報取得部２１を参照して、最も負荷情報が高い処理ノード２を選択する（ステップＳ７１）。そして、移動管理部２３は、選択した処理ノード２の処理の中で最も移動データサイズが小さい処理を選択する（ステップＳ７２）。移動管理部２３は、処理ノード２の処理を認識しているため、最も移動データサイズが小さい処理を選択することができる。
【０１４０】
移動管理部２３は、ステップＳ７１で選択した最も負荷情報が高い処理ノード２を移動元ノードとし、追加した処理ノード２を移動先ノードとして特定する。また、移動管理部２３は、ステップＳ７２で選択した処理および該処理で使用するデータを特定する。
【０１４１】
そして、移動元ノードの処理ノード２に対して、選択した処理およびデータを移動先の処理ノード２、つまり追加した処理ノード２に移動するように通知を行う。これにより、移動元ノードの処理ノード２は、通知を受けた処理ノード２に対して、処理およびデータの移動を行う（ステップＳ７３）。
【０１４２】
移動管理部２３は、負荷情報取得部２１を参照して、負荷情報が上限閾値を超過している処理ノード２があるか否かを判定する（ステップＳ７４）。負荷情報が上限閾値を超過している処理ノード２がある場合（ステップＳ７４でＹＥＳ）には、該処理ノード２の負荷を軽減する必要がある。
【０１４３】
そこで、移動管理部２３は、上限閾値を超過している処理ノード２の処理の中で最も重複率が高い処理を選択する（ステップＳ７５）。移動管理部２３は、全体データ管理部２２の全処理間重複管理テーブルＴ５を参照する。全処理間重複管理テーブルＴ５について説明する。
【０１４４】
図４の一例に示すように、全処理間重複管理テーブルＴ５は、比較基準処理と比較対象処理との重複率を示している。つまり、全処理間重複管理テーブルＴ５は、２つの処理間で使用するデータの重複率を示している。例えば、図４の例の場合、処理１と処理２とでは使用するデータの重複率が９０％になっている。
【０１４５】
移動管理部２３は、負荷情報が上限閾値を超過している処理ノード２を移動元ノードとして特定し、追加した処理ノード２を移動先ノードとして特定する。そして、移動管理部２３は、移動元ノードの処理と移動先ノードの処理とでデータの重複率が最も高い処理を選択する。
【０１４６】
初期的には、移動先ノードである追加した処理ノード２には殆ど処理が記憶されていないことが多い。例えば、移動元ノードの処理ノード２と移動先ノードの処理ノード２とで重複している処理がない可能性もある。
【０１４７】
この場合、例えば、移動管理部２３は、移動元ノードの処理ノード２のうち、該処理ノード２の負荷を高くしている処理を選択してもよい。また、ステップＳ７２のように、移動するデータサイズが最も小さい処理および該処理で使用するデータを選択するようにしてもよい。
【０１４８】
移動管理部２３は、移動元ノードの処理ノード２に、移動先ノードおよび移動する処理を通知する。移動元の処理ノード２は、通知を受けた移動先ノードに対して、処理および該処理で使用するデータを移動する（ステップＳ７６）。そして、フローはステップＳ７４に移行する。
【０１４９】
ステップＳ７５およびＳ７６は、ステップＳ７４でＮＯと判定されるまで実行される。つまり、負荷情報が上限閾値を超過している処理ノード２がなくなるまで、ステップＳ７５およびＳ７６が繰り返される。ステップＳ７４でＮＯと判定されたときに、ノード追加時の処理が終了する。
【０１５０】
ステップＳ７５およびＳ７６が実行されると、追加した処理ノード２に処理およびデータが記憶されていく。このため、ステップＳ７５で処理が使用するデータの重複率が最も高い処理が選択されることで、移動するデータ量を少なくすることができる。
【０１５１】
＜管理ノードのハードウェア構成の一例＞
次に、管理ノード４のハードウェア構成の一例について説明する。図１３の一例に示すように、管理ノード４は、バス３０に対して、プロセッサ３１とＲＡＭ(Random Access Memory)３２とＲＯＭ(Read Only Memory)３３と補助記憶装置３４と通信インタフェース３５と可搬型記憶装置接続部３６とが接続されている。
【０１５２】
プロセッサ３１はＣＰＵ（Central Processing Unit)のような任意の処理回路である。プロセッサ３１はＲＡＭ３２に展開されたプログラムを実行する。実行されるプログラムとしては、実施形態の処理を実現する制御プログラムを適用することができる。ＲＯＭ３３はＲＡＭ３２に展開されるプログラムを記憶する不揮発性の記憶装置である。
【０１５３】
補助記憶装置３４は、種々の情報を記憶する記憶装置であり、例えばハードディスクドライブや半導体メモリ等を補助記憶装置３４に適用することができる。通信インタフェース３５は、外部との通信を行うときのインタフェースである。
【０１５４】
可搬型記憶装置接続部３６は、可搬型記憶装置３７と接続可能に設けられている。可搬型記憶装置３７としては、可搬型のメモリや光学式ディスク（例えば、ＣＤ（Compact Disk)やＤＶＤ（Digital Video Disk)等）を適用することができる。実施形態の処理を行う制御プログラムは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。この場合、記録媒体に可搬型記憶装置３７を適用することができる。
【０１５５】
ＲＡＭ３２、ＲＯＭ３３および補助記憶装置３４は、何れもコンピュータ読み取り可能な有形の記憶媒体の一例である。これらの有形な記憶媒体は、信号搬送波のような一時的な媒体ではない。
【０１５６】
管理ノード４のうち、負荷情報取得部２１、全体データ管理部２２および移動管理部２３は、例えばプロセッサ３１で実行されるプログラムにより実現されてもよい。また、管理ノード４の各部が通信を行うとときには、通信インタフェース３５を用いてもよい。また、管理ノード４の情報は、補助記憶装置３４やＲＡＭ３２等に記憶されてもよい。
【０１５７】
＜その他＞
以上において、移動先ノードは上限閾値未満の処理ノード２から抽出されたが、移動先ノードを抽出するための閾値（以下、第２の閾値と称する）を上限閾値とは異なる値に設定してもよい。ただし、第２の閾値は、上限閾値未満に設定する。
【０１５８】
例えば、上限閾値が処理ノード２の負荷の９０％に設定されている場合に、第２の閾値は処理ノード２の負荷の７０％に設定することもできる。これにより、より負荷の低い処理ノード２に処理およびデータを移動することができる。
【０１５９】
また、第２の閾値よりも低い処理ノード２が複数抽出された場合には、処理のデータと移動先ノードのデータとの重複率が最も高い処理ノード２を移動先ノードに特定している。これにより、処理と共に移動するデータ量を少なくすることができる。
【０１６０】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【０１６１】
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
複数の装置を用いて分散処理を行う分散処理システムを制御する制御プログラムであって、
前記複数の装置のそれぞれから負荷情報を取得する取得処理と、
取得した負荷情報に基づいて、割り当てられた処理の移動元の装置と、割り当てられた処理の移動先の装置とを特定する特定処理と、
前記移動元の装置に割り当てられた複数の処理のうち、処理に用いられるデータが前記移動先の装置によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する選択処理と、
をコンピュータに実行させる制御プログラム。
（付記２）
前記特定処理において、前記移動先の装置として複数の装置が特定された場合に、前記移動元の装置が保持するデータと重複するデータを保持する割合が最も高い装置を移動先の装置として特定された前記複数の装置から選択する、付記１記載の制御プログラム。
（付記３）
前記特定処理は、取得した負荷が相対的に大きい装置を移動元装置、取得した負荷が相対的に小さい装置を移動先装置として特定するか、又は、取得した負荷が第１の基準を超える装置を前記移動元装置、取得した負荷が前記第１の基準若しくは該第１の基準を下回る第２の基準以下の装置を前記移動先装置として特定する、付記１記載の制御プログラム。
（付記４）
前記特定処理は、前記分散処理システムから削除する装置が処理を有している場合に、該処理に用いられるデータを保持している率が相対的に高い又は所定の率より高い装置を移動先の装置として特定する、付記１記載の制御プログラム。
（付記５）
前記選択処理は、前記分散処理システムに前記装置を追加したときに、前記負荷情報が前記第１の基準を超える装置がある場合には、該装置に割り当てられた複数の処理のうち、処理に用いられるデータが前記移動先の装置によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する、
付記１記載の制御プログラム。
（付記６）
前記処理を移動した後に、前記移動元装置に前記処理が実行していたデータが残存している場合、他の処理が前記データを使用していないときには、該データを削除する、
付記１記載の制御プログラム。
（付記７）
複数の装置を用いて分散処理を行う分散処理システムを制御する制御プログラムであって、
前記複数の装置のうち装置間で保持するデータの重複率に基づいて、移動元の装置と移動先の装置とを特定する特定処理と、
前記移動元の装置に割り当てられた処理のうち、処理に用いられるデータが前記移動先によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する選択処理と、
をコンピュータに実行させる制御プログラム。
（付記８）
前記システムの全ての装置の負荷情報が負荷情報の閾値を超過していない場合に、前記移動対象の特定を行う、
付記７記載の制御プログラム。
（付記９）
前記複数の装置の中で最も負荷が高い装置を移動元の装置として特定する、
付記７記載の制御プログラム。
（付記１０）
複数の装置を用いて分散処理を行う分散処理システムを制御する制御プログラムであって、
前記複数の装置のうち移動元の装置に割り当てられた複数の処理のうち、移動先の装置によっても利用されている率が相対的に高い又は所定の率よりも高い処理を移動対象の処理として選択する選択処理、
をコンピュータに実行させる制御プログラム。
（付記１１）
複数の装置を用いて分散処理を行う分散処理システムを制御する制御方法であって、
前記複数の装置のそれぞれから負荷情報を取得する取得処理と、
取得した負荷情報に基づいて、割り当てられた処理の移動元の装置と、割り当てられた処理の移動先の装置とを特定する特定処理と、
前記移動元の装置に割り当てられた複数の処理のうち、処理に用いられるデータが前記移動先の装置によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する選択処理と、
を有する制御方法。
（付記１２）
複数の装置を用いて分散処理を行う分散処理システムを制御する制御装置であって、
前記複数の装置のそれぞれから負荷情報を取得する取得部と、
取得した負荷情報に基づいて、割り当てられた処理の移動元の装置と、割り当てられた処理の移動先の装置とを特定し、前記移動元の装置に割り当てられた複数の処理のうち、処理に用いられるデータが前記移動先の装置によっても利用されている率が相対的に高い又は所定の率より高い処理を移動対象の処理として選択する管理部と、
を備える制御装置。
【符号の説明】
【０１６２】
１      システム
３      処理ノード
４      管理ノード
１１    ノード制御部
１２    ノード記憶部
１３    実行部
１４    データ中継部
１５    ノードデータ管理部
１６    移動制御部
１７    ノードデータ管理部
２１    負荷情報取得部
２２    全体データ管理部
２３    移動管理部
３１    プロセッサ
３２    ＲＡＭ
３３    ＲＯＭ
３４    補助記憶装置
【図１】
2015194899.tif 000003
【図２】
2015194899.tif 000004
【図３】
2015194899.tif 000005
【図４】
2015194899.tif 000006
【図５】
2015194899.tif 000007
【図６】
2015194899.tif 000008
【図７】
2015194899.tif 000009
【図８】
2015194899.tif 000010
【図９】
2015194899.tif 000011
【図１０】
2015194899.tif 000012
【図１１】
2015194899.tif 000013
【図１２】
2015194899.tif 000014
【図１３】
2015194899.tif 000015