以下、本発明に係る分散処理システムの実施形態について図1乃至図28を参照して説明する。図1乃至図21は、分散処理システムの構成を説明するための図である。図22乃至図28は、分散処理システムの動作を説明するための図である。
<第1実施形態>
(構成)
図1に示すように、本発明の第1実施形態に係る分散処理システム1は、情報処理装置11と、ジョブクライアント12と、システム管理クライアント13と、を備える。ジョブクライアント12は、情報処理装置11に実行させるためのジョブ(処理要求)を投入する。システム管理クライアント13は、ジョブに基づいて生成されるタスク(分割処理要求)を実行する複数のワークユニット(後述するワークユニット部25)のそれぞれを管理する。そして、情報処理装置11は、ジョブクライアント12から投入されたジョブに基づく複数のタスクを生成し、生成した複数のタスクを複数のワークユニットのそれぞれに実行させる。例えば、ジョブクライアント12は、投入するジョブの内容として任意の文字列を出力する。そして、情報処理装置11は、ジョブクライアント12から出力された任意の文字列と、予め記憶された文字列と、を比較し、一致する文字の個数を出力する処理を実行する。
まず、情報処理装置11の構成について説明する。情報処理装置11は、ワークユニット管理部21と、タスク管理部22と、タスク集約部23と、データ配置管理部24と、複数のワークユニット部25A乃至25N(以下、個々に区別しない場合にワークユニット部25と記載する)と、を備える。なお、情報処理装置11を構成する各機能部は、例えばそれぞれ異なる物理的なサーバ上に配置される。その場合には、情報処理装置11を構成する各機能部は、それぞれ中央演算装置(CPU:Central Processing Unit)と、RAM(Random Access Memory)と、ストレージと、ネットワークインタフェースカード(NIC)とを備え、オペレーティングシステム(OS)の制御で動作することができる。そして、ワークユニット管理部21と、タスク管理部22と、タスク集約部23と、データ配置管理部24と、複数のワークユニット部25と、を構成する各サーバは、ネットワーク等(例えばTCP(Transmission Control Protocol)/IP(Internet Protocol))を介して接続することができる。
以下に、分散処理システム1における、データユニットの割り当て処理と、ジョブ登録処理と、ジョブ実行処理と、のそれぞれについて順番に説明する。データユニットは、所定のデータ(例えば大規模データ)を複数に分割したものである。データユニットの割り当て処理は、各データユニットを複数のワークユニット部25(データユニット処理部)のそれぞれに割り当てる処理である。ジョブ登録処理は、ジョブクライアント12から投入されたジョブをデータユニットに対応付けて分割したタスクを生成する処理である。そして、ジョブ実行処理では、ワークユニット部25が、タスクに基づいて、割り当てられたデータユニットに対する所定の処理を実行する。
なお、データユニットの割り当て処理は最初に1回行われることとし、ジョブ登録処理とジョブ実行処理については、繰り返し実行されることとする。また、データユニットを割り当てるワークユニット部25の数に変更があったとき等、分散処理システム1の構成が変化した場合に、データユニット割り当て処理は再度行われる。
なお、以下では、ワークユニット部25の数(ワークユニット数)wが3であり、データユニット数dが4であり、データユニットの冗長度数rが2である場合について説明する。勿論、ワークユニット数wとデータユニット数dと冗長度数rとは上記に限られず、それぞれ2以上の整数であればよい。冗長度数rはデータユニット毎に変わらない値である。また、データユニットを複製した、同一の複数の複製データユニットは、それぞれ異なる複数のワークユニット部25に配置される(割り当てられる)。また、この時、ワークユニット数w<冗長度数rの場合は冗長度を満たせないので、1<r≦wになる。
また、本実施形態では、少ないワークユニット数で負荷均衡が行えることが目的である。そのため、各ワークユニット部25には1つ以上データユニットが配置されたほうがよく、ワークユニット数w≦データユニット数d×冗長度数rが成立する。この条件が成立するように、後述するマスタデータ記憶部63にデータID(Identification)とデータ内容を登録し、ワークユニット記憶部31にはワークユニットIDとワークユニット名を記録する。
最初に、複数のワークユニット部25(データユニット処理部)のそれぞれに、複数のデータユニットを割り当てる(配置する)データユニットの割り当て処理について説明する。ここでは、まず、ワークユニット管理部21の構成について説明する。ワークユニット管理部21は、図2に示すように、ワークユニット部25毎に予め設定したユニークなワークユニットIDと、ワークユニット部25(例えばワークユニット名)と、を対応付けて記憶するワークユニット記憶部31を備える。例えば、ワークユニット記憶部31には、ワークユニットID「1」乃至「3」のそれぞれに対応付けられた3つのワークユニット部25(例えばワークユニット名)が記憶される。
続いて、データ配置管理部24(データユニット出力制御手段)の構成について説明する。データ配置管理部24は、データ配置計画部61と、データ配置実行部62と、マスタデータ記憶部63と、データ配置記憶部64と、を備える。
マスタデータ記憶部63は、データユニット毎に予め設定したユニークなデータIDと、当該データIDにて示されるデータユニットのデータ内容と、を対応付けて記憶する(例えば図3)。例えば、分散処理システム1では、ジョブクライアント12が情報処理装置11へジョブを投入する前に、システム管理クライアント13が、データIDとデータ内容とをデータ配置管理部24へ出力する。そして、データ配置管理部24が、取得したデータIDとデータ内容とをマスタデータ記憶部63に記憶する。なお、データ内容は、後述するワークユニット部25のタスク実行部72が処理を行えるデータ内容であれば、どのような内容でもよい。
データ配置計画部61は、ワークユニット記憶部31に記憶された複数のワークユニット部25の情報と、マスタデータ記憶部63に記憶された複数のデータユニットとの情報と、予め設定されたデータユニットの冗長度数rと、に基づいて、複数のワークユニット部25のそれぞれへ複数のデータユニットを割り当てる(配置を計画する)。そして、データ配置計画部61は、複数のデータユニットのそれぞれを予め設定された数(冗長度数r)ずつ複製した各データユニット(複製データユニット)を、複数のワークユニット部25へ出力する。
具体的には、データ配置計画部61は、以下の4つの条件を満たすように複数のデータユニットを複数のワークユニット部25のそれぞれに割り当てる。すなわち、まず、データ配置計画部61は、(A)同一のデータIDに対応するデータユニットの複製(同一の複数の複製データユニット)を、それぞれ異なるワークユニット部25に割り当てる。そして、データ配置計画部61は、(B)各データIDに対応するデータユニットの数(データユニットの冗長度数r)を全て等しくする。さらに、データ配置計画部61は、(C)各ワークユニット部25に割り当てるデータユニット数(複製データユニットの数)の標準偏差が最小となる(ばらつき度合いが小さくなる)組合せを選択する。そして、さらに、データ配置計画部61は、選択した組合せの中で(D)異なる少なくとも2つのワークユニット部25に割り当てられる同一のデータIDに対応するデータユニットの個数(ミラーテーブル値、複製データユニット群の数)の標準偏差が最小になり、かつ、ワークユニット部25の組合せのミラーテーブル値の合計値(総和)が最小になる配置パターンを選択する。そして、これらの条件を満たすデータ配置パターンが複数存在する場合には、データ配置計画部61は、任意の一つの配置パターンを選択する。なお、(A)と(B)の条件は満たさなければならないが、(C)、(D)の順番は逆でも良い。また、(C)と(D)の条件のうちの一方(特に条件(D))を満たすようにすることもできる。
以下、データ配置計画部61のデータユニットの割り当て処理について具体的に説明する。まず、データ配置計画部61は、例えばワークユニットIDを縦軸、データIDを横軸としたデータ配置マトリクス(データユニット出力表)を作成する。そして、データ配置計画部61は、作成したデータ配置マトリクスの領域を理想データ配置可能領域と理想データ配置不可能領域とに分割する。
具体的には、データ配置計画部61は、データ配置マトリクスのデータID列の領域を、データIDの若い順から、ワークユニット数wとデータユニットの冗長度数rの組合せ数(wCr)毎に分割する。ここで、データ配置マトリクスの領域のうち、区切られた領域の列数がwCrとなる領域を理想データ配置可能領域とし、区切られた領域の列数がwCrより小さい値となる領域を理想データ配置不可能領域とする。
例えば、ワークユニット数wが3であり、データユニットの冗長度数rが2である場合、ワークユニット数wと冗長度数rの組合せ数は3C2=3になる。このため、データ配置計画部61は、図4に示すようにデータID「1」乃至「3」の列の領域を理想データ配置可能領域101として分割し、図5に示すようにデータID「4」の列の領域を理想データ配置不可能領域102として分割する。例えば、上記したようにワークユニット数wが3になり、データユニット数dが3になり、冗長度数rが2になる場合、ワークユニットIDとデータIDとの組合せwCrは3であり、データユニット数dも3であるため、理想データ配置可能領域の数は1(wCrをdで割った商)になる。
続いて、データ配置計画部61は、分割した理想データ配置可能領域101に対して、複数のデータユニットの配置を計画する(データユニットの割り当てを行う)。具体的には、データ配置計画部61は、まず、全ワークユニットIDから予め設定されたデータユニットの冗長度数rのワークユニットIDを選択する組合せ(データ配置パターン)を算出する。例えば、3つのワークユニットID「1」乃至「3」から2つ(冗長度数r)のワークユニットIDを選択する場合、その組合せは(1,2),(1,3),(2,3)の3通りになる。
そして、データ配置計画部61は、理想データ配置可能領域に、算出したデータ配置パターンを均一に割り当てる(例えば図4参照)。この条件を満たせば、ワークユニットIDの組合せを、理想データ配置可能領域内のどのデータIDの列に配置してもよい。なお、データ配置計画部61は、理想データ配置可能領域101に対するデータ配置パターンが複数存在する場合には、任意の一つを選ぶ。例えば、データ配置計画部61は、図4に示すように、ワークユニットIDの組合せ(1,2)をデータID「1」の列に割り当てる。また、データ配置計画部61は、ワークユニットIDの組合せ(1,3)をデータID「2」の列に割り当てる。さらに、データ配置計画部61は、ワークユニットIDの組合せ(2,3)をデータID「3」の列に割り当てる。このように、データ配置計画部61は、各ワークユニットIDの組み合わせを各データIDの列に割り当てたデータ配置パターンを選択(算出)する。
次に、データ配置計画部61は、理想データ配置不可能領域102に対して、冗長度数rを満たすようにデータユニットを配置する。具体的には、データ配置計画部61は、理想データ配置不可能領域102に対して、w個のワークユニットIDからr個のワークユニットIDを選択するワークユニットIDの組合せwCrを割り当てるデータ配置パターンを算出する。図5の例では、データ配置計画部61は、データ配置パターンとして、データID「4」の列に配置するワークユニットIDの組合せ(1,2),(2,3),(1,3)を算出する。
次に、データ配置計画部61は、上述した条件(C)を満たすデータ配置パターンを算出する。つまり、データ配置計画部61は、理想データ配置可能領域101と理想データ配置不可能領域102とのそれぞれに対して算出したデータ配置パターンから、各ワークユニットIDに割り当てられるデータユニット数の標準偏差が最小になるデータ配置パターンを算出する。なお、上記した例では、算出したデータ配置パターン(ワークユニットIDの組合せ(1,2),(2,3),(1,3))のそれぞれに対して算出した各ワークユニットIDに割り当てられるデータユニット数の標準偏差は、全て同じになる。従って、データ配置計画部61は、理想データ配置不可能領域102に対するデータ配置パターンとして、ワークユニットIDの組合せ(1,2),(2,3),(1,3)を算出する。
次に、データ配置計画部61は、上述した条件(D)を満たすデータ配置パターンを算出る。つまり、データ配置計画部61は、算出したデータ配置パターンの中から、ミラーテーブル値の標準偏差が最小になるデータ配置パターンを選択する。ミラーテーブル値は、予め設定された少なくとも2つの各ワークユニット部25に同一のデータIDのデータユニットが割り当てられた同一のデータIDのデータユニットの個数(同一の複製データユニット群の数)を表す。ここでは、データ配置計画部61は、算出したワークユニットIDの組合せ毎に、ミラーテーブル値を算出(取得)し、ミラーテーブル値の標準偏差が最小になり、且つ、ワークユニット間のミラーテーブル値の合計値が最小になるデータ配置パターンを選択する。なお、データ配置計画部61は、少なくともミラーテーブル値の標準偏差が最小になるデータ配置パターンを選択すればよい。
図5は、理想データ配置不可能領域102(データID「4」の列)のデータ配置パターンとして、ワークユニットIDの組合せ(1,2)を選択した例を示す図である。そして、例えば、データ配置計画部61は、図5のデータ配置パターンに対して、ワークユニットIDの組合せ毎にミラーテーブル値を算出する。つまり、データ配置計画部61は、図6に示すように、ワークユニットIDの組合せ(1,2)に対するミラーテーブル値として「2」を算出する。また、データ配置計画部61は、ワークユニットIDの組合せ(2,3)に対するミラーテーブル値として「1」を算出する。そして、データ配置計画部61は、ワークユニットIDの組合せ(1,3)に対するミラーテーブル値として「1」を算出する。なお、上記した例では、算出したデータ配置パターン(ワークユニットIDの組合せ(1,2),(2,3),(1,3))のそれぞれに対して算出したワークユニットIDの組合せ毎のミラーテーブル値の標準偏差は、全て同じになる。従って、例えば、データ配置計画部61は、理想データ配置不可能領域102に対するデータ配置パターンとして、ワークユニットIDの組合せ(1,2),(2,3),(1,3)を選択する。
なお、上述した条件(C)と(D)とを満たす理想データ配置不可能領域102のデータ配置パターンが複数ある場合には、データ配置計画部61は、任意の一つを理想データ配置不可能領域102のデータ配置パターンとして選択する。例えば、データ配置計画部61は、データID「4」の列に対して、ワークユニットIDの組合せが(1,2)になるデータ配置パターンを選択する。これにより、データ配置計画部61は、複数のデータユニットを複数のワークユニット部25のそれぞれに割り当てるデータ配置パターンを決定することができる。
そして、データ配置計画部61は、作成したデータ配置マトリクスを、データ配置記憶部64に記憶する。図7はワークユニット数が3、データ数が4の場合のデータ配置マトリクスの例である。図7の例では、「○」がワークユニットIDに対応するワークユニット部25に、データIDに対応する複製データユニットを割り当てた(配置済みである)ことを示している。また、図7の例では、空欄は、ワークユニット部25に複製データユニットを配置していないことを意味している。
ここで、上述した条件(A)乃至(C)を満たすが、条件(D)を満たさない場合のデータ配置パターンについて説明する。図8は、データユニットの冗長度数rと各ワークユニットに割り当てられたデータユニットの数は等しいが、図7のデータ配置マトリクスよりもミラーテーブル値の標準偏差値が大きくなるデータ配置マトリクスの例である。そして、データ配置計画部61は、図8のデータ配置マトリクスのデータ配置パターンに対して、ワークユニットIDの組合せ毎にミラーテーブル値を算出し、標準偏差を算出する。図9は、図8のデータ配置マトリクスのデータ配置パターンに対して算出したミラーテーブル値と標準偏差を示す図である。図9に示すように、図8のデータ配置マトリクス(のデータ配置パターン)におけるミラーテーブル値の標準偏差は0.94となる。
一方、上述した条件(A)乃至(C)に加えて、条件(D)を満たすデータ配置パターンは、図10のデータ配置マトリクスのようになる。そして、データ配置計画部61は、図10のデータ配置マトリクスのデータ配置パターンに対して、ミラーテーブル値と標準偏差を算出する。ミラーテーブル値と標準偏差の算出結果を図11に示す。図11に示すように、図10のデータ配置マトリクスにおけるミラーテーブル値の標準偏差値は、0.47になる。
また、図12Aを参照して、条件(D)を満たさない場合のデータ配置パターンについて説明する。図12Aは、ミラーテーブル値の総和が大きくなるデータ配置マトリクスの例である。図12Aに示すように、ワークユニットID「1」,「2」のワークユニット部25のそれぞれには、データID「1」,「2」のデータユニットが割り当てられている。この場合、データ配置計画部61は、ミラーテーブル値(の総和)として2を算出し、標準偏差として0を算出する。
一方、条件(D)を満たすデータ配置パターンは、図12Bのデータ配置マトリクスのようになる。図12Bの例では、データ配置計画部61は、ミラーテーブル値(の総和)として1を算出し、標準偏差として0を算出する。このように、ミラーテーブル値の標準偏差が同じ値でも、ミラーテーブル値の合計値(総和)が異なる場合がある。このような場合に、データ配置計画部61は、ミラーテーブル値の総和が最小になるデータ配置パターンを選択する。
このように、ミラーテーブル値の標準偏差(ばらつき度合い)が小さくなり、かつ、ワークユニット部25の組合せのミラーテーブル値の合計値が最小になるようにデータ配置パターンを選択(算出)することで、重複するデータユニットが1つのワークユニット部25に集中することがなく分散して割り当てられる。従って、あるワークユニット部25に障害等が発生した場合でも、障害等が発生したワークユニット部25が保持するデータユニットと同一のデータユニットを保持するワークユニット部25が、代わりにデータユニットに対する処理を行うことができる。この結果、全てのデータユニットに対するタスクを迅速に行い、スループットを向上させることができる。
最後に、データ配置実行部62は、データ配置記憶部64に記憶されたデータ配置マトリクスに基づいて、複数のデータユニットを複数のワークユニット部25のそれぞれへ出力する。具体的には、データ配置実行部62は、データ配置マトリクスに基づいて、複製データユニットが配置済みのワークユニットIDとデータIDの組合せのデータ配置リストを取得する。そして、データ配置実行部62は、データIDをキーにしてマスタデータ記憶部63からデータ内容を取得し、ワークユニットIDに対応するワークユニット部25の複製データ記憶部73に、データIDと当該データIDに対応するデータ内容とを出力する。これにより、複製データ記憶部73に、複製データユニットが記憶され、複数の複製データユニットを複数のワークユニット部25のそれぞれに配置することができる。
次に、ジョブを実行するためのジョブ登録処理について説明する。まず、タスク管理部22の構成について説明する。タスク管理部22(処理要求制御手段)は、ジョブ受信部41と、タスク生成部42と、タスクスケジュール部43と、ジョブ記憶部44と、タスク記憶部45と、を備える。
ジョブ受信部41は、ジョブクライアント12からジョブを受信し、受信したジョブをジョブ記憶部44に記憶する。例えば、ジョブ受信部41は、ジョブクライアント12からジョブを受信すると、ジョブ毎にユニークなジョブIDを発行する。そして、ジョブ受信部41は、図13に示すようにジョブ記憶部44にジョブIDと、ジョブクライアント12が投入するジョブ内容と、ジョブを受信したことを表すジョブ状態「待機中」と、を対応付けて記憶する。ジョブ状態は、ジョブに関連するタスクがタスクスケジュール部43により出力されると「実行中」に変更され、ジョブに関連する全てのタスクが完了すると「完了」に変更される。また、ジョブ受信部41は、ジョブを受信した場合に、タスク生成部42にジョブをタスクに分割するように要求を出す。
タスク生成部42は、ジョブ受信部41が受信したジョブを、マスタデータ記憶部63に記憶されたデータユニットの数に応じて分割した、当該データユニットに対するタスクを生成し、生成した各タスクをタスク記憶部45に記憶する。そして、タスク生成部42は、図14に示すように、タスクを識別するタスクIDと、タスクの元となるジョブIDと、タスクの対象になるデータユニットのデータIDと、タスクが登録された状態であるタスク状態「待機中」と、を対応付けてタスク記憶部45に記憶する。タスク状態は、タスク生成部42がタスクを生成しタスク記憶部45に記憶した段階では「待機中」になる。また、タスク状態は、タスクスケジュール部43がワークユニット部25にタスクを出力した時には「実行中」になる。そして、タスク状態は、ワークユニット部25がタスク結果を処理しタスク結果をタスク集約部23に出力し、タスク集約部23がタスク記憶部45にタスク結果を記憶した時に「完了」になる。このように、タスク生成部42は、ジョブから、複数のデータユニットのそれぞれに対応付けて分割したタスクを生成し、タスク記憶部45に登録(記憶)する。
最後に、ジョブ実行処理について説明する。この例では、図7のデータ配置マトリクスに基づいて、3つのワークユニット部25のそれぞれにデータユニットが割り当てられた状態であるとする。つまり、ワークユニットID「1」のワークユニット部25(複製データ記憶部73)には、データID「1」,「2」,「4」のデータユニットの複製(複製データユニット)が配置されているものとする。また、ワークユニットID「2」のワークユニット部25には、データID「1」,「3」,「4」のデータユニットの複製が配置されているものとする。そして、ワークユニットID「3」のワークユニット部25には、データID「2」,「3」のデータユニットの複製が配置されているものとする(例えば、図15参照)。
ここで、ジョブに基づくタスクを実行するワークユニット部25について説明する。ワークユニット部25は、タスク要求部71と、タスク実行部72と、複製データ記憶部73と、を備える。タスク要求部71は、実行するタスクが無いあるいは少ない場合に、分散処理システム1全体でユニークであるワークユニットIDと、複製データ記憶部73に記憶されたデータID(データユニットを特定する特定情報)の全てを、タスクスケジュール部43にタスク要求として出力する。例えば、ワークユニットID「3」のワークユニット部25は、自身の複製データ記憶部73に記憶されたデータID「2」,「3」を示すリストを作成し、当該リストと、自身のワークユニットID「3」と、を対応付けたタスク要求をタスクスケジュール部43に出力する。
そして、タスクスケジュール部43は、ワークユニット部25から出力されたタスク要求に対するタスクをタスク記憶部45から取得し、タスク要求を出力したワークユニット部25へ、取得したタスクを出力する。例えば、タスクスケジュール部43は、ワークユニットID「3」のワークユニット部25から出力された、ワークユニットID「3」と、当該ワークユニット部25自身が記憶するデータID「2」,「3」を示すリストを受信する。続いて、タスクスケジュール部43は、タスクの状態が「待機中」であり、かつ、受信したリストに含まれるデータIDに合致するタスクIDをタスク記憶部45から検索し、合致する全てのまたは一部のジョブIDを取得する。なお、タスクスケジュール部43は、ジョブIDを取得する際に、複数のジョブIDが存在する場合には、一つのジョブIDを取得してもよいし、全てのジョブIDを取得してもよい。例えば、タスクスケジュール部43は、データID「2」,「3」に合致するタスクID「2」,「3」を検索し、タスクID「2」,「3」のそれぞれに対応するタスクの情報を取得する。
そして、タスクスケジュール部43は、タスクID「2」,「3」のそれぞれに、タスクを要求したワークユニットID「3」を対応付けて登録するとともに、タスク状態として「実行中」を登録する(例えば図16参照)。続いて、タスクスケジュール部43は、取得したジョブID(例えばジョブID「1」)に対応するジョブ内容を取得する。最後に、タスクスケジュール部43は、タスクIDと、ジョブIDと、データIDと、ジョブの内容と、を一つのタスク要求のレスポンス(タスク情報)にし、ワークユニット部25へ出力する。例えば、タスクスケジュール部43は、ワークユニットID「3」のワークユニット部25へ、データID「2」,「3」に対応するタスク情報を出力する。
ワークユニット部25のタスク要求部71は、タスクスケジュール部43からタスク要求のレスポンス(タスク情報)を受信した場合、タスク実行部72に、タスク情報を出力する。そして、タスク実行部72は、タスク情報に含まれるジョブの内容に基づいて、タスク(データユニットに対する所定の処理)を実行する。1つのタスクは、特定のデータユニットに対応付けられている。このため、タスク実行部72は、タスク情報に含まれるデータIDをキーにして、複製データ記憶部73からタスクの対象になる複製データユニットを取得する。続いて、タスク実行部72は、複製データ記憶部73に記憶された複製データユニットのデータ内容と、ジョブ内容と、に基づいて、タスクを実行する。実行する内容については、ジョブ内容とデータ内容に対するどのような処理であってもよい。また、タスク実行部72は、一つのジョブIDに対応付けられたタスク群を並列に実行してもよいし、シリアル(1つずつ順番)に実行してもよい。
例えば、図15に示すように、データID「2」のデータ内容は「YYY」であり、データID「3」のデータ内容は「ZZZ」であり、図13に示すように、ジョブID「1」のジョブ内容は「AAA」である。従って、タスク実行部72は、タスクの処理がジョブ内容とデータ内容とで一致する文字数をカウントする処理の場合には、タスクID「2」のタスク処理結果として「0」を出力し、タスクID「3」のタスク処理結果として「0」を出力する。
そして、タスク実行部72は、タスク情報に含まれる一部または全てのタスク群の実行が完了した場合に、タスクIDと、タスクIDに紐付くジョブIDと、タスクの処理結果としてのタスク結果と、からなるタスクの実行結果のリストを、タスク実行結果群として、タスク結果受信部51に出力する。また、タスク実行部72は、タスク要求部71に新たなタスクを取得するように依頼をする。
ここで、ワークユニットID「3」のワークユニット部25がタスク要求を出力した後、ワークユニットID「1」のワークユニット部25がタスク要求を出力した場合について説明する。例えば、ワークユニットID「1」のワークユニット部25は、自身の複製データ記憶部73に記憶されたデータID「1」,「2」,「4」を示すリストを作成する。そして、ワークユニットID「1」のワークユニット部25は、当該リストと、自身のワークユニットID「1」と、を対応付けたタスク要求をタスクスケジュール部43に出力する。
続いて、タスクスケジュール部43は、ワークユニットID「1」のワークユニット部25から出力された、ワークユニットID「1」と、当該ワークユニット部25自身が記憶するデータID「1」,「2」,「4」を示すリストを受信する。すると、タスクスケジュール部43は、データID「1」,「2」,「4」に合致するタスクID「1」,「2」,「4」を検索し、タスク状態が「待機中」であるタスクID「1」,「4」のそれぞれに対応するタスクの情報を取得する。
そして、タスクスケジュール部43は、タスクID「1」,「4」のそれぞれに、タスクを要求したワークユニットID「1」を対応付けて登録するとともに、タスク状態として「実行中」を登録する(例えば図16参照)。続いて、タスクスケジュール部43は、取得したジョブID「1」に対応するジョブ内容を取得し、タスクIDと、ジョブIDと、データIDと、ジョブの内容と、をタスク情報として、ワークユニットID「1」のワークユニット部25へ出力する。
なお、タスクの配送(出力)方法は、上記に限られない。例えば、タスクスケジュール部43は、各ワークユニット部25に割り当てられたデータユニットの数の平均値以下の数のタスクをワークユニット部25へ出力することができる。まず、タスクスケジュール部43は、各ワークユニット部25に割り当てられたデータユニット数の総和を算出する。図7の例では、ワークユニットID「1」のワークユニット部25には3つのデータユニットが割り当てられている。また、ワークユニットID「2」のワークユニット部25には3つのデータユニットが割り当てられている。そして、ワークユニットID「3」のワークユニット部25には2つのデータユニットが割り当てられている。従って、タスクスケジュール部43は、データユニット数の総和として8(=3+3+2)を算出する。なお、データユニット数の総和は、冗長度数r(=2)とデータユニット数d(=4)との積により算出することができる。そして、タスクスケジュール部43は、算出したデータユニット数の総和をワークユニット数w(=3)で割り、平均値(=2.6)を算出する。
そして、タスクスケジュール部43は、算出した平均値以下の数のタスクを取得する。例えば、タスクスケジュール部43は、算出した平均値が2.6である場合、最大で2つのタスクを取得する。例えば、タスクスケジュール部43は、3つのタスク(タスクID「1」,「3」,「4」)から任意の2つのタスクを選択する。そして、タスクスケジュール部43は、選択した2つのタスクをワークユニットID「2」のワークユニット部25へ出力する。このように、一度に出力するタスクの最大値を設定することで、所定のワークユニット部25に割り当てられたデータユニットに対する分割処理要求の全てが、他のデータユニット処理部に出力される可能性が小さくなり、分割処理要求に対する処理を行うことができないデータユニット処理部の数が減少する。この結果、全ての分割処理要求(データユニット)に対する処理を迅速に行い、スループットを向上させることができる。
続いて、ワークユニット部25からタスク実行結果群を受信するタスク集約部23の構成の詳細について説明する。タスク集約部23は、タスク結果受信部51と、ジョブ結果出力部52と、を備える。
タスク結果受信部51は、ワークユニット部25から受信したタスク実行結果群を、タスク毎にタスク記憶部45に記憶する。具体的には、タスク結果受信部51は、タスク実行結果群に含まれるタスクのタスクIDをキーにして、タスク記憶部45から該当するレコードを探し、タスクのタスク実行結果をタスク結果として記憶するとともに、タスク状態として「完了」をタスク記憶部45に記憶する。続いて、タスク結果受信部51は、タスク実行結果の受信後に、ジョブ結果出力部52にジョブの完了判定依頼を出力する。
ジョブ結果出力部52は、ジョブの完了判定処理を行い、ジョブに紐付くタスクが全て「完了」になっている場合にタスクの集計処理を行い、ジョブの結果生成をしてクライアントに出力する。具体的には、ジョブ結果出力部52は、タスク記憶部45に記憶されたタスク群をジョブID毎にグルーピングし、そのジョブID毎に、そのジョブIDに紐付くタスク群のタスク状態が全て「完了」になっているかを判定する。そして、ジョブ結果出力部52は、ジョブID毎にジョブIDに紐付くタスクのタスク状態が全て「完了」である場合(例えば図18)には、そのジョブIDは完了していると判定する。そして、ジョブ結果出力部52は、ジョブのタスク記憶部45のそのジョブIDに紐付くタスクのタスク結果を取得し、タスク結果に対して集計処理を行い、ジョブ結果を生成する。集計処理はタスク結果に対するどのような処理でも良く、それにより生成されるジョブ結果もどのようなものでもよい。ジョブ結果出力部52は、完了していないジョブIDのジョブに対しては何もしない。続いて、ジョブ結果出力部52は、完了したジョブのジョブ結果をジョブクライアント12に返却し、ジョブ記憶部44の該当するジョブIDのジョブ状態を「完了」に変更する(例えば図19)。
ここで、図20と図21とを参照して、ミラーテーブル値の標準偏差の違いによるジョブ完了までの処理について説明する。図20は、ミラーテーブル値の標準偏差が高いデータ配置パターン(例えば図8)のジョブ完了までのタイミングチャートを示す。図21は、ミラーテーブル値の標準偏差が最小になるデータ配置パターン(例えば図10)のジョブ完了までのタイミングチャートを示す。なお、図20と図21の例では、ジョブ「1」乃至「4」の4つのジョブのそれぞれに、4つのタスク「1」乃至「4」が割り当てられており、当該タスクが対象とするデータユニットが図8または図10のデータ配置パターンに示すように割り当てられているものとする。また、ここでは、1つのタスク(データユニットに対する処理)が完了するのに1秒かかるものとする。さらに、タスクスケジュール部43は、ジョブの番号が小さい順(つまりジョブ「1」から順番)に、ジョブに対応するタスクを出力するものとする。
そして、図20の例では、図8のデータ配置パターンに示すようにデータユニットが記憶されているものとする。つまり、例えば、ワークユニット部「WU1」,「WU2」は、ジョブ1乃至4のそれぞれに対応するデータID「1」,「3」のデータユニットを予め記憶している。また、ワークユニット部「WU3」,「WU4」は、ジョブ1乃至4のそれぞれに対応するデータID「2」,「4」のデータユニットを予め記憶している。
この図20の例では、まず、ワークユニット部「WU1」がタスクスケジュール部43に対してタスク要求を出力し、ジョブ「1」に対応するタスク「1」,「3」(以下、ジョブ1(1,3)と記載する)を取得する。そして、ワークユニット部「WU1」は、取得したタスクを実行する。また、同様に、ワークユニット部「WU2」は、ジョブ2(1,3)を取得し、取得したタスクを実行する。続いて、ワークユニット部「WU3」は、ジョブ1(2,4)を取得し実行し、ワークユニット部「WU4」は、ジョブ2(2,4)を取得し実行する。これにより、タスクスケジュール部43は、ジョブ「1」,「2」に対するタスクを全て出力することができる。
このような場合に、ワークユニット部「WU3」に障害等が発生し、ジョブ1(2,4)が完了するまでに5秒かかる例について説明する。ワークユニット部「WU1」は、ジョブ1(1,3)が完了する(2秒経過する)と、続いてジョブ3(1,3)を取得し実行する。また、同様にワークユニット部「WU2」は、ジョブ2(1,3)が完了すると、続いてジョブ4(1,3)を取得し実行する。これにより、ジョブ「1」乃至「4」のそれぞれに対応するタスク「1」,「3」を全て実行することができる。
一方、ワークユニット部「WU4」は、ジョブ2(2,4)が完了したとき、ワークユニット部「WU3」はジョブ1(2,4)を実行中であるので、ジョブ3(2,4)を取得し実行する。そして、ワークユニット部「WU4」は、ジョブ3(2,4)が完了したとき、ワークユニット部「WU3」はまだジョブ1(2,4)を実行中であるので、ジョブ4(2,4)を取得し実行する。このため、図20の例では、ジョブ「1」乃至「4」のそれぞれに対応する全てのタスクが完了するまでの時間は6秒になる。
これに対して、図21の例では、図10のデータ配置パターンに示すようにデータユニット部が記憶されているものとする。つまり、例えば、ワークユニット部「WU1」は、ジョブ1乃至4のそれぞれに対応するデータID「1」,「4」のデータユニットを予め記憶している。そして、ワークユニット部「WU2」は、ジョブ1乃至4のそれぞれに対応するデータID「1」,「2」のデータユニットを予め記憶している。同様に、ワークユニット部「WU3」は、ジョブ1乃至4のそれぞれに対応するデータID「2」,「3」のデータユニットを予め記憶しており、ワークユニット部「WU4」は、ジョブ1乃至4のそれぞれに対応するデータID「3」,「4」のデータユニットを予め記憶している。
図21の例では、まず、ワークユニット部「WU1」は、ジョブ1(1,4)を取得し実行する。続いて、ワークユニット部「WU3」は、ジョブ1(2,3)を取得し実行する。同様に、ワークユニット部「WU2」は、ジョブ2(1,2)を取得し実行し、ワークユニット部「WU4」は、ジョブ2(3,4)を取得し実行する。これにより、タスクスケジュール部43は、ジョブ「1」,「2」に対するタスクを全て出力することができる。このような場合に、図20の例と同様に、ワークユニット部「WU3」に障害等が発生し、ジョブ1(2,3)が完了するまでに5秒かかる例について説明する。
ワークユニット部「WU1」は、ジョブ1(1,4)が完了する(2秒経過する)と、続いてジョブ3(1,4)を取得し実行する。次に、ワークユニット部「WU2」は、ジョブ2(1,2)が完了すると、ジョブ3(2)を取得し実行する。続いて、ワークユニット部「WU4」は、ジョブ2(3,4)が完了すると、ジョブ3(3)を取得し実行する。これにより、タスクスケジュール部43は、ジョブ「3」に対するタスクを全て出力することができる。
そして、ワークユニット部「WU2」は、ジョブ3(2)が完了する(1秒経過する)と、ジョブ4(1,2)を取得し実行する。同様に、ワークユニット部「WU4」は、ジョブ3(3)が完了すると、ジョブ4(3,4)を取得し実行する。このため、図21の例では、ジョブ「1」乃至「4」のそれぞれに対応する全てのタスクが完了するまでの時間は5秒になる。このように、上述した条件(A)乃至(D)を満たすデータ配置パターンを選択することで、スループットを向上することができる。
このように、本実施形態では、データユニットの冗長度が等しくなるように、ワークユニット部25にデータユニットが配置されている。そして、ワークユニット部25が保持するデータユニット数の標準偏差が最小となるようにワークユニット部25に均一のデータユニット数が配置される。さらに、ワークユニット部25間で同一の複製データユニットを保持する個数の標準偏差が小さくなるような配置になるデータ配置パターンを作成する。このような、データ配置パターンを作成することによりシステムの冗長性の維持とワークユニット部25の負荷分散が可能になる。
さらに、データユニットが配置されたワークユニット部25は、自身が保持するデータIDのリストをタスクスケジュール部43に出力し、タスクスケジュール部43は処理対象であるデータユニットの識別子が合致するタスク群の中から、他のワークユニット部25が既に取得していないタスクを返す。このため、タスクスケジュール部43は、ワークユニット部25で必要なタスクでかつ他のワークユニット部25で実行されていないタスク群だけを出力するため、データユニットが冗長配置されていても同じデータユニットに対するタスクを重複して処理することがない。このように構成されているため、異なるワークユニット部25で同時に複数の異なるタスク群を分散して実行できるため、システムの冗長度を保ちながら、ジョブが完了するまでの時間を短くすることができる。
(動作)
以下では、図22を用いて、分散処理システム1の全体の動作手順について詳細に説明する。まず初めに、ジョブがクライアントから投入される前に、各ワークユニット部25には処理対象となるデータ配備がされていなければならない。データ配備が行われた後に、ジョブクライアント12からのジョブ登録と、タスクスケジュール部43と、ワークユニット部25と、タスク集約部23と、によるジョブ実行の動作手順が動作することで、ジョブが実行されクライアントにジョブ結果が出力される。以下では、データ配備の動作手順、ジョブ登録の手順、ジョブ実行の手順の詳細について説明を行う。
まず、図22を参照して、本実施の形態におけるデータ配備の動作手順について説明する。ここでは、まず、ワークユニット管理部21は、ワークユニット記憶部31にワークユニットを登録する(ステップS1)。具体的には、まず、システム管理クライアント13が複数のワークユニット部25のそれぞれにユニークな(個別の)ワークユニットIDを払い出す。そして、ワークユニット管理部21は、システム管理クライアント13にて払い出されたワークユニットIDを取得し、ワークユニット記憶部31に登録(記憶)する。例えば、ワークユニット部25が3つ存在する場合、図2に示すように、ワークユニット記憶部31に3つのワークユニットIDと、当該ワークユニットIDに対応するワークユニット部25の情報(例えばワークユニット名)と、が対応付けて記憶される。
続いて、データ配置管理部24は、データ配置記憶部64にマスタデータを登録する(ステップS2)。具体的には、ます、システム管理クライアント13が複数のデータユニットのそれぞれにユニークなデータIDを払い出す。そして、データ配置管理部24は、システム管理クライアント13にて払い出されたデータIDを取得し、データ配置記憶部64に登録する。例えば、図3に示すように、4つのデータユニット(データ内容)のそれぞれにデータIDが対応付けて記憶される。なお、データ内容は、ワークユニット部25のタスク実行部72が実行できる内容であれば、どのようなデータ内容でもよい。
そして、データ配置計画部61は、データユニット配置計画処理を行う(ステップS3)。図23を参照して、データユニット配置計画処理について説明する。図23のデータユニット配置計画処理では、まず、データ配置計画部61は、ワークユニットIDを縦軸、データIDを横軸としたデータの配置マトリクスを作成する(ステップS21)。続いて、データ配置計画部61は、ステップS21の処理にて作成したデータ配置マトリクスの領域を理想データ配置可能領域と理想データ配置不可能領域とに分割する(ステップS22)。
具体的には、データ配置計画部61は、データ配置マトリクスのデータID列の領域を、データIDの若い順から、ワークユニット数wとデータユニットの冗長度数rの組合せ数(wCr)毎に分割する。ここで、データ配置マトリクスの領域のうち、区切られた領域の列数がwCrとなる領域を理想データ配置可能領域とし、区切られた領域の列数がwCrより小さい値となる領域を理想データ配置不可能領域とする。例えば、ワークユニット数wが3であり、データユニットの冗長度数rが2であり、データユニット数dが4である場合、ワークユニット数wと冗長度数rの組合せ数は3C2=3になる。このため、図4に示すように、データIDが1乃至3の列の領域が理想データ配置可能領域になり、図5に示すように、データIDが4の列の領域が理想データ配置不可能領域になる。
続いて、データ配置計画部61は、ステップS22の処理にて分割した理想データ配置可能領域を1つ取得する(ステップS23)。図4の例では、データ配置可能領域は1つであるので、データID1乃至ID3の列の領域を示す理想データ配置可能領域を取得する。続いて、データ配置計画部61は、ステップS23の処理にて取得したデータ配置可能領域に対して、データ配置パターンを算出する(ステップS24)。
具体的には、データ配置計画部61は、全ワークユニットIDの中から事前に与えられたデータユニットの冗長度数rのワークユニットIDを選択する組合せであるデータ配置パターンを算出する。そして、全ての理想データ配置可能領域において、このワークユニットIDからデータユニットの冗長度数rを選ぶ組合せのパターンを全て均一に含むように、ワークユニットIDの組合せをデータIDに対して割り当てる。この条件を満たせば、どのワークユニットIDの組合せを、理想データ配置可能領域内のデータID列に配置してもよい。ここで計算された理想データ配置可能領域へのデータ配置パターンが複数存在する場合は、任意の一つを選ぶ(例えば図4)。
次に、データ配置計画部61は、全ての理想データ配置可能領域を取得したか否かを判定する(ステップS25)。全ての理想データ配置可能領域を取得していないと判定した場合、処理はステップS23に戻り、それ以降の処理が繰り返される。一方、全ての理想データ配置可能領域を取得したと判定した場合、処理はステップS26に進む。上述した図4の例では、理想データ配置可能領域は1つであるので処理はステップS26に進む。
ステップS26において、データ配置計画部61は、理想データ配置不可能領域のデータ配置計画作成処理を行う。理想データ配置不可能領域のデータ配置計画作成処理について図24を参照して説明する。
図24のデータ配置計画作成処理では、まず、冗長度を満たす配置パターンを算出する(ステップS31)。具体的には、まず、データ配置計画部61は、w個のワークユニットIDからr個のワークユニットIDを選択するワークユニットIDの組合せwCrを算出する。そして、データ配置計画部61は、理想データ配置不可能領域内のデータIDの列数(例えば1)だけ、そのワークユニットIDの組合せを配置する(割り当てる)データ配置パターンを算出する。図5の例では、データ配置計画部61は、データ配置パターンとして、データIDが4の列に配置するワークユニットIDの組合せ(1,2),(2,3),(1,3)を算出する。
続いて、データ配置計画部61は、ステップS31の処理にて算出したデータ配置パターンの中から、各ワークユニットIDに割り当てられるデータユニット数の標準偏差が最小になるデータ配置パターンを算出する(ステップS32)。具体的には、算出したデータ配置パターンの中から、配置されたデータユニット数が最小になるワークユニットIDを含み、且つ、各ワークユニットIDに割り当てられるデータユニット数の標準偏差が最小になるデータ配置パターンを算出する。図5の例では、データ配置計画部61は、データ配置パターンとして、ワークユニットIDの組合せ(1,2),(2,3),(1,3)を算出する。
そして、データ配置計画部61は、ステップS32の処理にて算出したデータ配置パターンの中から、ミラーテーブル値の標準偏差が最小になるデータ配置パターンを選択する(ステップS33)。ミラーテーブル値は、2つのワークユニットのそれぞれに割り当てられる同一のデータIDのデータユニットの個数である。
図5は、データ配置不可能領域(データIDが4の列)のデータ配置パターンとして、ワークユニットIDの組合せ(1,2)を選択した場合の例を示す図である。そして、図6に示すように、ワークユニットIDの組合せ(1,2)に対するミラーテーブル値は「2」になり、組合せ(2,3)に対するミラーテーブル値は「1」になり、組合せ(1,3)に対するミラーテーブル値は「1」になる。そして、例えば、データ配置計画部61は、データ配置パターンとして、ワークユニットIDの組合せ(1,2),(2,3),(1,3)を選択する。
上記したように、ステップ33の処理にて選択したデータ配置パターンが複数ある場合は、データ配置計画部61は、その中から任意の一つを選び、選んだデータ配置パターンを理想データ配置不可能領域でのデータ配置パターンとする。例えば、データ配置計画部61は、データIDが4の列に対して、ワークユニットIDの組合せ(1,2)を選択する。これにより、データ配置計画部61は、データ配置マトリクス中の全ての領域について、データ配置計画の作成を完了し、処理は図23のステップS27に進む。
そして、図23のステップS27において、データ配置計画部61は、データ配置マトリクスを記憶する(ステップS27)。つまり、データ配置計画部61は、図23のステップS24の処理にて算出した理想データ配置可能領域のデータ配置パターンと、図24のステップS33の処理にて算出した理想データ配置不可能領域のデータ配置パターンと、を1つのデータ配置マトリクスとして、データ配置記憶部64に記憶する(例えば図7)。そして、ステップS27の処理の後、処理は図22のステップS4に進む。
そして、図22のステップS4において、データ配置実行部62は、ステップS27の処理にて記憶されたデータ配置マトリクスに基づいて、各データユニットを出力する(ステップS4)。具体的には、まず、データ配置実行部62は、データ配置マトリクスに基づいて、各ワークユニットIDに割り当てられたデータIDに対応するデータユニットを、マスタデータ記憶部63に記憶されたマスタデータから取得する。そして、データ配置実行部62は、取得したデータユニット(複製データユニット)と、当該複製データユニットに対応付けられたデータIDと、をワークユニットIDにて示されるワークユニット部25へ出力する。そして、ワークユニット部25は、データ配置管理部24から出力されたデータIDと複製データユニットとを対応付けて、複製データ記憶部73に記憶する。これにより、各ワークユニット部25が、複製データ記憶部73に記憶したデータユニットに対する所定の処理を実行することが可能になる。
次に、図25を参照して、クライアントから投入されたジョブを実行する場合の処理について説明する。まず、タスク管理部22のジョブ受信部41は、ジョブクライアント12から出力されたジョブを受信する(ステップS41)。このジョブは、マスタデータに対する処理要求を表す。続いて、ジョブ受信部41は、ステップS41の処理にて受信したジョブを記憶する(ステップS42)。具体的には、ジョブ受信部41は、ジョブ毎にユニークなジョブIDと、ジョブ状態として「待機中」をジョブ記憶部44に対応づけて記憶する(例えば図8)。
続いて、タスク生成部42は、ステップS41の処理にて受信したジョブに対応するタスクを生成する(ステップS43)。具体的には、タスク生成部42は、マスタデータ記憶部63に記憶されたデータID(データユニット)の数のタスクを生成する。そして、タスク生成部42は、ステップS43の処理にて生成したタスクを記憶する(ステップS44)。具体的には、タスク生成部42は、生成したタスク毎に設定したユニークなタスクIDと、タスクの分割元となるジョブIDと、タスクが対象とするデータIDと、タスク状態として「待機中」と、を対応付けてタスク記憶部45に記憶する(例えば図14)。なお、タスクの対象となるデータIDは、タスク毎に異なるものでなければならない。ステップS44の処理の後、処理は終了する。これにより、各データユニットに対するタスクを割り当てることができる。
次に、図26乃至図28を参照して、タスクを実行する場合の処理について説明する。ワークユニット群は複数のワークユニット部25から構成され、それぞれのワークユニット部25は独立して動くものとする。
まず、ワークユニット部25は、複製データ記憶部73に記憶されたデータID(データユニット)のリストを取得する(ステップS61)。続いて、ワークユニット部25は、タスク管理部22に対してタスク要求を出力する(ステップS62)。このタスク要求には、ステップS61の処理にて取得したデータIDのリストが含まれる。
次に、タスクスケジュール部43は、ワークユニット部25から出力されたタスク要求を受信する(図27のステップS71)。続いて、タスクスケジュール部43は、ステップS71の処理にて受信したタスク要求に基づくタスクを取得する(ステップS72)。具体的には、タスクスケジュール部43は、タスクの状態が「待機中」であり、受信したタスク要求に含まれるデータIDのリストと合致するタスクID群をタスク記憶部45から検索し、合致する全てのタスクまたは一部のタスク(タスク群)を取得する。
そして、タスクスケジュール部43は、ステップS72の処理にて取得したタスクに基づくタスク情報を出力する(ステップS73)。具体的には、タスクスケジュール部43は、まず、取得したタスクのそれぞれのタスク状態を「実行中」に変更する(例えば図16)。また、タスクスケジュール部43は、取得したタスクのそれぞれに対応付けて、タスク要求を出力したワークユニット部25のワークユニットIDを記憶する。
次に、タスクスケジュール部43は、取得したタスクのタスクIDに対応するジョブIDのリストを取得する。続いて、タスクスケジュール部43は、ジョブ記憶部44から該当のジョブIDに対応するジョブ内容を取得する。そして、タスクスケジュール部43は、タスクIDと、当該タスクIDに対応するジョブIDと、当該タスクIDに対応するデータIDと、ジョブIDに対応するジョブの内容と、をタスク情報として、タスク要求を出力したワークユニット部25に出力する。
次に、ワークユニット部25のタスク要求部71は、タスク情報を受信する(ステップS63)。続いて、ワークユニット部25のタスク要求部71は、タスク情報にタスクが含まれているか否かを判定する(ステップS63)。例えば受信したタスク情報にタスクが含まれていない場合(ステップS63:No)、つまりワークユニット部25が出力したタスク要求に対するタスクが存在しない(例えば他のワークユニット部25が当該タスクを実行した)場合、処理はステップS61に戻り、タスク要求部71は、次のタスクの要求を行う。
一方、タスク情報にタスクが含まれている場合(ステップS63:Yes)、タスク実行部72は、タスクを実行する(ステップS65)。例えば、タスク実行部72は、タスク情報に含まれるデータIDをキーにして、複製データ記憶部73からタスクの対象となるデータユニットのデータ内容を取得する。続いて、タスク実行部72は、取得したデータ内容と、タスクIDに対応するジョブIDのジョブのジョブ内容と、に基づいて、タスクの処理を実行する。実行する内容については、ジョブ内容とデータ内容に対するどのような処理であってもよい。
そして、タスク実行部72は、タスクの実行結果を出力する(ステップS66)。具体的には、タスク実行部72は、タスク要求のレスポンスに含まれる全てのタスク群の実行が完了したら、全てのタスクの実行結果として、タスクIDと、当該タスクIDに対応付けられたジョブIDと、タスクの処理結果としてのタスク結果と、からなるタスクの実行結果のリストを、タスク実行結果群として、タスク結果受信部51に出力する。ステップS66の処理の後、処理はステップS62に戻る。つまり、タスク要求部71は、新たなタスク要求を出力する。
次に、図28を参照して、タスクの実行結果を受信するタスク集約部23の処理について説明する。まず、タスク結果受信部51は、図26のステップS66の処理にて出力されたタスクの実行結果を受信する(ステップS81)。続いて、タスク結果受信部51は、受信したタスク実行結果のリストをタスク毎にタスク記憶部45に記憶する(ステップS82)。具体的には、タスク実行結果に含まれるタスクIDをキーにして、タスク記憶部45から該当するレコードを探し、タスク実行結果であるタスク結果と、タスク状態として完了状態である「完了」と、をタスク記憶部45に記憶する。
次に、ジョブ結果出力部52は、完了したジョブを取得する(ステップS83)。例えば、ジョブ結果出力部52は、ジョブID毎にそのジョブIDに対応付けられたタスク群の状態が「完了」になっているものを取得する。続いて、ジョブ結果出力部52は、ジョブ結果を生成する(ステップS84)。例えば、ジョブ結果出力部52は、タスク記憶部45から、ジョブIDに対応付けられたタスク結果に対して集計処理を行い、ジョブ結果を生成する。なお、集計処理はタスク結果に対するどのような処理でも良く、それにより生成されるジョブ結果もどのようなものでもよい。そして、ジョブ結果出力部52は、完了したジョブのジョブ結果をジョブクライアント12に出力する(ステップS85)。またこのとき、ジョブ結果出力部52は、ジョブ記憶部44の該当するジョブIDのジョブの状態を完了状態である「完了」に変更する(例えば図18)。
このように、本実施の形態では、データユニットの冗長度が等しくなるように、ワークユニット部25にデータユニットが配置されている。そして、ワークユニット部25が保持するデータユニット数の標準偏差が最小となるようにワークユニット部25に均一のデータユニット数が配置される。さらに、ワークユニット部25間で同一の複製データユニットを保持する個数の標準偏差が小さくなるような配置になるデータ配置パターンを作成する。このような、データ配置パターンを作成することによりシステムの冗長性の維持とワークユニット部25の負荷分散が可能になる。
さらに、データユニットが配置されたワークユニット部25は、自身が保持するデータIDのリストをタスクスケジュール部43に出力し、タスクスケジュール部43は処理対象であるデータユニットの識別子が合致するタスク群の中から、他のワークユニット部25が既に取得していないタスクを返す。このため、タスクスケジュール部43は、ワークユニット部25で必要なタスクでかつ他のワークユニット部25で実行されていないタスク群だけを出力するため、データユニットが冗長配置されていても同じデータユニットに対するタスクを重複して処理することがない。このように構成されているため、異なるワークユニット部25で同時に複数の異なるタスク群を分散して実行できるため、システムの冗長度を保ちながら、ジョブが完了するまでの時間を短くすることができる。
また、本実施の形態では、データ配置パターンにより、ワークユニット部25毎のデータ配置数の標準偏差が最小になることから、ワークユニット部25で同時に処理が可能な最大タスク数については、ワークユニット部25間で平準化されるため、ワークユニット部25の処理量は均一になりやすい。さらに、ワークユニット部25間で同一のデータユニットの保持個数の標準偏差が小さくなるように配置計画をしていることから、あるワークユニット部25において、あるデータユニットを対象にしたタスクのタスク実行時間が長くなっている場合でも、その遅いタスクを実行しているワークユニット部25が保持するデータユニット群と同じ複製データユニットを保持する他のワークユニット部25が、その遅いタスクを実行しているワークユニット部25が保持する他のデータIDに対応付けられたタスクを実行することができる。従って、データ配置的にワークユニット部25間で負荷のロードバランスができる。
それに加えて、複製データユニットを配置されたワークユニット部25が、自身が保持するデータIDのリストをタスクスケジュール部43に出力することでタスクを取得し、取得したタスク群が終わったら次のタスクを取得しに行くというプル型のタスク取得をしていることから、このデータ配置方法と組合せることで、ワークユニット部25間でタスクの処理の負荷のロードバランスが可能である。従って、このようなデータ配置とタスクの取得方法の方式であり、ワークユニット部25間でタスクの処理のロードバランスが可能となり、ジョブ数が有限の場合に全てのジョブが完了するまでの時間が短くなり、複数のジョブが存在する場合にジョブのスループットを向上することができる。
また、本実施の形態では、データ配置計画部61のデータユニットを分散配置するアルゴリズムが、データユニットの冗長性を満たすこと、ワークユニット部25が保持するデータユニットの個数の標準偏差が最小となること、ワークユニット部25間で同一のデータユニットを保持する個数の合計値が最小となることの組合せを満たすようにデータ配置を行い、必要最低限のデータ数で冗長度を満たしながら負荷のバランスが行えるデータ配置を行っているため、少ない外部記憶またはメモリで分散データを保持することが可能になっていることができる。この結果、少ないワークユニット部25のサーバ台数で、データユニットを分散配置することが可能である。
また、本実施の形態では、このようなデータ配置に基づき、ワークユニット部25がプル型でタスクを取得する方式であるため、システム負荷を監視して統計情報により負荷を計算するわけではなく、ワークユニット部25にシステム負荷の監視させることによりワークユニット部25に負荷を与えることなく、ワークユニット部25のタスクの負荷を分散することができる。
<第2実施形態>
次に、本発明の第2実施形態に係る分散処理システムについて図29を参照して説明する。
第2実施形態に係る分散処理システム201は、
複数のデータユニットのそれぞれを予め設定された数ずつ複製した各複製データユニットを、複数のデータユニット処理部212へ出力するデータユニット出力制御部211(データユニット出力制御手段)を備え、
データユニット出力制御部211は、同一の複数の複製データユニットの出力先をそれぞれ異なるデータユニット処理部212に割り当てるとともに、
予め設定された少なくとも2つのデータユニット処理部212の組合せ毎に、当該組合せられた各データユニット処理部212に同一の複製データユニットが割り当てられた当該同一の複製データユニット群の数を取得し、データユニット処理部212の組合せ毎に取得した複製データユニット群の数のばらつき度合いが小さくなるように、複数の複製データユニットの出力先を各データユニット処理部212のそれぞれに割り当てる。
上記構成によれば、データユニット出力制御部211は、複数のデータユニットのそれぞれを予め設定された数ずつ複製した各複製データユニットを、複数のデータユニット処理部212へ出力する場合に、例えばデータユニットの識別情報が同じ複数の複製データユニットのそれぞれを異なるデータユニット処理部212に割り当てる。また、予め設定された少なくとも2つのデータユニット処理部212の組合せ毎に、当該組合せられた各データユニット処理部に同一の複製データユニットが割り当てられた当該同一の複製データユニット群の数(ミラーテーブル値)を取得し、データユニット処理部212の組合せ毎に取得したミラーテーブル値のばらつき度合いが小さくなるように、複数の複製データユニットの出力先を各データユニット処理部212のそれぞれに割り当てる。このため、同一のデータユニットの複製を保持するデータユニット処理部212が1つのデータユニット処理部212に集中することなく分散して割り当てられる。従って、所定のデータユニット処理部に障害等が発生した場合でも、障害等が発生したデータユニット処理部212が保持する複製データユニットと同一の複製データユニットを保持するデータユニット処理部のそれぞれが、代わりに複製データユニットに対する所定の処理を行うことができる。この結果、全てのデータユニットに対する処理を迅速に行い、スループットを向上させることができる。
以上、上記実施形態を参照して本願発明を説明したが、本願発明は、上述した実施形態に限定されるものではない。本願発明の構成及び詳細に、本願発明の範囲内において当業者が理解し得る様々な変更をすることができる。
<付記>
上記実施形態の一部又は全部は、以下の付記のように記載され得るが、以下には限られない。
(付記1)
複数のデータユニットのそれぞれを予め設定された数ずつ複製した各複製データユニットを、複数のデータユニット処理部へ出力するデータユニット出力制御手段を備え、
前記データユニット出力制御手段は、同一の複数の前記複製データユニットの出力先をそれぞれ異なる前記データユニット処理部に割り当てるとともに、予め設定された少なくとも2つの前記データユニット処理部の組合せ毎に、当該組合せられた各データユニット処理部に同一の複製データユニットが割り当てられた複製データユニット群の数を取得し、前記データユニット処理部の組合せ毎に取得した前記複製データユニット群の数のばらつき度合いが小さくなるように、複数の前記複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる、
情報処理装置。
上記構成によれば、データユニット出力制御手段は、複数のデータユニットのそれぞれを予め設定された数ずつ複製した各複製データユニットを、複数のデータユニット処理部へ出力する場合に、例えばデータユニットの識別情報が同じ複数の複製データユニットのそれぞれを異なるデータユニット処理部に割り当てる。また、予め設定された少なくとも2つのデータユニット処理部の組合せ毎に、当該組合せられた各データユニット処理部に同一の複製データユニットが割り当てられた複製データユニット群の数(ミラーテーブル値)を取得し、データユニット処理部の組合せ毎に取得したミラーテーブル値のばらつき度合いが小さくなるように、複数の複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる。このため、同一のデータユニットの複製を保持するデータユニット処理部が1つのデータユニット処理部に集中することなく分散して割り当てられる。従って、所定のデータユニット処理部に障害等が発生した場合でも、障害等が発生したデータユニット処理部が保持する複製データユニットと同一の複製データユニットを保持するデータユニット処理部のそれぞれが、代わりに複製データユニットに対する所定の処理を行うことができる。この結果、全てのデータユニットに対する処理を迅速に行い、スループットを向上させることができる。
(付記2)
付記1に記載の情報処理装置であって、
前記データユニット出力制御手段は、さらに、前記データユニット処理部毎に割り当てる前記複製データユニットの数のばらつき度合いが小さくなるように、複数の前記複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる、
情報処理装置。
上記構成によれば、データユニット出力制御手段は、データユニット処理部毎に割り当てる複製データユニットの数のばらつき度合いが小さくなるように、複数の複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる。このため、1つのデータユニット処理部に複製データユニットが集中して出力されることがなく、複数のデータユニット処理部のそれぞれに複製データユニットが分散して出力される。この結果、所定のデータユニット処理部に障害等が発生した場合でも、他のデータユニット処理部が代わりに所定の処理を行うことができる。この結果、全てのデータユニットに対する処理をより迅速に行い、スループットを向上させることができる。
(付記3)
付記1または2に記載の情報処理装置であって、
前記データユニット出力制御手段は、前記データユニット処理部の組合せ毎に取得した、同一の複製データユニットが割り当てられた前記複製データユニット群の数の所定の基準値に対するばらつき度合いを算出し、算出した前記複製データユニット群の数のばらつき度合いが小さくなるように、複数の前記複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる、
情報処理装置。
上記構成によれば、データユニット出力制御手段は、データユニット処理部の組合せ毎のミラーテーブル値の所定の基準値に対するばらつき度合い(例えば標準偏差)を算出する。そして、算出した標準偏差が小さくなるように、複数の複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる。このように、同一の複製データユニットの数のばらつき度合いを小さくすることで、データユニット処理部の組合せ毎の同一の複製データユニットの数を平準化にすることができる。この結果、複数の複製データユニットのそれぞれを、より迅速かつ確実に複数のデータユニット処理部に分散することができる。
(付記4)
付記1乃至3のいずれかに記載の情報処理装置であって、
前記データユニット出力制御手段は、前記データユニット処理部の組合せ毎に取得した、同一の複製データユニットが割り当てられた前記複製データユニット群の数のばらつき度合いが小さくなり、且つ、前記データユニット処理部の組合せ毎に取得した前記複製データユニット群の数の総和が最小になるように、複数の前記複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる、
情報処理装置。
上記構成によれば、データユニット出力制御手段は、データユニット処理部の組合せ毎に取得したミラーテーブル値のばらつき度合いが小さくなり、且つ、データユニット処理部の組合せ毎に取得したミラーテーブル値の総和が最小になるように、複数の複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる。このように、複製データユニット群の数のばらつき度合いが同じになるデータユニットの割り当てパターンが存在する場合に、データユニット処理部の組合せに対して、重複するデータユニット(複製データユニット)の数を小さくすることができる。このため、データユニットに対する処理要求が1つのデータユニット処理部に集中して出力されることがなく、複数のデータユニット処理部のそれぞれに複製データユニットが分散して出力される。この結果、全てのデータユニットに対する処理をより迅速に行い、スループットを向上させることができる。
(付記5)
付記1乃至4のいずれかに記載の情報処理装置であって、
前記データユニット出力制御手段は、出力先としての前記データユニット処理部と、当該データユニット処理部へ割り当てた前記複製データユニットと、を対応付けたデータユニット出力表を生成し、生成した前記データユニット出力表に基づいて、複数の前記複製データユニットを複数の前記データユニット処理部へ出力する、
情報処理装置。
上記構成によれば、データユニット出力制御手段は、複製データユニットとデータユニット処理部とを割り当てるために、データユニット処理部と、当該データユニット処理部へ出力するデータユニットと、を対応付けたデータユニット出力表(例えばデータ配置マトリクス)を生成する。このため、複製データユニットの管理、制御が容易になり、より迅速かつ確実に複製データユニットをデータユニット処理部へ出力することができる。
(付記6)
付記1乃至5のいずれかに記載の情報処理装置であって、
複数の前記データユニットに対する処理要求を取得し、取得した処理要求を前記各データユニットに対応付けて分割した分割処理要求を生成し、前記データユニット処理部から、当該データユニット処理部に割り当てられた前記複製データユニットを特定する特定情報を取得した場合に、取得した当該特定情報にて特定される前記複製データユニットに対応する前記分割処理要求を、前記データユニット処理部へ出力する処理要求制御手段、
を備える情報処理装置。
上記構成によれば、処理要求制御手段は、複数のデータユニットに対する処理要求(例えばジョブ)を取得し、取得した処理要求をデータユニットに対応付けて分割した分割処理要求(データユニット毎のタスク)を生成する。そして、データユニット処理部から、当該データユニット処理部に割り当てられた複製データユニットの特定情報を取得した場合に、データユニット処理部に割り当てられた複製データユニットに対応付けられたタスクを取得し、当該タスクをデータユニット処理部へ出力する。このため、例えば大規模データに対する処理要求(ジョブ)を効率的に分割し、各データユニット処理部へ出力することができる。この結果、大規模データに対する処理を迅速に行い、スループットを向上させることができる。
(付記7)
付記6に記載の情報処理装置であって、
前記処理要求制御手段は、取得した前記特定情報にて特定される前記複製データユニットに対応する前記分割処理要求のうち、他のデータユニット処理部へ出力していない前記分割処理要求であり、且つ、各データユニット処理部に割り当てられた前記複製データユニットの総和を算出し、算出した当該総和を前記データユニット処理部の数で割った平均値以下の数の前記分割処理要求を、前記データユニット処理部へ出力する、
情報処理装置。
上記構成によれば、処理要求制御手段は、他のデータユニット処理部へ出力していない分割処理要求であり、且つ、各データユニット処理部に割り当てられた複製データユニットの総和を算出し、算出した当該総和を前記データユニット処理部の数で割った平均値以下の数の分割処理要求を、データユニット処理部へ出力する。このため、データユニット処理部が一度に扱う複製データユニットの数が少なくなるので、他のデータユニット処理部へ出力していない分割処理要求の数が増加する。従って、所定のデータユニット処理部が保持するデータユニットに対する分割処理要求の全てが、他のデータユニット処理部に出力される可能性が小さくなり、分割処理要求に対する処理を行うことができないデータユニット処理部の数が減少する。この結果、全ての分割処理要求(データユニット)に対する処理を迅速に行い、スループットを向上させることができる。
(付記8)
複数のデータユニットのそれぞれを予め設定された数ずつ複製した各複製データユニットを、複数のデータユニット処理部へ出力する場合に、
同一の複数の前記複製データユニットの出力先をそれぞれ異なる前記データユニット処理部に割り当てるとともに、
予め設定された少なくとも2つの前記データユニット処理部の組合せ毎に、当該組合せられた各データユニット処理部に同一の複製データユニットが割り当てられた複製データユニット群の数を取得し、前記データユニット処理部の組合せ毎に取得した前記複製データユニット群の数のばらつき度合いが小さくなるように、複数の前記複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる、
情報処理方法。
(付記9)
付記8に記載の情報処理方法であって、
前記データユニット処理部毎に割り当てる前記複製データユニットの数のばらつき度合いが小さくなるように、複数の前記複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる、
情報処理方法。
(付記10)
情報処理装置に、
複数のデータユニットのそれぞれを予め設定された数ずつ複製した各複製データユニットを、複数のデータユニット処理部へ出力するデータユニット出力制御手段を実現させるとともに、
前記データユニット出力制御手段は、同一の複数の前記複製データユニットの出力先をそれぞれ異なる前記データユニット処理部に割り当てるとともに、予め設定された少なくとも2つの前記データユニット処理部の組合せ毎に、当該組合せられた各データユニット処理部に同一の複製データユニットが割り当てられた複製データユニット群の数を取得し、前記データユニット処理部の組合せ毎に取得した前記複製データユニット群の数のばらつき度合いが小さくなるように、複数の前記複製データユニットの出力先を各データユニット処理部のそれぞれに割り当てる、
ことを実現させるためのプログラム。
なお、上記各実施形態及び付記において記載したプログラムは、記憶装置に記憶されていたり、コンピュータが読み取り可能な記録媒体に記録されている。例えば、記録媒体は、フレキシブルディスク、光ディスク、光磁気ディスク、及び、半導体メモリ等の可搬性を有する媒体である。
以上、上記各実施形態を参照して本願発明を説明したが、本願発明は、上述した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明の範囲内で当業者が理解しうる様々な変更をすることができる。
なお、本発明は、日本国にて2013年2月15日に特許出願された特願2013−027312の特許出願に基づく優先権主張の利益を享受するものであり、当該特許出願に記載された内容は、全て本明細書に含まれるものとする。