(57)【特許請求の範囲】
【請求項１】
それぞれがプロセッサを備える複数のノードにおけるタスクのスケジューリングを担当するスケジュールノードと、
前記スケジュールノードにより割り当てられるタスクを実行するタスク実行ノードと、
所定のデータを格納するデータベースに対する処理を取り扱うトランザクションノードと、
を含むサーバシステムにおいて、前記スケジュールノードで実行されるスケジューラプログラムであって、
前記サーバシステムに接続されたクライアント端末から与えられるサービス要求に応じて、実行順序が定められた複数タスクを前記サーバシステム内の異なるタスク実行ノードに割り当てる割り当て機能と、
１つのタスク実行ノードと前記データベースとの間のトランザクションで発生したデータ書き込みまたはデータ書き換えを確定させるデータ永続化処理が前記トランザクションノードに依頼されたとき、該永続化処理が正常に完了したとの通知が前記トランザクションノードから前記１つのタスク実行ノードで実行中の現行のタスクに来る前に、別のタスク実行ノードにおいて後続のタスクの処理を開始させるタスク先行実行指示機能と、
前記後続のタスクの処理を実行するときに必要となるデータを、該後続のタスクが実行される別のタスク実行ノードに対して送信するデータ複製機能と、
を含むことを特徴とするスケジューラプログラム。
【請求項２】
前記後続のタスクの処理が開始されるときに、タスクの処理結果としての画面表示データの受け取り先を前記現行のタスクから前記後続のタスクに切り換え、現行のタスクの画面表示データをバッファに蓄積するとともに後続のタスクの画面表示データを前記クライアント端末に送信する画面表示制御機能をさらに含むことを特徴とする請求項１に記載のスケジューラプログラム。
【請求項３】
現行のタスクのトランザクション完了前に障害が発生したとき、該現行のタスクまたは前記サービス要求毎に予め定められている障害処理プロセスを、該現行のタスクおよび前記後続のタスクが割り当てられたタスク実行ノードに実行させる障害処理機能をさらに含むことを特徴とする請求項１または２に記載のスケジューラプログラム。
【請求項４】
それぞれがプロセッサを備える複数のノードと所定のデータを格納するデータベースとを含むサーバシステムであって、
請求項１ないし３のいずれかに記載のスケジューラプログラムを実行するスケジュールノードである子ノードと、
前記割り当て機能により割り当てられたタスクを実行するタスク実行ノードである孫ノードと、
前記データベースに対する処理を取り扱うトランザクションノードと、
を含むことを特徴とするサーバシステム。
【請求項５】
前記複数のノードと接続されいずれのノードからもアクセス可能に構成され、請求項１ないし３のいずれかに記載のスケジューラプログラムを格納する記憶装置をさらに備えることを特徴とする請求項４に記載のサーバシステム。
【請求項６】
それぞれがプロセッサを備え割り当てたれたタスクを実行する複数のタスク実行ノードと、所定のデータを格納するデータベースに対する処理を取り扱うトランザクションノードと、を含むサーバシステムに配置されるスケジューラ装置であって、
前記サーバシステムに接続されたクライアント端末から与えられるサービス要求に応じて、実行順序が定められた複数タスクを前記サーバシステム内の異なるタスク実行ノードに割り当てるタスク割り当て部と、
１つのタスク実行ノードと前記データベースとの間のトランザクションで発生したデータ書き込みまたはデータ書き換えを確定させるデータ永続化処理が前記トランザクションノードに依頼されたとき、該永続化処理が正常に完了したとの通知が前記トランザクションノードから前記１つのタスク実行ノードで実行中の現行のタスクに来る前に、別のタスク実行ノードにおいて後続のタスクの処理を開始させるタスク先行実行指示部と、
前記後続のタスクの処理を実行するときに必要となるデータを、該後続のタスクが実行される別のタスク実行ノードに対して送信するデータ複製部と、
を備えることを特徴とするスケジューラ装置。
【請求項７】
前記後続のタスクの処理が開始されるときに、タスクの処理結果としての画面表示データの受け取り先を前記現行のタスクから前記後続のタスクに切り換え、現行のタスクの画面表示データをバッファに蓄積するとともに後続のタスクの画面表示データを前記クライアント端末に送信する画面表示制御部をさらに備えることを特徴とする請求項６に記載のスケジューラ装置。
【請求項８】
現行のタスクのトランザクション完了前に障害が発生したとき、該現行のタスクまたは前記サービス要求毎に予め定められている障害処理プロセスを該現行のタスクおよび前記後続のタスクが割り当てられたタスク実行ノードに実行させる障害処理部をさらに備えることを特徴とする請求項６または７に記載のスケジューラ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノードを含むサーバシステムにおけるタスク処理技術に関する。
【背景技術】
【０００２】
ユーザがウェブブラウザ等を使用してインターネット経由でサーバシステムに送信するサービス要求は、年々増大している。このようなウェブブラウザからなされるサービス要求は、ユーザが対話的に実行するためにサーバとのセッションが長時間に及ぶ場合がある。セッションからの断続的な要求にも即時応答するためには、セッション情報やプログラムをサーバのメモリ上に保持しておかなくてはならない。サービス要求の増大とともにサーバが必要とするメモリリソースも増加する傾向にあるため、メモリリソースを安価に確保したいという要請が存在する。
【０００３】
そこで、比較的安価な複数のサーバまたはパーソナルコンピュータを網目状に接続してサービス要求から派生するタスクを分散することで、高速処理を実現するグリッドコンピューティングが注目されている。グリッドコンピューティングのユーザは、グリッドにプーリングされている膨大な処理能力や記憶容量を利用することができる。
【０００４】
一般に、サービス要求においては、データベースからのデータの読み出しやデータベースへの書き込みが頻繁に実施される。そのため、データベースとのトランザクションに要する時間を短縮できれば、サービス要求に対する応答時間の短縮が期待できる。例えば、特許文献１には、データベースとのトランザクションにおいて永続化すべきデータをデータベースに保存させる処理であるコミットに必要な時間を削減するために、ディスクよりも高速に書き込みできる揮発性のメモリを利用するものが開示されている。
【特許文献１】特開２００６−１２１４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
実行順序の定められている複数のタスクを実行するとき、タスクを複数のノードに分散配置しても、前のタスクが終了しない限り後のタスクの処理を開始できない。この制約をもたらす大きな要因として、前のタスクでデータベースとのトランザクションを実施する場合、該トランザクションにおけるデータの変更がコミットで確定されるまでは、後のタスクを開始できないことが挙げられる。すなわち、トランザクションのコミットに時間がかかると、その分サービス要求に対する応答が遅くなる。
【０００６】
本発明はこうした状況に鑑みてなされたものであり、その目的は、サービス要求の応答速度を改善する技術を提供することにある。
【課題を解決するための手段】
【０００７】
本発明のある態様は、それぞれがプロセッサを備える複数のノードと所定のデータを格納するデータベースとを含むサーバシステムにおいて、該サーバシステム内のノードにおけるタスクのスケジューリングを担当するスケジュールノードで実行されるスケジューラプログラムである。このプログラムは、クライアント端末から与えられるサービス要求に応じて、実行順序が定められた複数タスクの各ノード上での実行を制御する。このプログラムは、複数タスクをサーバシステム内の異なるタスク実行ノードに割り当てる割り当て機能と、１つのタスク実行ノードにおける、データベース内のデータの利用または編集を含む現行のタスクの処理が完了する前に、そのタスクでの処理結果の予測をもとに別のタスク実行ノードにおいて後続のタスクの処理を先行して実行させるタスク先行実行指示機能と、クライアント端末との接続に必要となるデータを、後続のタスクに引き渡すために前記別のタスク実行ノードに対して送信するデータ複製機能と、をスケジュールノードに発揮させる。
【０００８】
この態様では、実行順序が定められた複数のタスクを異なるノードに割り当てる分散コンピューティングにおいて、実行中の現行タスクの処理が完了する前に後続のタスクの実行を先行して開始する。これによって、後続のタスクをより早く完了できるので、サービス要求に対する全体としての応答時間を短縮することができる。また、実行の順序が決まっているタスクでも、実質的な並列処理を実現できる。
【０００９】
タスク先行実行指示機能は、現行のタスクの処理が、当該タスクの処理が割り当てられたタスク実行ノードとデータベースとの間のトランザクションで発生したデータ書き込みまたはデータ書き換えを確定させるデータ永続化処理であるときに、後続のタスクの処理を先行して実行させてもよい。
【００１０】
データ永続化処理が終了するまで現行のタスクは待機しなければならないが、この態様によると後続のタスクがその待機時間の間に先行して実行されるので、データベースにおけるトランザクションの負荷の大小にかかわらず、現行タスクの実質的な待機時間を削減することができる。
【００１１】
本発明の別の態様は、それぞれがプロセッサを備える複数のノードと所定のデータを格納するデータベースとを含むサーバシステムである。このシステムは、上述のスケジューラプログラムを実行するスケジュールノードである子ノードと、上述の割り当て機能により割り当てられたタスクを実行するタスク実行ノードである孫ノードと、データベースに対する処理を取り扱うトランザクションノードと、を含む。
【００１２】
サーバシステムは、複数のノードと接続されいずれのノードからもアクセス可能に構成され、上述のスケジューラプログラムを格納する記憶装置をさらに備えてもよい。これによって、サーバシステム内のいずれのノードが子ノードに決定された場合であっても、そのノードにスケジューラプログラムをロードすることができる。
【００１３】
なお、以上の構成要素の任意の組合せ、本発明を方法、装置、システム、記録媒体、コンピュータプログラムにより表現したものもまた、本発明の態様として有効である。
【発明の効果】
【００１４】
本発明によれば、サービス要求の応答速度を改善することができる。
【発明を実施するための最良の形態】
【００１５】
本発明の一実施形態は、それぞれがプロセッサを備える複数のノードを含むサーバシステムにおいて、サービス要求から派生する実行順序の定められた複数のタスクをシステム内の異なるノードに展開しておき、あるタスクの処理が完了する前に、そのタスクの処理結果の予測をもとに別のノードにおいて後続するタスクを先行して実行するものである。前のタスクが完了する前に後続のタスクの処理を開始することによって、サービス要求への応答時間を改善することができる。
以下、図面を参照してこの実施形態について詳細に説明する。
【００１６】
図１は、本発明の一実施形態に係る格子型コンピュータシステム１００と、これに接続されるクライアント端末１２の全体構成図である。ここで、本実施形態が対象とする「格子型コンピュータシステム」とは、サーバまたはパーソナルコンピュータ等のそれぞれがプロセッサを備える複数のノードを格子状に接続させたシステムのことを言う。
【００１７】
図１に示すように、格子型コンピュータシステム１００は、クライアント端末１２から発行される要求に対して特定のサービスを提供するノード群１０を備える。ノード群１０は、複数列複数行（図１では四行四列）の格子を形成するようにノードが配置される。図１では、各ノードを白抜きの正方形で表している。これら格子状に配列されたノードが他のノードの全てと通信可能なように複数のルータ（図示せず）がノード間に設けられ、これらのルータはインターネット、ＬＡＮ、ＷＡＮ等のネットワーク１４に接続される。格子型コンピュータシステム１００は、企業のデータセンタ等に配置され、多数のサービス要求に同時に応答することが可能である。
【００１８】
図１のノード群１０は、各ノードを論理ノードとして表した格子モデルとして示されている。論理ノードとは、一台のルータに複数のサーバまたはパーソナルコンピュータが接続されているときそれらを１つのノードに代表させて表したものである。しかしながら、図１の各ノードが一台のサーバまたはパーソナルコンピュータに対応していてもよい。また、図１ではノード群１０を四行四列としているが、より多数またはより少数のノードで構成されていてもよいことは言うまでもない。
【００１９】
ノード群１０内の各ノードは、ルータを介して記憶装置２４にアクセス可能に構成されている。サービス要求の処理に必要となるスケジューラプログラム、アプリケーションプログラムは記憶装置２４に格納されており、必要に応じてプログラムやデータは記憶装置２４から各ノードに送信可能となっている。また、アプリケーションの実行に必要なテーブルはデータベース２６に格納されている。ノード群１０内の各ノードは、トランザクションノード１６を介してデータベース２６にアクセス可能に構成されている。トランザクションノード１６の詳細については、図３を参照して後述する。
記憶装置２４とデータベース２６は、一般にはハードディスク装置であり、多数のノードからの書き込み要求に見合った性能を発揮するように複数のディスクをまとめて構成される。記憶装置２４とデータベース２６は光磁気ディスク装置や不揮発性メモリであってもよい。
【００２０】
クライアント端末１２は、キーボードやマウスなどの入力装置とディスプレイなどの出力装置を備えるパーソナルコンピュータ、または、それに準ずる入出力装置を備える携帯電話であってもよい。ただし、携帯電話の場合には、無線で通信することを想定する。ユーザは、クライアント端末１２上でウェブブラウザ等を使用して、格子型コンピュータシステム１００に対してサービス要求を発行する。このサービス要求は、例えば、証券の発注処理や、旅行の予約処理などが考えられる。これらの例に見られるサービス要求をサーバで処理する際に、ユーザはウェブブラウザを使用して対話的にサービス要求を具体化していく。
【００２１】
図２は、ノード群１０を構成する各ノードの構成を示す。ノードは、プログラムにしたがって各種処理を実行するプロセッサ９２と、一時的にデータやプログラムを記憶するメモリ９４と、ノードの再起動があっても記録内容が失われないハードディスクドライブ、ＤＶＤドライブなどの記憶装置９６と、ネットワークに接続し各種の入出力処理を実行するネットワークインタフェース９８と、これらを相互接続するバス９０とを少なくとも含む。各ノードは、必要に応じて、キーボードやマウスなどの入力装置、ディスプレイなどの出力装置を有していてもよい。なお、１つのノードが２つ以上のネットワークインタフェース９８を有していてもよい。
【００２２】
各ノードは、格子型コンピュータシステムを構成するのに適したコンパクトな形状、すなわちプロセッサ、メモリ、ハードディスク、バスなどが搭載されたブレード型の筐体を有する。ノード群１０は、このブレード型筐体がラックに多数並ぶ配置となることが好ましいが、他の態様であってもよい。
【００２３】
ところで、図１に示すような複数のノードを接続して使用するグリッドコンピューティングにおいては、グリッドを構成するノード間で、サービス要求から派生するタスクをどのように割り当てるかが大きな問題となる。
【００２４】
例えば、１つのサービス要求からいくつものタスクが派生し、それらのタスク間で情報を交換する場合には、タスクが割り当てられるノードを近傍にまとめた方が効率的に要求を処理することができる。しかしながら、いくつかのサービス要求に対してグリッド内のノードの占有を自由に認めると、データフローの交差などにより特定のノードの負荷が増大し、その結果システム全体のパフォーマンスが低下してしまうおそれがある。したがって、グリッドコンピューティングにおいては、サービス要求の特性を考慮したタスク割り当ての必要性が高い。
そこで、本実施形態では、サービス要求の特性に応じたタスク割り当てを実行するスーパースケジューラとスケジューラとをノード群１０内のノードに配置している。
【００２５】
図１に戻り、本明細書においては、ノード群１０の中で、スーパースケジューラ２２を有し格子型コンピュータシステム１００全体のタスク割り当てを監視するノードを「親ノード」、スケジューラ３０を有しサービス要求に応じて一定範囲内でのタスク割り当てを監視するノードを「子ノード」、子ノードのスケジューラ３０によりタスク割り当てがなされるノードを「孫ノード」と呼ぶことにする。
【００２６】
また、本明細書において「タスク」とは、ある目的を達成するアプリケーションのプログラムコードを分割したものを指し、「サービス要求」から「タスク」が派生するとき、それらのタスクの間には並列や直列といった実行の順序関係が明確になっていることが前提となる。タスクは、トランザクションを含む場合もあれば、含まない場合もある。後者の例として、ウェブページに埋め込まれているスクリプトの実行やコンポーネント呼出しを伴うもののデータベースにはアクセスしないタスクが挙げられる。本実施形態が効果をもたらすのは、サービス要求から派生したタスクのうち、少なくとも１つのタスクがトランザクションを含む場合である。
【００２７】
続いてスーパースケジューラ２２とスケジューラ３０の動作の概略を説明する。
【００２８】
クライアント端末１２から格子型コンピュータシステム１００に対して発行されたサービス要求は、まず親ノード１８により受け取られる。サービス要求を受け取ると、親ノード１８のスーパースケジューラ２２は、そのサービス要求を分析する。具体的には、システム１００に到来するサービス要求の種類や同時トランザクション数などの見積もりにしたがって、必要リソース量を推定する。この見積もりは、システム１００のオペレータによって手作業で入力されてもよいし、過去の統計に基づいてスーパースケジューラ２２が算出してもよい。
【００２９】
続いて、スーパースケジューラ２２は、この見積もりにしたがって、サービス要求毎に必要となるノード数をノード群１０内で確保し、サービス要求処理の起点となる子ノード２０の数を決定し、子ノード２０をノード群１０内に展開させて配置する。
【００３０】
子ノードの配置が決定すると、子ノードと決定されたノードに対して記憶装置２４からスケジューラプログラムが送信され、子ノード２０においてスケジューラ３０として機能する。スケジューラ３０は、自身のサービス要求を処理するために必要なリソースをスーパースケジューラ２２に通知する。スーパースケジューラ２２は、システム外部のクライアント端末１２に対して子ノード２０のネットワークアドレスを通知する。これ以降のサービス要求は、子ノード２０に直接送られる。
【００３１】
スケジューラ３０は、サービス要求の特性に基づいて、タスクをノード群１０内のいくつかのノードに割り当てる処理を実行する。まず、スケジューラ３０は、サービス要求毎に予め対応させているアプリケーションを呼び出し、アプリケーションを構成するタスクを処理するために、タスク処理プログラムをノード群１０内の他のノードに割り当てる。これらが孫ノード５０、５４になる。タスク処理プログラムのコードは、記憶装置２４から孫ノード５０、５４に送信されて、メモリに読み込まれた後、サービス要求に備えてメモリ上に待機する。そして、タスクが割り当てられた孫ノード５０、５４において、タスク処理プログラムによりタスクの処理が実行される。タスク処理の結果は、ネットワーク１４経由でクライアント端末１２に送信される。クライアント端末１２は、送信されたデータに基づいてディスプレイに結果を表示する。
【００３２】
一般に、サービス要求から派生するタスクを複数のノードに展開することによって、以下のようなメリットがある。
第１に、タスクの実行に必要なリソースを確保することができる。また、同一のノードで複数のタスクを同時に起動する場合に発生するリソースの競合が起こりにくい。
さらに、同一ノードで複数のタスクを実行する場合と比べて、オペレーティングシステムにおけるタスク切り換えのオーバーヘッドが少ない。したがって、タスクを別ノードに分けることで、レスポンスおよびスループットの向上が期待できる。
【００３３】
ところで、高度なサービス要求の場合には、タスク間の依存関係を反映した実行順序制御が必要になる。例えば、インターネット経由で海外旅行の予約を受け付けるウェブサイトでは、「希望旅程の入力」に続いて「交通機関の予約」「宿泊施設の予約」などのタスクを逐次実行していく必要がある。このような場合、後のタスクを実行するためには前のタスクの情報を引き継ぐ必要がある。
【００３４】
このようなタスク間に依存関係があり直列的に処理する必要のあるタスクを、本明細書では「直列関係にあるタスク」と呼ぶ。直列関係にあるタスクは、通常は前のタスクが正常に終了するまでは、後のタスクを開始することができない。例えば、後述する分散トランザクションにおける２フェーズコミットでは、コミットの結果がタスクに通知されるまでの間、そのタスクは待機する必要があり、次のタスク処理に移行することができない。
【００３５】
そこで、本実施形態では、ある孫ノードで実行中のタスク（以下、「現行タスク」という）とデータベースとの間のトランザクションが完了する前に、実行中のタスクの結果、具体的にはトランザクションの結果を予測した上で、その予測に基づいて別の孫ノードにおいて後続のタスクを先行して実行するようにした。
【００３６】
図３は、タスクの先行実行を可能にする子ノード２０のスケジューラ３０と、トランザクションノード１６の構成を示す機能ブロック図である。これらの構成は、ハードウェア的には、プロセッサ、メモリ、バス等で実現でき、ソフトウェア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
【００３７】
スケジューラ３０は、もっぱらソフトウェアとして実装され、そのプログラムはノードの記憶装置９６、またはノードに共有される記憶装置２４からロードされる。図３によれば、スケジューラ３０には、タスク割り当て部３２、タスク先行実行指示部３４、データ複製部４２、画面表示制御部４４、障害処理部４６が含まれる。
【００３８】
タスク割り当て部３２は、上述した手順にしたがって、サービス要求から派生した各タスクをノード群１０内の適切な孫ノードに割り当てる。図３では、孫ノードＡと孫ノードＢにそれぞれ現行タスク５２、次タスク５６を割り当てている。現行タスク５２と次タスク５６とは直列関係にある。
【００３９】
タスク先行実行指示部３４は、データベース２６内のデータの利用または編集を含む現行タスクの処理が完了する前に、現行タスクでの処理結果の予測をもとに、別のノードに割り当てた次タスクの処理を先行して実行させる。より具体的には、孫ノードＡにおける現行タスク５２が、現行タスク５２とデータベース２６との間のトランザクションで発生したデータ書き込みまたはデータ書き換えを確定させる命令であるコミット（データ永続化）をトランザクションマネージャ３６に依頼したとき、タスク先行実行指示部３４は、そのコミットの完了通知を待たずに、トランザクションが成功したものとして、次タスク５６の処理開始を孫ノードＢに指示する。トランザクションマネージャ３６の機能および処理については後述する。
【００４０】
データ複製部４２は、現行タスク５２のコミットの完了を待たずに次タスク５６を先行して実行するときに必要となるセッションデータを、次タスク５６に引き渡すために次タスク５６が割り当てられた孫ノードＢに送信する。孫ノードＡの現行タスク５２のメモリイメージに保持されているセッションデータをデータ複製部４２が複製した上で、孫ノードＢに送信してもよいし、孫ノードＡに対して、セッションデータを孫ノードＢに送信するように指示してもよい。
【００４１】
セッションデータは、クライアント端末のＩＰアドレス、ユーザ名、タスクが実行されているノードのＩＤ、タスクの状態などのクライアント端末との通信に必要となるデータと、現行タスクがトランザクションでデータベースに書き込むべきデータのうち次タスクの実行に必要となるデータとを含む。
【００４２】
データ複製部４２により、セッションデータが孫ノードＡと孫ノードＢとに二重化されることになる。そのため、いずれかのノードで障害が発生したときにもセッションデータが維持され、その後のクライアント端末との通信が可能になるので、障害時のシステムの耐性を上げることができるという効果もある。
【００４３】
データ複製部４２によってセッションデータを次タスク５６に複製し、タスク先行実行指示部３４が孫ノードＢに対して次タスク５６の実行を指示することで、現行タスク５２のトランザクションにおけるコミットの待ち時間の間に、次タスク５６の実行を開始することができる。
【００４４】
現行タスク５２と次タスク５６のいずれにもクライアント端末１２への画面表示が伴う場合には、現行タスク５２と次タスク５６とを並列的に実行し、それぞれのタスクの処理結果がクライアント端末１２に送信され画面表示がなされると、ユーザを混乱させることになる。そこで、画面表示制御部４４は、複数のタスクが同時実行されているときの画面表示を調整する。
【００４５】
図４は、画面表示制御部４４による制御を説明する図である。図中、横軸は時間経過を表し、実線は、クライアント端末１２のディスプレイに画面が表示される状態を表している。
【００４６】
現行タスクについての画面表示がなされている間に、現行タスクによりトランザクションマネージャ３６に対してコミットが依頼され、これを契機にタスク先行実行指示部３４により次タスクの開始が指示されると（ｔ１）、画面表示制御部４４は、タスクの処理結果としての画面表示データの受け取り先を現行タスクから次タスクに切り換える。そして、現行タスクの画面表示データをバッファに蓄積するとともに、現行タスクの処理結果の予測に基づいた次タスクの画面表示データをクライアント端末１２に対して送信する（ｔ１〜ｔ２）。これによって、ユーザには、現行タスクは終了して次のタスクに制御が移ったように見える。
【００４７】
現行タスクのトランザクションが正常に完了すると（ｔ２）、バッファに蓄積された現行タスクの画面表示データは破棄し、次タスク５６の画面表示データの送信を継続する（ｔ２以降）。現行タスクが正常に完了しなかった場合には、後述する障害処理部４６によって障害処理プロセスが実行される。
【００４８】
画面表示制御部４４は、画面表示データの受け取り先を現行タスクから次タスクに切り換える間（ｔ１〜ｔ２）に、ユーザからクライアント端末１２を介してなされた入力をバッファする機能を備えていてもよい。この間になされた入力は、現行タスクのトランザクションが正常に完了した後（ｔ２以降）、次タスクに送られる。
【００４９】
このように、データ複製部４２と画面表示制御部４４とによって、クライアント端末１２を操作するユーザからは２つのタスクが同時に実行されていることが見えなくなり、ユーザに意識させずに次タスクの先行実行を進めることができる。
【００５０】
図３に戻り、障害処理部４６は、現行タスク５２のトランザクションの完了前に障害が発生したとき、現行タスクまたはサービス要求毎に予め定められている障害処理プロセスを、現行タスク５２および次タスク５６が割り当てられた孫ノードＡ、孫ノードＢに実行させる。現行タスク５２のトランザクションが正常に終了した場合には何もしない。障害処理プロセスは、例えば、１．次タスクに割り込み処理をする、２．現行タスクのコミットの成功予測に基づいて次タスクにおいてデータベースへの書き込みや変更が既になされていた場合には、データベースをロールバックする、３．現行タスクのコミットの成功予測に基づいてクライアント端末に既にメッセージが送信されていた場合には、クライアント端末にエラーメッセージを送信する、４．障害の状況をログに残す、などがある。
【００５１】
次に、トランザクションノード１６の説明に移る。トランザクションノード１６は、データベースへのデータの書き込み、書き換え、データの読み取りなどを担当するノードである。図１では、トランザクションノード１６をノード群１０の外部に描いているが、ノード群１０に含まれるノードであってもよい。トランザクションノード１６には、トランザクションマネージャ３６、データベースライタ３８、ログライタ４０が含まれる。
【００５２】
トランザクションマネージャ３６は、タスクとデータベースの間に位置し、トランザクションを制御、監視する機能を有する。孫ノードＡで実行されている現行タスク５２は、データベース２６にアクセスする必要がある場合、トランザクションにトランザクションＩＤを割り当てた上で、予め有している呼出しライブラリを参照してトランザクションノード１６にあるトランザクションマネージャ３６を呼び出す。トランザクションＩＤは、スケジューラ３０とデータベースライタ３８に渡される。現行タスク５２がトランザクションマネージャ３６に対してコミットを依頼すると、そのことが現行タスク５２を経由してスケジューラ３０にも伝達される。
【００５３】
スケジューラ３０のタスク先行実行指示部３４は、コミット依頼の情報を受け取ると、現行タスクのコミットの結果を予測する。通常は、現行タスクによるコミットが成功すると予測する。コミットが成功するとの前提の上で、タスク先行実行指示部３４は孫ノードＢに割り当てた次タスク５６の実行開始を指示する。
【００５４】
一旦タスクからトランザクションマネージャ３６に対してデータのコミットが依頼されると、以降の処理はトランザクションマネージャ３６が実行する。そのため、タスク側で複数の命令をデータベースに対して発する必要が無くなり、タスクからトランザクションの処理が隠蔽される。
【００５５】
トランザクションマネージャ３６は、コミットの成功または失敗についても現行タスクを経由してスケジューラに伝達する。スケジューラの障害処理部４６は、これに基づいて障害処理の実行を判断する。
【００５６】
データベースライタ３８は、データベース２６へのデータの書き込み、書き換えを実行する。
【００５７】
ログライタ４０は、データベースライタ３８によるデータベースの状態の変更やコミットの順序などをログに記録する。このログを参照することで、障害発生時にデータベースのロールバックが可能になる。「ロールバック」とは、データベースの変更を取り消す処理であり、新しいデータをデータベースに書き込んだ場合であっても、コミットする前なら書き込みを破棄することができる。ロールバックが実施されると、データベースはデータを変更していない元の状態に維持される。
【００５８】
図５は、トランザクションマネージャ３６による分散トランザクションの一般的な処理手順を示す。１つのトランザクションで複数のデータベースにアクセスする分散トランザクションでは、それぞれのデータベースのデータ一貫性を維持するために２フェーズコミットという手法が採用される。２フェーズコミットでは、全てのデータベースに対する変更がともに反映されるか、いずれも変更しないで終了するかのいずれかをとる。
【００５９】
一回のトランザクションは、１つ以上のＳＱＬ文で構成される。まず、タスクは、トランザクションマネージャに対してコミット（commit）を依頼する（Ｓ１００）。続いて、第１のフェーズとして、トランザクションマネージャ３６は、データベースＡ、データベースＢに対してそれぞれ、ＳＱＬ文とともにコミットできる状態であるか否かを確認する準備命令（prepare）を送信する（Ｓ１０２，Ｓ１０６）。この時点では、書き込まれるべきデータがＳＱＬ文としてデータベースのログに書き込まれた状態になり、トランザクションマネージャからデータベースに対してコミットの命令がくるまでは実際の書き込みは行われない。これを受けたデータベースＡ、データベースＢは、ログ書き込みが正常に行われたか否かをトランザクションマネージャ３６に伝える。ログ書き込みが正常に行われたことがログライタ４０によって確認されると、トランザクションマネージャ３６に対して準備完了（ok）を伝える（Ｓ１０４，Ｓ１０８）。ログ書き込みが異常終了していれば、トランザクションマネージャに対して準備未了であることを伝える。
【００６０】
第２フェーズでは、トランザクションマネージャ３６は、データベースＡ、データベースＢからの準備完了か準備未了かの通知をもとに、全てのデータベースに対してコミット命令またはロールバック命令を送信する。データベースＡ、データベースＢの両方から準備完了の通知を受け取った場合にのみ、トランザクションマネージャは両データベースに対してコミットの命令を送る（Ｓ１１０，Ｓ１１４）。データベースＡ、データベースＢは、ログに書かれたＳＱＬ文を解釈してテーブルに反映させる。
【００６１】
トランザクションマネージャがコミットを命令する前に何らかの障害が発生し、データベースから１つでも不可の通知を受け取った場合、トランザクションマネージャは、全てのデータベースに対してロールバック命令を送る。
【００６２】
障害の例としては、データベースの更新ルールに合わないタイムスタンプ（時間外など）、別のプロセスによるテーブルのロック、指定時間内にデータベースからの通知がないなどの他、ハードウェア障害や通信障害なども含まれる。
【００６３】
データベースＡ、データベースＢにおけるデータ更新が成功すると（Ｓ１１２，Ｓ１１６）、その情報がトランザクションマネージャに伝えられる（Ｓ１１８、Ｓ１１９）。トランザクションマネージャ３６は、トランザクションの実行結果を現行タスクに通知する。トランザクションマネージャがコミット命令を出し、データベースでの更新が成功した場合には、トランザクション成功の情報をタスクに送る（Ｓ１２０）。トランザクションマネージャがロールバックを命令した場合、および、コミットを命令したがデータベースから指定時間内にデータ更新成功の通知がない場合には、トランザクション失敗の情報をタスクに送る。
【００６４】
このように、複数のデータベースに対する全ての書き込み操作を１つのトランザクション内で実行することで、トランザクションの途中で何らかの障害が生じた場合であっても、全てのデータベースのデータ一貫性を保つことができる。
【００６５】
本実施形態におけるトランザクションは、ＯＡＳＩＳ（Organization for the Advancement of Structured Information Standards）で策定が行われているＢＴＰ（Business Transaction Protocol）にしたがうことが好ましいが、これに限定されず、他のプロトコルにしたがっていてもよい。
【００６６】
図６は、本実施形態による格子型コンピュータシステム１００におけるタスクの先行実行を説明するフローチャートである。
【００６７】
現行タスク５２がトランザクションマネージャ３６に対してデータのコミットを依頼すると（Ｓ１０）、現行タスク５２はスケジューラ３０に対してコミット依頼中であることを伝える（Ｓ１２）。タスク先行実行指示部３４は、これに応じてコミットが正常に完了すると予測し、次タスク５６を割り当てた孫ノードＢに対して、コミットが正常に完了するという前提のもとに次タスク５６の実行を開始するように指示する（Ｓ１４）。なお、次タスク５６のタスク処理プログラムは、Ｓ１４の前に予め孫ノードＢに対してロードしておいてもよいし、Ｓ１４において、対応するタスク処理プログラムを記憶装置２４から取得するように孫ノードＢに対して指示してもよい。
【００６８】
データ複製部４２は、現行タスク５２のセッションデータを複製して次タスク５６に送信し、次タスク５６の先行実行が開始される（Ｓ１６）。トランザクションマネージャ３６は、データベース２６とのトランザクションを制御し、現行タスク５２を介してトランザクションの結果をスケジューラ３０に通知する（Ｓ１８）。トランザクションが成功していれば（Ｓ２０のＹ）、現行タスク５２を終了し、孫ノードＢにおいて次タスク５６の実行をそのまま継続する（Ｓ２２）。トランザクションが失敗していれば（Ｓ２０のＮ）、次タスクを終了させた上で、障害処理部４６によって所定の障害処理プロセスが実行される（Ｓ２４）。
【００６９】
なお、Ｓ１８のトランザクションの結果通知は、次タスク５６の実行が開始された後でなく、その前になされることも当然考えられる。その場合、タスク先行実行指示部３４は、次タスク５６の先行実行をさせずに、現行タスク５２のコミットの結果を確認した上で次タスク５６の実行を孫ノードＢに指示することが好ましい。
【００７０】
現行タスクのコミットが失敗した場合には、タスクの種類や障害のケース毎に応じて予め定められている障害処理プロセス、またはスケジューラで予め定められている障害処理プロセスにしたがって処理がなされる。ただし、サービス要求に応じたアプリケーションレベルで障害処理プロセスが定められている場合には、こちらを優先することが望ましい。例えば、コミットが失敗したときには全てのタスクを終了させるという障害処理プロセスがアプリケーションで定義されている場合、個々のタスクに関わる障害処理プロセスを実行しても無意味だからである。
【００７１】
続いて、格子型コンピュータシステム１００において分散トランザクションを含むサービス要求を処理する場合を２つ挙げて、本実施形態におけるタスクの先行実行処理をより具体的に説明する。
【００７２】
（実施例１）
図７は、インターネットを介して車の購入予約をするシステムの全体的な構成図である。図７中、図１、図３と同一の符号を付した要素は、図１、図３に関して上述したのと同様の機能を有するので、詳細な説明を省略する。また、図７においては、１つのサービス要求にのみ対応する場合を想定しているので、子ノードの割り当てを行う親ノードとスーパースケジューラ、およびサービスに関与しない他のノードを省略して示している。
【００７３】
ユーザがクライアント端末１２を介して車の購入予約を受け付けるサイトにアクセスすると、希望車種データ入力画面７０と顧客属性データ入力画面７２がクライアント端末１２のディスプレイに表示される。ユーザがこれらに所定の事項を入力して送信ボタンをクリックすると、希望車種データと顧客属性データとを含むサービス要求が子ノード２０に対して送信される。希望車種データには、購入の予約をしたい車名、モデル、色などの情報が含まれ、顧客属性データには、ユーザの氏名、電話番号、メールアドレスなどの情報が含まれる。
【００７４】
子ノード２０のスケジューラ３０は、サービス要求を受け取ると、予め対応付けのされているアプリケーションを記憶装置から読み出す。ここでは、このアプリケーションは購入予約タスク６２と納期通知タスク６６とを含むものとする。スケジューラ３０のタスク割り当て部３２は、購入予約タスク６２を孫ノードＡに、納期通知タスク６６を孫ノードＢに割り当てる。
【００７５】
まず、孫ノードＡにおいて、購入予約タスク６２が実行される。購入予約タスク６２は、顧客属性データをデータベース内の顧客管理テーブル８０に書き込むと同時に、希望車種データを発注管理テーブル８２に書き込む必要がある。そこで、購入予約タスク６２は、トランザクションノード１６にあるトランザクションマネージャを呼び出し、データのコミットを依頼する。
【００７６】
スケジューラ３０のタスク先行実行指示部３４は、購入予約タスク６２がトランザクションマネージャに対してデータのコミットを依頼したことを知ると、孫ノードＢに対して、コミットの完了前に納期通知タスク６６の実行を開始するように指示する。また、スケジューラ３０のデータ複製部４２は、購入予約タスク６２に保持され、発注管理テーブル８２に対して書き込み中である希望車種データ６８を複製し、納期通知タスク６６に引き渡す。
【００７７】
納期通知タスク６６は、購入予約タスク６２によるコミット依頼が成功する前提で、希望車種データ６８を参照して、希望する車がいつ頃出荷可能であるかを、データベース２６の在庫管理テーブル８４または生産管理テーブル８６を検索して調べる。在庫管理テーブル８４には、車名、モデル、色毎の在庫台数が記録されており、生産管理テーブル８６には、車名、モデル、色毎の生産予定台数が記録されている。これらを調べることで、納期通知タスク６６は車の納入可能日を計算し、納入可能日を含むメッセージ７４をクライアント端末１２に対して送信する。クライアント端末１２は、メッセージ７４を画面表示する。
【００７８】
購入予約タスク６２によるコミットが成功であれば、購入予約タスク６２は終了し、納期通知タスク６６がそのまま実行される。コミットが失敗であれば、スケジューラ３０の障害処理部４６が所定の障害処理プロセスを実行し、クライアント端末１２に対してエラーメッセージ７６を送信する。
【００７９】
このように、購入予約タスクによるコミット依頼が完了する前に納期通知タスクを先行して実行することで、サービス要求に対する全体としての応答時間を短縮することができる。このようなタスクの先行開始ができるのは、トランザクションマネージャによるテーブルの更新処理が高い確率で成功することに基づいている。
【００８０】
図８は、図７のシステムにおけるタスクの先行実行処理を説明するフローチャートである。まず、クライアント端末１２からサービス要求がなされる（Ｓ３０）。スケジューラ３０のタスク割り当て部３２は、サービス要求に対応する購入予約タスク６２と納期通知タスク６６とをシステム内の適切なノードに割り当てる（Ｓ３２）。購入予約タスク６２の実行が開始され、トランザクションノード１６のトランザクションマネージャ３６に対してデータのコミットが依頼される（Ｓ３４）。これに続いて、データ複製部４２により購入予約タスク６２から複製された希望車種データが納期通知タスク６６に送信され、タスク先行実行指示部３４により納期通知タスク６６の実行開始が指示される（Ｓ３６）。納期通知タスク６６はデータベース２６を参照して、納入可能日を含むメッセージ７４をクライアント端末１２に送信する（Ｓ３８）。
【００８１】
トランザクションマネージャ３６は、購入予約タスク６２から依頼されたコミットの成否を、購入予約タスク６２を介してスケジューラ３０に伝える（Ｓ４０）。コミットが成功していれば（Ｓ４２のＹ）、購入予約タスク６２を終了し、納期通知タスク６６を継続する（Ｓ４４）。コミットが失敗していれば（Ｓ４２のＮ）、障害処理部４６が所定の障害処理プロセスを実施する（Ｓ４６）。
【００８２】
Ｓ４６における障害処理プロセスは、障害の発生原因によって異なる。
図９は、障害処理プロセスの一例のフローチャートである。ここでは、データベースの容量不足やハードウェアの故障によって、コミットが失敗した場合を想定する。この場合、トランザクションマネージャ３６は、購入予約タスク６２を介してスケジューラ３０に対してコミットが失敗したことを通知する（Ｓ５０）。購入予約タスク６２は、障害発生時に出力するために予め準備されていたエラーメッセージ７６をクライアント端末１２に送信する（Ｓ５２）。スケジューラ３０の障害処理部４６は、納期通知タスク６６に割り込みをかけ、強制終了させる（Ｓ５４）。納期通知タスク６６は、データベース２６とのトランザクションを既に実施していた場合は、そのトランザクションをロールバックするようにトランザクションマネージャ３６に通知する（Ｓ５６）。
【００８３】
図１０は、障害処理プロセスの別の例のフローチャートである。ここでは、購入予約タスク６２の異常停止などのアプリケーションのエラーによって、コミットが失敗した場合を想定する。この場合、トランザクションマネージャ３６からのエラー通知はなされない。したがって、スケジューラ３０が購入予約タスク６２の動作状況を定期的に調べることによって、コミットの失敗を検出する（Ｓ６０）。障害処理部４６は、購入予約タスク６２から事前に受け取っていたトランザクションＩＤを使用して、トランザクションマネージャ３６に対して、購入予約タスク６２とのトランザクションをロールバックするように通知する（Ｓ６２）。今回は、購入予約タスク６２からエラーメッセージが出力されないので、スケジューラ３０が予め準備されているエラーメッセージ７６をクライアント端末１２に送信する（Ｓ６４）。障害処理部４６は、納期通知タスク６６に割り込みをかけ、強制終了させる（Ｓ６６）。納期通知タスク６６は、データベース２６とのトランザクションを実施していた場合は、そのトランザクションをロールバックするようにトランザクションマネージャ３６に通知する（Ｓ６８）。
【００８４】
（実施例２）
図７では、システム内のデータベースへのアクセスで完結する場合のタスクの先行実施について説明したが、システム外のデータベースにアクセスする場合にも本実施形態を適用できる。
【００８５】
図１１は、旅行代理店における旅行手配システムの全体的な構成図である。このシステムでは、外部に構築された別のシステムにアクセスしてタスクの処理を完了する。図１１においても、図１、図３と同一の符号を付した要素は、図１、図３に関して上述したのと同様の機能を有するので、詳細な説明を省略する。また、図１１においては、１つのサービス要求にのみ対応する場合を想定しているので、子ノードの割り当てを行う親ノードとスーパースケジューラ、およびサービスに関与しない他のノードを省略して示している。
【００８６】
この例では、航空券予約システムおよび宿泊先予約システムがそれぞれ独立したサービスとしてネットワーク上で提供されており、旅行手配システムはこれらの外部のシステムにアクセスして旅行の手配処理を完結させる。
【００８７】
ユーザがクライアント端末１２を介して旅行の手配を受け付けるサイトにアクセスすると、旅程入力画面１６０がクライアント端末１２のディスプレイに表示される。ユーザが自身の氏名、飛行機の搭乗日時、出発地、目的地などのデータを入力して送信ボタンをクリックすると、これらのデータを含むサービス要求が子ノード２０に送信される。
【００８８】
子ノード２０のスケジューラ３０は、サービス要求を受け取ると、予め対応付けのされているアプリケーションを記憶装置から読み出す。このアプリケーションは、旅程管理タスク１１２、航空券手配タスク１１４、宿泊先手配タスク１１６および料金請求タスク１１８とを含むものとする。スケジューラ３０のタスク割り当て部３２は、旅程管理タスク１１２を孫ノードＡに、航空券手配タスク１１４を孫ノードＢに、宿泊先手配タスク１１６を孫ノードＣに、料金請求タスク１１８を孫ノードＤに割り当てる。
【００８９】
まず、孫ノードＡにおいて、旅程管理タスク１１２が実行される。旅程管理タスク１１２は、旅程データをデータベース内の旅程管理テーブル１５６に書き込む必要がある。そこで、旅程管理タスク１１２は、トランザクションノード１６にあるトランザクションマネージャ３６を呼び出し、データのコミットを依頼する。
【００９０】
スケジューラ３０のタスク先行実行指示部３４は、旅程管理タスク１１２がトランザクションマネージャ３６に対してデータのコミットを依頼したことを知ると、孫ノードＢ、孫ノードＣに対して、コミットの完了前に、航空券手配タスク１１４、宿泊先手配タスク１１６の実行を開始するようにそれぞれ指示する。スケジューラ３０のデータ複製部４２は、旅程管理タスク１１２に保持され旅程管理テーブル１５６に対して書き込み中である旅程データのうち、航空券の手配に必要となる航空券データ１２０を複製し、航空券手配タスク１１４に引き渡す。また、データ複製部４２は、旅程データのうち、宿泊先の手配に必要となる宿泊先データ１２２を複製し、宿泊先手配タスク１１６に引き渡す。
【００９１】
航空券手配タスク１１４と宿泊先手配タスク１１６とは、旅程管理タスク１１２によるコミット依頼が成功する前提で動作する。航空券手配タスク１１４は、ネットワークを経由してシステムの外部にある航空券予約システム１４０にアクセスし、座席予約テーブル１４２を参照して、航空券データ１２０に基づいて航空券の予約手続を実行する。座席予約テーブル１４２には、日時や出発地、目的地に応じた多数の航空便の予約状況が記録されており、航空券手配タスク１１４はこれらの航空便のうち条件に適合するものを予約する。
【００９２】
また、宿泊先手配タスク１１６は、ネットワークを経由してシステムの外部にある宿泊先予約システム１５０にアクセスし、宿泊予約テーブル１５２を参照して、宿泊先データ１２２に基づいて宿泊先の予約手続を実行する。宿泊予約テーブル１５２には、日時と目的地に応じた多数の宿泊施設の予約状況が記録されており、宿泊先手配タスク１１６は、これらの宿泊施設のうち条件に適合するものを予約する。
【００９３】
航空券手配タスク１１４と宿泊先手配タスク１１６においても、アクセス先の外部システムにおいてデータベースとのトランザクションが発生し、予約をする場合にはデータの更新が必要になる。そこで、航空券手配タスク１１４と宿泊先手配タスク１１６とが外部システムにアクセスしデータのコミットを依頼したとき、スケジューラ３０のタスク先行実行指示部３４は、孫ノードＤに対して料金請求タスク１１８の実行を開始するように指示してもよい。このとき、データ複製部４２は、航空券手配タスク１１４から航空券データ１２４を、宿泊先手配タスク１１６から宿泊先データ１２６をそれぞれ複製し、料金請求タスク１１８に引き渡す。このときの航空券データ１２４には、航空券手配タスク１１４が予約しようとしている航空便の情報が含まれ、宿泊先データ１２６には、宿泊先手配タスク１１６が予約しようとしている宿泊施設の情報が含まれる。
【００９４】
料金請求タスク１１８は、航空券手配タスク１１４と宿泊先手配タスク１１６において予約のためのコミット依頼が成功する前提で動作する。料金請求タスク１１８は、ネットワークを経由して航空券予約システム１４０にアクセスし、航空運賃テーブル１４４を参照して、航空券手配タスク１１４が予約するであろう航空便の航空運賃を調べる。航空運賃テーブル１４４には、航空便毎の航空運賃が記録されている。また、料金請求タスク１１８は、ネットワークを経由して宿泊先予約システム１５０にアクセスし、宿泊料金テーブル１５４を参照して、宿泊先手配タスク１１６が予約するであろう宿泊施設の料金を調べる。宿泊料金テーブル１５４には、宿泊施設毎の料金が記録されている。料金請求タスク１１８は、こうして調べた航空運賃と宿泊料金のデータを含むメッセージ１６２をクライアント端末１２に送信する。クライアント端末１２は、メッセージ１６２を画面表示する。
【００９５】
旅程管理タスク１１２、航空券手配タスク１１４、および宿泊先手配タスク１１６によるコミットが成功であれば、これらのタスクは終了し、料金請求タスク１１８がそのまま実行される。これらのコミットのうちいずれかが失敗した場合は、スケジューラ３０の障害処理部４６が所定の障害処理プロセスを実行し、各タスクにより実行されたトランザクションは全てロールバックされ、またクライアント端末１２に対してエラーメッセージが送信される。
【００９６】
図１２は、図１１のシステムにおけるタスクの先行実行処理を説明するフローチャートである。まず、クライアント端末１２からサービス要求がなされる（Ｓ７０）。スケジューラ３０のタスク割り当て部３２は、サービス要求に対応する各タスク１１２〜１１８をシステム内の適切なノードに割り当てる（Ｓ７２）。旅程管理タスク１１２の実行が開始され、トランザクションノード１６のトランザクションマネージャ３６に対してデータのコミットが依頼される（Ｓ７４）。これに応じて、データ複製部４２により旅程管理タスク１１２から複製された航空券データ１２０が航空券手配タスク１１４に送信され、タスク先行実行指示部３４により航空券手配タスク１１４の実行開始が孫ノードＢに対して指示される。また、旅程管理タスク１１２から複製された宿泊先データ１２２が宿泊先手配タスク１１６に送信され、タスク先行実行指示部３４により宿泊先手配タスク１１６の実行が孫ノードＣに指示される（Ｓ７６）。さらに、航空券手配タスク１１４および宿泊先手配タスク１１６が、それぞれ対応するテーブルに対するデータのコミットを依頼している間に、データ複製部４２により航空券データ１２４および宿泊先データ１２６が複製され、料金請求タスク１１８に送信されてもよく、料金請求タスク１１８は、これらのデータをもとにユーザに請求する料金を計算してもよい（Ｓ７８）。料金請求タスク１１８は航空運賃テーブル１４４、宿泊料金テーブル１５４を参照して、請求料金を含むタスクの処理結果を表すメッセージをクライアント端末１２に送信する（Ｓ８０）。
【００９７】
トランザクションマネージャ３６は、旅程管理タスク１１２から依頼されたコミットの成否を、旅程管理タスク１１２を介してスケジューラ３０に伝える（Ｓ８２）。コミットが成功していれば（Ｓ８４のＹ）、旅程管理タスク１１２を終了し、その他のタスクを継続する（Ｓ８６）。コミットが失敗していれば（Ｓ８４のＮ）、障害処理部４６が所定の障害処理プロセスを実施する（Ｓ８８）。
【００９８】
以上説明したように、本実施形態によれば、サービス要求から派生する、直列関係のある複数のタスクを異なるノードに割り当てる分散コンピューティングにおいて、実行中のタスクのコミットが完了する前に後続タスクの実行を先行して開始するようにした。これによって、データベースにおけるトランザクションの負荷の大小にかかわらず、現行タスクのコミットの待機時間が実質的に削減され、サービス要求に対する全体としての応答時間を短縮することができる。このように、本実施形態では、直列関係のある複数のタスクを一時的に並列して処理するような状況を作り出すことができる。
【００９９】
以上、本発明をいくつかの実施の形態をもとに説明した。これらの実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例がありうること、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【０１００】
請求項に記載の各構成要件が果たすべき機能は、本実施例において示された各機能ブロックの単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
【０１０１】
ノード間のデータ通信は、共有の記憶装置を利用して行ってもよいし、例えばＤＡＦＳ（Direct Access File System）プロトコルを利用してノード間で直接通信してもよい。
【０１０２】
トランザクションマネージャが存在せず、タスク自身がデータベースとのトランザクションを直接実行してもよい。この場合、トランザクションの成否の状況は、スケジューラが定期的に監視する必要がある。
【０１０３】
実施形態では、トランザクションマネージャが２フェーズコミットの手法を用いてデータベースとのトランザクションを調整することを述べた。しかしながら、上述の実施形態は、データベースへの書き込みを確定させるコミットが完了するまでの間に待ち時間がある任意の手法に対して適用することができる。
【０１０４】
実施形態では、スケジューラが直列タスクを子ノードの近隣の孫ノードに割り当てることを述べた。直列タスクを互いに近接するノードに配置することで処理の高速化が期待されるためであるが、本発明は、タスクを実行するノードがノード群内のいずれに位置していようと関係なく適用できる。
【０１０５】
実施形態では格子型コンピュータシステムを用いて説明したが、本発明はタスクを分散配置できる任意の処理システムに適用することができる。
【図面の簡単な説明】
【０１０６】
【図１】本発明の一実施形態に係る格子型コンピュータシステムと、これに接続されるクライアント端末の全体構成図である。
【図２】ノード群を構成する各ノードの構成を示す図である。
【図３】タスクの先行実行を可能にする子ノードのスケジューラと、トランザクションノードの構成を示す機能ブロック図である。
【図４】画面表示制御部による制御を説明する図である。
【図５】トランザクションマネージャによる分散トランザクションの一般的な処理手順を示す図である。
【図６】本実施形態による格子型コンピュータシステムにおけるタスクの先行実行を説明するフローチャートである。
【図７】インターネットを介して車の購入予約をするシステムの全体的な構成図である。
【図８】図７のシステムにおけるタスクの先行実行処理を説明するフローチャートである。
【図９】障害処理プロセスの一例のフローチャートである。
【図１０】障害処理プロセスの別の例のフローチャートである。
【図１１】旅行代理店における旅行手配システムの全体的な構成図である。
【図１２】図１１のシステムにおけるタスクの先行実行処理を説明するフローチャートである。
【符号の説明】
【０１０７】
１０  ノード群、  １２  クライアント端末、  １４  ネットワーク、  １６  トランザクションノード、  １８  親ノード、  ２０  子ノード、  ２２  スーパースケジューラ、  ２４  記憶装置、  ３０  スケジューラ、  ３２  タスク割り当て部、  ３４  タスク先行実行指示部、  ３６  トランザクションマネージャ、  ３８  データベースライタ、  ４０  ログライタ、  ４２  データ複製部、  ４４  画面表示制御部、  ４６  障害処理部、  ５０  孫ノードＡ、  ５２  現行タスク、  ５４  孫ノードＢ、  ５６  次タスク、  １００  格子型コンピュータシステム。
【図１】
0004571090.tif 000002
【図２】
0004571090.tif 000003
【図３】
0004571090.tif 000004
【図４】
0004571090.tif 000005
【図５】
0004571090.tif 000006
【図６】
0004571090.tif 000007
【図７】
0004571090.tif 000008
【図８】
0004571090.tif 000009
【図９】
0004571090.tif 000010
【図１０】
0004571090.tif 000011
【図１１】
0004571090.tif 000012
【図１２】
0004571090.tif 000013