以下、図面に基づいて本発明の実施の形態を説明する。図1は、本発明の実施の形態における分散処理システムの構成例を示す図である。同図に示される分散処理システム1において、一台以上のヘッドノード20(ヘッドノード群)と、一台以上の計算ノード10(計算ノード群)と、計算ノード記憶装置30とは、LAN(Local Area Network)等のネットワーク40(有線又は無線の別は問わない。)を介して通信可能に接続されている。
ヘッドノード20は、タスクの投入を受け付け、当該タスクを計算ノード10に配布(配信する)ノードである。計算ノード10は、ヘッドノード20より配布されたタスクを実行するノードである。計算ノード記憶装置30は、ネットワーク40に接続されている計算ノード10の一覧を記憶する記憶装置である。計算ノード記憶装置30は、単なるストレージであってもよいし、HDD(Hard Disk Drive)等の記憶装置を有したコンピュータであってもよい。
なお、本実施の形態において、ノードとは、一台のコンピュータであってもよいし、ソフトウェアによって実現される一つの処理手段であってもよい。後者の場合、一台のコンピュータ内に複数のノード(ヘッドノード20又は計算ノード10)が実現されうる。以下においては、説明が煩雑となるのを避けるため、ネットワーク40上における一台のコンピュータをノードという。
また、タスクとは、計算ノード10によって処理の対象とされるデータをいう。すなわち、タスクを処理するロジックは、計算ノード10に予め実装されている。但し、計算ノード10の処理内容を制御するためのパラメータ(設定情報等)がタスクに含まれていてもよい。
同図において、各ヘッドノード20は、計算ノード監視部21、予約要求部22、及び分割タスク管理部23等を有する。これら各部は、ヘッドノード20にインストールされたプログラムがヘッドノード20のCPUに実行させる処理によって実現される。
計算ノード監視部21は、計算ノード記憶装置30に登録されている計算ノード10の一覧情報を周期的(定期的)に取得する。計算ノード監視部21は、周期的に一覧情報を取得することにより、ネットワーク40における新たな計算ノード10の追加等を検出する。
予約要求部22は、計算ノード記憶装置30に登録されている一覧情報に基づいて、利用可能な全ての計算ノード10に対して利用予約の要求(予約要求)を送信する。予約要求の契機は、例えば、投入されたタスクの処理開始時期の到来、又は計算ノード監視部21による、新たな計算ノード10の検出等である。タスクの処理開始時期は、タスクの投入時であってもよいし、予め設定された時刻であってもよい。予約要求部22は、また、ヘッドノード20に投入されたタスクの完了に応じ、予約要求を送信した各計算ノード10に予約のキャンセル要求を送信する。
分割タスク管理部23は、投入されたタスクを複数に分割する。分割された1つのタスク(サブタスク)を分割タスクという。タスクの分割方法は、分割対象となるタスク(データ)に依存する。分割タスク管理部23は、予約要求を受信したいずれかの計算ノード10からのタスクの配布(配信)要求に応じ、分割タスクを配布する。一回の配布要求に対して一つの分割タスクが配布される。分割タスク管理部23は、計算ノード10からの分割タスクの配布要求の受信又は分割タスクの処理結果の受信等に基づいてヘッドノード20が利用中の計算ノード10の数(以下、「計算ノード確保数」という。)を更新する。計算ノード確保数は、例えば、ヘッドノード20ごとに、当該ヘッドノード20のメモリ装置を用いて記憶される。分割タスク管理部23は、予約要求を受信した計算ノード10からの問い合わせに応じ、計算ノード確保数を返信する。
各計算ノード10は、登録部11、予約管理部12、予約選択部13、及び分割タスク実行部14等を有する。これら各部は、計算ノード10にインストールされたプログラムが計算ノード10のCPUに実行させる処理によって実現される。
登録部11は、計算ノード10の新規設置時等に当該計算ノード10の存在を示す情報(レコード)を計算ノード記憶装置30に登録する。当該レコードには計算ノード10の識別情報や登録時刻等が含まれる。登録部11は、また、周期的(定期的)に、当該計算ノード10に対するレコードの登録時刻を更新する。周期的に登録時刻を更新するのは、登録時刻に基づいて計算ノード10が起動しているか否かの推測を可能とするためである。
予約管理部12は、ヘッドノード20より送信される予約要求を受信し、管理する。複数のヘッドノード20から同時期に予約要求が受信される場合は、複数の予約要求が管理される。予約管理部12は、また、ヘッドノード20より予約のキャンセル要求を受信すると、当該ヘッドノード20より受信した予約要求を管理対象から除外する。
予約選択部13は、予約管理部12によって管理されている予約要求のいずれかを所定の選択規則に基づいて選択する。予約選択部13は、選択された予約要求の送信元のヘッドノード20に分割タスクの配布を要求し、当該ヘッドノード20より分割タスクを受信する。
分割タスク実行部14は、予約選択部13によって受信された分割タスクを処理する。すなわち、分割タスク実行部14は、タスクを処理するためのロジックが実装された部分である。したがって、分割タスク実行部14は、タスクの種類に応じて複数種類存在しうる。
図2は、本発明の実施の形態における計算ノードのハードウェア構成例を示す図である。図2の計算ノード10は、それぞれバスBで相互に接続されているドライブ装置100と、補助記憶装置102と、メモリ装置103と、CPU104と、インタフェース装置105とを有する。
計算ノード10での処理を実現するプログラムは、CD−ROM等の記録媒体101によって提供される。プログラムを記録した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従って計算ノード10に係る機能を実行する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。
なお、ヘッドノード20についても、図2と同様のハードウェアを有していればよい。但し、ヘッドノード20は、タスクの投入を受け付けるためのキーボード及びマウス等の入力装置や、タスクの処理結果を出力するための表示装置を備えていてもよい。
以下、分散処理システム1の処理手順について説明する。まず、分散処理システム1の全体の処理概要について説明する。図3は、本実施の形態の分散処理システムにおける処理手順の概要を説明するための図である。同図では、説明の便宜上、ヘッドノード20及び計算ノード10は一つずつ示されている。
計算ノード10の登録部11は、計算ノード10の設置時に当該計算ノード10の存在を示すレコードを計算ノード記憶装置30に登録し、その後、周期的に当該レコードの登録時刻を更新する(S11)。
図4は、計算ノード記憶装置における計算ノード管理テーブルの構成例を示す図である。同図において、一つのレコードは、一つの計算ノード10に対応する。各レコードは、計算ノードID、アドレス、及び登録時刻等のデータを含む。計算ノードIDは、計算ノード10の識別子である。アドレスは、通信において計算ノード10を識別するための情報である。したがって、アドレスの具体的な形式は、利用される通信プロトコルに応じて異なりうる。例えば、TCP/IPの場合は、IPアドレスが採用される。また、HTTP(HyperText Transfer Protocol)の場合は、URL(Uniform Resource Locator)が採用される。登録時刻は、レコードが最後に更新された時刻である。
ステップS11が複数の計算ノード10によって実行されることにより、計算ノード記憶装置30には、複数のレコードが登録される。
一方、ヘッドノード20の計算ノード監視部21は、周期的に計算ノード記憶装置30を監視する(S12)。具体的には、計算ノード監視部21は、計算ノード記憶装置30に登録されているレコードの一覧(計算ノード10の一覧情報)を周期的に取得し、ヘッドノード20のメモリ装置に記録する。
タスクの開始時期が到来すると、予約要求部22は、計算ノード監視部21によって取得されたレコードの一覧に基づいて利用可能であると判定された全ての計算ノード10に対して予約要求を送信する(S13)。各計算ノード10の予約管理部12は、受信された予約要求をメモリ装置103に記録しておく。予約要求には、予約要求元のヘッドノード20のアドレス及び当該ヘッドノード20に投入されたタスクの優先度が含まれている。なお、予約要求には、タスクの実体は含まれない。予約要求は、タスクを実行させたいヘッドノード20の存在を通知するための情報だからである。
計算ノード10の予約選択部13は、予約要求が受信されると、メモリ装置103に記録されている予約要求ごとに、当該予約要求に係るヘッドノード20に対して計算ノード確保数を問い合わせる(S14)。問い合わせを受けた各ヘッドノード20の分割タスク管理部23は、当該ヘッドノード20の現在の計算ノード確保数を返信する(S15)。
続いて、予約選択部13は、予約要求ごと(ヘッドノード20ごと)の計算ノード確保数と優先度とに基づいて、予約要求を1つ選択する。予約選択部13は、選択された予約要求に係るヘッドノード20に対して分割タスクの配布要求を送信する(S16)。ヘッドノード20の分割タスク管理部23は、未配布の分割タスクを優先的に選択し、選択された分割タスクを要求元に返信する(S17)。予約選択部13は、返信された分割タスクの処理を分割タスク実行部14に要求する(S18)。分割タスク実行部14は、当該分割タスクの処理が終了すると、当該分割タスクの処理結果を予約選択部13に通知する。予約選択部13は、当該処理結果を、当該分割タスクの配布元のヘッドノード20の分割タスク管理部23に通知する(S20)。
ステップS15以降が繰り返されることにより、ヘッドノード20が配布した全ての分割タスクの処理が終了すると、当該ヘッドノード20の分割タスク管理部23は、分割タスクごとの処理結果を統合したものを、分割前のタスクに対する処理結果として出力する。
続いて、ヘッドノード20及び計算ノード10のそれぞれによる処理内容の詳細について順番に説明する。まず、ヘッドノード20について説明する。
図5は、本実施の形態のヘッドノードの状態遷移の一例を示す図である。同図に示されるように、各ヘッドノード20は、待機状態、開始処理状態、処理中状態、及び終了処理状態の4つの状態を有する。
待機状態は、タスクの処理を開始していない状態である。具体的には、タスクが投入されていない状態、又はタスクは投入されていても開始時期が到来していない状態である。待機状態では、計算ノード監視部21以外は動作しない。図3のステップS12において説明したように、計算ノード監視部21は周期的に計算ノード記憶装置30よりレコードを読み込み、ヘッドノード20のメモリ装置に記録する。タスクの開始時期が到来するとヘッドノード20は開始処理状態へ遷移する。
開始処理状態への遷移に応じ、開始処理が1回実行される。図6は、ヘッドノードにおける開始処理の処理手順を説明するためのフローチャートである。
ステップS101において、分割タスク管理部23は、処理の開始対象とされたタスクを分割し、分割タスクを生成する。また、分割タスク管理部23は、分割タスクを管理するための分割タスク管理テーブル230を、ヘッドノード20のメモリ装置に生成する。
図7は、分割タスク管理テーブルの構成例を示す図である。同図において、分割タスク管理テーブル230は、分割タスクごとに、分割タスクID、配布状態、及び処理状態を記憶する。
分割タスクIDは、分割タスク管理部23によって分割タスクごとに割り当てられる識別子である。配布状態は、分割タスクが配布済みであるか否かを示す情報であり、「配布済」又は「未配布」の値をとる。処理状態は、配布済みの分割タスクの処理結果が受信されたか否かを示す情報であり、「結果受信済」又は「結果未受信」の値をとる。
分割タスクの生成に応じ、計算ノード監視部21は、計算ノード記憶装置30に登録されている全レコードを取得する(S102)。なお、このタイミングにおいて通信障害又は計算ノード記憶装置30の障害等によってレコードの取得に失敗した場合、計算ノード監視部21は、周期的な取得において最後に取得されたレコード群を以降のステップにおいて利用する。したがって、斯かる障害が発生した場合であっても、タスクの処理は遂行可能である。
続いて、計算ノード監視部21は、取得された各レコードについて、登録時刻が現時点から所定の時間内であるか否かを判定する(S103)。すなわち、所定の時間内に更新されたレコードが抽出される。所定の時間内に更新されたレコードは、現時点において起動されている(利用可能である)可能性の高い計算ノード10に対応するレコードである。
登録時刻が所定の時間内であるレコード(以下、「カレントレコード」という。)が検出されると、予約要求部22は、カレントレコードに登録されているアドレス宛(すなわち、カレントレコードに対応する計算ノード10宛)に、予約要求を送信する(S104)。
図8は、予約要求の構成例を示す図である。同図に示されるように、予約要求は、ヘッドノードアドレス及び優先度係数を含む。ヘッドノードアドレスは、通信においてヘッドノード20を識別するための情報である。優先度係数は、タスクの優先度を示す係数である。優先度係数の値が小さい程、優先度は高い。優先度係数は、例えば、タスクの投入時に指定される。なお、予約要求は、ヘッドノード20に投入されたタスク単位で送信されるものである。すなわち、予約要求は、分割タスク単位で送信されるものではない。したがって、予約要求に含まれている優先度係数は、当該予約要求に係るタスクより分割された全ての分割タスクに対して共用される。
予約要求の送信に続いて、計算ノード監視部21は、予約済み計算ノード一覧にカレントレコードを登録する(S105)。予約済み計算ノード一覧は、ヘッドノード20のメモリ装置において、予約要求を送信した計算ノード10の一覧を記憶するための記憶領域(リスト又は配列等)である。したがって、図6の開始処理の終了時には、予約要求の送信先とされた全ての計算ノード10のレコードが予約済みレコード一覧に記録された状態となる。
開始処理が完了すると、ヘッドノード20は処理中状態に遷移する。処理中状態において、ヘッドノード20の分割タスク管理部23は、予約要求を送信した計算ノード10からの計算ノード確保数の問い合わせの受信、分割タスクの配布要求の受信、又は分割タスクの処理結果の受信を待機する。
計算ノード確保数の問い合わせが受信されると、分割タスク管理部23は、当該ヘッドノード20のメモリ装置に記憶されている計算ノード確保数を、問い合わせ元の計算ノード10に返信する。
分割タスクの配布要求が受信されると、分割タスク管理部23は、図9に示される処理を実行する。
図9は、分割タスクの配布要求の受信に応じて実行される処理手順を説明するためのフローチャートである。
分割タスクの配布要求の受信に応じ、分割タスク管理部23は、メモリ装置に記憶されている計算ノード確保数に1を加算する(S201)。分割タスクの配布によって、当該ヘッドノード20が利用する(確保する)計算ノード10が1つ増加するからである。続いて、分割タスク管理部23は、分割タスク管理テーブル230を参照して、配布状態が「未配布」である分割タスクの有無を判定する(S202)。配布状態が「未配布」である分割タスクが存在する場合(S203でYes)、分割タスク管理部23は、該当する分割タスクのうちの1つの分割タスクの配布データを配布要求元の計算ノード10に配布(送信)する(S204)。該当する分割タスクが複数有る場合は、所定の規則に基づいて配布対象とする分割タスクを決定すればよい。例えば、分割の前後関係において前の分割タスクから順に配布対象とすればよい。
図10は、分割タスクの配布データの構成例を示す図である。同図において、配布データは、分割タスクIDと分割タスク(の実体)とを含む。なお、配布元のヘッドノード20の識別情報は、計算ノード10側において予約要求に基づいて判定可能であるため、本実施の形態では、配布データに含まれない。
続いて、分割タスク管理部23は、配布対象とされた分割タスクの配布状態を、「配布済」とすることにより、分割タスク管理テーブル230を更新する(S205)。
一方、配布状態が「未配布」である分割タスクが無い場合(S203でNo)、分割タスク管理部23は、配布状態が「配布済」であり、かつ、処理状態が「結果未受信」である1つの分割タスクを配布要求元の計算ノード10に配布する(S206)。
すなわち、分割タスクの配布要求が受信された場合、未配布の分割タスクが優先的に配布対象とされる。未配布の分割タスクが無いときは、配布済みの分割タスクが配布対象とされる。配布済みの分割タスクは、既に他の計算ノード10において処理対象とされている分割タスクである。斯かる分割タスクを改めて他の計算ノード10に配布するのは、当該他の計算ノード10によって、より迅速に処理結果を得られる可能性が有るからである。なお、同一の分割タスクを複数回送信するのは全ての分割タスク送信済みで結果を受け取っていない分割タスクが存在する場合のみである。但し、未配布の分割タスクが無い場合は、分割タスクを配布しないようにしてもよい。この場合、分割タスクが配布されなかった計算ノード10は、他のヘッドノード20に対して分割タスクの配布を要求すればよい。
続いて、処理中状態において、分割タスクの処理結果が受信された場合について説明する。この場合、分割タスク管理部23は、図11に示される処理を実行する。
図11は、分割タスクの処理結果の受信に応じて実行される処理手順を説明するためのフローチャートである。
分割タスクの処理結果を含む応答データの受信に応じ、分割タスク管理部23は、メモリ装置に記憶されている計算ノード確保数から1を減算する(S301)。分割タスクの処理結果が受信されたということは、当該処理結果の送信元の計算ノード10において、当該分割タスクの処理が終了したということである。したがって、当該計算ノード10は、もはや当該ヘッドノード20に利用されていないからである。
図12は、分割タスクの応答データの構成例を示す図である。同図において、応答データは、分割タスクIDと処理結果とを含む。
続いて、分割タスク管理部23は、応答データに含まれている分割タスクIDに対する処理状態を分割タスク管理テーブル230を参照して確認する(S302)。当該処理状態が「結果未受信」である場合(S303でYes)、分割タスク管理部23は、当該処理状態を「結果受信済」に更新する(S306)。また、分割タスク管理部23は、応答データに含まれている処理結果を、当該応答データに含まれている分割タスクIDに関連付けてヘッドノード20のメモリ装置に記録する。
一方、応答データに含まれている分割タスクIDに対する処理状態が「結果受信済」である場合(S303でNo)、分割タスク管理部23は、受信された応答データを破棄する(S305)。なお、ステップS305は、同一の分割タスクが複数の計算ノード10に配布された場合に実行されうる。
処理中状態では、上述した、計算ノード確保数の応答、分割タスクの配布、及び処理結果の受信が繰り返し実行される。分割タスク管理部23は、処理結果の受信に応じて図11の処理が実行されるたびに、分割タスク管理テーブル230における全ての分割タスクの処理状態が「結果受信済」となったか否かを判定(確認)する。当該全ての分割タスクの処理状態が「結果受信済」となると、ヘッドノード20は終了処理状態に遷移する。
一方、処理中状態では、計算ノード確保数の応答、分割タスクの配布、及び処理結果の受信とは非同期に、計算ノード監視部21によって図13に示される処理手順が周期的に実行される。
図13は、処理中状態における計算ノード監視部による処理手順を説明するためのフローチャートである。
ステップS401において、計算ノード監視部21は、計算ノード記憶装置30に登録されている全レコードを取得する。続いて、計算ノード監視部21は、取得された各レコードについて、予約済み計算ノード一覧に含まれているか否かを判定する(S402)。レコードの同一性は、計算ノードID又はアドレスのいずれか一方の一致によって判定されてもよいし、双方の一致によって判定されてもよい。少なくとも、登録時刻は同一性の判定に用いられない。
予約済み計算ノード一覧に含まれていないレコードの場合(S402でNo)、計算ノード監視部21は、当該レコードの登録時刻が現時点から所定の時間内であるか否かを判定する(S403)。当該レコードの登録時刻が、所定の時間内である場合(S403でYes)、当該レコードに係る計算ノード10は、予約要求の送信後に起動された(追加された)計算ノード10であり、かつ、現時点において起動している計算ノード10であると考えられる。そこで、予約要求部22は、当該レコードに登録されているアドレス宛(すなわち、当該レコードに対応する計算ノード10宛)に、予約要求を送信する(S404)。予約要求の送信に続いて、計算ノード監視部21は、予約済み計算ノード一覧に当該レコードを登録する(S405)。
一方、予約済み計算ノード一覧に含まれているレコードの場合(S402でYes)、計算ノード監視部21は、当該レコードによって予約済み計算ノード一覧における同一レコードを更新する(S406)。この場合、予約済み計算ノード一覧における同一レコードの登録時刻が更新されうる。
図13の処理によって、既に予約要求を行った後に新たな計算ノード10が追加された場合であっても、当該計算ノード10に分割タスクを実行させることが可能となる。
続いて、ヘッドノード20の終了処理状態について説明する。終了処理状態への遷移に応じ、終了処理が1回実行される。終了処理において、予約要求部22は、予約済み計算ノード一覧に含まれているレコード(図4と同一形式のレコード)に基づいて、予約要求を送信した全ての計算ノード10に予約のキャンセル要求を送信する。具体的には、当該各レコードに含まれているアドレス宛に予約のキャンセル要求が送信される。予約のキャンセル要求には、当該ヘッドノード20のアドレス(ヘッドノードアドレス)が含まれている。
また、終了処理において、分割タスク管理部23は、分割タスクIDごとに保存されている処理結果を統合又は結合し、投入された1つのタスクに対する処理結果を生成する。終了処理が終了すると、ヘッドノード20は、待機状態へ遷移する。
次に、計算ノード10の詳細について説明する。図14は、本実施の形態の計算ノードの状態遷移の一例を示す図である。同図に示されるように、各計算ノード10は、待機状態、処理開始待ち状態、及び処理中状態の3つの状態を有する。
待機状態は、計算ノード10の起動後、予約要求が一つも蓄積されていない状態である。計算ノード10の予約管理部12が、ヘッドノード20からの予約要求を受信すると、当該計算ノード10は、処理開始待ち状態へ遷移する。なお、予約管理部12は、受信された予約要求(図8)をメモリ装置103に記録する。
処理開始待ち状態への遷移に応じ、計算ノード10の予約選択部13は、図15に示される処理手順を1回実行する。図15は、予約選択部による処理手順を説明するためのフローチャートである。
ステップS501において、予約選択部13は、メモリ装置103に記録されている全ての予約要求を取得する。少なくとも1つの予約要求が取得された場合(S502でYes)、予約選択部13は、予約要求元のヘッドノード20に計算ノード確保数の問い合わせを送信し、応答された計算ノード確保数を予約要求に関連付けてメモリ装置103に記録する(S503)。なお、ステップS503は、ステップS501において取得された各予約要求について実行される。また、予約要求元のヘッドノード20は、予約要求に含まれているヘッドノードアドレスによって特定される。
続いて、予約選択部13は、予約要求ごとに、当該予約要求に含まれている優先度係数と、予約要求元の計算ノード確保数とに基づいて確保度を算出する(S504)。
予約要求rの優先度係数をPr、予約要求元の計算ノード確保数をKrとしたとき、予約要求rの確保度S(r)は、以下の式(1)を用いて算出される。
S(r) = Pr × Kr ・・・ (1)
例えば、ヘッドノード20aからの予約要求ra(優先度係数0.5)と、ヘッドノード20bからの予約要求rb(優先度係数1.0)とが有り、ヘッドノード20aの計算ノード確保数は30であり、ヘッドノード20bの計算ノード確保数は20の場合、
予約要求raに対する確保度S(A)=0.5×30=15
予約要求rbに対する確保度S(B)=1.0×20=20
となる。
続いて、予約選択部13は、算出された確保度を比較することにより、予約要求を1つ選択する(S505)。具体的には、確保度が最小である予約要求が選択される。したがって、上記では予約要求raが選択される。なお、最小の確保度が複数発生した場合、古い(先着の)予約要求に係るヘッドノード20を優先させる等、所定の規則に基づいて、一つの予約要求を選択すればよい。
なお、上記より、確保度係数は、各ヘッドノード20(タスク)に対して割り当てられる計算ノード10数の相対比の逆数であることが分かる。この点については、後述において更に詳しく説明する。
続いて、予約選択部13は、選択された予約要求に係るヘッドノード20に対して分割タスクの配布要求を送信する(S506)。配布要求の送信先は、選択された予約要求に含まれているヘッドノードアドレスである。続いて、予約選択部13は、配布要求先のヘッドノード20より分割タスクの配布データ(図10)を受信する(S507)。予約選択部13は、受信された配布データを、選択された予約要求に関連付けてメモリ装置103に記録する。なお、配布データの受信に応じ、当該計算ノード10は処理中状態へ遷移する。
一方、ステップS501において、予約要求が取得されなかった場合(S502でYes)、当該計算ノード10は、待機状態へ遷移する。
続いて、処理中状態について説明する。処理中状態へ遷移すると、予約選択部13は、配布された(受信された)配布データに含まれている分割タスクを分割タスク実行部14に入力する。分割タスク実行部14は、入力された配布データに含まれている分割タスクを処理し、処理結果を予約選択部13に出力する。予約選択部13は、出力された処理結果に、配布データに含まれていた分割タスクIDを付与して応答データを生成する。予約選択部13は、応答データを予約要求元のヘッドノード20に送信する。予約要求元のヘッドノード20は、配布データに関連付けられている予約要求のヘッドノードアドレスによって特定される。処理結果の送信後、当該計算ノード10は、処理開始待ち状態に遷移する。
なお、処理開始待ち状態又は処理中状態においても、予約要求又は予約のキャンセル要求は受信されうる。予約要求が受信された場合の処理手順は上述した通りである。予約のキャンセル要求が受信された場合、予約管理部12は、当該キャンセル要求に含まれているヘッドノードアドレスを有する予約要求をメモリ装置103より削除する。その結果、メモリ装置103に記録されている予約要求が0件となったら、当該計算ノード10は待機状態へ遷移する。
一方、各計算ノード10の登録部11は、状態遷移とは非同期に(すなわち、いずれの状態においても)周期的に計算ノード記憶装置30への当該計算ノード10のレコードの登録処理を実行する。テーブル内に当該計算ノード10のレコードが存在しない場合、新たにレコードが追加される。
要するに、各計算ノード10は予約要求が存在する間は処理開始待ち状態と処理中状態との間の遷移を繰り返し、処理開始待ち状態中にヘッドノード20の再選択を行うことで、処理対象を他のヘッドノード20の分割タスクに切り替えることができる。計算ノード10に記憶された予約要求は、ヘッドノード20からキャンセル要求が受信されるまで消去されないため、全てのヘッドノード20の全ての分割タスクの処理は完了することが保証される。
各計算ノード10による予約要求の選択の際には、確保度の低い方が優先されることで、確保度が均衡する方向に各ヘッドノード20の計算ノード確保数を推移させることができる。すなわち、各ヘッドノード20の計算ノード確保数は、各ヘッドノード20の確保度係数の逆数の比率に対する不均衡が是正される方向に推移する。
次に、上記において説明した処理手順に対して、具体例を当てはめて説明する。当該具体例において、分散処理システム1aは、映像のトランスコードシステムに接続されたヘッドノード20Aと、算術演算システムに接続されたヘッドノード20Bと、100個の計算ノード10C1〜C100とを含むこととする。各計算ノード10は、映像トランスコード処理を実行する分割タスク実行部14aと、算術演算システムに対する演算処理を行う分割タスク実行部14bとを有する。
分散処理システム1aにおいて、ヘッドノード20Aに、優先度係数1.0が指定された映像トランスコードのタスクA1が投入された場合、分散処理システム1aは、以下のように動作する。
まず、ヘッドノード20AはタスクA1を分割し、計算ノード10C1〜C100に対して予約要求Yaを送信する。なお、タスクA1の実体は映像データである。この場合、映像データのデータ形式に応じて予めヘッドノード20Aに設定されている分割単位を基準として、タスクA1の分割が行われる。分割単位は、データに含まれている所定の符号を区切りとしてもよいし、再生時間を区切りとしてもよい。
予約要求Yaを受信した計算ノード10C1〜C100はそれぞれ待機状態から処理開始待ち状態に遷移する。この時点において、計算ノード10C1〜C100には、それぞれ予約要求は1つしか存在しない。したがって、計算ノード10C1〜C100は、予約要求Yaを選択し、ヘッドノード20Aに分割タスクの配布要求を送信する。その結果、計算ノード10C1〜C100は、ヘッドノード20Aの分割タスクを受信し、当該分割タスクの処理を開始する。
この状態において、ヘッドノード20Bに優先度係数0.5が指定された算術演算のタスクB1が投入されると、ヘッドノード20BはタスクB1をヘッドノード20Bに設定された分割単位を基準として分割する。続いて、ヘッドノード20Bは、計算ノード10C1〜C100に対して予約要求Ybを送信する。
その後、計算ノード10Cn(1≦n≦100)が処理開始待ち状態に遷移すると、計算ノード10Cnは、予約要求Ya又はYbのいずれか一方を次のように選択する。
まず、計算ノード10Cnは、予約要求Ya又はYbの送信元であるヘッドノード20A及びノードBのそれぞれから計算ノード確保数Ka又はKbを取得する。この時点において、Ka=99、Kb=0である。Kaは、当初は100であるが、計算ノード10Cnより処理結果が返信されているため、この時点ではKaは、99となっている。
続いて、計算ノード10Cnは、予約要求Yaに対する確保度S(a)と、予約要求Ybに対する確保度S(b)とを次のように算出する。
S(a)=1.0×99=99
S(b)=0.5×0=0
ここで、S(a)>S(b)であるため、予約要求Ybが選択される。したがって、計算ノード10Cnは、ノードBより分割タスクの配布を受ける。
続いて、計算ノード10Cm(1≦m≦100)が処理開始待ち状態に遷移すると、計算ノード10Cmは、予約要求Ya又はYbのいずれか一方を次のように選択する。
まず、計算ノード10Cmは、予約要求Ya又はYbの送信元であるヘッドノード20A及びノードBのそれぞれから計算ノード確保数Ka又はKbを取得する。この時点において、Ka=98、Kb=1である。
続いて、計算ノード10Cmは、予約要求Yaに対する確保度S(a)と、予約要求Ybに対する確保度S(b)とを次のように算出する。
S(a)=1.0×98=98
S(b)=0.5×1=0.5
ここで、S(a)>S(b)であるため、予約要求Ybが選択される。したがって、計算ノード10Cmは、ノードBより分割タスクの配布を受ける。
以降、予約要求Ya及びYbのそれぞれの確保度が均衡するまで、予約要求Ybが各計算ノード10において選択される。したがって、確保度が等しいときには古い予約要求を優先させるというルールを採用した場合、予約要求Yaが選択されるようになるのはKa=33、Kb=66となった時である。
すなわち、この時、S(a)=1×33=33、S(b)=0.5×66=33となる。S(a)=S(b)であるため、古い予約要求Yaに係るノードAが選択される。
このようにして、ヘッドノード20A及びBが確保する計算ノード10数は1:2の比率に収束する。この比率は、タスクA1、タスクB1のそれぞれの優先度係数の逆数の比に等しい。換言すれば、優先度係数は、各ヘッドノード20(タスク)に対して割り当てる計算ノード10数の相対比の逆数であるといえる。
ここで、システム増強のため、新たな100個の計算ノード10C101〜C200が追加された場合を考える。この場合、ヘッドノード20A及びBは、処理中状態において、計算ノード10C101〜C200の存在を検知する。そこで、ヘッドノード20A及びBは、算ノードC101〜C200に対して予約要求Ya又はYbを送信する(図13:S404)。
予約要求Ya及びYbを受信した計算ノード10C101〜C200は、予約要求Ya及びYbの確保度が均衡するように予約要求を選択する。その結果、最終的に、Ka=67、Kb=133前後に収束していく。
また、分散処理システム1aに更に映像トランスコードシステムに接続されたヘッドノード20Dが追加されたとする。ヘッドノード20Dに、優先度係数1.0が指定されたタスクD1が投入されると、タスクA1、B1、及びD1のそれぞれの優先度係数の逆数の比である1:2:1に応じて、各ヘッドノード20の計算ノード確保数は、Ka=50、Kb=100、Kc=50に収束していくことは上記より自明である。
上述したように、本実施の形態によれば、各計算ノード10がそれぞれ単独で自律的に自己管理を行うことが可能であるため、タスクの割り当てを管理するための管理装置は不要である。したがって、当該管理装置の障害によってタスクの実行が不可能となるといった事態の発生を適切に回避することができる。
また、各計算ノード10による相互通信は発生しない。したがって、通信負荷を軽減することができる。なお、計算ノード10とヘッドノード20との間において通信が行われるが、一般的な分散処理システムにおいては、計算ノード10とヘッドノード20との通信回数は、計算ノード10間の相互通信の回数に比べて顕著に少ない。一般的な分散処理システムでは、計算ノード10の数の方がヘッドノード20の数より著しく多いからである。
また、計算ノード10は、1つの分割タスクの処理が終了するたびに予約要求の再選択を行うため、前回選択した予約要求に係る分割タスクが完了しなくても他の予約要求に係る分割タスクを処理することができる。すなわち、複数のタスクに対して並列的に資源を割り当てることができる。したがって、先に開始されているタスクの終了を待たずに、他のヘッドノード20のタスクの処理を開始させることができる。
また、計算ノード10では、各予約要求内の優先度係数と、各予約要求元の計算ノード確保数とに基づいて確保度が算出され、最小の確保度の予約要求が選択される。その結果、各ヘッドノード20の計算ノード確保数は、各予約要求の確保度が均衡する方向に推移する。このような振る舞いは、相対的に小さい優先度係数が設定されたタスクには、相対的に多くの計算ノード10が割り当てられ、相対的に大きい優先度係数が設定されたタスクには、相対的に少ない計算ノード10が割り当てられることを意味する。すなわち、優先度係数の大小によって各タスクに割り当てる計算ノード10の比率を操作することができる。したがって、タスクの重要度や緊急度に応じて、各タスクに割り当てる計算ノード10数を適切に調整することが可能である。
また、優先度係数は、予約要求の選択の際に毎回参照される。したがって、ヘッドノード20は、既に予約要求を行ったタスクに関する処理の開始後に、優先度係数を変更して当該タスクの再予約要求を行うようにしてもよい。その場合であっても、新たな優先度係数に応じて、随時計算ノード確保数の比率を変更することが可能である。
また、ヘッドノード20は、自らが発行した予約要求を選択した計算ノード10から分割タスク配布要求を受信したときに初めて分割タスクを配布する。一方、分割タスクを受信した計算ノード10は分割タスクの処理が終了するまで次の予約要求の選択は行わない。よって、ヘッドノード20が送信した分割タスクは必ず処理されることになる。
また、ヘッドノード20は、周期的に計算ノード記憶装置30に登録されたレコードを監視し、予約済みでない計算ノード10を検出すると、当該計算ノード10に対して予約要求を行う。その結果、ヘッドノード20は、既に他の計算ノード10において開始されている処理に影響を与えることなく計算ノード10の追加(スケールアウト)に随時対応することが可能である。
なお、分割タスクの配布データには、必ずしも優先度係数は含まれていなくてもよい。この場合、例えば、計算ノード確保数の比較によって分割タスクの配布要求先のヘッドノード20が選択されればよい。すなわち、計算ノード確保数が最小のヘッドノード20が分割タスクの配布要求先として選択されればよい。その結果、各ヘッドノード20のタスクに対して略均等に計算ノード10が割り当てられる。
また、計算ノード確保数を用いないで予約要求の選択が行われてもよい。この場合、予約要求の選択規則は、所定のものに限定されない。例えば、先着の予約要求から順番に選択が行われてもよいし、ランダムに選択が行われてもよい。
また、優先度係数をユーザに指定させる場合、割り当てる計算ノード10の数の相対比をそのまま指定させてもよい。この場合、確保度を演算する際に、当該相対比の逆数を計算ノード確保数に乗ずるようにすればよい。配布データには、当該相対比の逆数が含められてもよいし、当該相対比がそのまま含められもよい。
また、各計算ノード10に配布されるタスクは、分割タスクでなくてもよい。例えば、各ヘッドノード20に、100個前後のタスクが投入され、ヘッドノード20は、投入されたタスクを分割することはく各計算ノード10に配布するようにしてもよい。
また、計算ノード確保数は、必ずしも、各ヘッドノード20において管理されなくてもよい。例えば、各ヘッドノード20の計算ノード確保数を一元的に管理するノード(確保数管理ノード)が設けられてもよい。この場合、各ヘッドノード20は、確保数管理ノードに対して計算ノード確保数の更新を行う必要がある。一方で、各計算ノード10は、各ヘッドノード20の計算ノード確保数を、一回の通信によって取得することが可能となる。したがって、計算ノード10側の処理負荷を軽減させたい場合、このようなシステム構成が有効である。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
タスクを計算ノードに配布する複数のヘッドノードと配布されたタスクを実行する複数の前記計算ノードとを有する分散処理システムであって、
前記計算ノードは、
前記ヘッドノードより前記複数の計算ノードに送信される、前記計算ノードの利用の予約要求の受信に応じ、前記利用予約を予約要求記憶手段に記録する予約管理手段と、
前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する予約選択手段と、
前記配布要求に応じて返信されるタスクを処理するタスク実行手段とを有し、
前記予約選択手段は、前記タスク実行手段によるタスクの処理の終了に応じ、前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する分散処理システム。
(付記2)
前記予約選択手段は、前記予約要求記憶手段に記録されたそれぞれの前記予約要求に係る前記ヘッドノードがタスクの処理に利用中の計算ノード数を取得し、取得された前記計算ノード数の比較に基づいて前記予約要求を選択する付記1記載の分散処理システム。
(付記3)
前記予約要求は、前記ヘッドノードに対する前記計算ノードの割当数の相対比又は該相対比の逆数を含み、
前記選択手段は、前記予約要求ごとに、当該予約要求に係る前記計算ノード数と前記相対比の逆数との乗を算出し、該乗が最小の前記予約要求を選択する付記1又は2記載の分散処理システム。
(付記4)
前記計算ノードは、計算ノード記憶手段に前記計算ノードの識別情報を記録する登録手段を有し、
前記ヘッドノードは、前記計算ノード記憶手段に記録されている前記識別情報に係る前記計算ノードに前記予約要求を送信する付記1乃至3いずれか一項記載の分散処理システム。
(付記5)
タスクを計算ノードに配布する複数のヘッドノードと配布されたタスクを実行する複数の前記計算ノードとを有する分散処理システムが実行する分散処理方法であって、
前記計算ノードは、
前記ヘッドノードより前記複数の計算ノードに送信される、前記計算ノードの利用の予約要求の受信に応じ、前記利用予約を予約要求記憶手段に記録する予約管理手順と、
前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する予約選択手順と、
前記配布要求に応じて返信されるタスクを処理するタスク実行手順とを実行し、
前記予約選択手順は、前記タスク実行手順におけるタスクの処理の終了に応じ、前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する分散処理方法。
(付記6)
前記予約選択手順は、前記予約要求記憶手段に記録されたそれぞれの前記予約要求に係る前記ヘッドノードがタスクの処理に利用中の計算ノード数を取得し、取得された前記計算ノード数の比較に基づいて前記予約要求を選択する付記5記載の分散処理方法。
(付記7)
前記予約要求は、前記ヘッドノードに対する前記計算ノードの割当数の相対比又は該相対比の逆数を含み、
前記選択手順は、前記予約要求ごとに、当該予約要求に係る前記計算ノード数と前記相対比の逆数との乗を算出し、該乗が最小の前記予約要求を選択する付記5又は6記載の分散処理方法。
(付記8)
前記計算ノードは、計算ノード記憶手段に前記計算ノードの識別情報を記録する登録手順を実行し、
前記ヘッドノードは、前記計算ノード記憶手段に記録されている前記識別情報に係る前記計算ノードに前記予約要求を送信する付記5乃至7いずれか一項記載の分散処理方法。
(付記9)
ヘッドノードより配布されたタスクを実行する前記計算ノードに、
前記ヘッドノードより前記複数の計算ノードに送信される、前記計算ノードの利用の予約要求の受信に応じ、前記利用予約を予約要求記憶手段に記録する予約管理手順と、
前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する予約選択手順と、
前記配布要求に応じて返信されるタスクを処理するタスク実行手順とを実行させ、
前記予約選択手順は、前記タスク実行手順におけるタスクの処理の終了に応じ、前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信するプログラム。
(付記10)
前記予約選択手順は、前記予約要求記憶手段に記録されたそれぞれの前記予約要求に係る前記ヘッドノードがタスクの処理に利用中の計算ノード数を取得し、取得された前記計算ノード数の比較に基づいて前記予約要求を選択する付記9記載のプログラム。
(付記11)
前記予約要求は、前記ヘッドノードに対する前記計算ノードの割当数の相対比又は該相対比の逆数を含み、
前記選択手順は、前記予約要求ごとに、当該予約要求に係る前記計算ノード数と前記相対比の逆数との乗を算出し、該乗が最小の前記予約要求を選択する付記9又は10記載のプログラム。