(57)【要約】  分散データ処理システムにおいてタスクを処理する方法はタスクの組を処理する工程を含む。本方法は、分散データ処理システムにおいて多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって（１）当該時間間隔に関連するすべてのタスク又は（２）当該時間間隔に関連するすべての対応結果のうちの少なくとも１つが多くの処理ノードのうちの複数の処理ノードにおいて複製される複製カウンタと、を含む多くのカウンタを第１の処理ノードにおいて保持する工程を含む。本方法は、作業カウンタ及び複製カウンタを含むメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ提供する工程を含む。
2021503640.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理ノードを含む分散データ処理システムにおいてタスクを処理する方法であって、
前記複数の処理ノードのうちの２又は３以上を使用して複数の組のタスクを処理する工程であって、各組のタスクは対応する一組の結果を生成するように構成されるとともに複数の時間間隔のうちの対応する時間間隔に関連付けられる、前記処理する工程と、
前記複数の処理ノードのうちの第１の処理ノードにおいて複数のカウンタを保持する工程であって、前記複数のカウンタは：
前記分散データ処理システム内の前記複数の時間間隔のうちの現在の時間間隔を示す作業カウンタと、
前記複数の時間間隔のうちの１つの時間間隔を示す複製カウンタであって（１）当該時間間隔に関連するすべてのタスク、又は（２）当該時間間隔に関連するすべての対応結果、の少なくとも１つが前記複数の処理ノードのうちの複数の処理ノードにおいて複製される、前記複製カウンタと、を含む、前記保持する工程と、
前記作業カウンタ及び前記複製カウンタを含むメッセージを前記複数の処理ノードのうちの前記第１の処理ノードから他の処理ノードへ提供する工程と、を含む、前記方法。
【請求項２】
前記処理は、前記複数の処理ノードの主要処理ノードにおいて少なくともいくつかのタスクに関連する計算を行う工程と、前記複数の処理ノードのうちの１又は２以上のバックアップ処理ノードにおいて前記少なくともいくつかのタスクのレプリカに関連する計算を行う工程とを含む、請求項１に記載の方法。
【請求項３】
前記主要処理ノードにおいて第１のタスクに関連付けられた計算を行う工程は前記主要処理ノードにおいて第１の結果を生成する工程を含み、
前記バックアップ処理ノードにおいて前記第１のタスクのレプリカに関連する計算を行う工程は前記バックアップ処理ノードにおいて前記第１の結果を生成する工程を含む、請求項１又は２に記載の方法。
【請求項４】
前記主要処理ノードにおいて実行される前記第１のタスクに関連する前記計算と、前記バックアップ処理ノードにおいて実行される前記第１のタスクの前記レプリカに関連する計算との両方は、前記第１のタスクと前記第１のタスクの前記レプリカとの両方が持続的に格納されたということを示すコミット操作後に開始する、請求項１乃至３のいずれか一項に記載の方法。
【請求項５】
前記第１の結果は、前記主要処理ノードと前記バックアップ処理ノードとにおいて複製されたオリジナルデータの修正版を含む、請求項１乃至３のいずれか一項に記載の方法。
【請求項６】
前記主要処理ノードにおいて実行される前記第１のタスクに関連する前記計算は、前記バックアップ処理ノードにおいて実行される前記第１のタスクの前記レプリカに関連する前記計算と同一である、請求項１乃至３のいずれか一項に記載の方法。
【請求項７】
前記主要処理ノードにおいて実行される前記第１のタスクに関連する前記計算と前記バックアップ処理ノードにおいて実行される前記第１のタスクの前記レプリカに関連する前記計算は決定論的であり、前記複数の処理ノードのうちのどれが前記計算を行うかに依存しない、請求項６に記載の方法。
【請求項８】
前記複製カウンタは、当該時間間隔に関連するすべてのタスクと当該時間間隔に関するすべての対応結果とが前記複数の処理ノードのうちの複数の処理ノードにおいて複製される前記複数の時間間隔のうちの１つの時間間隔を示す、請求項２に記載の方法。
【請求項９】
前記処理は、前記タスクのレプリカがバックアップ処理ノードにおいて実行されない状態である間に、前記複数の処理ノードの主要処理ノードにおいて少なくともいくつかのタスクに関連する計算を行う工程と、計算が前記主要処理ノードから前記バックアップ処理ノードに対して実行されたタスクに対応する結果を送信する工程とを含む、請求項１乃至８のいずれか一項に記載の方法。
【請求項１０】
第１のタスクに関連する計算を前記主要処理ノードにおいて実行する工程は第１の結果を生成する工程を含み、前記第１の結果は、前記第１のタスクが前記主要処理ノードにおいて完了された後に前記主要処理ノードから前記バックアップ処理ノードに送信される、請求項９に記載の方法。
【請求項１１】
前記第１の結果は、前記主要処理ノードと前記バックアップ処理ノードとにおいて複製されたオリジナルデータの修正版を含む、請求項９乃至１０のいずれか一項に記載の方法。
【請求項１２】
前記複製カウンタは、当該時間間隔に関連するすべてのタスクと当該時間間隔に関連するすべての対応結果とが前記複数の処理ノードのうちの複数の処理ノードにおいて複製される前記複数の時間間隔のうちの１つの時間間隔を示す、請求項９に記載の方法。
【請求項１３】
複数のノードを含む分散データ処理システムにおいてタスクを処理するためのコンピュータ可読媒体上に非一時的形式で格納されたソフトウェアであって、請求項１乃至１２のいずれか一項に記載の工程のすべてをコンピュータシステムに実行させるための命令を含む、前記ソフトウェア。
【請求項１４】
それぞれが少なくとも１つのプロセッサを含む複数の処理ノードを含む分散データ処理システムと；
前記複数の処理ノードの処理ノード間で情報を送受信するための前記複数の処理ノードを接続する通信媒体とを含む、データを処理するための装置であって、前記分散データ処理システムは：
前記複数の処理ノードのうちの２又は３以上を使用して、それぞれが対応する一組の結果を生成するように構成された複数の組のタスクであって複数の時間間隔のうちの対応する時間間隔に関連付けられた複数の組のタスクを処理し、
前記複数の処理ノードのうちの第１の処理ノードにおいて複数のカウンタを保持し、前記複数のカウンタは：
前記分散データ処理システム内の前記複数の時間間隔のうちの現在の時間間隔を示す作業カウンタと、前記複数の時間間隔のうちの１つの時間間隔を示す複製カウンタであって（１）当該時間間隔に関連するすべてのタスク又は（２）当該時間間隔に関連するすべての対応結果、の少なくとも１つが前記複数の処理ノードのうちの複数の処理ノードにおいて複製される、前記複製カウンタとを含み、
前記分散データ処理システムは、前記作業カウンタ及び前記複製カウンタを含むメッセージを前記複数の処理ノードのうちの前記第１の処理ノードから他の処理ノードへ提供するように構成される、前記装置。
【請求項１５】
複数の処理ノードを含む分散データ処理システムにおいてタスクを処理するためのコンピュータシステムであって、
前記複数の処理ノードのうちの２又は３以上を使用して、それぞれが対応する一組の結果を生成するように構成された複数の組のタスクであって複数の時間間隔のうちの対応する時間間隔に関連付けられた複数の組のタスクを処理する手段と、
複数の処理ノードのうちの第１の処理ノードにおいて複数のカウンタを保持する手段であって、前記複数のカウンタは：
前記分散データ処理システム内の前記複数の時間間隔のうちの現在の時間間隔を示す作業カウンタと、
前記複数の時間間隔のうちの１つの時間間隔を示す複製カウンタであって（１）当該時間間隔に関連するすべてのタスク又は（２）当該時間間隔に関連するすべての対応結果の少なくとも１つが前記複数の処理ノードのうちの複数の処理ノードにおいて複製される複製カウンタと、を含む、前記保持する手段と
前記作業カウンタ及び前記複製カウンタを含むメッセージを前記複数の処理ノードのうちの前記第１の処理ノードから他の処理ノードへ提供する手段と、を含む、前記コンピュータシステム。
【請求項１６】
複数の処理ノードを含む分散データ処理システムを管理する方法であって、
複数のデータストレージを前記システム内に保持する工程であって、前記複数のデータストレージの各データストレージは、前記複数の処理ノードのうちの対応処理ノードに関連付けられ、かつ複数の永続性レベルのうちの１つの永続性レベルに関連付けられ、前記複数の永続性レベルは第１の永続性レベルと前記第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む、前記保持する工程と；
前記複数の処理ノードのうちの２又は３以上の処理ノードを使用して複数の組のデータユニットを処理する工程であって、各組のデータユニットの各データユニットは複数の時間間隔のうちの対応時間間隔に関連付けられ、前記複数の組のデータユニットは前記複数の時間間隔のうちの第１の時間間隔に関連する第１組のデータユニットを含み、前記処理は、特定の永続性レベル毎に、前記第１の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連する指標を更新する工程を含む、前記処理する工程と；
前記複数の処理ノードのうちの２又は３以上を使用して複数の組の要求を処理する工程であって、各組の要求の各要求は、前記複数の処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、かつ前記複数の時間間隔のうちの対応時間間隔に関連付けられ、前記複数の組の要求は前記複数の時間間隔のうちの第２の時間間隔に関連する第１組の要求を含む、前記処理する工程と；
前記複数の処理ノードのうちの第１の処理ノードにおいて複数のカウンタを保持する工程であって、前記複数のカウンタは、前記分散データ処理システム内の前記複数の時間間隔のうちの現在の時間間隔を示す作業カウンタと、前記複数の時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が前記複数の処理ノードの複数の処理ノードにおいて複製される複製カウンタとを含む、前記保持する工程と；
前記作業カウンタの前記値及び前記複製カウンタの前記値を含む第１のメッセージを前記複数の処理ノードのうちの前記第１の処理ノードから他の処理ノードへ第１の時間に提供する工程と、を含む、前記方法。
【請求項１７】
前記複数のカウンタはさらに、前記複数の時間間隔のうちの１つの時間間隔を示す持続性カウンタであって、当該時間間隔に関連するすべての要求が前記複数の処理ノードのうちの少なくとも１つの処理ノードに関連する持続性ストレージ内に格納される前記持続性カウンタを含む、請求項１６に記載の方法。
【請求項１８】
前記第１組のデータユニットのデータユニット毎に、前記複数の処理ノードのそれぞれの処理ノードに関連する前記複数のデータストレージのうちのいくつかのデータストレージ内に前記データユニットを格納する工程は、前記第１のレベルの永続性に関連する前記複数のデータストレージのうちのいくつかのデータストレージ内に前記データユニットを格納する工程と前記第２のレベルの永続性に関連する前記複数のデータストレージのうちの１又は２以上のデータストレージ内に前記データユニットを格納する工程とを含む、請求項１６に記載の方法。
【請求項１９】
複数の処理ノードを含む分散データ処理システムを管理するためのコンピュータ可読媒体上に非一時的形式で格納されたソフトウェアであって、
前記ソフトウェアは、コンピュータシステムに：
複数のデータストレージを前記システム内に保持することであって、前記複数のデータストレージの各データストレージは、前記複数の処理ノードのうちの対応処理ノードに関連付けられ、複数の永続性レベルのうちの１つの永続性レベルに関連付けられ、前記複数の永続性レベルは第１の永続性レベルと前記第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む、前記保持することと；
前記複数の処理ノードのうちの２つ又は３以上の処理ノードを使用して複数の組のデータユニットを処理することであって、各組のデータユニットの各データユニットは複数の時間間隔のうちの対応時間間隔に関連付けられ、かつ前記複数の組のデータユニットは前記複数の時間間隔のうちの第１の時間間隔に関連する第１組のデータユニットを含み、前記処理は、特定の永続性レベル毎に、前記第１の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連する指標を更新する工程を含む、処理することと；
前記複数の処理ノードのうちの２又は３以上を使用して複数の組のタスクを処理することであって、各組の要求の各要求は、前記複数の処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、かつ前記複数の時間間隔のうちの対応時間間隔に関連付けられ、前記複数の組の要求は前記複数の時間間隔のうちの第２の時間間隔に関連する第１組の要求を含む、前記処理することと；
前記複数の処理ノードのうちの第１の処理ノードにおいて複数のカウンタを保持することであって、前記複数のカウンタは：前記分散データ処理システム内の前記複数の時間間隔のうちの現在の時間間隔を示す作業カウンタと、前記複数の時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が前記複数の処理ノードの複数の処理ノードにおいて複製される、前記複製カウンタとを含む、前記保持することと；
前記作業カウンタの前記値及び前記複製カウンタの前記値を含む第１のメッセージを、第１の時間に前記複数の処理ノードのうちの前記第１の処理ノードから他の処理ノードへ提供することと、を実行するための命令を含む、前記ソフトウェア。
【請求項２０】
それぞれが少なくとも１つのプロセッサを含む複数の処理ノードを含む分散データ処理システムと；
前記複数の処理ノードの処理ノード間で情報を送受信するための前記複数の処理ノードを接続する通信媒体と、を含む装置であって、前記分散データ処理システムは：
複数のデータストレージを前記システム内に保持することであって、前記複数のデータストレージの各データストレージは、前記複数の処理ノードのうちの対応処理ノードに関連付けられ、複数の永続性レベルのうちの１つの永続性レベルに関連付けられ、前記複数の永続性レベルは第１の永続性レベルと前記第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む、前記保持することと；
前記複数の処理ノードのうちの２又は３以上の処理ノードを使用して複数の組のデータユニットを処理することであって、各組のデータユニットの各データユニットは複数の時間間隔のうちの対応時間間隔に関連付けられ、かつ前記複数の組のデータユニットは前記複数の時間間隔のうちの第１の時間間隔に関連する第１組のデータユニットを含み、前記処理は、特定の永続性レベル毎に、前記第１の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連する指標を更新する工程を含む、前記処理することと；
前記複数の処理ノードのうちの２又は３以上を使用して複数の組のタスクを処理することであって、各組の要求の各要求は、前記複数の処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、かつ前記複数の時間間隔のうちの対応時間間隔に関連付けられ、前記複数の組の要求は前記複数の時間間隔のうちの第２の時間間隔に関連する第１組の要求を含む、前記処理することと；
前記複数の処理ノードのうちの第１の処理ノードにおいて複数のカウンタを保持することであって、前記複数のカウンタは：前記分散データ処理システム内の前記複数の時間間隔のうちの現在の時間間隔を示す作業カウンタと、前記複数の時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が前記複数の処理ノードの複数の処理ノードにおいて複製される、前記複製カウンタとを含む、前記保持することと；
前記作業カウンタの前記値及び前記複製カウンタの前記値を含む第１のメッセージを前記複数の処理ノードのうちの前記第１の処理ノードから他の処理ノードへ第１の時間に提供することと、を行うように構成される、前記装置。
【請求項２１】
複数の処理ノードを含む分散データ処理システムを管理する方法であって、
前記分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信する工程と、
前記受信された入力データを前記分散データ処理システムへ提供する工程であって、前記分散データ処理システムは複数の時間間隔のうちの第１の時間間隔に関連する指標を前記入力データへ割り当てる、前記提供する工程と、
前記分散データ処理システムからの前記入力データに関連する結果データを前記分散データ処理システムインターフェースコンポーネントにおいて受信する工程であって、前記結果データは前記第１の時間間隔に関連する指標を含む、前記受信する工程と、
前記複数の時間間隔のうちの第２の時間間隔に関連する指標を前記複数の処理ノードのうちの第１の処理ノードにおいて決定する工程と、
前記第２の時間間隔に関連する前記指標と前記結果データ内に含まれる前記第１の時間間隔に関連する前記指標とを前記分散データ処理システムインターフェースコンポーネントにおいて比較し、前記第２の時間間隔に関連する前記指標が前記第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、前記分散データ処理システムインターフェースコンポーネントから前記結果データをリリースする工程と、
複数のデータストレージを前記システム内に保持する工程であって、前記複数のデータストレージの各データストレージは、前記複数の処理ノードのうちの対応処理ノードに関連付けられ、複数の永続性レベルのうちの１つの永続性レベルに関連付けられ、前記複数の永続性レベルは第１の永続性レベルと前記第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む、前記保持する工程と、
前記複数の処理ノードのうちの２又は３以上の処理ノードを使用して複数の組のデータユニットを処理する工程であって、各組のデータユニットの各データユニットは前記複数の時間間隔のうちの対応時間間隔に関連付けられ、前記複数の組のデータユニットは前記複数の時間間隔のうちの第３の時間間隔に関連する第１組のデータユニットを含み、前記処理は、特定の永続性レベル毎に、前記第３の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連する指標を更新する工程を含む、前記処理する工程とを含む、前記方法。
【請求項２２】
前記第１組のデータユニットのデータユニット毎に、前記複数の処理ノードのそれぞれの処理ノードに関連する前記複数のデータストレージのうちのいくつかのデータストレージ内に前記データユニットを格納する工程は、前記第１のレベルの永続性に関連する前記複数のデータストレージのうちのいくつかのデータストレージ内に前記データユニットを格納する工程と、前記第２のレベルの永続性に関連する前記複数のデータストレージのうちの１又は２以上のデータストレージ内に前記データユニットを格納する工程とを含む、請求項２１に記載の方法。
【請求項２３】
前記第２の時間間隔に関連する前記指標は、前記分散データ処理システムインターフェースコンポーネントへ提供される、請求項２１に記載の方法。
【請求項２４】
複数の処理ノードを含む分散データ処理システムを管理するためのコンピュータ可読媒体上に非一時的形式で格納されたソフトウェアであって、前記ソフトウェアは、コンピュータシステムに：
前記分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信することと、
前記受信された入力データを前記分散データ処理システムへ提供することであって、前記分散データ処理システムは複数の時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当てる、前記提供することと、
前記分散データ処理システムからの前記入力データに関連する結果データを前記分散データ処理システムインターフェースコンポーネントにおいて受信することとであって、前記結果データは第１の時間間隔に関連する指標を含む、前記受信することと、
前記複数の時間間隔のうちの第２の時間間隔に関連する指標を前記複数の処理ノードのうちの第１の処理ノードにおいて決定することと、
前記第２の時間間隔に関連する前記指標と前記結果データ内に含まれる第１の時間間隔に関連する前記指標とを前記分散データ処理システムインターフェースコンポーネントにおいて比較し、前記第２の時間間隔に関連する前記指標が前記第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、前記分散データ処理システムインターフェースコンポーネントから前記結果データをリリースすることと、
複数のデータストレージを前記システム内に保持することであって、前記複数のデータストレージの各データストレージは、前記複数の処理ノードのうちの対応処理ノードに関連付けられ、複数の永続性レベルのうちの１つの永続性レベルに関連付けられ、前記複数の永続性レベルは第１の永続性レベルと前記第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む、前記保持することと、
前記複数の処理ノードのうちの２つ以上の処理ノードを使用して複数の組のデータユニットを処理することであって、各組のデータユニットの各データユニットは前記複数の時間間隔のうちの対応時間間隔に関連付けられ、前記複数の組のデータユニットは前記複数の時間間隔のうちの第３の時間間隔に関連する第１組のデータユニットを含み、前記処理は、特定の永続性レベル毎に、前記第３の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連する指標を更新する工程を含む、前記処理すること、とを実行させるための命令を含む、前記ソフトウェア。
【請求項２５】
それぞれが少なくとも１つのプロセッサを含む複数の処理ノードを含む分散データ処理システムと；
前記複数の処理ノードの処理ノード間で情報を送受信するための前記複数の処理ノードを接続する通信媒体と、を含む装置であって、前記分散データ処理システムは：
前記分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信することと、
前記受信された入力データを前記分散データ処理システムへ提供することであって、前記分散データ処理システムは複数の時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当てる、前記提供することと、
前記分散データ処理システムからの前記入力データに関連する結果データを前記分散データ処理システムインターフェースコンポーネントにおいて受信することとであって、前記結果データは第１の時間間隔に関連する指標を含む、前記受信することと、
前記複数の時間間隔のうちの第２の時間間隔に関連する指標を前記複数の処理ノードのうちの第１の処理ノードにおいて決定することと、
前記第２の時間間隔に関連する前記指標と前記結果データ内に含まれる第１の時間間隔に関連する前記指標とを前記分散データ処理システムインターフェースコンポーネントにおいて比較し、前記第２の時間間隔に関連する前記指標が前記第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、前記分散データ処理システムインターフェースコンポーネントから前記結果データをリリースすることと、
複数のデータストレージを前記システム内に保持することであって、前記複数のデータストレージの各データストレージは、前記複数の処理ノードのうちの対応処理ノードに関連付けられ、複数の永続性レベルのうちの１つの永続性レベルに関連付けられ、前記複数の永続性レベルは第１の永続性レベルと前記第１の永続性レベルと比べて大きなレベルの永続性を有する第２の永続性レベルとを含む、前記保持することと、
前記複数の処理ノードのうちの２又は３以上の処理ノードを使用して複数の組のデータユニットを処理することであって、各組のデータユニットの各データユニットは前記複数の時間間隔のうちの対応時間間隔に関連付けられ、前記複数の組のデータユニットは前記複数の時間間隔のうちの第３の時間間隔に関連する第１組のデータユニットを含み、前記処理は、特定の永続性レベル毎に、前記第３の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連する指標を更新する工程を含む、前記処理すること、とを行わせる、前記装置。
【請求項２６】
複数の処理ノードを含む分散データ処理システムを管理する方法であって、
前記分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信する工程と、
前記受信された入力データを前記分散データ処理システムへ提供する工程であって、前記分散データ処理システムは複数の時間間隔のうちの第１の時間間隔に関連する指標を前記入力データへ割り当てる、前記提供する工程と、
前記分散データ処理システムからの前記入力データに関連する結果データ前記を分散データ処理システムインターフェースコンポーネントにおいて受信する工程であって、前記結果データは前記第１の時間間隔に関連する指標を含む、前記受信する工程と、
前記複数の時間間隔のうちの第２の時間間隔に関連する指標を前記複数の処理ノードのうちの第１の処理ノードにおいて決定する工程と、
前記第２の時間間隔に関連する前記指標と前記結果データ内に含まれる前記第１の時間間隔に関連する前記指標とを前記分散データ処理システムインターフェースコンポーネントにおいて比較し、前記第２の時間間隔に関連する前記指標が前記第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、前記分散データ処理システムインターフェースコンポーネントから前記結果データをリリースする工程と、
前記複数の処理ノードのうちの２又は３以上を使用して複数の組のタスクを処理する工程であって、各組の要求の各要求は、前記複数の処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、かつ前記複数の時間間隔のうちの対応時間間隔に関連付けられ、前記複数の組の要求は前記複数の時間間隔のうちの第３の時間間隔に関連する第１組の要求を含む、前記処理する工程と；
前記複数の処理ノードの前記第１の処理ノードにおいて前記複数のカウンタを保持する工程であって、前記複数のカウンタは、前記分散データ処理システム内の前記複数の時間間隔のうちの現在の時間間隔を示す作業カウンタと、前記複数の時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が前記複数の処理ノードの複数の処理ノードにおいて複製される複製カウンタとを含む、前記保持する工程と、
前記作業カウンタの前記値及び前記複製カウンタの前記値を含む第１のメッセージを前記複数の処理ノードのうちの前記第１の処理ノードから他の処理ノードへ第１の時間に提供する工程と、を含む、前記方法。
【請求項２７】
前記第２の時間間隔に関連する前記指標は、前記分散データ処理システムインターフェースコンポーネントへ提供される、請求項２６に記載の方法。
【請求項２８】
前記複数のカウンタはさらに、前記複数の時間間隔のうちの１つの時間間隔を示す持続性カウンタであって当該時間間隔に関連するすべての要求が前記複数の処理ノードのうちの少なくとも１つの処理ノードに関連する持続性ストレージ内に格納される持続性カウンタを含む、請求項２６に記載の方法。
【請求項２９】
複数の処理ノードを含む分散データ処理システムを管理するためのコンピュータ可読媒体上に非一時的形式で格納されたソフトウェアであって、前記ソフトウェアは、コンピュータシステムに：
前記分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信することと、
前記受信された入力データを前記分散データ処理システムへ提供することであって、前記分散データ処理システムは複数の時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当てる、前記提供することと、
前記分散データ処理システムからの前記入力データに関連する結果データを前記分散データ処理システムインターフェースコンポーネントにおいて受信することとであって、前記結果データは第１の時間間隔に関連する指標を含む、前記受信することと、
前記複数の時間間隔のうちの第２の時間間隔に関連する指標を前記複数の処理ノードのうちの第１の処理ノードにおいて決定することと、
前記第２の時間間隔に関連する前記指標と前記結果データ内に含まれる第１の時間間隔に関連する前記指標とを前記分散データ処理システムインターフェースコンポーネントにおいて比較し、前記第２の時間間隔に関連する前記指標が前記第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、前記分散データ処理システムインターフェースコンポーネントから前記結果データをリリースすることと、
前記複数の処理ノードのうちの２又は３以上を使用して複数の組のタスクを処理することであって、各組の要求の各要求は、前記複数の処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、かつ前記複数の時間間隔のうちの対応時間間隔に関連付けられ、前記複数の組の要求は前記複数の時間間隔のうちの第３の時間間隔に関連する第１組の要求を含む、前記処理することと、
前記複数の処理ノードの前記第１の処理ノードにおいて複数のカウンタを保持することであって、前記複数のカウンタは、前記分散データ処理システム内の前記複数の時間間隔のうちの現在の時間間隔を示す作業カウンタと、前記複数の時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が前記複数の処理ノードの複数の処理ノードにおいて複製される複製カウンタとを含む、前記保持することと、
前記作業カウンタの前記値及び前記複製カウンタの前記値を含む第１のメッセージを前記複数の処理ノードのうちの前記第１の処理ノードから他の処理ノードへ第１の時間に提供することと、を実行させるための命令を含む、前記ソフトウェア。
【請求項３０】
それぞれが少なくとも１つのプロセッサを含む複数の処理ノードを含む分散データ処理システムと、
前記複数の処理ノードの処理ノード間で情報を送受信するための前記複数の処理ノードを接続する通信媒体と、を含む装置であって、前記分散データ処理システムは、
前記分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信することと、
前記受信された入力データを前記分散データ処理システムへ提供することであって、前記分散データ処理システムは複数の時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当てる、前記提供することと、
前記分散データ処理システムからの前記入力データに関連する結果データを前記分散データ処理システムインターフェースコンポーネントにおいて受信することとであって、前記結果データは第１の時間間隔に関連する指標を含む、前記受信することと、
前記複数の時間間隔のうちの第２の時間間隔に関連する指標を前記複数の処理ノードのうちの第１の処理ノードにおいて決定することと、
前記第２の時間間隔に関連する前記指標と前記結果データ内に含まれる第１の時間間隔に関連する前記指標とを前記分散データ処理システムインターフェースコンポーネントにおいて比較し、前記第２の時間間隔に関連する前記指標が前記第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、前記分散データ処理システムインターフェースコンポーネントから前記結果データをリリースすることと、
前記複数の処理ノードのうちの２又は３以上を使用して複数の組のタスクを処理することであって、各組の要求の各要求は、前記複数の処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、かつ前記複数の時間間隔のうちの対応時間間隔に関連付けられ、前記複数の組の要求は前記複数の時間間隔のうちの第３の時間間隔に関連する第１組の要求を含む、前記処理することと；
前記複数の処理ノードの前記第１の処理ノードにおいて複数のカウンタを保持することであって、前記複数のカウンタは、前記分散データ処理システム内の前記複数の時間間隔のうちの現在の時間間隔を示す作業カウンタと、前記複数の時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が前記複数の処理ノードの複数の処理ノードにおいて複製される複製カウンタとを含む、前記保持することと；
前記作業カウンタの前記値及び前記複製カウンタの前記値を含む第１のメッセージを前記複数の処理ノードのうちの前記第１の処理ノードから他の処理ノードへ第１の時間に提供することを行うように構成される、前記装置。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、参照のためその全体を本明細書に援用する２０１７年１０月３１日出願の米国特許出願第６２／５７９，２２５号明細書からの優先権を主張する。
【０００２】
本明細書はコンピュータクラスタを管理することに関する。
【背景技術】
【０００３】
データフロー計算に対する１つの手法は、グラフ（「データフローグラフ」と呼ばれる）のノード（頂点）に対応するコンピュータコンポーネントがグラフのリンク（有向辺）に対応するデータフローにより結合されるグラフベース表現を使用する。データフローリンクにより上流コンポーネントへ接続される下流コンポーネントは入力データ要素の順序付けられたストリームを受信し、受信された順番に入力データ要素を処理し、そして任意選択的に、出力データ要素の１つ又は複数の対応ストリームを生成する。このようなグラフベース計算を実行するためのシステムは参照により本明細書に援用する米国特許第５，９６６，０７２号明細書、表題「ＥＸＥＣＵＴＩＮＧ  ＣＯＭＰＵＴＡＴＩＯＮＳ  ＥＸＰＲＥＳＳＥＤ  ＡＳ  ＧＲＡＰＨＳ」に記載されている。この先行特許に記載された手法に関係する実施形態では、各コンポーネントは、通常は複数のコンピュータサーバのうちの１つの上でホストされる処理として実現される。各コンピュータサーバは、どの時点においてもアクティブである複数のこのようなコンポーネント処理を有し得、オペレーティングシステム（例えばＵｎｉｘ）スケジューラが、当該サーバ上でホストされるコンポーネント間で資源（例えばＣＰＵ時間（processor time）及び／又はプロセッサコア）を共有する。このような実施形態では、コンポーネント間のデータフローは、オペレーティングシステムのデータ通信サービスとサーバ同士を接続するデータネットワーク（例えばパイプ、ＴＣＰ／ＩＰセッションなどと称する）とを使用して実施され得る。コンポーネントのサブセットは通常、計算全体からの（例えばデータファイル、データベーステーブル、及び外部データフローに対する）データのソース及び／又はシンクとして働く。コンポーネント処理及びデータフローが例えば連携処理により確立された後、データは、各コンポーネントにおける入力データの可用性により通常は規定されるグラフとして表現された計算を実施するとともに各コンポーネントのコンピュータ資源をスケジューリングするコンピュータシステム全体を貫流する。したがって、様々なコンポーネントが様々な処理により並列に実行される（同じ又は異なるサーバコンピュータ又はプロセッサコア上でホストされる）ことを少なくとも可能にすることにより並列性が実現され得る。ここでは、データフローグラフを介し様々な経路上で並列に実行する様々なコンポーネントが本明細書ではコンポーネント並列性と呼ばれ、データフローグラフを介し同じ経路の異なる部分上で並列に実行する様々なコンポーネントは本明細書ではパイプライン並列性と呼ばれる。
【発明の概要】
【課題を解決するための手段】
【０００４】
他の形式の並列性もまたこのような手法により支援される。例えば、入力データセットは例えばデータセットのレコード内のフィールドの値の区画に従って区画化され得、各部分はデータセットのレコードを処理するコンポーネントの別個のコピーへ送信される。コンポーネントのこのような別のコピー（又は「インスタンス」）は、別個のサーバコンピュータ又はサーバコンピュータの別個のプロセッサコア上で実行され得、これにより、本明細書ではデータ並列性と呼ばれるものを実現する。別個のコンポーネントの結果は、単一データフロー又はデータセットを再び形成するためにマージされ得る。コンポーネントのインスタンスを実行するために使用されるコンピュータ又はプロセッサコアの数はデータフローグラフが開発される時点で開発者により指定されるだろう。
【０００５】
様々な手法がこのような手法の効率を改善するために使用され得る。例えば、コンポーネントの各インスタンスは、例えば複数のコンポーネント（例えば、より大きなグラフの連結サブグラフを形成するコンポーネント）を実現するために１つのオペレーティングシステム処理を使用することにより、それ自身のオペレーティングシステム処理において必ずしもホストされる必要は無い。
【０００６】
上述の手法の少なくともいくつかの実施形態は、根底にあるコンピュータサーバ上のその結果の処理の実行の効率に関する制限に悩まされる。例えば、この制限は、データ並列性の程度を変更するために、様々なコンポーネントをホストするサーバを変更するために、及び／又は様々なコンピュータ資源上の負荷をバランスさせるために、グラフの実行中のインスタンスを再構成する際の困難性に関連し得る。既存グラフベースコンピュータシステムはまた、しばしば余りにも多くの処理が不必要に開始されて膨大な量のメモリを浪費するので、遅い起動時間に悩まされる。一般的に、処理はグラフ実行の起動で始まり、グラフ実行が終了すると終る。
【０００７】
計算全体がより小さな部分に分割される分散計算のための他のシステムが使用され、これらの部分は、マスターコンピュータサーバから、それぞれが独立に計算を行いその結果をマスターサーバへ戻す様々な他の（例えば「スレーブ」）コンピュータサーバへ分散される。このような手法のうちのいくつかは「グリッドコンピューティング」と呼ばれる。しかし、このような手法は通常、これらの部分を呼び出すマスターコンピュータサーバを介することを除いて、データを計算部分間で渡すための機構を設けること無く又はこれらの部分の実行をスケジューリング及び／又は順序付けること無く、各計算の独立性に依存する。したがって、このような手法は、複数のコンポーネント間の相互作用に関与するホスティング計算に対する直接的及び効率的解を提供しない。
【０００８】
大きなデータセット上の分散計算のための別の手法は、例えばＡｐａｃｈｅ  Ｈａｄｏｏｐ（登録商標）システム内で具現化されるようなＭａｐＲｅｄｕｃｅフレームワークを活用する。通常、Ｈａｄｏｏｐは、各指名ファイルの一部分が分散される分散ファイルシステムを有する。ユーザは、次の２つの関数の観点で計算を規定する：分散されたやり方で指名入力のすべての部分上で実行されるマップ関数及びマップ関数実行の出力の一部分上で実行されるｒｅｄｕｃｅ関数。マップ関数実行の出力は、区画化され、分散ファイルシステム内で中間部分内に再び格納される。次に、ｒｅｄｕｃｅ関数は中間部分を処理するために分散されたやり方で実行され、計算全体の結果を生じる。ＭａｐＲｅｄｕｃｅフレームワーク内で表現され得る計算であってその入力と出力がｍａｐ−ｒｅｄｕｃｅフレームワークのファイルシステム内の格納のために修正可能である計算は効率的に実行され得るが、多くの計算は、このフレームワークと整合しない、及び／又は分散ファイルシステム内のそれらの入力及び出力をすべて有するようには容易に適応化されない。
【０００９】
一般的態様では、多くの処理ノードを含む分散データ処理システム内のタスクを処理する方法は、多くの処理ノードのうちの２つ以上を使用して多くの組のタスクを処理する工程を含む。各組のタスクは、対応する一組の結果を生成するように構成され、多くの時間間隔のうちの対応する時間間隔に関連付けられる。本方法は、多くの処理ノードのうちの第１の処理ノード内の多くのカウンタを保持する工程を含む。多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって（１）当該時間間隔に関連するすべてのタスク又は（２）当該時間間隔に関連するすべての対応結果のうちの少なくとも１つが多くの処理ノードのうちの複数の処理ノードにおいて複製される複製カウンタとを含む。本方法は、作業カウンタ及び複製カウンタを含むメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ提供する工程を含む。
【００１０】
態様は以下の特徴のうちの１つ又は複数を含み得る。
【００１１】
本処理は、多くの処理ノードのうちの主要処理ノードにおいて少なくともいくつかのタスクに関連する計算を行う工程と、多くの処理ノードのうちの１つ又は複数のバックアップ処理ノードにおいて少なくともいくつかのタスクのレプリカに関連する計算を行う工程とを含み得る。第１のタスクに関連する計算を主要処理ノードにおいて行う工程は、主要処理ノードにおいて第１の結果を生成する工程を含み得、バックアップ処理ノードにおいて第１のタスクのレプリカに関連する計算を行う工程は、バックアップ処理ノードにおいて第１の結果を生成する工程を含む。
【００１２】
主要処理ノードにおいて行われる第１のタスクに関連する計算とバックアップ処理ノードにおいて行われる第１のタスクのレプリカに関連する計算とは両方とも、第１のタスクと第１のタスクのレプリカとの両方が持続的に格納されたということを示すコミット操作（ｃｏｍｍｉｔ  ｏｐｅｒａｔｉｏｎ）後に開始し得る。第１の結果は、主要処理ノードとバックアップ処理ノードとにおいて複製されたオリジナルデータの修正版を含み得る。主要処理ノードにおいて行われる第１のタスクに関連する計算は、バックアップ処理ノードにおいて行われる第１のタスクのレプリカに関連する計算と同一であり得る。
【００１３】
主要処理ノードにおいて行われる第１のタスクに関連する計算及びバックアップ処理ノードにおいて行われる第１のタスクのレプリカに関連する計算は、決定論的（deterministic）であり得、複数の処理ノードのうちのどれが計算を行うかに依存し得る。複製カウンタは、当該時間間隔に関連するすべてのタスクと当該時間間隔に関連するすべての対応結果とが多くの処理ノードのうちの複数の処理ノードにおいて複製される多くの時間間隔のうちの１つの時間間隔を示し得る。
【００１４】
本処理は、タスクのレプリカがバックアップ処理ノードにおいて実行されない状態である間に多くの処理ノードのうちの主要処理ノードにおいて少なくともいくつかのタスクに関連する計算を行う工程と、計算が主要処理ノードからバックアップ処理ノードに対して行われたタスクに対応する結果を送信する工程とを含み得る。第１のタスクに関連する計算を主要処理ノードにおいて行う工程は第１の結果を生成する工程を含み得、第１の結果は、第１のタスクが主要処理ノードにおいて完了された後に主要処理ノードからバックアップ処理ノードへ送信され得る。
【００１５】
第１の結果は、主要処理ノードとバックアップ処理ノードとにおいて複製されたオリジナルデータの修正版を含み得る。複製カウンタは、当該時間間隔に関連するすべてのタスクと当該時間間隔に関連するすべての対応結果とが多くの処理ノードのうちの複数の処理ノードにおいて複製される多くの時間間隔のうちの１つの時間間隔を示し得る。
【００１６】
別の一般的態様では、多くのノードを含む分散データ処理システム内のタスクを処理するためのソフトウェアがコンピュータ可読媒体上に非一時的形式で格納される。このソフトウェアは、コンピュータシステムに多くの処理ノードのうちの２つ以上を使用して多くの組のタスクを処理させるための指示を含む。各組のタスクは、対応する一組の結果を生成するように構成され、多くの時間間隔のうちの対応する時間間隔に関連付けられる。
【００１７】
上記指示はまた、コンピュータシステムに多くの処理ノードのうちの第１の処理ノード内の多くのカウンタを保持させる。多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって（１）当該時間間隔に関連するすべてのタスク又は（２）当該時間間隔に関連するすべての対応結果のうちの少なくとも１つが多くの処理ノードのうちの複数の処理ノードにおいて複製される複製カウンタとを含む。指示はまた、コンピュータシステムに、作業カウンタと複製カウンタとを含むメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ提供させる。
【００１８】
別の一般的態様では、データを処理するための装置は、それぞれが少なくとも１つのプロセッサを含む多くの処理ノードを含む分散データ処理システムと、多くの処理ノードの処理ノード同士間で情報を送受信するための多くの処理ノードを接続する通信媒体とを含む。分散データ処理システムは、多くの処理ノードのうちの２つ以上を使用して、それぞれが対応する一組の結果を生成するように構成された多くの組のタスクであって多くの時間間隔のうちの対応する時間間隔に関連付けられた多くの組のタスクを処理しそして多くの処理ノードのうちの第１の処理ノード内の多くのカウンタを保持するように構成される。多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって（１）当該時間間隔に関連するすべてのタスク又は（２）当該時間間隔に関連するすべての対応結果のうちの少なくとも１つが多くの処理ノードのうちの複数の処理ノードにおいて複製される複製カウンタとを含む。本装置はさらに、作業カウンタ及び複製カウンタを含むメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ提供するように構成される。
【００１９】
別の一般的態様では、多くの処理ノードを含む分散データ処理システム内のタスクを処理するためのコンピュータシステムは、多くの処理ノードのうちの２つ以上を使用して、それぞれが対応する一組の結果を生成するように構成された多くの組のタスクであって多くの時間間隔のうちの対応する時間間隔に関連付けられた多くの組のタスクを処理する手段と、多くの処理ノードのうちの第１の処理ノード内の多くのカウンタを保持する手段とを含む。多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって（１）当該時間間隔に関連するすべてのタスク又は（２）当該時間間隔に関連するすべての対応結果のうちの少なくとも１つが多くの処理ノードのうちの複数の処理ノードにおいて複製される複製カウンタとを含む。コンピュータシステムはまた、作業カウンタ及び複製カウンタを含むメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ提供する手段を含む。
【００２０】
一般的態様では、多くの処理ノードを含む分散データ処理システムを管理する方法は多くのデータストレージを本システム内に保持する工程を含み、多くのデータストレージの各データストレージは、多くの処理ノードのうちの対応処理ノードに関連付けられ、多くの永続性レベルのうちの１つの永続性レベルに関連付けられ、多くの永続性レベルは第１の永続性レベルと第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む。本方法はまた、多くの処理ノードのうちの２つ以上の処理ノードを使用して多くの組のデータユニットを処理する工程を含み、各組のデータユニットの各データユニットは多くの時間間隔のうちの対応時間間隔に関連付けられる。多くの組のデータユニットは、多くの時間間隔のうちの第１の時間間隔に関連する第１組のデータユニットを含む。
【００２１】
この処理工程は、特定の永続性レベル毎に、第１の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連指標を更新する工程を含む。この処理工程はまた、多くの処理ノードのうちの２つ以上を使用して多くの組の要求を処理する工程を含み、各組の要求の各要求は、多くの処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組の要求は多くの時間間隔のうちの第２の時間間隔に関連する第１組の要求を含む。この処理工程はまた、多くの処理ノードのうちの第１の処理ノードにおいて多くのカウンタを保持する工程を含む。
【００２２】
多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される複製カウンタとを含む。
【００２３】
本方法はまた、作業カウンタの値及び複製カウンタの値を含む第１のメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ第１の時間に提供する工程を含む。
【００２４】
態様は以下の特徴のうちの１つ又は複数を含み得る。
【００２５】
多くのカウンタはさらに、多くの時間間隔のうちの１つの時間間隔を示す持続性カウンタであって当該時間間隔に関連するすべての要求が多くの処理ノードのうちの少なくとも１つの処理ノードに関連する持続性ストレージ内に格納される持続性カウンタを含み得る。本方法は、第１組のデータユニットのデータユニット毎に、多くの処理ノードのそれぞれの処理ノードに関連する多くのデータストレージのうちのいくつかのデータストレージ内にデータユニットを格納する工程であって、第１のレベルの永続性に関連する多くのデータストレージのうちのいくつかのデータストレージ内にデータユニットを格納する工程と第２のレベルの永続性に関連する多くのデータストレージのうちの１つ又は複数のデータストレージ内にデータユニットを格納する工程とを含む工程を含む。
【００２６】
別の一般的態様では、多くの処理ノードを含む分散データ処理システムを管理するためのソフトウェアがコンピュータ可読媒体上に非一時的形式で格納される。上記ソフトウェアは、コンピュータシステムに多くのデータストレージを上記システム内に保持させるための指示を含み、多くのデータストレージの各データストレージは、多くの処理ノードのうちの対応処理ノードに関連付けられ、多くの永続性レベルのうちの１つの永続性レベルに関連付けられ、多くの永続性レベルは第１の永続性レベルと第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む。上記指示はまた、コンピュータシステムに多くの処理ノードのうちの２つ以上の処理ノードを使用することにより多くの組のデータユニットを処理させ、各組のデータユニットの各データユニットは多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組のデータユニットは多くの時間間隔のうちの第１の時間間隔に関連する第１組のデータユニットを含み、上記処理は、特定の永続性レベル毎に、第１の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連指標を更新する工程を含む。
【００２７】
上記指示はまた、コンピュータシステムに多くの処理ノードのうちの２つ以上を使用することにより多くの組の要求を処理させ、各組の要求の各要求は、多くの処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組の要求は多くの時間間隔のうちの第２の時間間隔に関連する第１組の要求を含む。上記指示はまた、コンピュータシステムに多くの処理ノードのうちの第１の処理ノード内の多くのカウンタを保持させる。多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される複製カウンタとを含む。
【００２８】
上記指示はまた、コンピュータシステムに作業カウンタの値及び複製カウンタの値を含む第１のメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ第１の時間に提供させる。
【００２９】
別の一般的態様では、装置は多くの処理ノードを含む分散データ処理システムを含み、各処理ノードは少なくとも１つのプロセッサと多くの処理ノードの処理ノード間で情報を送受信するための多くの処理ノードを接続する通信媒体とを含む。分散データ処理システムは多くのデータストレージを本システム内に保持するように構成され、多くのデータストレージの各データストレージは、多くの処理ノードのうちの対応処理ノードに関連付けられ、多くの永続性レベルのうちの１つの永続性レベルに関連付けられ、多くの永続性レベルは第１の永続性レベルと第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む。
【００３０】
本装置はまた、多くの処理ノードのうちの２つ以上の処理ノードを使用して多くの組のデータユニットを処理するように構成され、各組のデータユニットの各データユニットは多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組のデータユニットは多くの時間間隔のうちの第１の時間間隔に関連する第１組のデータユニットを含み、上記処理は、特定の永続性レベル毎に、第１の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連指標を更新する工程を含む。
【００３１】
本装置はまた、多くの処理ノードのうちの２つ以上を使用して多くの組の要求を処理するように構成され、各組の要求の各要求は、多くの処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組の要求は多くの時間間隔のうちの第２の時間間隔に関連する第１組の要求を含む。本装置はまた、多くの処理ノードのうちの第１の処理ノード内の多くのカウンタを保持するように構成される。
【００３２】
多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される複製カウンタとを含む。本装置はまた、作業カウンタの値及び複製カウンタの値を含む第１のメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ第１の時間に提供するように構成される。
【００３３】
別の一般的態様では、多くの処理ノードを含む分散データ処理システムを管理する方法は、分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信する工程と、受信された入力データを分散データ処理システムへ提供する工程であって、分散データ処理システムは多くの時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当てる、工程と、分散データ処理システムからの入力データに関連する結果データを分散データ処理システムインターフェースコンポーネントにおいて受信する工程であって、結果データは第１の時間間隔に関連する指標を含む、工程と、多くの時間間隔のうちの第２の時間間隔に関連する指標を多くの処理ノードのうちの第１の処理ノードにおいて決定する工程と、第２の時間間隔に関連する指標と結果データ内に含まれる第１の時間間隔に関連する指標とを分散データ処理システムインターフェースコンポーネントにおいて比較し、第２の時間間隔に関連する指標が第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、分散データ処理システムインターフェースコンポーネントから結果データをリリースする工程と、多くのデータストレージを本システム内に保持する工程であって、多くのデータストレージの各データストレージは、多くの処理ノードのうちの対応処理ノードに関連付けられ、多くの永続性レベルのうちの１つの永続性レベルに関連付けられ、多くの永続性レベルは第１の永続性レベルと第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む、工程と、多くの処理ノードのうちの２つ以上の処理ノードを使用して多くの組のデータユニットを処理する工程であって、各組のデータユニットの各データユニットは多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組のデータユニットは多くの時間間隔のうちの第３の時間間隔に関連する第１組のデータユニットを含み、上記処理は、特定の永続性レベル毎に、第３の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連指標を更新する工程を含む、工程とを含む。
【００３４】
態様は以下の特徴のうちの１つ又は複数を含み得る。
【００３５】
第１組のデータユニットのデータユニット毎に、データユニットは多くの処理ノードのそれぞれの処理ノードに関連する多くのデータストレージのうちのいくつかのデータストレージ内に格納され得、この格納処理は、第１のレベルの永続性に関連する多くのデータストレージのうちのいくつかのデータストレージ内にデータユニットを格納することと第２のレベルの永続性に関連する多くのデータストレージのうちの１つ又は複数のデータストレージ内にデータユニットを格納することとを含む。第２の時間間隔に関連する指標は分散データ処理システムインターフェースコンポーネントへ提供され得る。
【００３６】
別の一般的態様では、多くの処理ノードを含む分散データ処理システムを管理するためのソフトウェアがコンピュータ可読媒体上に非一時的形式で格納される。上記ソフトウェアは、コンピュータシステムに以下のことを実行させるための命令を含む：分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信することと；受信された入力データを分散データ処理システムへ提供することであって、分散データ処理システムは多くの時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当てる、提供することと；分散データ処理システムからの入力データに関連する結果データを分散データ処理システムインターフェースコンポーネントにおいて受信することであって、結果データは第１の時間間隔に関連する指標を含む、受信することと；多くの時間間隔のうちの第２の時間間隔に関連する指標を多くの処理ノードのうちの第１の処理ノードにおいて決定することと；第２の時間間隔に関連する指標と結果データ内に含まれる第１の時間間隔に関連する指標とを分散データ処理システムインターフェースコンポーネントにおいて比較し、第２の時間間隔に関連する指標が第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、分散データ処理システムインターフェースコンポーネントから結果データをリリース判定することと；多くのデータストレージを本システム内に保持することであって、多くのデータストレージの各データストレージは、多くの処理ノードのうちの対応処理ノードに関連付けられ、多くの永続性レベルのうちの１つの永続性レベルに関連付けられ、多くの永続性レベルは第１の永続性レベルと第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む、保持することと；多くの処理ノードのうちの２つ以上の処理ノードを使用して多くの組のデータユニットを処理することであって、各組のデータユニットの各データユニットは多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組のデータユニットは多くの時間間隔のうちの第３の時間間隔に関連する第１組のデータユニットを含み、上記処理は、特定の永続性レベル毎に、第３の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連指標を更新する工程を含む、処理すること。
【００３７】
別の一般的態様では、装置は、多くの処理ノードを含む分散データ処理システムを含み、各処理ノードは、少なくとも１つのプロセッサと、多くの処理ノードの処理ノード間で情報を送受信するための多くの処理ノードを接続する通信媒体とを含む。分散データ処理システムは、以下のように構成される：分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信し、受信された入力データを分散データ処理システムへ提供し、分散データ処理システムは多くの時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当て、分散データ処理システムからの入力データに関連する結果データを分散データ処理システムインターフェースコンポーネントにおいて受信し、結果データは第１の時間間隔に関連する指標を含み、多くの時間間隔のうちの第２の時間間隔に関連する指標を多くの処理ノードのうちの第１の処理ノードにおいて決定し、第２の時間間隔に関連する指標と結果データ内に含まれる第１の時間間隔に関連する指標とを分散データ処理システムインターフェースコンポーネントにおいて比較し、第２の時間間隔に関連する指標が第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、分散データ処理システムインターフェースコンポーネントから結果データをリリースし、多くのデータストレージを上記システム内に保持し、多くのデータストレージの各データストレージは、多くの処理ノードのうちの対応処理ノードに関連付けられ、多くの永続性レベルのうちの１つの永続性レベルに関連付けられ、多くの永続性レベルは第１の永続性レベルと第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含み、多くの処理ノードのうちの２つ以上の処理ノードを使用して多くの組のデータユニットを処理し、各組のデータユニットの各データユニットは多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組のデータユニットは多くの時間間隔のうちの第３の時間間隔に関連する第１組のデータユニットを含み、上記処理は、特定の永続性レベル毎に、第３の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連指標を更新することを含む。
【００３８】
別の一般的態様では、多くの処理ノードを含む分散データ処理システムを管理する方法は、分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信する工程と、受信された入力データを分散データ処理システムへ提供する工程であって、分散データ処理システムは多くの時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当てる、工程と、分散データ処理システムからの入力データに関連する結果データを分散データ処理システムインターフェースコンポーネントにおいて受信する工程であって、結果データは第１の時間間隔に関連する指標を含む、工程と、多くの時間間隔のうちの第２の時間間隔に関連する指標を多くの処理ノードのうちの第１の処理ノードにおいて決定する工程と、第２の時間間隔に関連する指標と結果データ内に含まれる第１の時間間隔に関連する指標とを分散データ処理システムインターフェースコンポーネントにおいて比較し、第２の時間間隔に関連する指標が第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、分散データ処理システムインターフェースコンポーネントから結果データをリリースする工程と、多くの処理ノードのうちの２つ以上を使用して多くの組の要求を処理する工程であって、各組の要求の各要求は、多くの処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組の要求は多くの時間間隔のうちの第３の時間間隔に関連する第１組の要求を含む、工程と、多くの処理ノードのうちの第１の処理ノード内の多くのカウンタを保持する工程とを含む。多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される複製カウンタとを含む。本方法はまた、作業カウンタの値及び複製カウンタの値を含む第１のメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ第１の時間に提供する工程を含む。
【００３９】
態様は以下の特徴のうちの１つ又は複数を含み得る。
【００４０】
第２の時間間隔に関連する指標は分散データ処理システムインターフェースコンポーネントへ提供され得る。多くのカウンタは、多くの時間間隔のうちの１つの時間間隔を示す持続性カウンタであって当該時間間隔に関連するすべての要求が多くの処理ノードのうちの少なくとも１つの処理ノードに関連する持続性ストレージ内に格納される持続性カウンタを含み得る。
【００４１】
別の一般的態様では、多くの処理ノードを含む分散データ処理システムを管理するためのソフトウェアがコンピュータ可読媒体上に非一時的形式で格納される。上記ソフトウェアは、コンピュータシステムに以下のことを実行させるための命令を含む：分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信することと、受信された入力データを分散データ処理システムへ提供することであって、分散データ処理システムは多くの時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当てる、提供することと、分散データ処理システムからの入力データに関連する結果データを分散データ処理システムインターフェースコンポーネントにおいて受信することであって、結果データは第１の時間間隔に関連する指標を含む、受信することと、多くの時間間隔のうちの第２の時間間隔に関連する指標を多くの処理ノードのうちの第１の処理ノードにおいて決定することと、第２の時間間隔に関連する指標と結果データ内に含まれる第１の時間間隔に関連する指標とを分散データ処理システムインターフェースコンポーネントにおいて比較し、第２の時間間隔に関連する指標が第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、分散データ処理システムインターフェースコンポーネントから結果データをリリースすることと、多くの処理ノードのうちの２つ以上を使用して多くの組の要求を処理することであって、各組の要求の各要求は、多くの処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組の要求は多くの時間間隔のうちの第３の時間間隔に関連する第１組の要求を含む、処理することと、多くの処理ノードのうちの第１の処理ノード内の多くのカウンタを保持すること。多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される複製カウンタとを含む。上記ソフトウェアはまた、コンピュータシステムに作業カウンタの値及び複製カウンタの値を含む第１のメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ第１の時間に提供させるための指示を含む。
【００４２】
別の一般的態様では、装置は、多くの処理ノードを含む分散データ処理システムを含み、各処理ノードは、少なくとも１つのプロセッサと、多くの処理ノードの処理ノード間で情報を送受信するための多くの処理ノードを接続する通信媒体とを含む。分散データ処理システムは、以下のように構成される：分散データ処理システムと通信する分散データ処理システムインターフェースコンポーネントにおいて入力データを受信し、受信された入力データを分散データ処理システムへ提供し、分散データ処理システムは多くの時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当て、分散データ処理システムからの入力データに関連する結果データを分散データ処理システムインターフェースコンポーネントにおいて受信し、結果データは第１の時間間隔に関連する指標を含み、多くの時間間隔のうちの第２の時間間隔に関連する指標を多くの処理ノードのうちの第１の処理ノードにおいて決定し、第２の時間間隔に関連する指標と結果データ内に含まれる第１の時間間隔に関連する指標とを分散データ処理システムインターフェースコンポーネントにおいて比較し、第２の時間間隔に関連する指標が第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、分散データ処理システムインターフェースコンポーネントから結果データをリリースし、多くの処理ノードのうちの２つ以上を使用して多くの組の要求を処理し、各組の要求の各要求は、多くの処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組の要求は多くの時間間隔のうちの第３の時間間隔に関連する第１組の要求を含み、多くの処理ノードのうちの第１の処理ノード内の多くのカウンタを保持する。多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される複製カウンタとを含む。本装置はまた、作業カウンタの値及び複製カウンタの値を含む第１のメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ第１の時間に提供するように構成される。
【００４３】
別の態様では、一般的に、多くの処理ノードを含む分散データ処理システムを管理する工程は、以下の工程を含む：入力データを分散データ処理システムへ提供する工程であって、分散データ処理システムは多くの時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当てる、工程と、分散データ処理システムからの入力データに関連する結果データを受信する工程であって、結果データは第１の時間間隔に関連する指標を含む、工程と、多くの時間間隔のうちの第２の時間間隔に関連する指標を多くの処理ノードのうちの第１の処理ノードにおいて決定する工程と、第２の時間間隔に関連する指標と結果データ内に含まれる第１の時間間隔に関連する指標とを比較し、第２の時間間隔に関連する指標が第１の時間間隔と同一である又はそれより遅い時間間隔に対応すれば、結果データをリリースする工程と、多くの処理ノードのうちの２つ以上の処理ノードを使用して多くの組のデータユニットを処理する工程であって、各組のデータユニットの各データユニットは多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組のデータユニットは多くの時間間隔のうちの第３の時間間隔に関連する第１組のデータユニットを含み、上記処理は、多くの特定の永続性レベルうちの特定の永続性レベル毎に、第３の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連指標を更新する工程を含み、多くの永続性レベルは第１の永続性レベルと第１の永続性レベルと比較して大きなレベルの永続性を有する第２の永続性レベルとを含む、工程と、多くの処理ノードのうちの２つ以上を使用して多くの組の要求を処理する工程であって、各組の要求の各要求は、多くの処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応時間間隔に関連付けられる、工程と、多くの処理ノードのうちの第１の処理ノードにおいて、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される複製カウンタを保持する工程と、また、複製カウンタの値を含む第１のメッセージを多くの処理ノードのうちの第１の処理ノードから他の処理ノードへ提供する工程。
【００４４】
別の態様では、一般的に、多くの処理ノードを含む分散データ処理システムを管理する工程は、以下の工程を含む：入力データを分散データ処理システムへ提供する工程であって、分散データ処理システムは多くの時間間隔のうちの第１の時間間隔に関連する指標を入力データへ割り当てる、工程と；分散データ処理システムからの入力データに関連する結果データを受信する工程であって、結果データは第１の時間間隔に関連する指標を含む、工程と；多くの時間間隔のうちの第２の時間間隔に関連する指標を多くの処理ノードのうちの第１の処理ノードにおいて決定する工程と；第２の時間間隔に関連する指標と結果データ内に含まれる第１の時間間隔に関連する指標とを比較することに基づき結果データをリリースする工程と；多くの処理ノードのうちの２つ以上の処理ノードを使用して多くの組のデータユニットを処理する工程であって、各組のデータユニットの各データユニットは多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの組のデータユニットは多くの時間間隔のうちの第３の時間間隔に関連する第１組のデータユニットを含み、上記処理は、多くの特定の永続性レベルうちの特定の永続性レベル毎に、第３の時間間隔に関連するすべての組のデータユニットが当該特定の永続性レベルで格納されるということを示すために関連指標を更新する工程を含む、工程。多くの処理ノードのうちの２つ以上を使用して多くの組の要求を処理する工程であって、各組の要求の各要求は、多くの処理ノードのうちの１つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応時間間隔に関連付けられ、多くの処理ノードのうちの１つ又は複数における状態更新は、自動ガーベッジコレクション（例えば明示的なメモリ割り振り及び割り振り解除又は自動参照計数）を回避するメモリ管理を使用して管理されるメモリ内に格納された更新状態を含む、工程と；多くの処理ノードのうちの第１の処理ノードにおいて、多くの時間間隔のうちの１つの時間間隔を示す複製カウンタであって当該時間間隔に関連するすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される複製カウンタを保持する工程と、複製カウンタの値を含む第１のメッセージを多くの処理ノードのうちの第１の処理ノードから少なくとも１つの他の処理ノードへ提供する工程。
【００４５】
様々な様相は以下の利点のうちの１つ又は複数を有し得る。
【００４６】
一般的に、本明細書において説明されるいくつかの特徴は、コンポーネント（又はコンポーネントの並列実行用コピー）が様々なサーバ上でホストされる上述の手法と比較して、計算（特にその基本的な仕様がグラフベースプログラム仕様の観点のものである計算）の計算効率の増加を可能にする（例えば、多くの処理ノードを含む分散データ処理システムは所与のコンピュータ資源の１ユニット当たりに処理されるレコードの数を増加させることができる）。例えば、コールクラスタコンポーネントは、グラフベースプログラム仕様で配置されており、グラフベースプログラム仕様により必要とされる計算がグラフベースプログラム仕様における処理ノードにより分散されたやり方で行われるように、グラフベースプログラム仕様と分散データ処理システムとをインターフェースするために使用される。さらに、本明細書において説明されるいくつかの特徴は、コンピュータ資源及び計算要件を変更することへ適応化する能力を提供する。本明細書において提供される計算手法は、例えば処理されるデータの特性に起因する、１つ又は複数のグラフベース計算の実行中に利用可能であるコンピュータ資源の変動に及び／又は計算負荷の変動又はこのような計算の様々なコンポーネントの負荷の時間変動に適応化することを許容する。例えば、態様は、処理ノードが分散データ処理システムへ追加される又はそれから除去される（又は、失敗し、オンラインに戻る）ことに適応化することができる。分散データ処理システムが適応化を提供する１つのやり方は本システム内のデータの複製及び持続性を管理することによるものであり、この管理は、処理ノードにより送信受信されるメッセージの計数を保持することと、すべてのメッセージが本システム内で複製される及び／又は持続させる時間間隔の指標を保持することとを含む。
【００４７】
様々な特性を有するコンピュータ資源を効率的に活用する（例えば、サーバ当たり様々な数のプロセッサ、プロセッサ当たりの様々な数のプロセッサコア、等々を有するサーバを使用することにより）こととそして均質環境と異質環境との両方を効率的に支援することとができる計算手法も提供される。本明細書において説明されるいくつかの特徴はまた、グラフベース計算の起動を急速なものにすることもできる。このような効率及び適応性を提供する一態様は、本明細書で述べるように処理ノードのクラスタの適切な管理を提供する。
【００４８】
態様はまた有利には「分散データ処理システムが、処理を適時ロールバックすることにより、発生するいかなる処理エラーからも回復することができる」という点でフォールトトレラントである。本システムは、多くの可能なロールバックシナリオを予想し、可能なロールバックシナリオのそれぞれにおいてロールバックを行うためのアルゴリズムを実施する。
【図面の簡単な説明】
【００４９】
【図１】データを処理するためのシステムのブロック図である。
【図２】コンピュータクラスタを含む計算システムのブロック図である。
【図３】様々な反復時間間隔の時間を表すクロックの概要図である。
【図４】手順を操作するための状態遷移図である。
【図５−１２】計算システムの通常動作を示す。
【図１３−１５】第１のロールバック手順を示す。
【図１６−１８】第２のロールバック手順を示す。
【図１９−２１】第３のロールバック手順を示す。
【図２２−２５】第４のロールバック手順を示す。
【図２６−２９】第５のロールバック手順を示す。
【図３０−３２】第６のロールバック手順を示す。
【図３３−３５】第７のロールバック手順を示す。
【図３６−３７】第８のロールバック手順を示す。
【発明を実施するための形態】
【００５０】
図１は、コンピュータクラスタ管理技術が使用され得るデータ処理システム２００の例を示す。システム２００は、データの１つ又は複数のソース（ストレージデバイス、又はオンラインデータストリームへの１つ又は複数の接続など）を含み得るデータソース２０２を含み、その各々は様々なフォーマット（例えばデータベーステーブル、スプレッドシートファイル、フラットテキストファイル又はメインフレームにより使用される固有フォーマット）のうちの任意のものでデータを格納又は提供し得る。実行環境２０４は前処理モジュール２０６及び実行モジュール２１２を含む。実行環境２０４は、例えばＵＮＩＸオペレーティングシステムの１つのバージョン等の好適なオペレーティングシステムの制御下で１つ又は複数の汎用コンピュータ上でホストされ得る。例えば、実行環境２０４は、複数の処理ユニット（例えば中央処理ユニット：ＣＰＵ）又はプロセッサコアを使用するコンピュータシステムの構成を含むマルチプルノードパラレルコンピュータ環境であってローカルシステム（例えば、対称型マルチ処理（ＳＭＰ：ｓｙｍｍｅｔｒｉｃ  ｍｕｌｔｉ−ｐｒｏｃｅｓｓｉｎｇ）コンピュータ等のマルチプロセッサシステム）又はローカル分散型システム（例えば、クラスタ又は超並列処理（ＭＰＰ：ｍａｓｓｉｖｅｌｙ  ｐａｒａｌｌｅｌ  ｐｒｏｃｅｓｓｉｎｇ）として接続される複数プロセッサ）、又はリモート又はリモート分散型ネットワーク（例えば、ローカルエリアネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）及び／又は広域ネットワーク（ＷＡＮ：ｗｉｄｅ−ａｒｅａ  ｎｅｔｗｏｒｋ）を介し接続される複数プロセッサ）、又はその任意の組み合せのいずれかであるマルチプルノードパラレルコンピュータ環境を含み得る。
【００５１】
前処理モジュール２０６は、プログラム仕様（例えば以下に説明されるグラフベースプログラム仕様）が実行モジュール２１２により実行される前に必要とされ得る任意の構成設定を行うことができる。前処理モジュール２０６は、データソース２０２を具現化し得る多様なタイプのシステム（様々な形式のデータベースシステムを含む）からデータを受信するためのプログラム仕様を構成し得る。データは、恐らくヌル値を含むそれぞれのフィールド（「属性」、「行」又は「列」とも呼ばれる）の値を有するレコードとして編成され得る。データソースからデータを読み出すためのデータ処理アプリケーションなどのコンピュータプログラムを最初に構成する際、前処理モジュール２０６は通常、当該データソース内のレコードに関するいくつかの初期フォーマット情報により開始する。コンピュータプログラムは本明細書で述べるようなデータフローグラフの形式で表現され得る。いくつかの状況では、データソースのレコード構造は当初知られていないかもしれなく、その代わりにデータソース又はデータの解析後に判定され得る。レコードに関する初期情報は、例えば個別値を表すビットの数、レコード内のフィールドの順序、及びビットにより表される値のタイプ（例えばストリング、符号付き／符号無し整数）を含み得る。
【００５２】
データソース２０２を提供するストレージデバイスは実行環境２０４に対してローカルであり得る、例えば、実行環境２０４をホストするコンピュータへ接続されたストレージ媒体（例えば、ハードドライブ２０８）上に格納され得る、又は、実行環境２０４に対してリモートであり得る、例えばリモート接続（例えばクラウドコンピュータインフラストラクチャにより提供される）上で実行環境２０４をホストするコンピュータと通信するリモートシステム（例えば、メインフレームコンピュータ２１０）上でホストされ得る。
【００５３】
実行モジュール２１２は、入力データを読み取る及び／又は出力データを生成するために前処理モジュール２０６により構成及び／又は生成されるプログラム仕様を実行する。出力データ２１４は、データソース２０２内又は実行環境２０４へアクセス可能なデータ格納システム２１６内に戻され格納されてもよいし、そうでなければ使用されてもよい。データ格納システム２１６はまた、開発者２２０が実行モジュール２１２を使用してデータを処理するためのアプリケーションを開発することができる開発環境２１８へアクセス可能である。
【００５４】
換言すれば、データ処理システム２００は：
データストレージ２１６へ接続された任意選択的開発環境２１８であって、開発環境２１８は、グラフコンポーネントを処理するグラフを介し１つ又は複数の入力データセットから１つ又は複数の出力データセットへ流れるデータに対し行われるグラフベース計算を実施するデータフローグラフに関連するデータ処理アプリケーションを構築するように構成され、データフローグラフはデータストレージ２１６内のデータ構造により規定され、多くのノードを有するデータフローグラフはデータ構造により規定され、１つ又は複数のリンクにより接続されるグラフコンポーネントを表し、上記リンクはデータ構造により規定され、グラフコンポーネント間のデータフローを表す、開発環境２１８と；
データストレージ２１６へ接続され、１つ又は複数のコンピュータ上でホストされる実行環境２１２であって、実行環境２１２は、データフローグラフを規定する格納されたデータ構造を読み出すようにそして前処理モジュール２０６によりデータフローグラフへ割り当てられるグラフコンポーネントの計算を行うためのコンピュータ資源（処理など）を割り振るように構成された前処理モジュール２０６を含む、実行環境２１２と、を含み、
実行環境２０４は、グラフベース計算が実行されるように、割り当てられた計算又は処理の実行をスケジューリング及び制御するための実行モジュール２１２を含む、実行環境２１２を含む。すなわち、実行モジュールは、データソース２０２からデータを読み取るように、そしてデータフローグラフの形式で表現された実行可能コンピュータプログラムを使用してデータを処理するように構成される。
【００５５】
１．コンピュータクラスタ
ごく一般的には、実行モジュール２１２を使用してデータを処理するためのいくつかのコンピュータプログラム（本明細書では「アプリケーション」とも呼ばれる）は、コンピュータクラスタへアクセスするためにアプリケーションが使用するコールクラスタコンポーネントを含む。例えば、図２を参照すると、パイプラインデータ処理に対する手法では、コールクラスタコンポーネント１１０は、その一部分であるアプリケーション（例えばデータフローグラフ又は他の形式のグラフベースプログラム仕様）内のコンポーネントからコールクラスタコンポーネント１１０において受信された記録１０３を処理するためにコンピュータクラスタ１２０のコンポーネントと相互作用し、対応結果１０５をその一部分であるアプリケーションの１つ又は複数の他のコンポーネントへ送信する。入力レコード１０３毎に、コールクラスタコンポーネント１１０は、要求１１３（例えばデータ処理タスクを実行するための要求）をクラスタ１２０へ送信し、しばらくして、当該要求１１３に対する応答１１５をクラスタ１２０から受信する。応答１１５の受信後しばらくして、コールクラスタコンポーネント１１０は、通常は要求を処理した結果がクラスタ１２０内で適切に持続性があると知られた後、応答１１５に対応する結果１０５を送信する。
【００５６】
コールクラスタコンポーネント１１０がその一部分であるグラフベースプログラム仕様は図２に示されない。図２では、単一コールクラスタコンポーネント１１０だけが示されるが、同じクラスタ１２０と相互作用し得る多くのコールクラスタコンポーネント（例えばデータフローグラフなどの同じ又は異なるアプリケーションに参加する各コールクラスタコンポーネント）が一般的には存在し得るということを認識すべきである。グラフベースプログラム仕様は、例えば米国特許第５，９６６，０７２号明細書、米国特許第７，１６７，８５０号明細書又は米国特許第７，７１６，６３０号明細書に記載されるデータフローグラフとして又は米国特許出願公開第２０１６／００６２７７６号明細書に記載されるデータ処理グラフとして実現され得る。このようなデータフローグラフベースプログラム仕様は通常、グラフ（「データフローグラフ」と呼ばれる）のリンク（有向辺）に対応するデータフローにより結合されるグラフのノード（バーテックス）に対応するコンピュータコンポーネントを含む。データフローリンクにより上流コンポーネントへ接続される下流コンポーネントは入力データ要素の順序付けられたストリームを受信し、受信された順番に入力データ要素を処理し、そして任意選択的に、出力データ要素の１つ又は複数の対応ストリームを生成する。いくつかの例では、各コンポーネントは、通常は複数のコンピュータサーバのうちの１つの上でホストされる処理として実施される。各コンピュータサーバは、どの時点においてもアクティブである複数のこのようなコンポーネント処理を有し得、オペレーティングシステム（例えばＵｎｉｘ）スケジューラは当該サーバ上でホストされるコンポーネント間で資源（例えばＣＰＵ時間及び／又はプロセッサコア）を共有する。このような実施形態では、コンポーネント間のデータフローは、オペレーティングシステムのデータ通信サービス（例えばパイプ、ＴＣＰ／ＩＰセッションなどと称する）とサーバ同士を接続するデータネットワークとを使用して実施され得る。コンポーネントのサブセットは通常、計算全体からの（例えばデータファイル、データベーステーブル、及び外部データフローに対する）データのソース及び／又はシンクとして働く。コンポーネント処理及びデータフローが確立された後、例えば、連携処理により、データは、各コンポーネントにおける入力データの可用性により通常は規定されるグラフとして表現された計算を実施するとともに各コンポーネントのコンピュータ資源をスケジューリングするコンピュータシステム全体を貫流する。
【００５７】
クラスタ１２０は通信ネットワーク１３０（「クラウド」として図２に示されており、開始、共有媒体、ハイパーキューブなどの様々な相互接続トポロジーを有し得る）により結合される複数のクラスタコンポーネント１４０、１５０ａ〜１５０ｃを含む。各クラスタコンポーネント（又は単純に「コンポーネント」）はクラスタ内で特定役割を有する。いくつかの実施形態では、コンポーネントのそれぞれは個別コンピュータ資源（例えば別個のコンピュータサーバ、マルチコアサーバの別個のコアなど）上でホストされる。これらのコンポーネントがクラスタ内の役割を表すということと、いくつかの実施形態では複数の役割が１つのコンピュータ資源上でホストされ得、単一役割が複数のコンピュータ資源全体にわたって分散され得るということとを理解すべきである。
【００５８】
図２では、ルートコンポーネント１４０（「ルート」と呼ばれる）は、以下に十分説明されるいくつかの同期機能を行うが、処理対象データの流れ又は計算に直接的に関与しない。多くのワーカーコンポーネント１５０ａ〜１５０ｃ（以下では「ワーカー」と呼ばれる）はコールクラスタコンポーネント１１０からの要求１１３を処理する。データ１６５は、それぞれのワーカー１５０へアクセス可能なストレージ１６０内に冗長的やり方で格納され、各要求１１３は、ストレージ１６０内に格納され要求１１３内のキーにより識別されたデータの特定部分へアクセスする（読み出す及び／又は書き込むために）必要があるかもしれなく、キーにより判定されたワーカーの特定サブセットの間で分散される。特定要求に必要とされるキーのデータを保持するワーカーのうち、１つワーカーが、要求１１３が実行される主要ワーカー（例えばワーカー１５０ａ）として指定され、他のワーカーは、要求を通常は又は必ずしも実行しないが当該データのそれらのバージョンが主要ワーカーと同じやり方で又はそれに従って更新されるという意味でバックアップワーカーとして指定される。
【００５９】
図２では、特定入力レコード１０３の経路（処理対象データユニットと見做され得る又はそれを含み得る）がコールクラスタコンポーネント１１０に入るものとして示されており、次に、対応要求１１３（データユニットを有する）は要求の主要ワーカー１５０ａ（ワーカーＡ）へコンポーネント１１０により送信され、主要ワーカー１５０ａからの応答１１５は、要求のバックアップワーカー１５０ｂ（ワーカーＢ）だけでなくコールクラスタコンポーネント１１０へも返送され、最後に、対応結果１０５がコールクラスタコンポーネント１１０から出力又は送信される。一般的に、要求毎に複数のバックアップコンポーネントが存在し得るが、説明を簡単にするために、単一バックアップコンポーネントだけが以下の多くの例では示される。
【００６０】
以下にさらに論述されるように、コールクラスタコンポーネント１１０は、要求１１３を再生バッファ１１２内にバッファし、そして必要に応じてクラスタ１２０により正しく受信及び／又は処理されたということを保証するために要求をクラスタ１２０へ再送信し得る。コンポーネント１１０はまた、応答１１５をエスクローバッファ１１４内にバッファし、そして、エラー条件が検出された場合にはいくつかの応答の冗長コピーを受信し得る。一般的に、コンポーネント１１０は、応答１１５がクラスタ内に適切に保持されている（すなわち、好適な永続性レベルでデータストレージにおいて格納された）ということをクラスタ１２０がコンポーネント１１０に通知するまで、応答を「エスクロー状態に」保持する。
【００６１】
ルート１４０は、時間（間隔）値を保持しそして他のコンポーネントへ分配し、そして時間値のいくつかをコールクラスタコンポーネント１１０へ分配することにより同期機能を行う。図３を参照すると、ルート１４０のクロック１４２は３つの時間を保持する。時間Ｔ１は、例えば整数値として表される現在の作業時間又は時間間隔であり、繰り返し更新され、例えば毎秒１だけインクリメントされる。
【００６２】
要求１１３がコールクラスタコンポーネント１１０からクラスタ１２０により受信され、応答１１５がクラスタにより生成（又は送信）されると、それぞれは、それぞれ受信されそして生成（又は送信）された作業（Ｔ１）時間（又は、等価的に、時間Ｔ１が同じ値を有する時間区間（すなわち、Ｔ１の増分同士間））に関連付けられる。ルートは、時間Ｔ１に遅れる第２の時間Ｔ２を保持し配布する。以下にかなり詳細に説明されるように、時間Ｔ２は、エラーを処理するための操作のロールバックの場合に再送信される必要が無いように、クラスタ１２０のコンポーネント１５０ａ〜１５０ｃ間で送信された時間に又はそれ以前に生成されたすべての要求及び／又は応答が複数のコンポーネント１５０ａ〜１５０ｃにおいて（例えば揮発性メモリ内に）複製されているような時間（間隔）を表す。いくつかの例では、複製（例えば揮発性メモリ内の）は、第１のレベルの永続性でもってデータストレージ内に格納されることを指す。ルートは、当該時間に又はそれ以前に生成されたすべての要求及び／又は応答がクラスタ１２０内のコンポーネントの故障を処理するための操作のロールバックの場合には再送信又は再計算される必要が無いように、当該データ１６５が格納されるワーカー１５０ａ〜１５０ｃのうちの少なくとも１つにおいて又はさらにはそのすべてにおいて持続性メモリ内に格納され、恒久的なものにされるような時間を表す第３の時間（間隔）Ｔ３（時間Ｔ１及びＴ２に遅れる）を保持し配布する。いくつかの例では、持続性メモリ内に（例えばディスクへ）格納されることは、第１のレベルの永続性より比較的永続性がある第２のレベルの永続性でもってデータストレージ内に格納されることを指す。データストレージは第１のレベルの永続性を有するデータストレージ及び第２のレベルの永続性を有するデータストレージより比較的永続性がある又は無い多くの異なるレベルの永続性に関連付けされ得るということに注意すべきである。例えば、クラスタの外にあるオフサイトデータストレージは、第１及び第２のレベルの永続性より比較的永続性がある第３のレベルの永続性を有し得る。いくつかの例では、時間間隔Ｔ１、Ｔ２及びＴ３は代替的に「状態一貫性（ｓｔａｔｅ  ｃｏｎｓｉｓｔｅｎｃｙ）指標」と呼ばれる。
【００６３】
複製（Ｔ２）時間又は持続（Ｔ３）時間をいつインクリメントすべきかを判定するためのルート１４０の機構は、時間（Ｔ１〜Ｔ３）の値をワーカー１５０ａ〜１５０ｃへ分配するための機構と同様に本明細書の後で説明される。
【００６４】
通常動作では、クラスタ１２０により受信された要求１１３は、要求のデータユニットのキーに基づき主要ワーカーとして識別されたワーカー１５０において（そして、一般的に１つ又は複数のバックアップワーカー１５０において）処理され、また、必要とされるデータのキーに基づき識別される。図４を参照すると、この処理は、コールクラスタコンポーネント１１０及び主要及びバックアップワーカー１５０において当該要求の様々な状態間の遷移として表され得る。「様々な要求は、様々な状態にあり、そして一般的には、参照されるデータに依存して様々なワーカーにおいて処理され、したがって、コールクラスタコンポーネント及び任意の特定ワーカーは様々な状態において多くの要求を有し得る」ということに留意されたい。
【００６５】
一般的に、各キーは、対応するサブセットのワーカー１５０に関連付けられ、例えばキー（例えば、キー値毎にバックアップワーカーを予測不能に分散するキーの決定論的機能）に基づき疑似ランダムなやり方で選択される。より一般的には、そして好適には、これらのサブセットは、キー値に従って完全な一組のワーカーの区画を形成するのではなくむしろサブセットの他の区画と重なる。
【００６６】
一意的識別子ｒｉｄを有する（又はコールクラスタコンポーネントにより割り当てられる）要求１１３が入力レコード１０３毎にコールクラスタコンポーネント１１０において形成されると、この要求はコールクラスタコンポーネントの状態Ａに入る。以下の説明では、各要求１１３はコールクラスタコンポーネントの３つの状態（Ａ〜Ｃと表記される）のうちの１つにあり、この要求を処理するワーカー１５０のそれぞれにおいて９つの異なる状態（Ａ〜Ｉと表記される）のうちの１つにある。要求１１３を記録した後、コールクラスタコンポーネント１１０は、要求の主要ワーカーへ割り当てられるワーカー１５０を決定し、要求１１３を当該ワーカー１５０（図２においてワーカーＡとして示される）へ送信する。代替実施態様では、「コールクラスタコンポーネント１１０はどのワーカーが指定された主要ワーカーかについて気付いていないかもしれなく、したがって、要求１１３は、指定された主要ワーカワーカー１５０ａへ到達するようにクラスタ１２０において内部的にルーティングされ得る」ということに留意されたい。要求１１３は、要求の応答１１５がクラスタ１２０から戻され受信されるまでコールクラスタコンポーネント１１０において状態Ａのままである。
【００６７】
要求１１３が主要ワーカー（図２ではワーカーＡと表記される）において受信されると、要求は主要ワーカーにおいて状態Ａに入る。主要ワーカーは、ルート１４０から配布されたとして知らされた現在の作業時間Ｔ１に等しい（ｔａで表された）要求時間を要求に割り当てる（ルートがＴ１を増分したときとワーカーがこの増分について知ったときとの間に時間遅れが存在し得るということを認識することにより）。この状態で、要求１１３は、要求ｉｄ、ｒｉｄ及びこの例ではｔａとして表された要求時間に関連付けられた揮発性メモリ１５５内に格納され、主要ワーカーにおいて実行することを待つ状態に指定される。この状態Ａにおいて、主要ワーカーは、要求１１３を当該要求の１つ又は複数のバックアップワーカー１５０（すなわち、キーにより判定された）へ送信する。主要ワーカーにおいて、当該要求は、例えば要求へ割り当てられた時間（ｔａ）と任意選択的に主要ワーカーにおける要求の到着順とに従って資源の順番通り割り当てに基づき実行するために最終的に割り当てられた資源である。要求１１３が主要ワーカーにおいて実行を開始すると、要求は主要ワーカーにおいて状態Ｂに入る。処理が応答１１５を生成すると（この例では、Ｔ１作業時間がｔｂであると仮定する）、主要ワーカーにおける要求の状態は状態Ｃになる。状態Ｃにおいて、応答１１５は時間ｔｂに関連付けられて揮発性メモリ１５６内に格納される。以下にさらに論述されるように、ワーカーにおける応答１１５及びデータストレージ１６０に対する任意の更新は、例えば改版されたデータベース又は他の形式の改版されたデータ構造を使用することにより、従来のロールバック時間による効果の除去を許容するやり方で時間（ここでは時間ｔｂ）に関連付けられて格納される。この状態Ｃにおいて、応答１１５は、コールクラスタコンポーネント１１０とバックアップコンポーネント１５０との両方へ送信される。
【００６８】
コールクラスタコンポーネント１１０において、応答１１５が主要ワーカーから受信されると、要求は、主要ワーカーにより生成された時間ｔｂに関連付けられて応答が格納される状態Ｂに入る。応答１１５は、ルート１４０からｔｂに等しい又はそれより大きいエスクロー時間を受信するまでエスクローバッファ１１４内のコールクラスタコンポーネントにおいて保持される。当該コールクラスタコンポーネントからの要求の持続性要件に依存して、ルートは、コールクラスタコンポーネントのエスクロー時間として複製時間Ｔ２又は持続時間Ｔ３のいずれかを提供し得る。ｔｂに等しい又はそれより大きいエスクロー時間を受信すると、コールクラスタコンポーネント１１０は結果１０５をコールクラスタコンポーネントから送信し、対応する要求１１３は、要求１１３のいかなるさらなる記録又はその応答１１５も必要とされない（例えば、完全に消去され得る）ヌル状態Ｃに入る。
【００６９】
バックアップワーカー１５０において、要求１１３を主要ワーカーから受信すると、バックアップワーカーは、要求がオリジナル要求時間ｔａに関連付けられた状態Ｆに入り（現在の作業時間Ｔ１がそれを越えてインクリメントされていたとしても）、要求は主要ワーカーからの応答を待つ状態である。バックアップワーカー１５０ｂが主要ワーカーから応答１１５を受信し、したがって応答１１５が当該バックアップの揮発性メモリ１５６内に複製されると、バックアップワーカー１５０ｂは状態Ｇに入る。
【００７０】
主要又はバックアップワーカーが新たに生成された応答１１５を有すると直ちに、主要又はバックアップワーカーは、当該応答をディスクベース又は不揮発性メモリベースデータベース又はファイルシステムなどの持続性ストレージ１６０へ保存する処理を自由に開始することができる（状態Ｄ及びＨを参照）。持続性メモリに対する更新が最初に揮発性メモリベースジャーナル内でジャーナル化されるジャーナルベース手法が使用され得、当該ジャーナルの一部分は持続性ストレージ１６０へ折々に書き込まれる。「更新のこのジャーナルの一部分が持続性ストレージ１６０へ書き込まれる場合ですら、それらの更新は、恒久的であると考えられる更新の程度に関する明示的指標が持続性ストレージへ書き込まれるまで恒久的な（すなわち、「コミットされた」）ものにされない」ということに留意されたい。
【００７１】
時間ｔｂ及びそれより早い時間に関連するすべての要求及び応答がすべての適切なワーカーにおいて複製されたということをルート１４０が判定した時点で、Ｔ２はｔｂに達する又はｔｂまでインクリメントする。時間Ｔ２＝ｔｂがルート１４０から主要及びバックアップワーカー１５０へ配布された後、これらのワーカーは応答を持続性ストレージ１６０内で恒久的なものにする。時間ｔｂを介した更新のジャーナルが持続性メモリへ未だ書き込まれていなければ、それらは当該時間に書き込まれる。より一般的には、時間ｔｂを介したジャーナルは、Ｔ２がｔｂに達する又はそれまでインクリメントする時間までにワーカーにより持続性ストレージ１６０へ書き込まれた。この時間においてなされなければならないことは、「持続性ジャーナル内で時間ｔｂを介した更新が恒久的ものとして処理される」という指標を記録することにより更新を恒久的なものにするタスクを完了することだけである。主要ワーカーがジャーナルを恒久的なものにする恐らく短い時間中、ジャーナルは状態Ｄにある。主要ワーカーが持続性ストレージにおいて図４に示す要求の応答をすると、主要ワーカーは状態Ｅに入る。同様に、バックアップワーカーが応答を恒久的なものにする間、バックアップワーカーは状態Ｈにあり、バックアップワーカーが応答を持続性メモリ内で恒久的なものにすると、バックアップワーカーは状態Ｉに入る。時間ｔｂ（及びそれ以前の時間）に関連付けられたすべての応答が持続性メモリ内で恒久的である（すなわち、すべて状態Ｅ又はＩにある）ということをルートワーカーが判定すると、ルートワーカーは持続時間Ｔ３をｔｂへインクリメントする。上に紹介したように、エスクロー時間がコールクラスタコンポーネントにおける要求に対するものであり、持続時間Ｔ３である状況に関して、ルート１４０は、エスクロー時間がｔｂ以上となったということをコールクラスタコンポーネント１１０に通知し、コールクラスタコンポーネント１１０は当該要求１１３の対応する結果１０５をリリースし、応答１１５をアプリケーション（例えばグラフ）内の１つ又は複数の他のコンポーネントへリリースする。
【００７２】
上に紹介したように、通常動作において、ルートは、コールクラスタコンポーネントからの連続要求１１３がクラスタにおいて処理されると作業時間Ｔ１を更新し、応答１１５はコールクラスタコンポーネントへ戻され、エスクロー時間Ｔ２又はＴ３の更新に従ってコールクラスタコンポーネントからグラフへリリースされる。一般的に、特定要求１１３の処理は、作業時間Ｔ１のうちの多くの時間「ティック（ｔｉｃｋ）」（例えば１０又は１００のティック）がかかり得、したがって、クラスタは、進行中である多くの要求であってこれらに関連付けられた多くの異なる要求時間を有する要求を有し得る。さらに、データはワーカー間で分散されるので、負荷は、各ワーカーが主要ワーカーとして（すなわち、状態Ａ〜Ｅのうちの１つの状態において）働いている複数の要求を有し、バックアップワーカーとして（すなわち、状態Ｆ〜Ｉのうちの１つの状態で）働いている複数の要求もまた有し得るように、それらの要求のキーに従ってワーカー間で効果的に分散される。
【００７３】
タスクを行うためのクラスタに対するいくつかの要求はタスクを複製するためのそして当該タスクを行った対応結果を複製するための本明細書で述べたような手順を使用するということに注意すべきである。例えば、タスクがバックアップワーカーにおいてタグ付け及び複製された（必ずしもではないが持続的なものにされた）後、このタスクは主要ワーカーにおいて初期化される。タスクがデータ記録に作用すれば、初期化はレコードのオリジナル版１を保持することに関与し得る。次に、タスクは、主要ワーカー上で実行するがバックアップワーカー上では実行されない状態である。処理が完了した後、レコードの修正版２が存在する。次に、タスクの最終化は、レコードの修正版２を主要ワーカーからバックアップワーカーへ送信する工程を含み得る。次に、主要ワーカーとバックアップワーカーとの両方は、レコードのオリジナル版１を（複製されたタスクと共に）消去することができる。これらの工程のそれぞれは合理的に効率的なものであるがタスクの継続時間が非常に短ければ、これらの初期化及び最終化手順に関連するオーバーヘッドはタスクをあまり効率的でないものにし得る。
【００７４】
代替的に、異なる手順が、継続時間が比較的短いいくつかのタスク（「短いタスク」）には使用され得る。短いタスクは、バックアップワーカーにおいて依然としてタグ付け及び複製される。しかし、初期化はレコードのオリジナル版１を保持する必要が無い。その代りに、短いタスクと短いタスクのレプリカとの両方が主要及びバックアップワーカーにおいてそれぞれに持続的に格納されたということをコミット操作（ｃｏｍｍｉｔ  ｏｐｅｒａｔｉｏｎ）が示した後、短いタスクは両方のワーカーにおいて実行される。当該実行の終わりに、修正されたレコードを送信するために必要とされるいかなる通信も無く、主要及びバックアップワーカーの両方においてレコードの修正版２のコピーが存在することになる。両方のワーカーにおいて冗長処理が存在するが、この冗長性は、タスクが短いので、効率に著しい影響を与えない。この代替手順は、どのワーカーがこれを実行しているかにかかわらず、例えば短いタスクが決定論的であり同じ結果を生成すれば有用である。
【００７５】
２．通常動作の例
図５〜１２を参照すると、コールクラスタコンポーネント１１０及びクラスタ１２０の通常動作の一例が示されている。図５では、入力レコード１０３がコールクラスタコンポーネント１１０に到達し、コールクラスタコンポーネント１１０は入力レコード１０３の要求１１３を形成する。コールクラスタコンポーネント１１０は要求１１３と一意的要求識別子ｒｉｄとを関連付け、これをコールクラスタコンポーネント１１０の再生バッファ１１２内に格納する。
【００７６】
コールクラスタコンポーネント１１０は要求１１３をクラスタ１２０へ送信し、要求１１３は、時間Ｔ１＝ｔａにクラスタ１２０内の主要ワーカー１５０ａ（ワーカーＡ）において受信される。要求１１３は、主要ワーカー１５０ａの揮発性メモリ１５５内に格納され、現在の作業時間（Ｔ１＝ｔａ）に等しい要求時間が割り当てられる。要求１１３の要求時間はコールクラスタコンポーネント１１０へ提供され、コールクラスタコンポーネント１１０は要求時間（すなわち、ｔａ）と再生バッファ１１２内に格納された要求１１３とを関連付ける。コールクラスタコンポーネント１１０の再生バッファ１１２内に格納された要求１１３は状態Ａ（図４を参照）にあり、クラスタ１２０からの応答を待つ。主要ワーカーの揮発性メモリ１５５内に格納された要求１１３は状態Ａにあり、コンピュータ資源が要求１１３の実行のために割り当てられるのを待つ。
【００７７】
図６を参照すると、主要ワーカーは要求１１３をバックアップワーカー１５０ｂ（ワーカーＢ）へ送信し、要求１１３はバックアップワーカー１５０ｂの揮発性メモリ１５５内に格納される。バックアップワーカー１５０ｂの揮発性メモリ１５５内に格納された要求１１３は、主要ワーカーからの応答を受信することを待つ状態Ｆにある。
【００７８】
図７を参照すると、主要ワーカー１０５がコンピュータ資源（例えば主要ワーカーのコンピュータ資源又はクラスタの別の部分のコンピュータ資源）を要求１１３へ割り当てると、要求１１３は主要ワーカー１０５において状態Ｂに入り、実行を開始する。
【００７９】
図８を参照すると、時間Ｔ１＝ｔｂにおいて、主要ワーカー１０５は要求１１３の実行を完了する。要求１１３の実行は、主要ワーカーの揮発性メモリ１５６内に格納される応答１１５を生成する。応答１１５は、要求１１３の要求識別子（ｒｉｄ）とそれが生成された時間（ｔｂ）とへ関連付けられる。主要ワーカーは応答１１５をコールクラスタコンポーネント１１０とバックアップワーカー１５０ｂとへ送信し、次に、要求１１３は状態Ｃになり、持続時間Ｔ３がｔｂへ到達するのを待つ。
【００８０】
コールクラスタコンポーネント１１０は応答１１５を受信し、これをそのエスクローバッファ１１４内に格納する。エスクローバッファ１１４内に格納された応答により、結果１１５はコールクラスタコンポーネント１１０において状態Ｂになり、持続時間Ｔ３（この例ではエスクロー時間）がｔｂへ到達するのを待つ。バックアップワーカー１５０ｂは応答１１５を受信し、これを揮発性メモリ１５６内に格納する。バックアップワーカー１５０ｂにおける要求１１３は状態Ｇに入り、持続時間Ｔ３がｔｂへ到達するのを待つ。
【００８１】
図８には示さないが、主要ワーカー１５０ａ及びバックアップワーカー１５０ｂの揮発性メモリ１５６内に格納された（複製された）応答１１５により、複製時間（Ｔ２）はｔｂへ設定される。
【００８２】
図９を参照すると、応答１１５が主要ワーカー１５０ａ及びバックアップワーカー１５０ｂの一方又は両方の揮発性メモリ１５６内に格納されると、主要ワーカー１５０ａ及びバックアップワーカー１５０ｂは、応答１１５がそれぞれの揮発性メモリ１５５、１５６内にも格納されたまま応答１１５をそれぞれの持続性ストレージ１６０へ格納し始める。
【００８３】
図１０を参照すると、応答１１５が主要ワーカーにおいて格納され、そしてバックアップワーカー１５０ｂにおいて複製された後、持続時間（Ｔ３）はｔｂへ設定される。主要ワーカー１５０ａ及びバックアップワーカー１５０ｂは持続性ストレージ１６０内の応答１１５の恒久的格納を終了する。主要ワーカーにおいて格納された要求１１３は状態Ｄにあり、バックアップワーカー１５０ｂにおいて格納された要求１１３は、要求１１３及び応答１１５が揮発性メモリ１５５、１５６内に依然としてそれぞれ格納された状態Ｈにある。
【００８４】
図１１を参照すると、この例のエスクロー時間は持続時間Ｔ３であるので、ｔｂへ更新されたＴ３により、コールクラスタコンポーネント１１０において格納された要求１１３は状態Ｃに入り、応答１１５（時間ｔｂへ関連付けられた）がそのエスクローバッファ１１４からリリースされる。
【００８５】
図１２を参照すると、主要ワーカー１５０ａの持続性ストレージ内に恒久的に格納された応答１１５により、要求１１３は、要求１１３又は応答１１５のいずれもその揮発性メモリ１５５、１５６内にそれぞれに格納されない状態Ｅに入る。同様に、バックアップワーカー１５０ｂの持続性ストレージ内に恒久的に格納された応答１１５により、要求１１３は、要求１１３又は応答１１５のいずれもその揮発性メモリ１５５、１５６内に格納されない状態Ｉに入る。
【００８６】
３．ロールバックシナリオ
図４の状態遷移図は通常動作を表すが、ワーカー間のメッセージが成功裡に受信されないということ（うまく受信されないということ）が頻繁ではないがあり得る。さらに、ワーカーがその揮発性メモリを失った後に再始動すること又はワーカーが要求をさらに処理しないように完全に失敗することがあり得る（すなわち、主要役割又はバックアップ役割のいずれかにおいて）。本明細書において説明されるデータ処理システムのいくつかの実施形態がこのセクションにおいて説明されたロールバックシナリオのすべてを実現するということに注意すべきである。データ処理システムの他の実施形態がこのセクションにおいて説明されたロールバックシナリオのすべてではないが１つ又は複数を実現し得るということにも留意すべきである。
【００８７】
３．１  シナリオ１：ｔｒ＜ｔａ
成功裡に受信されなかったいくつかのワーカー間メッセージであって時間ｔｅに関連付けられたメッセージが存在するということをクラスタが判定する状況を最初に考察する。一般的に、ルートは、時間がｔｅに先立つ時間ｔｒ（すなわち、ｔｒ＜ｔｅ、例えばｔｒ＝ｔｅ−１）へ「ロールバック」されなければならないということをすべてのワーカーに通知する。このようなロールバックによってすら、コールクラスタコンポーネント１１０により提供される結果は、あたかもロールバックが発生しなかったかのようにアプリケーション又はグラフへ提供され、ワーカー間に分配されたデータへの更新はコールクラスタコンポーネントにより提供された結果と整合したままである。特に、結果は、多くのノード（例えばワーカー）において格納される（例えば、複製又は保持される）までコールクラスタコンポーネント１１０からアプリケーション又はグラフへリリースされなく、これにより、結果が決して呼び出されることなく無効になるということを保証する。別の言い方をすると、発生するいかなるロールバックも、結果がコールクラスタコンポーネント１１０によりアプリケーション又はグラフへ提供されるのに先立って必ず発生する。
【００８８】
ロールバックはいくつかのワーカー間メッセージが成功裡に受信されなかったので行われなければならないということをルート１４０が判定すると、ルートはロールバック時間ｔｒをコールクラスタコンポーネント１１０に通知する。現在時間Ｔ１がインクリメントされ、そして一般的に、時間ｔｒ＋１からＴ１−１を含むＴ１−１までのすべての活動はあたかもそれらが発生しなかったかのように処理される。コールクラスタコンポーネント１１０における効果は「状態Ｂ（すなわち、エスクロー時間により到達されていない応答時間を有する）の（再生バッファ１１２内に格納された）すべての要求は状態Ａへ戻され、エスクローバッファ１１４内のいかなる対応する応答１１５も廃棄される」ということである。次に、状態Ａにある要求１１３（既に状態Ａにあったか状態Ｂから状態Ａへ戻されたかのいずれかであるので）はクラスタ１２０へ再送信される。
【００８９】
実行を未だ開始していないが主要ワーカーとバックアップワーカー（すなわち、主要ワーカーが状態Ａにありバックアップワーカーは状態Ｆにある）との間で複製された要求へのクラスタ（すなわち、ワーカー１５０における）の影響は、要求がロールバック時間ｔｒより大きい要求時間ｔａ（すなわち、ｔｒ＜ｔａ）を有する状況に関し最初に考慮される。この図に関して、現在の作業時間はｔｃで表される。ｔａはｔｒより大きいので、コールクラスタコンポーネントは、要求が正しく複製されたということを想定することができなく、したがって主要ワーカー及びバックアップワーカーの揮発性メモリ１５５内に格納されたバージョンの要求は除去される。要求１１３は、同じ要求ｉｄ、ｒｉｄを有するクラスタ１２０においてコールクラスタコンポーネント１１０から受信され、新しい要求時間ｔｃへ関連付けられる。要求１１３を受信すると、主要ワーカーは要求１１３をその揮発性メモリ１５５内に格納し、状態Ａにある。主要ワーカーは要求１１３をバックアップワーカー１５０へ送信し、バックアップワーカー１５０は要求１１３をその揮発性メモリ１５５内に格納し、状態Ｆにある。次に、主要及びバックアップワーカーにおけるさらなる処理は図４に示すやり方で進む。
【００９０】
「バックアップワーカーが、主要ワーカーから時間ｔｃを有する更新された要求を受信する前に要求に気付かなければ、バックアップワーカーはまた、今や正しく複製されなかった要求により同じやり方で進む」ということに留意されたい。
【００９１】
図１３〜１５を参照すると、最初のロールバックシナリオの一例が示される。図１３では、時間ｔａにおいて発行された要求１１３が、コールクラスタコンポーネント１１０において再生バッファ１１２内に格納され、状態Ａにある。要求１１３は、主要ワーカーにおいて揮発性メモリ１５５内に格納されるが、実行を未だ開始していないので状態Ａにある。要求１１３はまた、バックアップワーカー１５０ｂにおいて格納され、状態Ｆにある。
【００９２】
システムを時間ｔｒ＜ｔａへロールバックするためにロールバック要求が受信される。図１４では、ロールバック要求が受信された後、要求１１３は、主要ワーカー１５０ａの揮発性メモリ１５５及びバックアップワーカー１５０ｂの揮発性メモリ１５５から除去される。オリジナル要求１１３と同じ要求識別子（ｒｉｄ）に関連付けられた新しい要求１１３’がコールクラスタコンポーネント１１０によりクラスタ１２０へ発行される。時間ｔｃにおいて、新しい要求１１３’は、クラスタ１２０により受信され、要求時間ｔｃに関連付けられる。クラスタ１２０は、新しい要求１１３’に関連付けられた要求時間ｔｃをコールクラスタコンポーネント１１０に通知する。再生バッファ１１２内の新しい要求１１３’は状態Ａにある。
【００９３】
クラスタでは、新しい要求１１３’は主要ワーカーへ送信される。主要ワーカー１５０ａは新しい要求１１３’を要求時間ｔｃと共にその揮発性メモリ１５５内に格納する。主要ワーカー１５０ａの揮発性メモリ１５５内に格納された新しい要求１１３’は状態Ａにある。
【００９４】
図１５を参照すると、主要ワーカーは新しい要求１１３’をバックアップワーカー１５０ｂへ送信する。バックアップワーカー１５０ｂは、新しい要求１１３’をその揮発性メモリ１５５内に格納し、要求時間ｔｃに関連付けられる。バックアップワーカーの揮発性メモリ１５５内に格納された更新された要求１１３’は状態Ｆにある。
【００９５】
次に、クラスタはその通常動作に従って進む（図５〜１２に記載のように）。
【００９６】
３．２  シナリオ２：ｔｒ＜ｔａ、実行が始まった
第２の状況では、以前の要求の要求時間ｔａはロールバック時間ｔｒより大きい（すなわち、ｔｒ＜ｔａ）が、要求は実行を開始し、主要ワーカーにおいて実行を完了しなかった（すなわち、要求は主要ワーカーにおいて状態Ｂ（恐らく、部分応答１１５が計算される）にあり、要求はバックアップワーカーにおいて状態Ｆにある）。この場合、実行は終了され、部分応答１１５は主要ワーカー及びバックアップワーカーにおいて廃棄され（又は、実行は完了することが許可され、応答は廃棄され）、コールクラスタコンポーネント１１０は要求１１３をクラスタ１２０へ再送信する。主要ワーカーとバックアップワーカーとにおいて格納された要求は状態Ａと状態Ｆとへそれぞれ戻る。主要ワーカーは、あたかも要求が主要ワーカーにおいて実行を開始していなかったかのようなやり方と同じやり方で要求をバックアップワーカーに通知する。
【００９７】
図１６〜１８を参照すると、第２のロールバックシナリオの一例が示される。図１６において、時間ｔａにおいて発行された要求１１３は、コールクラスタコンポーネント１１０において再生バッファ１１２内に格納され、状態Ａにある。要求１１３は、主要ワーカー１５０ａにおいて揮発性メモリ１５５内に格納され、そして、実行を開始したので状態Ｂにある。要求はまた、バックアップワーカー１５０ｂにおいて格納され、状態Ｆにある。
【００９８】
ロールバック要求が、システムを時間ｔｒ＜ｔａへロールバックするために受信される。図１７では、ロールバック要求が受信された後、要求１１３は、主要ワーカー１５０ａの揮発性メモリ１５５及びバックアップワーカー１５０ｂの揮発性メモリ１５５から除去される。オリジナル要求１１３と同じ要求識別子（ｒｉｄ）に関連付けられた新しい要求１１３’がコールクラスタコンポーネント１１０によりクラスタ１２０へ発行される。時間ｔｃにおいて、新しい要求１１３’は、クラスタ１２０により受信され、要求時間ｔｃに関連付けられる。クラスタ１２０は、新しい要求１１３’に関連付けられた要求時間ｔｃをコールクラスタコンポーネント１１０に通知する。再生バッファ１１２内の新しい要求１１３’は状態Ａにある。
【００９９】
クラスタでは、新しい要求１１３’は主要ワーカーへ送信される。主要ワーカー１５０ａは新しい要求１１３’を要求時間ｔｃと共にその揮発性メモリ１５５内に格納する。主要ワーカー１５０ａの揮発性メモリ１５５内に格納された新しい要求１１３’は状態Ａにある。
【０１００】
図１８を参照すると、主要ワーカー１５０ａは新しい要求１１３’をバックアップワーカー１５０ｂへ送信する。バックアップワーカー１５０ｂは、新しい要求１１３’をその揮発性メモリ１５５内に格納し、要求時間ｔｃに関連付けられる。バックアップワーカーの揮発性メモリ１５５内に格納された更新された要求１１３’は状態Ｆにある。
【０１０１】
次に、クラスタはその通常動作に従って進む（図５〜１２に記載のように）。
【０１０２】
３．３  シナリオ３：ｔｒ＜ｔａ＜ｔｂ、実行は完了した
第３の状況では、以前の要求の要求時間ｔａは再びロールバック時間ｔｒより大きい。しかし、この場合、我々は、実行は時間ｔｂ（すなわち、ｔｒ＜ｔａ＜ｔｂ）において完了したということと応答はバックアップワーカーにおいて複製されコールクラスタコンポーネント１１０において受信されたということとを仮定する。すなわち、要求１１３はコールクラスタコンポーネント１１０において状態Ｂにあり、要求は主要ワーカー１５０ａにおいて状態Ｃにあり、要求１１３はバックアップワーカー１５０ｂにおいて状態Ｇにある。第２の状況と同様に進行中の実行の実行を単に終了する必要があるのではなく、主要及びバックアップワーカーにおいて格納されていた応答１１５が除去される。図４を参照して上に導入されたように、時間ｔｂにおいて生成された応答は、特定時間及びその後の時間におけるすべての更新がデータ構造から除去され得るようなやり方で、時間ｔｂに関連付けられた改版されたデータ構造内に格納される。この状態では、時間ｔｒより遅く更新されたすべてのデータ版を除去することにより、時間ｔｂにおいてなされた図示された要求の更新は必ず除去され、要求は、実行を待つｔｃの要求時間を有する主要ワーカーにおいて状態Ａへ戻され、主要ワーカーからの応答を待つバックアップワーカーにおいて状態Ｆへ戻された。コールクラスタコンポーネントにおいて、応答は廃棄され、要求は状態Ａへ戻される。
【０１０３】
図１９〜２１を参照すると、第３のロールバックシナリオの１つの単純な例が示される。図１９では、時間ｔａにおいて発行された要求１１３は、コールクラスタコンポーネント１１０において再生バッファ１１２内に格納される。時間ｔｂにおいて生成された要求１１５に対する応答はエスクローバッファ１１４内に格納される。したがって、要求１１３はコールクラスタコンポーネントにおいて状態Ｂにある。
【０１０４】
クラスタでは、要求１１３及び応答１１５は主要ワーカー１５０ａにおいて揮発性メモリ１５５、１５６内に格納される。したがって、要求１１３は主要ワーカー１５０ａにおいて状態Ｃにある。要求１１３及び応答１１５はまた、バックアップワーカーにおいて揮発性メモリ１５５、１５６内に格納される。したがって、この要求はバックアップワーカー１５０ｂにおいて状態Ｇにある。
【０１０５】
ロールバック要求が、システムを時間ｔｒ＜ｔａ＜ｔｂへロールバックするために受信される。図２０では、ロールバック要求が受信された後、応答１１５はコールクラスタコンポーネント１１０のエスクローバッファ１１４から除去される。クラスタ１２０では、要求１１３と応答１１５との両方は、主要ワーカー１５０ａの揮発性メモリ１５５及びバックアップワーカー１５０ｂの揮発性メモリ１５５から除去される。
【０１０６】
オリジナル要求１１３と同じ要求識別子（ｒｉｄ）に関連付けられた新しい要求１１３’がコールクラスタコンポーネント１１０によりクラスタ１２０へ発行される。時間ｔｃにおいて、新しい要求１１３’は、クラスタ１２０により受信され、要求時間ｔｃに関連付けられる。クラスタ１２０は、新しい要求１１３’に関連付けられた要求時間ｔｃをコールクラスタコンポーネント１１０に通知する。再生バッファ１１２内の新しい要求１１３’は状態Ａにある。
【０１０７】
クラスタでは、新しい要求１１３’が主要ワーカー１５０ａへ送信される。主要ワーカー１５０ａは新しい要求１１３’を要求時間ｔｃと共にその揮発性メモリ１５５内に格納する。主要ワーカー１５０ａの揮発性メモリ１５５内に格納された新しい要求１１３’は状態Ａにある。
【０１０８】
図２１を参照すると、主要ワーカー１５０ａは新しい要求１１３’をバックアップワーカー１５０ｂへ送信する。バックアップワーカー１５０ｂは、新しい要求１１３’をその揮発性メモリ１５５内に格納し、要求時間ｔｃに関連付けられる。バックアップワーカーの揮発性メモリ１５５内に格納された更新された要求１１３’は状態Ｆにある。
【０１０９】
次に、クラスタはその通常動作に従って進む（図５〜１２に記載のように）。
【０１１０】
３．４  シナリオ４：ｔａ＜ｔｒ、実行は始まっていない
第４の状況では、ロールバック時間ｔｒはオリジナル要求時間ｔａにおける又はその後（すなわち、ｔａ≦ｔｒ）のものであり、オリジナル要求は実行を開始していない。要求は、クラスタ１２０へ再送信され、主要ワーカーとバックアップワーカーとにおけるオリジナル要求（すなわち、｛ｒｉｄ，ｔａ｝）の後の実行のための待ち行列に入れられる。主要ワーカーはオリジナル要求を実行し、応答（すなわち、｛ｒｉｄ，ｔｂ｝）を生成する。次に、主要ワーカーは、再送信された要求（すなわち、｛ｒｉｄ，ｔｃ｝）の実行を開始することに進むが、再送信された要求のｒｉｄに関連付けられた応答が既に存在していることを検知し、再送信された要求の実行を見送る。
【０１１１】
図２２〜２５を参照すると、第４のロールバックシナリオの一例が示される。図２２では、時間ｔａにおいて発行されたオリジナル要求１１３は、コールクラスタコンポーネント１１０において再生バッファ１１２内に格納され、状態Ａにある。オリジナル要求１１３は主要ワーカー１５０ａにおいて揮発性メモリ１５５内に格納され、実行を未だ開始していないので状態Ａにある。オリジナル要求１１３はまた、バックアップワーカー１５０ｂにおいて格納され、状態Ｆにある。
【０１１２】
ロールバック要求が、システムを時間ｔａ＜ｔｒへロールバックするために受信される。図２３では、オリジナル要求１１３と同じ要求識別子（ｒｉｄ）に関連付けられた新しい要求１１３’がコールクラスタコンポーネント１１０によりクラスタ１２０へ発行される。時間ｔｃにおいて、新しい要求１１３’は、クラスタ１２０により受信され、要求時間ｔｃに関連付けられる。クラスタ１２０は、新しい要求１１３’に関連付けられた要求時間ｔｃをコールクラスタコンポーネント１１０に通知する。再生バッファ１１２内の要求１１３は状態Ａのままである。
【０１１３】
クラスタでは、新しい要求１１３’が主要ワーカー１５０ａへ送信される。主要ワーカー１５０ａは新しい要求１１３’を受信し、新しい要求１１３’を実行のためにオリジナル要求１１３の後の待ち行列に入れる。主要ワーカー１５０ａの揮発性メモリ１５５内に格納されたオリジナル要求１１３と新しい要求１１３’との両方は状態Ａにある。
【０１１４】
図２４を参照すると、主要ワーカー１５０ａは新しい要求１１３’をバックアップワーカー１５０ｂへ送信する。バックアップワーカー１５０ｂは新しい要求１１３’を受信し、新しい要求１１３’を実行のためにオリジナル要求１１３の後の待ち行列に入れる。バックアップワーカー１５０ｂの揮発性メモリ１５５内に格納されたオリジナル要求１１３と新しい要求１１３’との両方は状態Ｆにある。
【０１１５】
図２５を参照すると、主要ワーカー１５０ａは応答１１５を生成するためにオリジナル要求１１３を実行し、応答１１５はその持続性ストレージ１６０内に保持される。この結果、オリジナル要求１１３は主要ワーカー１５０ａにおいて状態Ｄにある。新しい要求１１３’は主要ワーカー１５０ａにおいて実行を未だ開始していなく、したがって状態Ａにある。
【０１１６】
応答１１５はまた、バックアップワーカー１５０ｂ及びコールクラスタコンポーネント１１０へ提供された。バックアップワーカー１５０ｂは、応答１１５をその揮発性メモリ１５６内に格納し、この応答をその持続性ストレージ１６０に対し保持した。したがって、オリジナル要求１１３はバックアップワーカーにおいて状態Ｈにある。コールクラスタコンポーネント１１０は応答１１５をそのエスクローバッファ１１４内に格納した。コールクラスタコンポーネントの再生バッファ１１２内の要求１１３は状態Ｂにある。
【０１１７】
新しい要求１１３’が主要ワーカー１５０ａにおいて実行を開始すると、主要ワーカー１５０ａは、新しい要求１１３’が応答１１５と同じ要求識別子ｒｉｄに関連しているということを認識し、したがって、それが複製であるので、新しい要求１１３’を実行しない。いくつかの例では、応答１１５はコールクラスタコンポーネントへ再送信され得、コールクラスタコンポーネントは応答１１５を複製として無視する。
【０１１８】
次に、クラスタはその通常動作に従って進む（図５〜１２に記載のように）。
【０１１９】
３．５  シナリオ５：ｔａ＜ｔｒ、実行が始まった
第５の状況では、ロールバック時間ｔｒはオリジナル要求時間ｔａにおける又はその後のものであり（すなわち、ｔａ≦ｔｒ）、オリジナル要求は実行を開始したが、主要ワーカーにおいて実行を完了していない（すなわち、要求は主要ワーカーにおいて状態Ｂにあり、要求はバックアップワーカーにおいて状態Ｆにある）。この状況では、実行は主要ワーカー及びバックアップワーカーにおいて終了される（又は完了することを許容され、応答は廃棄される）（すなわち、主要及びバックアップワーカーにおいて格納された要求は状態Ａ、Ｆへそれぞれ戻る）。
【０１２０】
コールクラスタコンポーネント１１０は要求をクラスタ１２０へ再送信し、ここで、要求クラスタ１２０は主要ワーカーとバックアップワーカーとにおけるオリジナル要求（すなわち、｛ｒｉｄ，ｔａ｝）の後の実行のために待ち行列に入れられる。主要ワーカーはオリジナル要求を実行し、応答（すなわち、｛ｒｉｄ，ｔｂ｝）を生成する。次に、主要ワーカーは、再送信された要求（すなわち、｛ｒｉｄ，ｔｃ｝）の実行を開始することに進むが、再送信された要求のｒｉｄに関連付けられた応答が既に存在しているということを検知し、再送信された要求の実行を見送る。
【０１２１】
図２６〜２９を参照すると、第５のロールバックシナリオの一例が示される。図２６では、時間ｔａにおいて発行されたオリジナル要求１１３は、コールクラスタコンポーネント１１０において再生バッファ１１２内に格納され、状態Ａにある。オリジナル要求１１３は主要ワーカー１５０ａにおいて揮発性メモリ１５５内に格納され、実行を開始したので状態Ｂにある。オリジナル要求１１３はまた、バックアップワーカー１５０ｂにおいて格納され、状態Ｆにある。
【０１２２】
ロールバック要求が、システムを時間ｔａ＜ｔｒへロールバックするために受信される。図２７では、オリジナル要求１１３と同じ要求識別子（ｒｉｄ）に関連付けられた新しい要求１１３’がコールクラスタコンポーネント１１０によりクラスタ１２０へ発行される。時間ｔｃにおいて、新しい要求１１３’はクラスタ１２０により受信され、要求時間ｔｃに関連付けられる。クラスタ１２０は、新しい要求１１３’に関連付けられた要求時間ｔｃをコールクラスタコンポーネント１１０に通知する。再生バッファ１１２内の要求１１３は状態Ａのままである。
【０１２３】
クラスタ１２０では、主要ワーカー１５０ａの揮発性メモリ１５５内に格納されたオリジナル要求１１３の実行は終了され、オリジナル要求１１３は状態Ａへ戻される。新しい要求１１３’が主要ワーカー１５０ａへ送信される。主要ワーカー１５０ａは新しい要求１１３’を受信し、新しい要求１１３’を実行のためにオリジナル要求１１３の後の待ち行列に入れる。主要ワーカー１５０ａの揮発性メモリ１５５内に格納された新しい要求１１３’は状態Ａにある。
【０１２４】
図２８を参照すると、主要ワーカー１５０ａは新しい要求１１３’をバックアップワーカー１５０ｂへ送信する。バックアップワーカー１５０ｂは新しい要求１１３’を受信し、新しい要求１１３’を実行のためにオリジナル要求１１３の後の待ち行列に入れる。バックアップワーカー１５０ｂの揮発性メモリ１５５内に格納されたオリジナル要求１１３と新しい要求１１３’との両方は状態Ｆにある。
【０１２５】
図２９を参照すると、主要ワーカー１５０ａはオリジナル要求１１３を実行し、応答１１５を生成した。応答１１５はその持続性ストレージ１６０内に保持される。この結果、オリジナル要求１１３は主要ワーカー１５０ａにおいて状態Ｄにある。新しい要求１１３’は主要ワーカー１５０ａにおいて実行を未だ開始していなく、したがって状態Ａにある。
【０１２６】
応答１１５はまた、バックアップワーカー１５０ｂ及びコールクラスタコンポーネント１１０へ複製された。バックアップワーカー１５０ｂは、応答１１５をその揮発性メモリ１５６内に格納し、この応答をその持続性ストレージ１６０に対し保持した。したがって、オリジナル要求１１３はバックアップワーカーにおいて状態Ｈにある。コールクラスタコンポーネント１１０は応答１１５をそのエスクローバッファ１１４内に格納し、コールクラスタコンポーネントの再生バッファ１１２内の要求１１３’は状態Ｂにある。
【０１２７】
新しい要求１１３’が主要ワーカー１５０ａにおいて実行を開始すると、主要ワーカー１５０ａは、新しい要求１１３’が応答１１５と同じ要求識別子ｒｉｄに関連しているということを認識し、したがって、それが複製であるので、新しい要求１１３’を実行しない。いくつかの例では、応答１１５はコールクラスタコンポーネント１１０へ再送信され得、コールクラスタコンポーネントは応答１１５を複製として無視する。
【０１２８】
次に、クラスタはその通常動作に従って進む（図５〜１２に記載のように）。
【０１２９】
３．６  シナリオ６：ｔａ＜ｔｂ＜ｔｒ、実行は完了した
第６の状況では、ロールバック時間ｔｒは要求時間ｔａ又はその後のものであり、要求はまた、時間ｔｂにおいて、またロールバック時間又はその前（すなわち、ｔａ≦ｔｂ≦ｔｒ）に実行を完了した。応答がコールクラスタコンポーネント１１０へ成功裡に提供されれば（すなわち、この要求はコールクラスタコンポーネントにおいて状態Ｂにある）、ロールバック要求は、要求を再送信させないし、またエスクローバッファ１１４からのいかなる応答の除去も引き起こさない。すなわち、ｔａに関連付けられたいかなる要求とｔｂに関連付けられたいかなる応答も不変なままにされる。
【０１３０】
しかし、応答がコールクラスタコンポーネント１１０へ成功裡に提供されなければ、コールクラスタコンポーネント１１０は要求をクラスタ１２０へ再送信する。再送信された要求を受信すると、主要ワーカーは、再送信された要求（すなわち、｛ｒｉｄ，ｔｃ｝）の実行を開始するが、要求識別子ｒｉｄに関連付けられた応答１１５が既に存在しているということを検出する。したがって、再送信された要求は実行されなく、オリジナル要求の実行により生成された応答がコールクラスタコンポーネント１１０へ再送信される。コールクラスタコンポーネント１１０は、いつ応答がエスクローから送信され得るかをコールクラスタコンポーネントにおいて判定するために使用される応答時間ｔｂを有する応答を受信する。
【０１３１】
図３０〜３２を参照すると、第６のロールバックシナリオの一例が示される。図３０では、時間ｔａにおいて発行されたオリジナル要求１１３がコールクラスタコンポーネント１１０において再生バッファ１１２内に格納される。オリジナル要求１１３に対する応答１１５が時間ｔｂにおいて生成されたが、コールクラスタコンポーネント１１０のエスクローバッファ１１４へ到達しなかった。したがって、要求１１３はコールクラスタコンポーネント１１０において状態Ａにある。
【０１３２】
クラスタでは、要求１１３及び応答１１５は主要ワーカー１５０ａにおいて揮発性メモリ１５５、１５６内に格納され、したがって要求１１３は主要ワーカー１５０ａにおいて状態Ｃにある。要求１１３及び応答１１５はまた、バックアップワーカーにおいて揮発性メモリ１５５、１５６内に格納される。したがって、この要求はバックアップワーカー１５０ｂにおいて状態Ｇにある。
【０１３３】
ロールバック要求が、システムを時間ｔａ＜ｔｂ＜ｔｒへロールバックするために受信される。図３１では、オリジナル要求１１３と同じ要求識別子（ｒｉｄ）に関連付けられた新しい要求１１３’がコールクラスタコンポーネント１１０によりクラスタ１２０へ発行される。時間ｔｃにおいて、新しい要求１１３’は、クラスタ１２０により受信され、要求時間ｔｃに関連付けられる。クラスタ１２０は、新しい要求１１３’に関連付けられた要求時間ｔｃをコールクラスタコンポーネント１１０に通知する。
【０１３４】
新しい要求１１３’はクラスタ１２０内の主要ワーカー１５０ａへ送信される。主要ワーカー１５０ａは新しい要求１１３’を受信し、新しい要求１１３’を実行のために揮発性メモリ１５５内の待ち行列に入れる。主要ワーカー１５０ａの揮発性メモリ１５５内に格納されたオリジナル要求１１３は状態Ｃのままであり、主要ワーカー１５０ａの揮発性メモリ１５５内に格納された新しい要求１１３’は状態Ａにある。
【０１３５】
図３２を参照すると、主要ワーカー１５０ａが新しい要求の実行を開始すると、主要ワーカー１５０ａは、新しい要求１１３’がオリジナル要求１１３と同じ要求識別子ｒｉｄを有するということと、要求識別子ｒｉｄに関連付けられた応答１１５が主要ワーカー１５０ａにおいて既に存在しているということとを認識する。したがって、主要ワーカー１５０ａは新しい要求１１３’を実行しないが、その代りに応答１１５をコールクラスタコンポーネント１１０へ再送信する。コールクラスタコンポーネント１１０は応答１１５を受信し、これをエスクローバッファ１１４内に格納する。コールクラスタコンポーネント１１０のエスクローバッファ１１４内に格納された応答１１５により、コールクラスタコンポーネント１１０は状態Ｂにある。
【０１３６】
次に、クラスタはその通常動作に従って進む（図５〜１２に記載のように）。
【０１３７】
３．７  シナリオ７：ｔａ＜ｔｒ＜ｔｂ、実行は完了した
第７の状況では、ロールバック時間ｔｒは要求時間ｔａにおける又はその後のものであり、要求はロールバック時間後の時間ｔｂ（すなわち、ｔａ≦ｔｒ＜ｔｂ）において実行を完了しており、ワーカー間の応答の複製は成功しなかったかもしれない。ワーカーはｔｒ後の時間を有するすべての応答１１５を廃棄する。バックアップワーカーにおいて格納された要求１１３は状態Ｆへ戻り、主要ワーカーにおいて格納された要求１１３は状態Ｂへ戻る。コールクラスタコンポーネント１１０は、エスクローバッファ１１４内のすべての応答１１５を廃棄し、再生バッファ１１２内に格納された要求１１３を状態Ａへ戻し、要求１１３を、要求を再処理するクラスタ１２０へ再送信する。
【０１３８】
図３３〜３５を参照すると、第７のロールバックシナリオの一例が示される。図３３では、時間ｔａにおいて発行された要求１１３がコールクラスタコンポーネント１１０において再生バッファ１１２内に格納される。時間ｔｂにおいて生成された要求１１５に対する応答はエスクローバッファ１１４内に格納される。したがって、要求１１３はコールクラスタコンポーネント１１０において状態Ｂにある。
【０１３９】
クラスタ１２０では、要求１１３及び応答１１５は主要ワーカー１５０ａにおいて揮発性メモリ１５５、１５６内に格納される。したがって、要求１１３は主要ワーカー１５０ａにおいて状態Ｃにある。要求１１３はまた、バックアップワーカー１０５において揮発性メモリ１５５、１５６内に格納されるが、応答１１５はバックアップワーカー１５０ｂへ成功裡に複製されていないかもしれない。したがって、要求はバックアップワーカー１５０ｂにおいて状態Ｇにないかもしれない。
【０１４０】
ロールバック要求が、システムを時間ｔａ＜ｔｒ＜ｔｂへロールバックするために受信される。図３４では、コールクラスタコンポーネント１１０のエスクローバッファ１１４内に格納された応答１１５が除去される。オリジナル要求１１３と同じ要求識別子（ｒｉｄ）に関連付けられた新しい要求１１３’がコールクラスタコンポーネント１１０によりクラスタ１２０へ発行される。時間ｔｃにおいて、新しい要求１１３’は、クラスタ１２０により受信され、要求時間ｔｃに関連付けられる。クラスタ１２０は、新しい要求１１３’に関連付けられた要求時間ｔｃをコールクラスタコンポーネント１１０に通知する。再生バッファ１１２内の新しい要求１１３’は状態Ａにある。
【０１４１】
クラスタ１２０では、バックアップワーカー１５０ｂは、ｔｒ後の時間に関連付けられたその揮発性メモリ１５６内に格納されたいかなる応答も除去し、したがって、状態Ｆへ戻る。主要ワーカー１５０ａは状態Ｂへ戻る。新しい要求１１３’が主要ワーカー１５０ａへ送信される。主要ワーカーは新しい要求１１３’を受信し、新しい要求１１３’を実行のためにオリジナル要求１１３の後の待ち行列に入れる。主要ワーカー１５０ａの揮発性メモリ１５５内に格納された新しい要求１１３’は状態Ａにある。
【０１４２】
図３５では、主要ワーカー１５０ａは、オリジナル要求１１３の実行を完了し、時間ｔｄにおいて新しい応答１１５’を生成する。主要ワーカー１５０ａは、新しい応答１１５’をバックアップワーカー１５０ｂ及びコールクラスタコンポーネント１１０へ送信し、主要ワーカー１５０ａの揮発性メモリ内に格納されたオリジナル要求１１３の状態を状態Ｃへ移行させる。バックアップワーカー１５０ｂは新しい応答１１５’を受信し、新しい応答１１５’をその揮発性メモリ１５５内に格納し、バックアップワーカーの揮発性メモリ１５５内に格納されたオリジナル要求１１３を状態Ｇへ移行させる。コールクラスタコンポーネント１１０は新しい応答１１５’を受信し、それをエスクローバッファ１１４内に格納し、再生バッファ１１２内に格納された新しい要求１１３’を状態Ｂへ移行させる。
【０１４３】
新しい要求１１３’が主要ワーカー１５０ａにおいて実行を開始すると、主要ワーカー１５０ａは、新しい要求１１３’がオリジナル要求１１３と同じ要求識別子ｒｉｄを有するということを認識し、したがって、それが複製であるので、新しい要求１１３’を実行しない。
【０１４４】
次に、クラスタはその通常動作に従って進む（図５〜１２に記載のように）。
【０１４５】
３．８  シナリオ８：ｔａ＜ｔｒ＜ｔｂ、実行は完了した
最後に、第８の状況では、主要ワーカーが失われる（lost）（例えば、失敗することが知られる）と要求を処理するワーカーが存在する。ごく一般的には、失われた主要ワーカーが応答を提供するのを待っているバックアップワーカー（すなわち、バックアップワーカーは状態Ｆにある）におけるいかなる要求によっても、バックアップワーカーは主要ワーカーとなるように促される。例えば、当該ワーカーからのメッセージに対する返答を受信しないことにより、ワーカーが失われたことを検知すると、ルート１４０は、最後に複製された時間に等しい時間ｔｒ（すなわち、ｔｒ＝Ｔ２）へのロールバックを開始する。バックアップワーカーは、失われたワーカーに対処するための新しい区画情報を伴い得る時間ｔｒへのロールバック要求を受信すると、バックアップワーカーは、資源が要求を実行するのを待っている状態Ａへ要求の状態を変更することにより新しい主要ワーカーとして働き始める。
【０１４６】
図３６〜３７を参照すると、第８のロールバックシナリオの一例が示される。図３６では、時間ｔａにおいて発行された要求１１３がコールクラスタコンポーネント１１０において再生バッファ１１２内に格納され、状態Ａにある。要求１１３は主要ワーカー１５０ａにおいて揮発性メモリ１５５内に格納され、実行を開始したが実行を終了しなかったので状態Ｂにある。要求はまた、バックアップワーカー１５０ｂにおいて格納され、状態Ｆにある。要求１１３の実行中、主要ワーカー１５０ａは失敗する又は失われる。
【０１４７】
図３７では、ルートは、最後に複製された時間に等しい時間ｔｒへのロールバックを要求した。この時、バックアップワーカー１５０ｂは主要ワーカー１５０ａとなるように促され、その状態を状態Ａへ変更する。別のワーカー１５０ｃが状態Ｆのバックアップワーカーとして割り当てられる。
【０１４８】
次に、クラスタはその通常動作に従って進む（図５〜１２に記載のように）。
【０１４９】
４．ルートノード
次にルート１４０の動作に移ると、上に紹介したように、ルートは現在の作業時間（間隔）Ｔ１  １４４を定期的にインクリメントする。一般的に、作業時間を更新する際、ルートは一組の時間（Ｔ１，Ｔ２，Ｔ３）１４４〜１４６をすべてのワーカーへ分配（例えば同報通信）する。それに応じて、ワーカーは、それに基づきＴ２及び／又はＴ３時間を更新し得る情報をルートへ提供する。
【０１５０】
各ワーカーは、特定作業時間に関連付けられた一組のカウンタ１５１〜１５２を保持する。１つのカウンタ１５１は、Ｓｅｎｔ（ｔ１）と呼ばれる作業時間ｔ１に関連付けられ、バックアップワーカーへ送信された要求時間ｔ１を有する要求の当該ワーカーからの通信の数とバックアップワーカーへ送信された応答時間ｔ１を有する応答の数とをカウントする。図４では、Ｓｅｎｔ（ｔａ）はバックアップワーカーへ送信された要求時間ｔａを有する要求毎に状態Ａにおいて更新され、Ｓｅｎｔ（ｔｂ）はバックアップワーカーにおける複製のために送信される時間ｔｂにおいて生成された応答毎にインクリメントされる。Ｓｅｎｔ（）カウンタは、ワーカーからコールクラスタコンポーネントへ送信されたメッセージに関してはインクリメントされないということに留意されたい。別のカウンタ１５２、Ｒｅｃ（ｔ１）は、時間ｔ１に関連付けられたワーカーにおいて受信される通信の数をカウントする。特に、バックアップワーカーは、状態Ｆに入ったときの要求時間ｔａを有する要求の複製を受信するとＲｅｃ（ｔａ）をインクリメントし、状態Ｇに入ったときの時間ｔｂにおいて生成された応答の複製を受信するとＲｅｃ（ｔｂ）をインクリメントする。各ワーカーはワーカーｗのこれらのカウンタ（Ｓｅｎｔｗ（ｔ）及びＲｅｃｗ（ｔ）で表される）のそれ自体のローカルコピーを有する。時間ｔ１に関連付けられて送信されたすべての通信もまたそれらの宛先において受信される限りにおいて、すべてのワーカーｗ全体にわたるＳｅｎｔｗ（ｔ）の総和がワーカーｗ全体にわたるＲｅｃｗ（ｔ）の総和に等しいということは明らかなはずである。
【０１５１】
時々、例えばルート１４０から現在時間（Ｔ１，Ｔ２，Ｔ３）の同報通信を受信することに応答して、ワーカー１５０のそれぞれは、複製時間Ｔ２より大きいすべての時間のその現在のカウントＳｅｎｔ（ｔ）１５１、Ｒｅｃ（ｔ）１５２を送信する。これらのカウントは、ルートがＴ２より大きい各時間ｔのＳｅｎｔ（ｔ）とＲｅｃ（ｔ）との合計を判定するように、ルートにおいて受信され集計され、対応する時間に関連付けられてカウンタ１４１と１４２へ格納される。Ｓｅｎｔ（Ｔ２＋１）がＲｅｃ（Ｔ２＋１）に等しければ、時間Ｔ２＋１からのすべての送信は受信されており、Ｔ２は次の複製時間になるようにインクリメントされる。この処理は、Ｓｅｎｔ（Ｔ２＋１）がＲｅｃ（Ｔ２＋１）に等しくなくなるか又はＴ２＋１がＴ１に到達するまで、繰り返される。次に、このインクリメントされたＴ２時間（１４５）はルートからの次の同報通信において使用される。
【０１５２】
上に紹介したように、ワーカーにおけるデータ更新は、最初に揮発性メモリ内にジャーナル化され、このジャーナルは持続性ストレージへ折々に書き込まれる。各ワーカーは、持続性メモリ内のジャーナル化された変更を最大複製時間Ｔ２までの変更に関し恒久的なものにすることができる。一般的に、各ワーカーｗは時間Ｔ３（ｗ）にわたるすべての変更を恒久的なものにする機会を有し、通常、様々なワーカーは異なる時間に達した。現在時間の同報通信に応答してＲｅｃ（）及びＳｅｎｔ（）をルートへ戻すことに加えて、各ワーカーはまた、ルートにおいて又はルートへ戻る通信経路上でのいずれかでｍｉｎ（）演算に従って集計されるそのＴ３（ｗ）時間を戻す。すなわち、ルートはＴ３＝ｍｉｎｗＴ３（ｗ）を判定し、現在時間を配布する次の時間にＴ３のこの新しい値を配布する。
【０１５３】
いくつかの実施形態では、ルートは、ルートとワーカーのそれぞれとの間の直接（例えばユニキャスト）通信において時間組（Ｔ１，Ｔ２，Ｔ３）を配布する。他の実施形態では、この組はフラッディングベース（ｆｌｏｏｄｉｎｇ−ｂａｓｅｄ）同報通信などの別のやり方で配布される。別の実施形態では、この組は、この組の各受側がこの組を複数の別の受側へ転送する所定のツリー構造分配ネットワークに沿って配布され、その結果、最終的にすべてのワーカーがこの時間組を受信した。
【０１５４】
ワーカーからのカウントの集計は各ワーカーとルートノードとの間のユニキャスト通信により行われ得、ルートはすべてのワーカーにわたる完全な加算を行う。より効率的な解決策として、カウントは時間組と同じ経路に沿って返送され得、経路内の中間ノードはカウントの合計の部分的集計を行い、これにより、ルートによる加算の負担を分散し、それにもかかわらずすべてのワーカーにわたるカウントの合計を得る。
【０１５５】
代替動作モードでは、応答は、応答時間が保持されるよりむしろ複製される場合にコールクラスタコンポーネントからリリースされ得る。このようにして、応答は、より少ない遅延でもってグラフへ提供され得、応答はクラスタストレージ内で未だ持続的でないかもしれない可能性がある。
【０１５６】
上に紹介したように、要求の実行の応答は改版されたデータ構造内に格納される。１つのこのようなデータ構造では、データ項目の各更新は別個に回復可能なバージョンとして格納され、当該バージョンは更新に関連付けられ時間でタグを付けられる。例えば、データ構造は、組（ｔｂ，値）のリストとしてアクセスキー毎に少なくとも概念的に格納され得、ここで、ｔｂは値の更新の時間である。様々な時間の値は、下部構造を共有してもよいし格納の他の最適化を使用してもよい。いくつかの例では、これらの値は時間同士間のデータ値の編集に基づき格納される。一例として、値はツリーベース構造として表され得、各バージョンは、旧バージョンから次バージョンを生成するのに十分な「前方」増分操作として、又は現バージョンから旧バージョンを再構築するのに十分な「後方」増分操作として格納され得る。上に論述したように、この種の改版されたデータ構造はロールバック時間後にすべての更新をロールバックすることを許容する。データ項目に対するすべての更新を保持するのではなく、更新時間の開始に対する更新だけが保持され、この結果、任意の更新時間の開始へのロールバックが成し遂げられ得る。
【０１５７】
「ルートが複製時間Ｔ２をインクリメントした後、ワーカーは当該時間における又はそれより前の時間のバージョンへロールバックすることを要求されることはない」ということを認識すべきである。したがって、改版されたデータ構造の最適化は、複製時間Ｔ２における又はそれより前の時間のバージョンがデータ構造から除去され得るということである。
【０１５８】
いくつかの実施形態では、いくつかの要求が、それらの実行時間が短いという意味で「軽量」であり、したがって、バックアップワーカーにおける要求の実行は、主要ワーカーからバックアップワーカーへの応答の複製より少ない資源を消費し得る。このような実施形態では、主要ワーカーからバックアップワーカーへの応答の複製は行われない。各ワーカーは処理を異なる時間に完了し得る。ワーカーの間のデータの同期を維持するために、主要ワーカーは、上述のように終了時間ｔｂを配布し、バックアップワーカーは、ローカルに計算された応答をあたかも当該時間に計算されたかのように処理する。
【０１５９】
代替の実施形態では、コールクラスタコンポーネントは、ルートから時間組を受信するという意味でクラスタに参加し、Ｓｅｎｔ（）カウントとＲｅｃ（）カウントとをルートへ戻す。この実施形態では、コールクラスタコンポーネントは、要求の複製中にワーカーにより使用される要求の要求時間を割り当てる。ロールバックが発生すると、コールクラスタコンポーネントは保持している要求の要求時間を知るので、ロールバック時間後に要求だけを再送信するだけでよく、ロールバック時間に又はその前に生成された応答を廃棄しない。ワーカーの動作は、コールクラスタコンポーネントのこの動作に対処するために修正される。
【０１６０】
５．代替案
より一般的には、ｔａ＜ｔｒである上記ロールバックシナリオ４〜８では、要求を再送信する際、コールクラスタコンポーネント１１０は、オリジナル要求が時間ｔａにおいて送信されたということに気付かない（またそれに注意も行わない）。一方、クラスタ１２０は、ロールバックするべきかどうかを判定するために当該時間を使用するのでオリジナル要求の要求時間を考慮する必要がある。したがって、コールクラスタコンポーネント１１０が、ｔａ＜ｔｒ＜ｔｃとなるように要求（要求識別子ｒｉｄを有する）をクラスタ１２０へ再送信すると、要求は、主要ワーカー１５０ａにおいて受信され、時間ｔｃに関連付けられる。主要ワーカー１５０ａは要求をバックアップワーカー１５０ｂへ転送する。この状況では、主要ワーカーは再送信された要求（すなわち、｛ｒｉｄ，ｔｃ｝）を実行する前にオリジナル要求（すなわち、｛ｒｉｄ，ｔａ｝）を実行し得る。再送信された要求（すなわち、｛ｒｉｄ，ｔｃ｝を実行することに進むと、主要ワーカー１５０ａは、オリジナル要求（すなわち、｛ｒｉｄ，ｔａ｝）の応答が既に保持されているので、再送信された要求を複製として処理することになる。
【０１６１】
いくつかの例では、要求はその後のタスクを生み出す（「タスクチェイニング：ｔａｓｋ  ｃｈａｉｎｉｎｇ」と時折呼ばれる）。このような例では、要求の応答は、生み出されたタスクが完了される後まで生成されない。いくつかの例では、要求｛ｒｉｄ，ｔａ｝に対する応答が格納されれば、その応答をコールクラスタコンポーネントへ戻す。しかし、要求｛ｒｉｄ，ｔａ｝に対する応答は要求｛ｒｉｄ，ｔａ｝が未だ完了していないので未だ存在しなければ、複製ｒｉｄを有するその後の要求｛ｒｉｄ，ｔｃ｝は、クラスタが「オリジナル要求は最終的に完了しそして応答（コールクラスタコンポーネントへ戻される）を生成することになる」ということを知るので、無視される。
【０１６２】
上述の例では、クラスタが要求を受信すると、クラスタは時間（例えばｔａ）と要求とを関連付け、次に、この時間をコールクラスタコンポーネントに通知する。コールクラスタコンポーネントはこの時間とその応答バッファ内に格納された要求とを関連付ける。コールクラスタコンポーネントの再生バッファ内の要求に関連付けられた時間は、ロールバックの場合に要求を選択的に再生するためにコールクラスタコンポーネントにより使用され得る。しかし、いくつかの例では、クラスタ又はコールクラスタコンポーネントのいずれも要求と時間とを関連付けない。これらの例では、コールクラスタコンポーネントは、ロールバックシナリオの場合、要求を再生する際それほど選択的なものではない。例えば、コールクラスタコンポーネントは、ロールバック要求の場合、その再生バッファ内のすべての要求を系統的に再生し得る。
【０１６３】
６．実施形態
上述のコンピュータクラスタ管理手法は、例えば、好適なソフトウェア指示を実行するプログラム可能コンピュータシステムを使用して実施されてもよいし、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などの好適なハードウェアにおいて又はいくつかのハイブリッド形態で実施されてもよい。例えば、プログラム手法では、ソフトウェアは、それぞれが少なくとも１つのプロセッサ、少なくとも１つのデータストレージシステム（揮発性及び／又は不揮発性メモリ及び／又はストレージ要素を含む）、少なくとも１つのユーザインターフェース（少なくとも１つの入力デバイス又はポートを使用することにより入力を受信するための、及び少なくとも１つの出力デバイス又はポートを使用することにより出力を提供するための）を含む１つ又は複数のプログラムされた又はプログラム可能なコンピュータシステム（分散クライアント／サーバ又はグリッドなどの様々なアーキテクチャのものであり得る）上で実行する１つ又は複数のコンピュータプログラム内の手順を含み得る。ソフトウェアは、例えばデータフローグラフの設計、構成、及び実行に関係するサービスを提供するより大きなプログラムの１つ又は複数のモジュールを含み得る。プログラムのモジュール（例えばデータフローグラフの要素）は、データレポジトリ内に格納されたデータモデルに準拠するデータ構造又は他の編成されたデータとして実装され得る。
【０１６４】
ソフトウェアは、非一時的形式で格納され得、例えば、媒体の物理的性質（例えば表面のピット及びランド、磁区、又は電荷）を一定期間（例えばダイナミックＲＡＭなどのダイナミックメモリデバイスのリフレッシュ期間同士間の時間）の間使用することにより揮発性又は不揮発性ストレージ媒体又は任意の他の非一時的媒体内に具現化される。指示をロードすることに備えて、ソフトウェアは、ＣＤ−ＲＯＭ又は他のコンピュータ可読媒体（例えば、汎用又は特殊用途コンピュータシステム又はデバイスにより可読な）などの有形な非一時的な媒体上で提供されてもよいし、ネットワークの通信媒体上で、それが実行されるコンピュータシステムの有形な非一時的媒体へ配送されてもよい（例えば、伝播信号において符号化されてもよい）。処理の一部又はすべては、特殊用途コンピュータ上で、又はコプロセサ又はフィールドプログラマブルゲートアレイ（ＦＰＧＡ：ｆｉｅｌｄ−ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）又は特定用途向け集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）などの専用ハードウェアを使用することにより行われ得る。処理は、ソフトウェアにより規定された計算の様々な部分が様々なコンピュータ要素により実行される分散的やり方で実施され得る。このような各コンピュータプログラムは好適には、本明細書で説明された処理を行うためにストレージデバイス媒体がコンピュータにより読み出されると、コンピュータを構成及び操作するための汎用又は特殊用途プログラム可能コンピュータによりアクセス可能なストレージデバイスのコンピュータ可読格納媒体（例えば固体メモリ又は媒体、又は磁気又は光学媒体）上に格納される又はそれへダウンロードされる。本発明システムはまた、コンピュータプログラムにより構成される有形な非一時的媒体として実現されると考えられ得、ここでは、そのように構成された媒体は、コンピュータシステムを、本明細書に記載の処理のうちの１つ又は複数を実行するように特定及び所定やり方で動作させる。
【０１６５】
本発明の多くの実施形態が説明された。それにもかかわらず、これまでの説明は、例示することを意図しているが、添付の特許請求の範囲により規定される本発明の範囲を制限しないように意図されているということを理解すべきである。したがって、他の実施形態もまた以下の特許請求の範囲に含まれる。例えば、様々な修正が本発明の範囲から逸脱することなく行われ得る。加えて、上に記載された工程のいくつかは、順序非依存であり得、したがって記載されたものと異なる順序で実行され得る。
【図１】
2021503640.tif 000003
【図２】
2021503640.tif 000004
【図３】
2021503640.tif 000005
【図４】
2021503640.tif 000006
【図５】
2021503640.tif 000007
【図６】
2021503640.tif 000008
【図７】
2021503640.tif 000009
【図８】
2021503640.tif 000010
【図９】
2021503640.tif 000011
【図１０】
2021503640.tif 000012
【図１１】
2021503640.tif 000013
【図１２】
2021503640.tif 000014
【図１３】
2021503640.tif 000015
【図１４】
2021503640.tif 000016
【図１５】
2021503640.tif 000017
【図１６】
2021503640.tif 000018
【図１７】
2021503640.tif 000019
【図１８】
2021503640.tif 000020
【図１９】
2021503640.tif 000021
【図２０】
2021503640.tif 000022
【図２１】
2021503640.tif 000023
【図２２】
2021503640.tif 000024
【図２３】
2021503640.tif 000025
【図２４】
2021503640.tif 000026
【図２５】
2021503640.tif 000027
【図２６】
2021503640.tif 000028
【図２７】
2021503640.tif 000029
【図２８】
2021503640.tif 000030
【図２９】
2021503640.tif 000031
【図３０】
2021503640.tif 000032
【図３１】
2021503640.tif 000033
【図３２】
2021503640.tif 000034
【図３３】
2021503640.tif 000035
【図３４】
2021503640.tif 000036
【図３５】
2021503640.tif 000037
【図３６】
2021503640.tif 000038
【図３７】
2021503640.tif 000039
【国際調査報告】
2021503640.tif 000040
2021503640.tif 000041
2021503640.tif 000042