(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-07-14
(45)【発行日】2023-07-25
(54)【発明の名称】時間間隔カウンタを使用してコンピュータクラスタを管理すること
(51)【国際特許分類】
G06F 9/46 20060101AFI20230718BHJP
G06F 9/48 20060101ALI20230718BHJP
G06F 9/50 20060101ALI20230718BHJP
G06F 11/14 20060101ALI20230718BHJP
【FI】
G06F9/46 420Z
G06F9/48 370
G06F9/50 150Z
G06F9/48 300Z
G06F11/14 658
(21)【出願番号】P 2020521944
(86)(22)【出願日】2018-10-30
(86)【国際出願番号】 US2018058211
(87)【国際公開番号】W WO2019089593
(87)【国際公開日】2019-05-09
【審査請求日】2020-06-22
(32)【優先日】2017-10-31
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100107984
【氏名又は名称】廣田 雅紀
(74)【代理人】
【識別番号】100182305
【氏名又は名称】廣田 鉄平
(74)【代理人】
【識別番号】100102255
【氏名又は名称】小澤 誠次
(74)【代理人】
【識別番号】100096482
【氏名又は名称】東海 裕作
(74)【代理人】
【識別番号】100113860
【氏名又は名称】松橋 泰典
(74)【代理人】
【識別番号】100131093
【氏名又は名称】堀内 真
(74)【代理人】
【識別番号】100150902
【氏名又は名称】山内 正子
(74)【代理人】
【識別番号】100141391
【氏名又は名称】園元 修一
(74)【代理人】
【識別番号】100198074
【氏名又は名称】山村 昭裕
(74)【代理人】
【氏名又は名称】富田 博行
(72)【発明者】
【氏名】スタンフィル クレイグ ダブリュ.
(72)【発明者】
【氏名】ホーリー ジョセフ スケフィントン ザ・サード
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特表2017-527216(JP,A)
【文献】特開2014-170573(JP,A)
【文献】国際公開第2013/046352(WO,A1)
【文献】特表2015-527670(JP,A)
【文献】国際公開第2016/135705(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455 ー9/54
G06F 11/14
(57)【特許請求の範囲】
【請求項1】
複数の処理ノードを含む分散データ処理システムにおいて同期機能を実現するために包括的なメッセージを提供して、要求結果を格納し、エラーの場合にはロールバック機能を促進するための方法であって、前記方法は、
前記複数の処理ノードのうちの2又は3以上を使用して複数の組の要求を処理する工程であって、前記複数の組の要求における各要求は、コールクラスタコンポーネントにおいて受信されたそれぞれの入力データレコードについて、1又は2以上のデータ処理タスクを識別し、前記コールクラスタコンポーネントは、前記各要求を前記複数の処理ノードのうちの1つに送信するように構成されており、各組の要求のうちの各要求は、前記複数の処理ノードのうちの1つの処理ノードにおいて状態更新を引き起こすように構成され、複数の時間区間のうちの1つの対応する時間区間に関連付けられ、前記複数の組の要求は前記複数の時間区間のうちの第1の時間区間に関連付けられた第1組の要求を含む、前記処理する工程と、
前記複数の処理ノードのうちのルートコンポーネントにおいて、複数のカウンタを保持する工程であって、前記複数のカウンタは、
前記分散データ処理システム内の前記複数の時間区間のうちの現在の時間区間及びその値を示す作業カウンタと、
前記複数の時間区間のうちの1つの複製時間区間及びその値を示す複製カウンタであって、当該時間区間に関連付けられたすべての要求が前記複数の処理ノードの複数の処理ノードにおいて複製されている、前記複製カウンタと、
前記複数の時間区間のうちの1つの持続時間区間及びその値を示す持続性カウンタであって、当該時間区間に関連付けられたすべての要求が前記複数の処理ノードのうちの少なくとも1つの処理ノードに
結合された持続
性ストレージ
デバイス内に格納されている、前記持続性カウンタを含む、前記保持する工程と、
前記ルートコンポーネントから前記複数の処理ノードのうちの少なくともいくつかの処理ノードへ第1のメッセージを第1の時刻において提供する工程であって、
前記複数の処理ノードのうちの前記少なくともいくつかの処理ノードは、前記少なくともいくつかの処理ノードに提供されるそれぞれの要求によって識別される前記データ処理タスクを実行し、前記第1のメッセージは前記第1の時刻における前記作業カウンタの第1の値、前記第1の時刻における前記複製カウンタの第1の値及び前記第1の時刻における前記持続性カウンタの第1の値を含み、前記複製カウンタの前記第1の値は前記作業カウンタの前記第1の値に遅れ、前記持続性カウンタの前記第1の値は前記複製カウンタの前記第1の値に遅れ、かつ
前記第1のメッセージ内の前記複製カウンタの前記第1の値は、前記第1の時間区間に先立つそれ以前の時間区間に関連付けられた前記複数の組の要求のうちのより以前の組の要求のすべての要求が、前記複製カウンタの前記第1の値が前記より以前の組の要求に関連付けられた前記それ以前の時間区間に等しい又はそれより大きいと判断することに応答して、前記複数の処理ノードから、前記複数の処理ノードのうちの2又は3以上において複製されていることを示すことと、
前記複数の処理ノードのうちの2又は3以上の処理ノードの非持続性ストレージ
デバイスに格納され、かつ前記それ以前の時間区間に先立つ前記複数の時間区間のうちのいくつかの時間区間に関連付けられた任意の要求が前記複数の処理ノードのうちの2又は3以上において複製されていることとを示し、
前記第1の時間区間に関連付けられた前記第1組の要求のうちの少なくともいくつかの要求は、前記複数の処理ノードのうちの2又は3以上の処理ノードにおいて未だ複製されない、前記提供する工程と、
前記ルートコンポーネントから前記複数の処理ノードのうちの前記処理ノードの少なくともいくつかへ第2のメッセージを前記第1の時刻に続く第2の時刻において提供する工程であって、
前記第2のメッセージは、前記第2の時刻における前記作業カウンタの第2の値、前記第2の時刻における前記複製カウンタの第2の値及び前記第2の時刻における前記持続性カウンタの第2の値を含み、前記複製カウンタの前記第2の値は前記作業カウンタの前記第2の値に遅れ、前記持続性カウンタの前記第2の値は前記複製カウンタの前記第2の値に遅れ、かつ
前記第2のメッセージ内の前記複製カウンタの前記第2の値は、
前記第1の時間区間に関連付けられた前記第1組の要求のすべての要求が前記複製カウンタの前記第2の値が前記第1組の要求に関連付けられた前記第1の時間区間に等しい又はそれより大きいと判断することに応答して、前記複数の処理ノードのうちの2又は3以上において複製されているということと、
前記複数の処理ノードのうちの2又は3以上の処理ノードの前記非持続性ストレージ
デバイスに格納され、かつ前記第1の時間区間に先立つ時間区間に関連付けられた任意の要求が前記複数の処理ノードのうちの2又は3以上において複製されていることとを示し、
前記第2のメッセージは、前記持続性カウンタの前記第2の値が前記第1組の要求に関連付けられた前記第1の時間区間に等しいかそれより大きいと判断することに応答して、前記複数の処理ノードのうちの
第1組の処理ノードが前記第1組の要求のうちの1又は2以上の要
求を、前記第1組の処理ノードにおける各処理ノードに結合されたそれぞれの持続性ストレージ
デバイス内に格納する
動作を完了させる、前記提供する工程を含む、前記方法。
【請求項2】
前記作業カウンタは前記現在の時間区間を自律的に更新し、前記複製カウンタは前記複数の処理ノードのうちの他の処理ノードから前記ルートコンポーネントにおいて受信されたメッセージに応答して更新する、請求項1に記載の方法。
【請求項3】
前記他の処理ノードの各処理ノードは、当該各処理ノードにおいて受信された、バックアップワーカー処理ノードから送信された完了した複製通信の数を表す通信受信カウントと当該各処理ノードから前記バックアップワーカー処理ノードに送信された複製要求の数を表す要求送信カウントとを前記複数の時間区間の時間区間毎に保持する、請求項2に記載の方法。
【請求項4】
前記第1の時間区間について受信した、完了した複製通信の前記通信受信カウントと前記他の処理ノードの各処理ノードからの前記第1の時間区間についての複製要求の数である前記要求送信カウントとを前記ルートコンポーネントにおいて受信する工程と、前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントと前記第1の時間区間についての複製要求の数である要求送信カウントとを集計する工程と、
前記複製カウンタの複製値を更新するべきかどうかを前記集計に基づき判定する工程と、をさらに含む、請求項3に記載の方法。
【請求項5】
前記複製カウンタの複製値を前記第1のメッセージ内の前記複製カウンタの複製値から前記第2のメッセージ内の前記複製カウンタの複製値へ更新する工程をさらに含む、請求項1乃至4のいずれか一項に記載の方法。
【請求項6】
前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントと前記第1の時間区間についての複製要求の前記要求送信カウントとを集計する工程は、前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントの合計と前記第1の時間区間についての複製要求の前記要求送信カウントの合計との差分を計算する工程を含む、請求項4に記載の方法。
【請求項7】
前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントの前記合計と前記第1の時間区間についての複製要求の前記要求送信カウントの前記合計との差が0であれば、前記複製カウンタの複製値を前記第1のメッセージ内の前記複製カウンタの複製値から前記第2のメッセージ内の前記複製カウンタの複製値へ更新する工程をさらに含む、請求項6に記載の方法。
【請求項8】
前記他の処理ノードの各処理ノードは、当該各処理ノードにより受信され、直近の時間区間に関連付けられたすべての状態更新要求が、その間に当該各処理ノードにおいて持続的なものにされた前記複数の時間区間のうちの前記直近の時間区間の指標を保持する、請求項
2乃至
4、及び6乃至7のいずれか一項に記載の方法。
【請求項9】
前記他の処理ノードの各処理ノードからの前記直近の時間区間の前記指標を前記ルートコンポーネントにおいて受信する工程と、前記持続性カウンタを更新するべきかどうかを前記直近の時間区間の前記指標に基づき判定する工程とをさらに含む、請求項8に記載の方法。
【請求項10】
前記持続性カウンタを前記直近の時間区間の前記受信された指標のうち最も早い値へ更新する工程をさらに含む、請求項9に記載の方法。
【請求項11】
前記要求はデータ処理タスク、データ処理タスク結果及びデータレコードのうちの1又は2以上を含む、請求項1乃至10のいずれか一項に記載の方法。
【請求項12】
複数の処理ノードを含む分散データ処理システムにおいて要求を処理するためのコンピュータ可読媒体上に非一時的形式で格納されたソフトウェアであって、請求項1乃至11のいずれか一項に記載の工程のすべてをコンピュータシステムに行なわせるための命令を含む、前記ソフトウェア。
【請求項13】
複数の処理ノードを含む分散データ処理システムにおいて要求を処理するための装置であって、前記装置は、
複数の処理ノードを含む分散データ処理システムと、
複数の組の要求を処理するための前記複数の処理ノードのうちの2又は3以上において含まれる1又2以上のプロセッサであって、前記複数の組の要求における各要求は、コールクラスタコンポーネントにおいて受信されたそれぞれの入力データレコードについて、1又は2以上のデータ処理タスクを識別し、前記コールクラスタコンポーネントは、前記各要求を前記複数の処理ノードのうちの1つに送信するように構成されており、各組の要求のうちの各要求は、前記複数の処理ノードのうちの1つの処理ノードにおいて状態更新を引き起こすように構成され、複数の時間区間のうちの対応時間区間に関連付けられ、前記複数の組の要求は前記複数の時間区間のうちの第1の時間区間に関連付けられた第1組の要求を含む、前記1又は2以上のプロセッサと、
前記複数の処理ノードのうちのルートコンポーネントにおいて、複数のカウンタを保持するための1又は2以上の
メモリ要素であって、前記複数のカウンタは、
前記分散データ処理システム内の前記複数の時間区間のうちの現在の時間区間を示す作業カウンタと、
前記複数の時間区間のうちの1つの複製時間区間を示す複製カウンタであって、当該時間区間に関連付けられたすべての要求が前記複数の処理ノードの複数の処理ノードにおいて複製されている、前記複製カウンタと
前記複数の時間区間のうちの1つの持続性時間区間及びその値を示す持続性カウンタであって、当該時間区間に関連付けられたすべての要求が前記複数の処理ノードのうちの少なくとも1つの処理ノードに
結合された持続
性ストレージ
デバイス内に格納されている、前記持続性カウンタを含む、前記1又は2以上の
メモリ要素と、
前記ルートコンポーネントから前記複数の処理ノードのうちの少なくともいくつかの処理ノードへ第1のメッセージを第1の時刻において提供するための第1の出力であって、前記複数の処理ノードのうちの前記少なくともいくつかの処理ノードは、前記少なくともいくつかの処理ノードに提供されるそれぞれの要求によって識別される前記データ処理タスクを実行し、前記第1のメッセージは前記第1の時刻における前記作業カウンタの第1の値、前記第1の時刻における前記複製カウンタの第1の値及び前記第1の時刻における前記持続性カウンタの第1の値を含み、前記複製カウンタの前記第1の値は前記作業カウンタの前記第1の値に遅れ、前記持続性カウンタの前記第1の値は前記複製カウンタの前記第1の値に遅れ、かつ
前記第1のメッセージ内の前記複製カウンタの前記第1の値は、
前記第1の時間区間に先立つそれ以前の時間区間に関連付けられたより以前の組の要求のすべての要求が、前記複製カウンタの前記第1の値が前記より以前の組の要求に関連付けられた前記それ以前の時間区間に等しい又はそれより大きいと判断することに応答して、前記複数の処理ノードから2又は3以上の処理ノードにおいて複製されているということと、
前記複数の処理ノードのうちの2又は3以上の処理ノードの非持続性ストレージ
デバイスに格納され、かつ前記それ以前の時間区間に先立つ前記複数の時間区間のうちのいくつかの時間区間に関連付けられた任意の要求が前記複数の処理ノードのうちの2又は3以上において複製されていることとを示し、
前記第1の時間区間に関連付けられた前記第1組の要求のうちの少なくともいくつかの要求は前記複数の処理ノードのうちの2又は3以上の処理ノードにおいて未だ複製されない、前記第1の出力と、
前記ルートコンポーネントから前記複数の処理ノードのうちの前記少なくともいくつかの処理ノードへ第2のメッセージを前記第1の時刻に続く第2の時刻において提供するための第2の出力であって、前記第2のメッセージは前記第2の時刻における前記作業カウンタの第2の値、前記第2の時刻における前記複製カウンタの第2の値及び前記第2の時刻における前記持続性カウンタの第2の値を含み、前記複製カウンタの前記第2の値は前記作業カウンタの前記第2の値に遅れ、前記持続性カウンタの前記第2の値は前記複製カウンタの前記第2の値に遅れ、かつ
前記第2のメッセージ内の前記複製カウンタの前記第2の値は、
前記第1の時間区間に関連付けられた前記第1組の要求のすべての要求は、前記複製カウンタの前記第2の値が前記第1組の要求に関連付けられた前記第1の時間区間に等しい又はそれより大きいと判断することに応答して、前記複数の処理ノードのうちの2又は3以上において複製されているということと、
前記複数の処理ノードのうちの2又は3以上の処理ノードの前記非持続性ストレージ
デバイスに格納され、かつ前記第1の時間区間に先立つ時間区間に関連付けられた任意の要求が前記複数の処理ノードのうちの2又は3以上において複製されていることとを示し、
前記第2のメッセージは、前記持続性カウンタの前記第2の値が前記第1組の要求に関連付けられた前記第1の時間区間に等しいかそれより大きいと判断することに応答して、前記複数の処理ノードのうちの
第1組の処理ノードが前記第1組の要求のうちの1又は2以上の要
求を、前記第1組の処理ノードにおける各処理ノードに結合されたそれぞれの持続性ストレージ
デバイス内に格納する
動作を完了させる、前記第2の出力と、を含む、前記装置。
【請求項14】
複数の処理ノードを含む分散データ処理システム内の要求を処理するためのコンピュータシステムであって、前記コンピュータシステムは、
前記複数の処理ノードのうちの2又は3以上を使用して複数の組の要求を処理する手段であって、前記複数の組の要求における各要求は、コールクラスタコンポーネントにおいて受信されたそれぞれの入力データレコードについて、1又は2以上のデータ処理タスクを識別し、前記コールクラスタコンポーネントは、前記各要求を前記複数の処理ノードのうちの1つに送信するように構成されており、各組の要求のうちの各要求は、前記複数の処理ノードのうちの1つの処理ノードにおいて状態更新を引き起こすように構成され、複数の時間区間のうちの対応時間区間に関連付けられ、前記複数の組の要求は前記複数の時間区間のうちの第1の時間区間に関連付けられた第1組の要求を含む、前記処理する手段と、
前記複数の処理ノードのうちのルートコンポーネントにおいて、複数のカウンタを保持する手段であって、前記複数のカウンタは、
前記分散データ処理システム内の前記複数の時間区間のうちの現在の時間区間を示す作業カウンタと、
前記複数の時間区間のうちの1つの複製時間区間を示す複製カウンタであって、当該時間区間に関連付けられたすべての要求が前記複数の処理ノードの複数の処理ノードにおいて複製されている、前記複製カウンタと
前記複数の時間区間のうちの1つの持続性時間区間及びその値を示す持続性カウンタであって、当該時間区間に関連付けられたすべての要求が前記複数の処理ノードのうちの少なくとも1つの処理ノードに
結合された持続
性ストレージ
デバイス内に格納されている、前記持続性カウンタを含む、前記保持する手段と、
前記ルートコンポーネントから前記複数の処理ノードのうちの少なくともいくつかの処理ノードへ第1のメッセージを第1の時刻において提供する手段であって、前記複数の処理ノードのうちの前記少なくともいくつかの処理ノードは、前記少なくともいくつかの処理ノードに提供されるそれぞれの要求によって識別される前記データ処理タスクを実行し、前記第1のメッセージは前記第1の時刻における前記作業カウンタの第1の値、前記第1の時刻における前記複製カウンタの第1の値及び前記第1の時刻における前記持続性カウンタの第1の値を含み、前記複製カウンタの前記第1の値が前記作業カウンタの前記第1の値に遅れ、前記持続性カウンタの前記第1の値が前記複製カウンタの前記第1の値に遅れ、かつ
前記第1のメッセージ内の前記複製カウンタの前記第1の値は、
前記第1の時間区間に先立つそれ以前の時間区間に関連付けられたより以前の組の要求のすべての要求が、前記複製カウンタの前記第1の値が前記より以前の組の要求に関連付けられた前記それ以前の時間区間に等しい又はそれより大きいと判断することに応答して、前記複数の処理ノードから
の2又は3以上の処理ノードにおいて複製されているということと、
前記複数の処理ノードのうちの2又は3以上の処理ノードの非持続性ストレージ
デバイスに格納され、かつ前記それ以前の時間区間に先立つ前記複数の時間区間のうちのいくつかの時間区間に関連付けられた任意の要求が前記複数の処理ノードのうちの2又は3以上において複製されていることとを示し、
前記第1の時間区間に関連付けられた前記第1組の要求のうちの少なくともいくつかの要求は前記複数の処理ノードのうちの2又は3以上の処理ノードにおいて未だ複製されない、前記提供する手段と、
前記ルートコンポーネントから前記複数の処理ノードのうちの前記処理ノードの少なくともいくつかへ第2のメッセージを前記第1の時刻に続く第2の時刻において提供する手段であって、前記第2のメッセージは前記第2の時刻における前記作業カウンタの第2の値、前記第2の時刻における前記複製カウンタの第2の値及び前記第2の時刻における前記持続性カウンタの第2の値を含み、前記複製カウンタの前記第2の値が前記作業カウンタの前記第2の値に遅れ、前記持続性カウンタの前記第2の値が前記複製カウンタの前記第2の値に遅れ、かつ前記第2のメッセージ内の前記複製カウンタの前記第2の値は、
前記第1の時間区間に関連付けられた前記第1組の要求のすべての要求は、前記複製カウンタの前記第2の値が前記第1組の要求に関連付けられた前記第1の時間区間に等しい又はそれより大きいと判断することに応答して、前記複数の処理ノードのうちの2又は3以上において複製されているということと、
前記複数の処理ノードのうちの2又は3以上の処理ノードの前記非持続性ストレージ
デバイスに格納され、かつ前記第1の時間区間に先立つ時間区間に関連付けられた任意の要求が前記複数の処理ノードのうちの2又は3以上において複製されていることとを示し、
前記第2のメッセージは、前記持続性カウンタの前記第2の値が前記第1組の要求に関連付けられた前記第1の時間区間に等しいかそれより大きいと判断することに応答して、前記複数の処理ノードのうちの
第1組の処理ノードが前記第1組の要求の1又は2以上の要
求を、前記第1組の処理ノードにおける各処理ノードに結合されたそれぞれの持続性ストレージ
デバイス内に格納する
動作を完了させる、前記提供する手段と、を含む、前記コンピュータシステム。
【請求項15】
前記作業カウンタは現在の時間区間を自律的に更新し、前記複製カウンタは前記複数の処理ノードのうちの他の処理ノードから前記ルートコンポーネントにおいて受信されたメッセージに応答して更新する、請求項14に記載のコンピュータシステム。
【請求項16】
前記他の処理ノードの各処理ノードは前記処理ノードにおいて受信された、バックアップワーカー処理ノードから送信された完了した複製通信の数を表す通信受信カウントと前記処理ノードから前記バックアップワーカー処理ノードに送信された複製要求の数を表す要求送信カウントとを複数の時間区間の時間区間毎に保持する、請求
項15に記載のコンピュータシステム。
【請求項17】
前記第1の時間区間についての完了した複製通信の前記通信受信カウントと前記他の処理ノードの各処理ノードからの前記第1の時間区間についての複製要求の数である前記要求送信カウントとを前記ルートコンポーネントにおいて受信する手段と、
前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントと前記第1の時間区間についての前記複製要求の数である要求送信カウントとを集計する手段と、
前記複製カウンタの値を更新するべきかどうかを前記集計に基づき判定する手段と、をさらに含む、請求項16に記載のコンピュータシステム。
【請求項18】
前記複製カウンタの値を前記第1のメッセージ内の前記複製カウンタの値から前記第2のメッセージ内の前記複製カウンタの値へ更新する手段をさらに含む、請求項14乃至17のいずれか
一項に記載のコンピュータシステム。
【請求項19】
前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントと前記第1の時間区間についての複製要求の前記要求送信カウントとを集計する手段は、前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントの合計と前記第1の時間区間についての複製要求の前記要求送信カウントの合計との差分を計算する手段を含む、請求項17に記載のコンピュータシステム。
【請求項20】
前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントの前記合計と前記第1の時間区間についての複製要求の前記要求送信カウントの前記合計との差が0であれば、前記複製カウンタの値を前記第1のメッセージ内の前記複製カウンタの値から前記第2のメッセージ内の前記複製カウンタの値へ更新する手段をさらに含む、請求項19に記載のコンピュータシステム。
【請求項21】
前記他の処理ノードの各処理ノードは、前記処理ノードにより受信され、直近の時間区間に関連付けられたすべての状態更新要求が、その間に前記処理ノードにおいて持続的なものにされた前記複数の時間区間のうちの前記直近の時間区間の指標を保持する、請求項
15乃至17、及び19乃至20のいずれか
一項に記載のコンピュータシステム。
【請求項22】
前記他の処理ノードの各処理ノードからの前記直近の時間区間の前記指標を前記ルートコンポーネントにおいて受信し、前記持続性カウンタを更新するべきかどうかを前記直近の時間区間の前記指標に基づき判定する手段とをさらに含む、請求項21に記載のコンピュータシステム。
【請求項23】
前記持続性カウンタを前記直近の時間区間の前記指標に関連付けられた最も早い時間区間へ更新する手段をさらに含む、請求項22に記載のコンピュータシステム。
【請求項24】
前記要求はデータ処理タスク、データ処理タスク結果及びデータレコードのうちの1又は2以上を含む、請求項14乃至23のいずれか
一項に記載のコンピュータシステム。
【請求項25】
前記作業カウンタは前記現在の時間区間を自律的に更新し、前記複製カウンタは前記複数の処理ノードのうちの他の処理ノードから前記ルートコンポーネントにおいて受信されたメッセージに応答して更新する、請求項13に記載の装置。
【請求項26】
前記他の処理ノードの各処理ノードは前記処理ノードにおいて受信された、バックアップワーカー処理ノードから送信された完了した複製通信の数を表す通信受信カウントと前記処理ノードから前記バックアップワーカー処理ノードに送信された複製要求の数を表す要求送信カウントとを前記複数の時間区間の時間区間毎に保持する、請求
項25に記載の装置。
【請求項27】
前記第1の時間区間についての完了した複製通信の前記通信受信カウントと前記他の処理ノードの各処理ノードからの前記第1の時間区間についての複製要求の数である前記要求送信カウントとを前記ルートコンポーネントにおいて受信し、
前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントと前記第1の時間区間についての前記複製要求の数である要求送信カウントとを集計し、
前記複製カウンタの値を更新するべきかどうかを前記集計に基づき判定するようにさらに構成されている、請求項26に記載の装置。
【請求項28】
前記複製カウンタの値を前記第1のメッセージ内の前記複製カウンタの値から前記第2のメッセージ内の前記複製カウンタの値へ更新するようにさらに構成されている、請求項13及び25乃至27のいずれか
一項に記載の装置。
【請求項29】
前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントと前記第1の時間区間についての複製要求の前記要求送信カウントとを集計することは、前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントの合計と前記第1の時間区間についての複製要求の前記要求送信カウントの合計との差分を計算することを含む、請求項27に記載の装置。
【請求項30】
前記第1の時間区間についての完了した複製通信の前記受信された通信受信カウントの前記合計と前記第1の時間区間についての複製要求の前記要求送信カウントの前記合計との差が0であれば、前記複製カウンタの値を前記第1のメッセージ内の前記複製カウンタの値から前記第2のメッセージ内の前記複製カウンタの値へ更新するようにさらに構成されている、請求項29に記載の装置。
【請求項31】
前記他の処理ノードの各処理ノードは、前記処理ノードにより受信され、直近の時間区間に関連付けられたすべての状態更新要求が、その間に前記処理ノードにおいて持続的なものにされた前記複数の時間区間のうちの前記直近の時間区間の指標を保持する、請求
項25乃至
27、及び29乃至30のいずれか
一項に記載の装置。
【請求項32】
前記他の処理ノードの各処理ノードからの前記直近の時間区間の前記指標を前記ルートコンポーネントにおいて受信し、前記持続性カウンタを更新するべきかどうかを前記直近の時間区間の前記指標に基づき判定するようにさらに構成されている、請求項31に記載の装置。
【請求項33】
前記持続性カウンタを前記直近の時間区間の前記指標に関連付けられた最も早い時間区間へ更新するようにさらに構成されている、請求項32に記載の装置。
【請求項34】
前記要求はデータ処理タスク、データ処理タスク結果及びデータレコードのうちの1又は2以上を含む、請求項13及び25乃至33のいずれか
一項に記載の装置。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、参照のためその全体を本明細書に援用する2017年10月31日出願の米国特許出願第62/579,225号明細書からの優先権を主張する。
【0002】
本明細書はコンピュータクラスタを管理することに関する。
【背景技術】
【0003】
データフロー計算に対する1つの手法は、グラフ(「データフローグラフ」と呼ばれる)のノード(頂点)に対応するコンピュータコンポーネントがグラフのリンク(有向辺)に対応するデータフローにより結合されるグラフベース表現を使用する。データフローリンクにより上流コンポーネントへ接続される下流コンポーネントは入力データ要素の順序付けられたストリームを受信し、受信された順番に入力データ要素を処理し、そして任意選択的に、出力データ要素の1つ又は複数の対応ストリームを生成する。このようなグラフベース計算を実行するためのシステムは参照により本明細書に援用する米国特許第5,966,072号明細書、表題「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」に記載されている。この先行特許に記載された手法に関係する実施形態では、各コンポーネントは、通常は複数のコンピュータサーバのうちの1つの上でホストされる処理として実現される。各コンピュータサーバは、どの時点においてもアクティブである複数のこのようなコンポーネント処理を有し得、オペレーティングシステム(例えばUnix)スケジューラが、当該サーバ上でホストされるコンポーネント間で資源(例えばCPU時間(processor time)及び/又はプロセッサコア)を共有する。このような実施形態では、コンポーネント間のデータフローは、オペレーティングシステムのデータ通信サービスとサーバ同士を接続するデータネットワーク(例えばパイプ、TCP/IPセッションなどと称する)とを使用して実施され得る。コンポーネントのサブセットは通常、計算全体からの(例えばデータファイル、データベーステーブル、及び外部データフローに対する)データのソース及び/又はシンクとして働く。コンポーネント処理及びデータフローが例えば連携処理により確立された後、データは、各コンポーネントにおける入力データの可用性により通常は規定されるグラフとして表現された計算を実施するとともに各コンポーネントのコンピュータ資源をスケジューリングするコンピュータシステム全体を貫流する。したがって、様々なコンポーネントが様々な処理により並列に実行される(同じ又は異なるサーバコンピュータ又はプロセッサコア上でホストされる)ことを少なくとも可能にすることにより並列性が実現され得る。ここでは、データフローグラフを介し様々な経路上で並列に実行する様々なコンポーネントが本明細書ではコンポーネント並列性と呼ばれ、データフローグラフを介し同じ経路の異なる部分上で並列に実行する様々なコンポーネントは本明細書ではパイプライン並列性と呼ばれる。
【発明の概要】
【課題を解決するための手段】
【0004】
他の形式の並列性もまたこのような手法により支援される。例えば、入力データセットは例えばデータセットのレコード内のフィールドの値の区画に従って区画化され得、各部分はデータセットのレコードを処理するコンポーネントの別個のコピーへ送信される。コンポーネントのこのような別のコピー(又は「インスタンス」)は、別個のサーバコンピュータ又はサーバコンピュータの別個のプロセッサコア上で実行され得、これにより、本明細書ではデータ並列性と呼ばれるものを実現する。別個のコンポーネントの結果は、単一データフロー又はデータセットを再び形成するためにマージされ得る。コンポーネントのインスタンスを実行するために使用されるコンピュータ又はプロセッサコアの数はデータフローグラフが開発される時点で開発者により指定されるだろう。
【0005】
様々な手法がこのような手法の効率を改善するために使用され得る。例えば、コンポーネントの各インスタンスは、例えば複数のコンポーネント(例えば、より大きなグラフの連結サブグラフを形成するコンポーネント)を実現するために1つのオペレーティングシステム処理を使用することにより、それ自身のオペレーティングシステム処理において必ずしもホストされる必要は無い。
【0006】
上述の手法の少なくともいくつかの実施形態は、根底にあるコンピュータサーバ上のその結果の処理の実行の効率に関する制限に悩まされる。例えば、この制限は、データ並列性の程度を変更するために、様々なコンポーネントをホストするサーバを変更するために、及び/又は様々なコンピュータ資源上の負荷をバランスさせるために、グラフの実行中のインスタンスを再構成する際の困難性に関連し得る。既存グラフベースコンピュータシステムはまた、しばしば余りにも多くの処理が不必要に開始されて膨大な量のメモリを浪費するので、遅い起動時間に悩まされる。一般的に、処理はグラフ実行の起動で始まり、グラフ実行が終了すると終る。
【0007】
計算全体がより小さな部分に分割される分散計算のための他のシステムが使用され、これらの部分は、マスターコンピュータサーバから、それぞれが独立に計算を行いその結果をマスターサーバへ戻す様々な他の(例えば「スレーブ」)コンピュータサーバへ分散される。このような手法のうちのいくつかは「グリッドコンピューティング」と呼ばれる。しかし、このような手法は通常、これらの部分を呼び出すマスターコンピュータサーバを介することを除いて、データを計算部分間で渡すための機構を設けること無く又はこれらの部分の実行をスケジューリング及び/又は順序付けること無く、各計算の独立性に依存する。したがって、このような手法は、複数のコンポーネント間の相互作用に関与するホスティング計算に対する直接的及び効率的解を提供しない。
【0008】
大きなデータセット上の分散計算のための別の手法は、例えばApache Hadoop(登録商標)システム内で具現化されるようなMapReduceフレームワークを活用する。通常、Hadoopは、各指名ファイルの一部分が分散される分散ファイルシステムを有する。ユーザは、次の2つの関数の観点で計算を規定する:分散されたやり方で指名入力のすべての部分上で実行されるマップ関数及びマップ関数実行の出力の一部分上で実行されるreduce関数。マップ関数実行の出力は、区画化され、分散ファイルシステム内で中間部分内に再び格納される。次に、reduce関数は中間部分を処理するために分散されたやり方で実行され、計算全体の結果を生じる。MapReduceフレームワーク内で表現され得る計算であってその入力と出力がmap-reduceフレームワークのファイルシステム内の格納のために修正可能である計算は効率的に実行され得るが、多くの計算は、このフレームワークと整合しない、及び/又は分散ファイルシステム内のそれらの入力及び出力をすべて有するようには容易に適応化されない。
【0009】
一般的態様では、多くの処理ノードを有する分散データ処理システム内の状態更新要求を処理する方法は、処理ノードのうちの2つ以上を使用して複数の組の要求を処理する工程であって、各組の要求の各要求は、上記処理ノードのうちの1つにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応する時間間隔に関連付けられる、工程を含む。複数の組の状態更新要求は第1の時間間隔に関連付けられた第1組の要求を含む。
【0010】
本方法はまた、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔及びその値を示す作業カウンタと、多くの時間間隔のうちの1つ時間間隔及びその値を示す複製カウンタであって、当該時間間隔に関連付けられたすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される、複製カウンタと、多くの時間間隔のうちの1つの時間間隔を示す持続性カウンタであって、当該時間間隔に関連付けられたすべての要求が多くの処理ノードのうちの少なくとも1つの処理ノードに関連付けられた持続的ストレージ内に格納される、持続性カウンタを含む多くのカウンタを処理ノードのうちの1つにおいて管理する工程を含む。
【0011】
本方法は、第1の処理ノードから他の処理ノードへ第1のメッセージを第1の時間に提供する工程であって、第1のメッセージは作業カウンタの値、複製カウンタの値及び持続性カウンタの値を含む、工程を含む。第1のメッセージ内の複製カウンタは、第1の時間間隔に先立つ第2の時間間隔に関連付けられた多くの組の状態更新要求のうちの第2組の要求のすべての要求が処理ノードのうちの2つ以上において複製されるということを示す。第2の時間間隔に先立つ時間間隔に関連付けられた任意の非持続的に格納された要求が処理ノードのうちの2つ以上において複製される。第1の時間間隔に関連付けられた第1組の要求のうちの少なくともいくつかの要求は処理ノードのうちの2つ以上において未だ複製されない。
【0012】
本方法は、第1の処理ノードから第1の時間に続く第2の時間に第2のメッセージを他の処理ノードへ提供する工程を含む。第2のメッセージは作業カウンタの値、複製カウンタの値及び持続性カウンタの値を含む。第2のメッセージ内の複製カウンタの値は、第1の時間間隔に関連付けられた第1組の要求のすべての要求が処理ノードのうちの2つ以上において複製されるということと第1の時間間隔に先立つ時間間隔に関連付けられた任意の非持続的に格納された要求が処理ノードのうちの2つ以上において複製されるということとを示す。第2のメッセージは、第1組の要求のうちの1つ又は複数を持続的に格納することを第1組の処理ノードのうちの少なくとも1つに完了させる。
【0013】
態様は以下の特徴のうちの1つ又は複数を含み得る。
【0014】
作業カウンタは現在の時間間隔を自律的にインクリメントし得、複製カウンタは、多くの処理ノードのうちの他の処理ノードから第1の処理ノードにおいて受信されたメッセージに応答してインクリメントし得る。他の処理ノードの各処理ノードは処理ノードにおいて受信された状態更新要求の第1のカウントと処理ノードから送信された状態更新要求の第2のカウントとを複数の時間間隔の時間間隔毎に保持し得る。本方法は、第1の時間間隔の状態更新要求の第1のカウントと他の処理ノードの各処理ノードからの第1の時間間隔の状態更新要求の第2のカウントとを第1の処理ノードにおいて受信する工程と、第1の時間間隔の状態更新要求の受信された第1のカウントと第1の時間間隔の状態更新要求の第2のカウントとを集計する工程と、複製カウンタの値をインクリメントするべきかどうかを集計に基づき判定する工程とを含み得る。
【0015】
本方法は、複製カウンタの値を第1のメッセージ内の複製カウンタの値から第2のメッセージ内の複製カウンタの値へインクリメントする工程を含み得る。本方法は、第1の時間間隔の状態更新要求の受信された第1のカウントと第1の時間間隔の状態更新要求の第2のカウントとを集計する工程は、第1の時間間隔の状態更新要求の受信された第1のカウントの合計と第1の時間間隔の状態更新要求の第2のカウントの合計との差分を計算する工程を含み得る。本方法は、第1の時間間隔の状態更新要求の受信された第1のカウントの合計と第1の時間間隔の状態更新要求の第2のカウントの合計との差が0であれば複製カウンタの値を第1のメッセージ内の複製カウンタの値から第2のメッセージ内の複製カウンタの値へインクリメントする工程を含み得る。
【0016】
他の処理ノードの各処理ノードは、処理ノードにより受信され最新の時間間隔に関連付けられたすべての状態更新要求が処理ノードにおいて持続的なものにされた多くの時間間隔のうちの最新の時間間隔の指標を保持し得る。本方法は、他の処理ノードの各処理ノードからの最新の時間間隔の指標を第1の処理ノードにおいて受信する工程と持続性カウンタをインクリメントするべきかどうかを最新の時間間隔の指標に基づき判定する工程とを含み得る。
【0017】
本方法は、持続性カウンタを最新の時間間隔の指標に関連付けられた最も早い時間間隔へインクリメントする工程を含み得る。状態更新要求はデータ処理タスク、データ処理タスク結果及びデータレコードのうちの1つ又は複数を含み得る。
【0018】
別の一般的態様では、多くの処理ノードを含む分散データ処理システム内の状態更新要求を処理するためのソフトウェアがコンピュータ可読媒体上に非一時的形式で格納される。ソフトウェアは、コンピュータシステムに多くの処理ノードのうちの2つ以上を使用して多くの組の要求を処理させるための指示を含む。各組の要求の各要求は、多くの処理ノードのうちの1つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応時間間隔に関連付けられる。多くの組の要求は多くの時間間隔のうちの第1の時間間隔に関連付けられた第1組の要求を含む。
【0019】
ソフトウェアはまた、コンピュータシステムに第1の処理ノードにおいて多くのカウンタを保持させるための指示を含む。カウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの1つの時間間隔を示す複製カウンタであって、当該時間間隔に関連付けられたすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される、複製カウンタと、多くの時間間隔のうちの1つの時間間隔を示す持続性カウンタであって、当該時間間隔に関連付けられたすべての要求が多くの処理ノードのうちの少なくとも1つの処理ノードに関連付けられた持続的ストレージ内に格納される、持続性カウンタとを含む。
【0020】
ソフトウェアはまた、コンピュータシステムに第1のメッセージを多くの処理ノードのうちの第1の処理ノードから他の処理ノードへ第1の時刻に提供させるための指示を含む。第1のメッセージは作業カウンタの値、複製カウンタの値及び持続性カウンタの値を含む。第1のメッセージ内の複製カウンタは、第1の時間間隔に先立つ第2の時間間隔に関連付けられた第2組の要求のすべての要求が処理ノードのうちの2つ以上において複製されるということと第2の時間間隔に先立つ多くの時間間隔のうちのいくつかの時間間隔に関連付けられた任意の非持続的に格納された要求が処理ノードのうちの2つ以上において複製されるということとを示す。第1の時間間隔に関連付けられた第1組の要求のうちの少なくともいくつかの要求は多くの処理ノードのうちの2つ以上において未だ複製されない。
【0021】
ソフトウェアはまた、コンピュータシステムに多くの処理ノードのうちの第1の処理ノードから他の処理ノードへ第2のメッセージを第1の時間に続く第2の時間に提供させるための指示を含む。第2のメッセージは作業カウンタの値、複製カウンタの値及び持続性カウンタの値を含む。第2のメッセージ内の複製カウンタの値は、第1の時間間隔に関連付けられた第1組の要求のすべての要求が処理ノードのうちの2つ以上において複製されるということと第1の時間間隔に先立つ時間間隔に関連付けられた任意の非持続的に格納された要求が処理ノードのうちの2つ以上において複製されるということとを示す。第2のメッセージは、第1組の要求のうちの1つ又は複数を持続的に格納することを第1組の処理ノードのうちの少なくとも1つに完了させる。
【0022】
別の一般的態様では、多くの処理ノードを含む分散データ処理システム内の状態更新要求を処理するための装置は、多くの処理ノードを含む分散データ処理システムを含む。本装置はまた、多くの組の要求を処理するための1つ又は複数のプロセッサを多くの処理ノードのうちの2つ以上において含む。各組の要求の各要求は、多くの処理ノードのうちの1つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応する時間間隔に関連付けられ、多くの組の要求は多くの時間間隔のうちの第1の時間間隔に関連付けられた第1組の要求を含む。
【0023】
本装置はまた、多くのカウンタを多くの処理ノードのうちの第1の処理ノードにおいて保持するための1つ又は複数のデータストレージを含む。多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの1つの時間間隔を示す複製カウンタであって、当該時間間隔に関連付けられたすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される、複製カウンタと、多くの時間間隔のうちの1つの時間間隔を示す持続性カウンタであって、当該時間間隔に関連付けられたすべての要求が多くの処理ノードのうちの少なくとも1つの処理ノードに関連付けられた持続的ストレージ内に格納される、持続性カウンタとを含む。
【0024】
本装置はまた、多くの処理ノードのうちの第1の処理ノードから他の処理ノードへ第1のメッセージを第1の時間に提供するための第1の出力を含む。第1のメッセージは作業カウンタの値、複製カウンタの値及び持続性カウンタの値を含む。第1のメッセージ内の複製カウンタは、第1の時間間隔に先立つ第2の時間間隔に関連付けられた第2組の要求のすべての要求が処理ノードのうちの2つ以上において複製されるということと第2の時間間隔に先立つ多くの時間間隔のうちのいくつかの時間間隔に関連付けられた任意の非持続的に格納された要求が処理ノードのうちの2つ以上において複製されるということとを示す。第1の時間間隔に関連付けられた第1組の要求のうちの少なくともいくつかの要求は多くの処理ノードのうちの2つ以上において未だ複製されない。
【0025】
本装置はまた、多くの処理ノードのうちの第1の処理ノードから他の処理ノードへ第2のメッセージを第1の時間に続く第2の時間に提供するための第2の出力を含む。第2のメッセージは作業カウンタの値、複製カウンタの値及び持続性カウンタの値を含む。第2のメッセージ内の複製カウンタの値は、第1の時間間隔に関連付けられた第1組の要求のすべての要求が処理ノードのうちの2つ以上において複製されるということと第1の時間間隔に先立つ時間間隔に関連付けられた任意の非持続的に格納された要求が処理ノードのうちの2つ以上において複製されるということとを示す。第2のメッセージは、第1組の要求のうちの1つ又は複数を持続的に格納することを第1組の処理ノードのうちの少なくとも1つに完了させる。
【0026】
別の一般的態様では、分散データ処理システム内の状態更新要求を処理するためのコンピュータシステムは多くの処理ノードを含む。コンピュータシステムは、多くの処理ノードのうちの2つ以上を使用して多くの組の要求を処理する手段を含む。各組の要求の各要求は、多くの処理ノードのうちの1つの処理ノードにおいて状態更新を引き起こすように構成され、多くの時間間隔のうちの対応時間間隔に関連付けられる。多くの組の要求は多くの時間間隔のうちの第1の時間間隔に関連付けられた第1組の要求を含む。
【0027】
コンピュータシステムはまた、多くの処理ノードのうちの第1の処理ノードにおいて多くのカウンタを保持する手段を含む。多くのカウンタは、分散データ処理システム内の多くの時間間隔のうちの現在の時間間隔を示す作業カウンタと、多くの時間間隔のうちの1つの時間間隔を示す複製カウンタであって、当該時間間隔に関連付けられたすべての要求が多くの処理ノードの複数の処理ノードにおいて複製される、複製カウンタと、多くの時間間隔のうちの1つの時間間隔を示す持続性カウンタであって、当該時間間隔に関連付けられたすべての要求が多くの処理ノードのうちの少なくとも1つの処理ノードに関連付けられた持続的ストレージ内に格納される、持続性カウンタとを含む。
【0028】
コンピュータシステムはまた、多くの処理ノードのうちの第1の処理ノードから他の処理ノードへ第1のメッセージを第1の時間に提供する手段を含む。第1のメッセージは作業カウンタの値、複製カウンタの値及び持続性カウンタの値を含む。第1のメッセージ内の複製カウンタは、第1の時間間隔に先立つ第2の時間間隔に関連付けられた第2組の要求のすべての要求が処理ノードのうちの2つ以上において複製されるということと第2の時間間隔に先立つ多くの時間間隔のうちのいくつかの時間間隔に関連付けられた任意の非持続的に格納された要求が処理ノードのうちの2つ以上において複製されるということとを示す。第1の時間間隔に関連付けられた第1組の要求のうちの少なくともいくつかの要求は多くの処理ノードのうちの2つ以上において未だ複製されない。
【0029】
コンピュータシステムはまた、多くの処理ノードのうちの第1の処理ノードから他の処理ノードへ第2のメッセージを第1の時間に続く第2の時間に提供するための手段を含む。第2のメッセージは作業カウンタの値、複製カウンタの値及び持続性カウンタの値を含む。第2のメッセージ内の複製カウンタの値は、第1の時間間隔に関連付けられた第1組の要求のすべての要求が処理ノードのうちの2つ以上において複製されるということと第1の時間間隔に先立つ時間間隔に関連付けられた任意の非持続的に格納された要求が処理ノードのうちの2つ以上において複製されるということとを示す。第2のメッセージは、第1組の要求のうちの1つ又は複数を持続的に格納することを第1組の処理ノードのうちの少なくとも1つに完了させる。
【0030】
様々な様相は以下の利点のうちの1つ又は複数を有し得る。
【0031】
一般的に、本明細書において説明されるいくつかの特徴は、コンポーネント(又はコンポーネントの並列実行用コピー)が様々なサーバ上でホストされる上述の手法と比較して、計算(特にその基本的な仕様がグラフベースプログラム仕様の観点のものである計算)の計算効率の増加を可能にする(例えば、多くの処理ノードを含む分散データ処理システムは所与のコンピュータ資源の1ユニット当たりに処理されるレコードの数を増加させることができる)。例えば、コールクラスタコンポーネントは、グラフベースプログラム仕様で配置されており、グラフベースプログラム仕様により必要とされる計算がグラフベースプログラム仕様における処理ノードにより分散されたやり方で行われるように、グラフベースプログラム仕様と分散データ処理システムとをインターフェースするために使用される。さらに、本明細書において説明されるいくつかの特徴は、コンピュータ資源及び計算要件を変更することへ適応化する能力を提供する。本明細書において提供される計算手法は、例えば処理されるデータの特性に起因する、1つ又は複数のグラフベース計算の実行中に利用可能であるコンピュータ資源の変動に及び/又は計算負荷の変動又はこのような計算の様々なコンポーネントの負荷の時間変動に適応化することを許容する。例えば、態様は、処理ノードが分散データ処理システムへ追加される又はそれから除去される(又は、失敗し、オンラインに戻る)ことに適応化することができる。分散データ処理システムが適応化を提供する1つのやり方は本システム内のデータの複製及び持続性を管理することによるものであり、この管理は、処理ノードにより送信受信されるメッセージの計数を保持することと、すべてのメッセージが本システム内で複製される及び/又は持続させる時間間隔の指標を保持することとを含む。
【0032】
様々な特性を有するコンピュータ資源を効率的に活用する(例えば、サーバ当たり様々な数のプロセッサ、プロセッサ当たりの様々な数のプロセッサコア、等々を有するサーバを使用することにより)こととそして均質環境と異質環境との両方を効率的に支援することとができる計算手法も提供される。本明細書において説明されるいくつかの特徴はまた、グラフベース計算の起動を急速なものにすることもできる。このような効率及び適応性を提供する一態様は、本明細書で述べるように処理ノードのクラスタの適切な管理を提供する。
【0033】
態様はまた有利には「分散データ処理システムが、処理を適時ロールバックすることにより、発生するいかなる処理エラーからも回復することができる」という点でフォールトトレラントである。本システムは、多くの可能なロールバックシナリオを予想し、可能なロールバックシナリオのそれぞれにおいてロールバックを行うためのアルゴリズムを実施する。
【図面の簡単な説明】
【0034】
【
図1】データを処理するためのシステムのブロック図である。
【
図2】コンピュータクラスタを含む計算システムのブロック図である。
【
図3】様々な反復時間間隔の時間を表すクロックの概要図である。
【発明を実施するための形態】
【0035】
図1は、コンピュータクラスタ管理技術が使用され得るデータ処理システム200の例を示す。システム200は、データの1つ又は複数のソース(ストレージデバイス、又はオンラインデータストリームへの1つ又は複数の接続など)を含み得るデータソース202を含み、その各々は様々なフォーマット(例えばデータベーステーブル、スプレッドシートファイル、フラットテキストファイル又はメインフレームにより使用される固有フォーマット)のうちの任意のものでデータを格納又は提供し得る。実行環境204は前処理モジュール206及び実行モジュール212を含む。実行環境204は、例えばUNIXオペレーティングシステムの1つのバージョン等の好適なオペレーティングシステムの制御下で1つ又は複数の汎用コンピュータ上でホストされ得る。例えば、実行環境204は、複数の処理ユニット(例えば中央処理ユニット:CPU)又はプロセッサコアを使用するコンピュータシステムの構成を含むマルチプルノードパラレルコンピュータ環境であってローカルシステム(例えば、対称型マルチ処理(SMP:symmetric multi-processing)コンピュータ等のマルチプロセッサシステム)又はローカル分散型システム(例えば、クラスタ又は超並列処理(MPP:massively parallel processing)として接続される複数プロセッサ)、又はリモート又はリモート分散型ネットワーク(例えば、ローカルエリアネットワーク(LAN:local area network)及び/又は広域ネットワーク(WAN:wide-area network)を介し接続される複数プロセッサ)、又はその任意の組み合せのいずれかであるマルチプルノードパラレルコンピュータ環境を含み得る。
【0036】
前処理モジュール206は、プログラム仕様(例えば以下に説明されるグラフベースプログラム仕様)が実行モジュール212により実行される前に必要とされ得る任意の構成設定を行うことができる。前処理モジュール206は、データソース202を具現化し得る多様なタイプのシステム(様々な形式のデータベースシステムを含む)からデータを受信するためのプログラム仕様を構成し得る。データは、恐らくヌル値を含むそれぞれのフィールド(「属性」、「行」又は「列」とも呼ばれる)の値を有するレコードとして編成され得る。データソースからデータを読み出すためのデータ処理アプリケーションなどのコンピュータプログラムを最初に構成する際、前処理モジュール206は通常、当該データソース内のレコードに関するいくつかの初期フォーマット情報により開始する。コンピュータプログラムは本明細書で述べるようなデータフローグラフの形式で表現され得る。いくつかの状況では、データソースのレコード構造は当初知られていないかもしれなく、その代わりにデータソース又はデータの解析後に判定され得る。レコードに関する初期情報は、例えば個別値を表すビットの数、レコード内のフィールドの順序、及びビットにより表される値のタイプ(例えばストリング、符号付き/符号無し整数)を含み得る。
【0037】
データソース202を提供するストレージデバイスは実行環境204に対してローカルであり得る、例えば、実行環境204をホストするコンピュータへ接続されたストレージ媒体(例えば、ハードドライブ208)上に格納され得る、又は、実行環境204に対してリモートであり得る、例えばリモート接続(例えばクラウドコンピュータインフラストラクチャにより提供される)上で実行環境204をホストするコンピュータと通信するリモートシステム(例えば、メインフレームコンピュータ210)上でホストされ得る。
【0038】
実行モジュール212は、入力データを読み取る及び/又は出力データを生成するために前処理モジュール206により構成及び/又は生成されるプログラム仕様を実行する。出力データ214は、データソース202内又は実行環境204へアクセス可能なデータ格納システム216内に戻され格納されてもよいし、そうでなければ使用されてもよい。データ格納システム216はまた、開発者220が実行モジュール212を使用してデータを処理するためのアプリケーションを開発することができる開発環境218へアクセス可能である。
【0039】
換言すれば、データ処理システム200は:
データストレージ216へ接続された任意選択的開発環境218であって、開発環境218は、グラフコンポーネントを処理するグラフを介し1つ又は複数の入力データセットから1つ又は複数の出力データセットへ流れるデータに対し行われるグラフベース計算を実施するデータフローグラフに関連するデータ処理アプリケーションを構築するように構成され、データフローグラフはデータストレージ216内のデータ構造により規定され、多くのノードを有するデータフローグラフはデータ構造により規定され、1つ又は複数のリンクにより接続されるグラフコンポーネントを表し、上記リンクはデータ構造により規定され、グラフコンポーネント間のデータフローを表す、開発環境218と;
データストレージ216へ接続され、1つ又は複数のコンピュータ上でホストされる実行環境212であって、実行環境212は、データフローグラフを規定する格納されたデータ構造を読み出すように、そして前処理モジュール206によりデータフローグラフへ割り当てられるグラフコンポーネントの計算を行うためのコンピュータ資源(処理など)を割り振るように構成された前処理モジュール206を含む、実行環境212と、を含み、
実行環境204は、グラフベース計算が実行されるように、割り当てられた計算又は処理の実行をスケジューリング及び制御するための実行モジュール212を含む、実行環境212を含む。すなわち、実行モジュールは、データソース202からデータを読み取るように、そしてデータフローグラフの形式で表現された実行可能コンピュータプログラムを使用してデータを処理するように構成される。
【0040】
1.コンピュータクラスタ
ごく一般的には、実行モジュール212を使用してデータを処理するためのいくつかのコンピュータプログラム(本明細書では「アプリケーション」とも呼ばれる)は、コンピュータクラスタへアクセスするためにアプリケーションが使用するコールクラスタコンポーネントを含む。例えば、
図2を参照すると、パイプラインデータ処理に対する手法では、コールクラスタコンポーネント110は、その一部分であるアプリケーション(例えばデータフローグラフ又は他の形式のグラフベースプログラム仕様)内のコンポーネントからコールクラスタコンポーネント110において受信されたレコード103を処理するためにコンピュータクラスタ120のコンポーネントと相互作用し、対応結果105をその一部分であるアプリケーションの1つ又は複数の他のコンポーネントへ送信する。入力レコード103毎に、コールクラスタコンポーネント110は、要求113(例えばデータ処理タスクを実行するための要求)をクラスタ120へ送信し、しばらくして、当該要求113に対する応答115をクラスタ120から受信する。応答115の受信後しばらくして、コールクラスタコンポーネント110は、通常は要求を処理した結果がクラスタ120内で適切に持続性があると知られた後、応答115に対応する結果105を送信する。
【0041】
コールクラスタコンポーネント110がその一部分であるグラフベースプログラム仕様は
図2に示されない。
図2では、単一コールクラスタコンポーネント110だけが示されるが、同じクラスタ120と相互作用し得る多くのコールクラスタコンポーネント(例えばデータフローグラフなどの同じ又は異なるアプリケーションに参加する各コールクラスタコンポーネント)が一般的には存在し得るということを認識すべきである。グラフベースプログラム仕様は、例えば米国特許第5,966,072号明細書、米国特許第7,167,850号明細書又は米国特許第7,716,630号明細書に記載されるデータフローグラフとして又は米国特許出願公開第2016/0062776号明細書に記載されるデータ処理グラフとして実現され得る。このようなデータフローグラフベースプログラム仕様は通常、グラフ(「データフローグラフ」と呼ばれる)のリンク(有向辺)に対応するデータフローにより結合されるグラフのノード(バーテックス)に対応するコンピュータコンポーネントを含む。データフローリンクにより上流コンポーネントへ接続される下流コンポーネントは入力データ要素の順序付けられたストリームを受信し、受信された順番に入力データ要素を処理し、そして任意選択的に、出力データ要素の1つ又は複数の対応ストリームを生成する。いくつかの例では、各コンポーネントは、通常は複数のコンピュータサーバのうちの1つの上でホストされる処理として実施される。各コンピュータサーバは、どの時点においてもアクティブである複数のこのようなコンポーネント処理を有し得、オペレーティングシステム(例えばUnix)スケジューラは当該サーバ上でホストされるコンポーネント間で資源(例えばCPU時間及び/又はプロセッサコア)を共有する。このような実施形態では、コンポーネント間のデータフローは、オペレーティングシステムのデータ通信サービス(例えばパイプ、TCP/IPセッションなどと称する)とサーバ同士を接続するデータネットワークとを使用して実施され得る。コンポーネントのサブセットは通常、計算全体からの(例えばデータファイル、データベーステーブル、及び外部データフローに対する)データのソース及び/又はシンクとして働く。コンポーネント処理及びデータフローが確立された後、例えば、連携処理により、データは、各コンポーネントにおける入力データの可用性により通常は規定されるグラフとして表現された計算を実施するとともに各コンポーネントのコンピュータ資源をスケジューリングするコンピュータシステム全体を貫流する。
【0042】
クラスタ120は通信ネットワーク130(「クラウド」として
図2に示されており、開始、共有媒体、ハイパーキューブなどの様々な相互接続トポロジーを有し得る)により結合される複数のクラスタコンポーネント140、150a~150cを含む。各クラスタコンポーネント(又は単純に「コンポーネント」)はクラスタ内で特定役割を有する。いくつかの実施形態では、コンポーネントのそれぞれは個別コンピュータ資源(例えば別個のコンピュータサーバ、マルチコアサーバの別個のコアなど)上でホストされる。これらのコンポーネントがクラスタ内の役割を表すということと、いくつかの実施形態では複数の役割が1つのコンピュータ資源上でホストされ得、単一役割が複数のコンピュータ資源全体にわたって分散され得るということとを理解すべきである。
【0043】
図2では、ルートコンポーネント140(「ルート」と呼ばれる)は、以下に十分説明されるいくつかの同期機能を行うが、処理対象データの流れ又は計算に直接的に関与しない。多くのワーカーコンポーネント150a~150c(以下では「ワーカー」と呼ばれる)はコールクラスタコンポーネント110からの要求113を処理する。データ165は、それぞれのワーカー150へアクセス可能なストレージ160内に冗長的やり方で格納され、各要求113は、ストレージ160内に格納され要求113内のキーにより識別されたデータの特定部分へアクセスする(読み出す及び/又は書き込むために)必要があるかもしれなく、キーにより判定されたワーカーの特定サブセットの間で分散される。特定要求に必要とされるキーのデータを保持するワーカーのうち、1つワーカーが、要求113が実行される主要ワーカー(例えばワーカー150a)として指定され、他のワーカーは、要求を通常は又は必ずしも実行しないが当該データのそれらのバージョンが主要ワーカーと同じやり方で又はそれに従って更新されるという意味でバックアップワーカーとして指定される。
【0044】
図2では、特定入力レコード103の経路(処理対象データユニットと見做され得る又はそれを含み得る)がコールクラスタコンポーネント110に入るものとして示されており、次に、対応要求113(データユニットを有する)は要求の主要ワーカー150a(ワーカーA)へコンポーネント110により送信され、主要ワーカー150aからの応答115は、要求のバックアップワーカー150b(ワーカーB)だけでなくコールクラスタコンポーネント110へも返送され、最後に、対応結果105がコールクラスタコンポーネント110から出力又は送信される。一般的に、要求毎に複数のバックアップコンポーネントが存在し得るが、説明を簡単にするために、単一バックアップコンポーネントだけが以下の多くの例では示される。
【0045】
以下にさらに論述されるように、コールクラスタコンポーネント110は、要求113を再生バッファ112内にバッファし、そして必要に応じてクラスタ120により正しく受信及び/又は処理されたということを保証するために要求をクラスタ120へ再送信し得る。コンポーネント110はまた、応答115をエスクローバッファ114内にバッファし、そして、エラー条件が検出された場合にはいくつかの応答の冗長コピーを受信し得る。一般的に、コンポーネント110は、応答115がクラスタ内に適切に保持されている(すなわち、好適な永続性レベルでデータストレージにおいて格納された)ということをクラスタ120がコンポーネント110に通知するまで、応答を「エスクロー状態に」保持する。
【0046】
ルート140は、時間(間隔)値を保持しそして他のコンポーネントへ分配し、そして時間値のいくつかをコールクラスタコンポーネント110へ分配することにより同期機能を行う。
図3を参照すると、ルート140のクロック142は3つの時間を保持する。時間T1は、例えば整数値として表される現在の作業時間又は時間間隔であり、繰り返し更新され、例えば毎秒1だけインクリメントされる。
【0047】
要求113がコールクラスタコンポーネント110からクラスタ120により受信され、応答115がクラスタにより生成(又は送信)されると、それぞれは、それぞれ受信されそして生成(又は送信)された作業(T1)時間(又は、等価的に、時間T1が同じ値を有する時間区間(すなわち、T1の増分同士間))に関連付けられる。ルートは、時間T1に遅れる第2の時間T2を保持し配布する。以下にかなり詳細に説明されるように、時間T2は、エラーを処理するための操作のロールバックの場合に再送信される必要が無いように、クラスタ120のコンポーネント150a~150c間で送信された時間に又はそれ以前に生成されたすべての要求及び/又は応答が複数のコンポーネント150a~150cにおいて(例えば揮発性メモリ内に)複製されているような時間(間隔)を表す。いくつかの例では、複製(例えば揮発性メモリ内の)は、第1のレベルの永続性でもってデータストレージ内に格納されることを指す。ルートは、当該時間に又はそれ以前に生成されたすべての要求及び/又は応答がクラスタ120内のコンポーネントの故障を処理するための操作のロールバックの場合には再送信又は再計算される必要が無いように、当該データ165が格納されるワーカー150a~150cのうちの少なくとも1つにおいて又はさらにはそのすべてにおいて持続性メモリ内に格納され、恒久的なものにされるような時間を表す第3の時間(間隔)T3(時間T1及びT2に遅れる)を保持し配布する。いくつかの例では、持続性メモリ内に(例えばディスクへ)格納されることは、第1のレベルの永続性より比較的永続性がある第2のレベルの永続性でもってデータストレージ内に格納されることを指す。データストレージは第1のレベルの永続性を有するデータストレージ及び第2のレベルの永続性を有するデータストレージより比較的永続性がある又は無い多くの異なるレベルの永続性に関連付けされ得るということに注意すべきである。例えば、クラスタの外にあるオフサイトデータストレージは、第1及び第2のレベルの永続性より比較的永続性がある第3のレベルの永続性を有し得る。いくつかの例では、時間間隔T1、T2及びT3は代替的に「状態一貫性(state consistency)指標」と呼ばれる。
【0048】
複製(T2)時間又は持続(T3)時間をいつインクリメントすべきかを判定するためのルート140の機構は、時間(T1~T3)の値をワーカー150a~150cへ分配するための機構と同様に本明細書の後で説明される。
【0049】
通常動作では、クラスタ120により受信された要求113は、要求のデータユニットのキーに基づき主要ワーカーとして識別されたワーカー150において(そして、一般的に1つ又は複数のバックアップワーカー150において)処理され、また、必要とされるデータのキーに基づき識別される。
図4を参照すると、この処理は、コールクラスタコンポーネント110及び主要及びバックアップワーカー150において当該要求の様々な状態間の遷移として表され得る。「様々な要求は、様々な状態にあり、そして一般的には、参照されるデータに依存して様々なワーカーにおいて処理され、したがって、コールクラスタコンポーネント及び任意の特定ワーカーは様々な状態において多くの要求を有し得る」ということに留意されたい。
【0050】
一般的に、各キーは、対応するサブセットのワーカー150に関連付けられ、例えばキー(例えば、キー値毎にバックアップワーカーを予測不能に分散するキーの決定論的機能)に基づき疑似ランダムなやり方で選択される。より一般的には、そして好適には、これらのサブセットは、キー値に従って完全な一組のワーカーの区画を形成するのではなくむしろサブセットの他の区画と重なる。
【0051】
一意的識別子ridを有する(又はコールクラスタコンポーネントにより割り当てられる)要求113が入力レコード103毎にコールクラスタコンポーネント110において形成されると、この要求はコールクラスタコンポーネントの状態Aに入る。以下の説明では、各要求113はコールクラスタコンポーネントの3つの状態(A~Cと表記される)のうちの1つにあり、この要求を処理するワーカー150のそれぞれにおいて9つの異なる状態(A~Iと表記される)のうちの1つにある。要求113を記録した後、コールクラスタコンポーネント110は、要求の主要ワーカーへ割り当てられるワーカー150を決定し、要求113を当該ワーカー150(
図2においてワーカーAとして示される)へ送信する。代替実施態様では、「コールクラスタコンポーネント110はどのワーカーが指定された主要ワーカーかについて気付いていないかもしれなく、したがって、要求113は、指定された主要ワーカワーカー150aへ到達するようにクラスタ120において内部的にルーティングされ得る」ということに留意されたい。要求113は、要求の応答115がクラスタ120から戻され受信されるまでコールクラスタコンポーネント110において状態Aのままである。
【0052】
要求113が主要ワーカー(
図2ではワーカーAと表記される)において受信されると、要求は主要ワーカーにおいて状態Aに入る。主要ワーカーは、ルート140から配布されたとして知らされた現在の作業時間T1に等しい(taで表された)要求時間を要求に割り当てる(ルートがT1を増分したときとワーカーがこの増分について知ったときとの間に時間遅れが存在し得るということを認識することにより)。この状態で、要求113は、要求id、rid及びこの例ではtaとして表された要求時間に関連付けられた揮発性メモリ155内に格納され、主要ワーカーにおいて実行することを待つ状態に指定される。この状態Aにおいて、主要ワーカーは、要求113を当該要求の1つ又は複数のバックアップワーカー150(すなわち、キーにより判定された)へ送信する。主要ワーカーにおいて、当該要求は、例えば要求へ割り当てられた時間(ta)と任意選択的に主要ワーカーにおける要求の到着順とに従って資源の順番通り割り当てに基づき実行するために最終的に割り当てられた資源である。要求113が主要ワーカーにおいて実行を開始すると、要求は主要ワーカーにおいて状態Bに入る。処理が応答115を生成すると(この例では、T1作業時間がtbであると仮定する)、主要ワーカーにおける要求の状態は状態Cになる。状態Cにおいて、応答115は時間tbに関連付けられて揮発性メモリ156内に格納される。以下にさらに論述されるように、ワーカーにおける応答115及びデータストレージ160に対する任意の更新は、例えば改版されたデータベース又は他の形式の改版されたデータ構造を使用することにより、従来のロールバック時間による効果の除去を許容するやり方で時間(ここでは時間tb)に関連付けられて格納される。この状態Cにおいて、応答115は、コールクラスタコンポーネント110とバックアップコンポーネント150との両方へ送信される。
【0053】
コールクラスタコンポーネント110において、応答115が主要ワーカーから受信されると、要求は、主要ワーカーにより生成された時間tbに関連付けられて応答が格納される状態Bに入る。応答115は、ルート140からtbに等しい又はそれより大きいエスクロー時間を受信するまでエスクローバッファ114内のコールクラスタコンポーネントにおいて保持される。当該コールクラスタコンポーネントからの要求の持続性要件に依存して、ルートは、コールクラスタコンポーネントのエスクロー時間として複製時間T2又は持続時間T3のいずれかを提供し得る。tbに等しい又はそれより大きいエスクロー時間を受信すると、コールクラスタコンポーネント110は結果105をコールクラスタコンポーネントから送信し、対応する要求113は、要求113のいかなるさらなる記録又はその応答115も必要とされない(例えば、完全に消去され得る)ヌル状態Cに入る。
【0054】
バックアップワーカー150において、要求113を主要ワーカーから受信すると、バックアップワーカーは、要求がオリジナル要求時間taに関連付けられた状態Fに入り(現在の作業時間T1がそれを越えてインクリメントされていたとしても)、要求は主要ワーカーからの応答を待つ状態である。バックアップワーカー150bが主要ワーカーから応答115を受信し、したがって応答115が当該バックアップの揮発性メモリ156内に複製されると、バックアップワーカー150bは状態Gに入る。
【0055】
主要又はバックアップワーカーが新たに生成された応答115を有すると直ちに、主要又はバックアップワーカーは、当該応答をディスクベース又は不揮発性メモリベースデータベース又はファイルシステムなどの持続性ストレージ160へ保存する処理を自由に開始することができる(状態D及びHを参照)。持続性メモリに対する更新が最初に揮発性メモリベースジャーナル内でジャーナル化されるジャーナルベース手法が使用され得、当該ジャーナルの一部分は持続性ストレージ160へ折々に書き込まれる。「更新のこのジャーナルの一部分が持続性ストレージ160へ書き込まれる場合ですら、それらの更新は、恒久的であると考えられる更新の程度に関する明示的指標が持続性ストレージへ書き込まれるまで恒久的な(すなわち、「コミットされた」)ものにされない」ということに留意されたい。
【0056】
時間tb及びそれより早い時間に関連するすべての要求及び応答がすべての適切なワーカーにおいて複製されたということをルート140が判定した時点で、T2はtbに達する又はtbまでインクリメントする。時間T2=tbがルート140から主要及びバックアップワーカー150へ配布された後、これらのワーカーは応答を持続性ストレージ160内で恒久的なものにする。時間tbを介した更新のジャーナルが持続性メモリへ未だ書き込まれていなければ、それらは当該時間に書き込まれる。より一般的には、時間tbを介したジャーナルは、T2がtbに達する又はそれまでインクリメントする時間までにワーカーにより持続性ストレージ160へ書き込まれた。この時間においてなされなければならないことは、「持続性ジャーナル内で時間tbを介した更新が恒久的ものとして処理される」という指標を記録することにより更新を恒久的なものにするタスクを完了することだけである。主要ワーカーがジャーナルを恒久的なものにする恐らく短い時間中、ジャーナルは状態Dにある。主要ワーカーが持続性ストレージにおいて
図4に示す要求の応答をすると、主要ワーカーは状態Eに入る。同様に、バックアップワーカーが応答を恒久的なものにする間、バックアップワーカーは状態Hにあり、バックアップワーカーが応答を持続性メモリ内で恒久的なものにすると、バックアップワーカーは状態Iに入る。時間tb(及びそれ以前の時間)に関連付けられたすべての応答が持続性メモリ内で恒久的である(すなわち、すべて状態E又はIにある)ということをルートワーカーが判定すると、ルートワーカーは持続時間T3をtbへインクリメントする。上に紹介したように、エスクロー時間がコールクラスタコンポーネントにおける要求に対するものであり、持続時間T3である状況に関して、ルート140は、エスクロー時間がtb以上となったということをコールクラスタコンポーネント110に通知し、コールクラスタコンポーネント110は当該要求113の対応する結果105をリリースし、応答115をアプリケーション(例えばグラフ)内の1つ又は複数の他のコンポーネントへリリースする。
【0057】
上に紹介したように、通常動作において、ルートは、コールクラスタコンポーネントからの連続要求113がクラスタにおいて処理されると作業時間T1を更新し、応答115はコールクラスタコンポーネントへ戻され、エスクロー時間T2又はT3の更新に従ってコールクラスタコンポーネントからグラフへリリースされる。一般的に、特定要求113の処理は、作業時間T1のうちの多くの時間「ティック(tick)」(例えば10又は100のティック)がかかり得、したがって、クラスタは、進行中である多くの要求であってこれらに関連付けられた多くの異なる要求時間を有する要求を有し得る。さらに、データはワーカー間で分散されるので、負荷は、各ワーカーが主要ワーカーとして(すなわち、状態A~Eのうちの1つの状態において)働いている複数の要求を有し、バックアップワーカーとして(すなわち、状態F~Iのうちの1つの状態で)働いている複数の要求もまた有し得るように、それらの要求のキーに従ってワーカー間で効果的に分散される。
【0058】
タスクを行うためのクラスタに対するいくつかの要求はタスクを複製するためのそして当該タスクを行った対応結果を複製するための本明細書で述べたような手順を使用するということに注意すべきである。例えば、タスクがバックアップワーカーにおいてタグ付け及び複製された(必ずしもではないが持続的なものにされた)後、このタスクは主要ワーカーにおいて初期化される。タスクがデータ記録に作用すれば、初期化はレコードのオリジナル版1を保持することに関与し得る。次に、タスクは、主要ワーカー上で実行するがバックアップワーカー上では実行されない状態である。処理が完了した後、レコードの修正版2が存在する。次に、タスクの最終化は、レコードの修正版2を主要ワーカーからバックアップワーカーへ送信する工程を含み得る。次に、主要ワーカーとバックアップワーカーとの両方は、レコードのオリジナル版1を(複製されたタスクと共に)消去することができる。これらの工程のそれぞれは合理的に効率的なものであるがタスクの継続時間が非常に短ければ、これらの初期化及び最終化手順に関連するオーバーヘッドはタスクをあまり効率的でないものにし得る。
【0059】
代替的に、異なる手順が、継続時間が比較的短いいくつかのタスク(「短いタスク」)には使用され得る。短いタスクは、バックアップワーカーにおいて依然としてタグ付け及び複製される。しかし、初期化はレコードのオリジナル版1を保持する必要が無い。その代りに、短いタスクと短いタスクのレプリカとの両方が主要及びバックアップワーカーにおいてそれぞれに持続的に格納されたということをコミット操作(commit operation)が示した後、短いタスクは両方のワーカーにおいて実行される。当該実行の終わりに、修正されたレコードを送信するために必要とされるいかなる通信も無く、主要及びバックアップワーカーの両方においてレコードの修正版2のコピーが存在することになる。両方のワーカーにおいて冗長処理が存在するが、この冗長性は、タスクが短いので、効率に著しい影響を与えない。この代替手順は、どのワーカーがこれを実行しているかにかかわらず、例えば短いタスクが決定論的であり同じ結果を生成すれば有用である。
【0060】
2.通常動作の例
図5~12を参照すると、コールクラスタコンポーネント110及びクラスタ120の通常動作の一例が示されている。
図5では、入力レコード103がコールクラスタコンポーネント110に到達し、コールクラスタコンポーネント110は入力レコード103の要求113を形成する。コールクラスタコンポーネント110は要求113と一意的要求識別子ridとを関連付け、これをコールクラスタコンポーネント110の再生バッファ112内に格納する。
【0061】
コールクラスタコンポーネント110は要求113をクラスタ120へ送信し、要求113は、時間T1=taにクラスタ120内の主要ワーカー150a(ワーカーA)において受信される。要求113は、主要ワーカー150aの揮発性メモリ155内に格納され、現在の作業時間(T1=ta)に等しい要求時間が割り当てられる。要求113の要求時間はコールクラスタコンポーネント110へ提供され、コールクラスタコンポーネント110は要求時間(すなわち、ta)と再生バッファ112内に格納された要求113とを関連付ける。コールクラスタコンポーネント110の再生バッファ112内に格納された要求113は状態A(
図4を参照)にあり、クラスタ120からの応答を待つ。主要ワーカーの揮発性メモリ155内に格納された要求113は状態Aにあり、コンピュータ資源が要求113の実行のために割り当てられるのを待つ。
【0062】
図6を参照すると、主要ワーカーは要求113をバックアップワーカー150b(ワーカーB)へ送信し、要求113はバックアップワーカー150bの揮発性メモリ155内に格納される。バックアップワーカー150bの揮発性メモリ155内に格納された要求113は、主要ワーカーからの応答を受信することを待つ状態Fにある。
【0063】
図7を参照すると、主要ワーカー105がコンピュータ資源(例えば主要ワーカーのコンピュータ資源又はクラスタの別の部分のコンピュータ資源)を要求113へ割り当てると、要求113は主要ワーカー105において状態Bに入り、実行を開始する。
【0064】
図8を参照すると、時間T1=tbにおいて、主要ワーカー105は要求113の実行を完了する。要求113の実行は、主要ワーカーの揮発性メモリ156内に格納される応答115を生成する。応答115は、要求113の要求識別子(rid)とそれが生成された時間(tb)とへ関連付けられる。主要ワーカーは応答115をコールクラスタコンポーネント110とバックアップワーカー150bとへ送信し、次に、要求113は状態Cになり、持続時間T3がtbへ到達するのを待つ。
【0065】
コールクラスタコンポーネント110は応答115を受信し、これをそのエスクローバッファ114内に格納する。エスクローバッファ114内に格納された応答により、結果115はコールクラスタコンポーネント110において状態Bになり、持続時間T3(この例ではエスクロー時間)がtbへ到達するのを待つ。バックアップワーカー150bは応答115を受信し、これを揮発性メモリ156内に格納する。バックアップワーカー150bにおける要求113は状態Gに入り、持続時間T3がtbへ到達するのを待つ。
【0066】
図8には示さないが、主要ワーカー150a及びバックアップワーカー150bの揮発性メモリ156内に格納された(複製された)応答115により、複製時間(T2)はtbへ設定される。
【0067】
図9を参照すると、応答115が主要ワーカー150a及びバックアップワーカー150bの一方又は両方の揮発性メモリ156内に格納されると、主要ワーカー150a及びバックアップワーカー150bは、応答115がそれぞれの揮発性メモリ155、156内にも格納されたまま応答115をそれぞれの持続性ストレージ160へ格納し始める。
【0068】
図10を参照すると、応答115が主要ワーカーにおいて格納され、そしてバックアップワーカー150bにおいて複製された後、持続時間(T3)はtbへ設定される。主要ワーカー150a及びバックアップワーカー150bは持続性ストレージ160内の応答115の恒久的格納を終了する。主要ワーカーにおいて格納された要求113は状態Dにあり、バックアップワーカー150bにおいて格納された要求113は、要求113及び応答115が揮発性メモリ155、156内に依然としてそれぞれ格納された状態Hにある。
【0069】
図11を参照すると、この例のエスクロー時間は持続時間T3であるので、tbへ更新されたT3により、コールクラスタコンポーネント110において格納された要求113は状態Cに入り、応答115(時間tbへ関連付けられた)がそのエスクローバッファ114からリリースされる。
【0070】
図12を参照すると、主要ワーカー150aの持続性ストレージ内に恒久的に格納された応答115により、要求113は、要求113又は応答115のいずれもその揮発性メモリ155、156内にそれぞれに格納されない状態Eに入る。同様に、バックアップワーカー150bの持続性ストレージ内に恒久的に格納された応答115により、要求113は、要求113又は応答115のいずれもその揮発性メモリ155、156内に格納されない状態Iに入る。
【0071】
3.ロールバックシナリオ
図4の状態遷移図は通常動作を表すが、ワーカー間のメッセージが成功裡に受信されないということ(うまく受信されないということ)が頻繁ではないがあり得る。さらに、ワーカーがその揮発性メモリを失った後に再始動すること又はワーカーが要求をさらに処理しないように完全に失敗することがあり得る(すなわち、主要役割又はバックアップ役割のいずれかにおいて)。本明細書において説明されるデータ処理システムのいくつかの実施形態がこのセクションにおいて説明されたロールバックシナリオのすべてを実現するということに注意すべきである。データ処理システムの他の実施形態がこのセクションにおいて説明されたロールバックシナリオのすべてではないが1つ又は複数を実現し得るということにも留意すべきである。
【0072】
3.1 シナリオ1:tr<ta
成功裡に受信されなかったいくつかのワーカー間メッセージであって時間teに関連付けられたメッセージが存在するということをクラスタが判定する状況を最初に考察する。一般的に、ルートは、時間がteに先立つ時間tr(すなわち、tr<te、例えばtr=te-1)へ「ロールバック」されなければならないということをすべてのワーカーに通知する。このようなロールバックによってすら、コールクラスタコンポーネント110により提供される結果は、あたかもロールバックが発生しなかったかのようにアプリケーション又はグラフへ提供され、ワーカー間に分配されたデータへの更新はコールクラスタコンポーネントにより提供された結果と整合したままである。特に、結果は、多くのノード(例えばワーカー)において格納される(例えば、複製又は保持される)までコールクラスタコンポーネント110からアプリケーション又はグラフへリリースされなく、これにより、結果が決して呼び出されることなく無効になるということを保証する。別の言い方をすると、発生するいかなるロールバックも、結果がコールクラスタコンポーネント110によりアプリケーション又はグラフへ提供されるのに先立って必ず発生する。
【0073】
ロールバックはいくつかのワーカー間メッセージが成功裡に受信されなかったので行われなければならないということをルート140が判定すると、ルートはロールバック時間trをコールクラスタコンポーネント110に通知する。現在時間T1がインクリメントされ、そして一般的に、時間tr+1からT1-1を含むT1-1までのすべての活動はあたかもそれらが発生しなかったかのように処理される。コールクラスタコンポーネント110における効果は「状態B(すなわち、エスクロー時間により到達されていない応答時間を有する)の(再生バッファ112内に格納された)すべての要求は状態Aへ戻され、エスクローバッファ114内のいかなる対応する応答115も廃棄される」ということである。次に、状態Aにある要求113(既に状態Aにあったか状態Bから状態Aへ戻されたかのいずれかであるので)はクラスタ120へ再送信される。
【0074】
実行を未だ開始していないが主要ワーカーとバックアップワーカー(すなわち、主要ワーカーが状態Aにあり、バックアップワーカーは状態Fにある)との間で複製された要求へのクラスタ(すなわち、ワーカー150における)の影響は、要求がロールバック時間trより大きい要求時間ta(すなわち、tr<ta)を有する状況に関し最初に考慮される。この図に関して、現在の作業時間はtcで表される。taはtrより大きいので、コールクラスタコンポーネントは、要求が正しく複製されたということを想定することができなく、したがって主要ワーカー及びバックアップワーカーの揮発性メモリ155内に格納されたバージョンの要求は除去される。要求113は、同じ要求id、ridを有するクラスタ120においてコールクラスタコンポーネント110から受信され、新しい要求時間tcへ関連付けられる。要求113を受信すると、主要ワーカーは要求113をその揮発性メモリ155内に格納し、状態Aにある。主要ワーカーは要求113をバックアップワーカー150へ送信し、バックアップワーカー150は要求113をその揮発性メモリ155内に格納し、状態Fにある。次に、主要及びバックアップワーカーにおけるさらなる処理は
図4に示すやり方で進む。
【0075】
「バックアップワーカーが、主要ワーカーから時間tcを有する更新された要求を受信する前に要求に気付かなければ、バックアップワーカーはまた、今や正しく複製されなかった要求により同じやり方で進む」ということに留意されたい。
【0076】
図13~15を参照すると、最初のロールバックシナリオの一例が示される。
図13では、時間taにおいて発行された要求113が、コールクラスタコンポーネント110において再生バッファ112内に格納され、状態Aにある。要求113は、主要ワーカーにおいて揮発性メモリ155内に格納されるが、実行を未だ開始していないので状態Aにある。要求113はまた、バックアップワーカー150bにおいて格納され、状態Fにある。
【0077】
システムを時間tr<taへロールバックするためにロールバック要求が受信される。
図14では、ロールバック要求が受信された後、要求113は、主要ワーカー150aの揮発性メモリ155及びバックアップワーカー150bの揮発性メモリ155から除去される。オリジナル要求113と同じ要求識別子(rid)に関連付けられた新しい要求113’がコールクラスタコンポーネント110によりクラスタ120へ発行される。時間tcにおいて、新しい要求113’は、クラスタ120により受信され、要求時間tcに関連付けられる。クラスタ120は、新しい要求113’に関連付けられた要求時間tcをコールクラスタコンポーネント110に通知する。再生バッファ112内の新しい要求113’は状態Aにある。
【0078】
クラスタでは、新しい要求113’は主要ワーカーへ送信される。主要ワーカー150aは新しい要求113’を要求時間tcと共にその揮発性メモリ155内に格納する。主要ワーカー150aの揮発性メモリ155内に格納された新しい要求113’は状態Aにある。
【0079】
図15を参照すると、主要ワーカーは新しい要求113’をバックアップワーカー150bへ送信する。バックアップワーカー150bは、新しい要求113’をその揮発性メモリ155内に格納し、要求時間tcに関連付けられる。バックアップワーカーの揮発性メモリ155内に格納された更新された要求113’は状態Fにある。
【0080】
次に、クラスタはその通常動作に従って進む(
図5~12に記載のように)。
【0081】
3.2 シナリオ2:tr<ta、実行が始まった
第2の状況では、以前の要求の要求時間taはロールバック時間trより大きい(すなわち、tr<ta)が、要求は実行を開始し、主要ワーカーにおいて実行を完了しなかった(すなわち、要求は主要ワーカーにおいて状態B(恐らく、部分応答115が計算される)にあり、要求はバックアップワーカーにおいて状態Fにある)。この場合、実行は終了され、部分応答115は主要ワーカー及びバックアップワーカーにおいて廃棄され(又は、実行は完了することが許可され、応答は廃棄され)、コールクラスタコンポーネント110は要求113をクラスタ120へ再送信する。主要ワーカーとバックアップワーカーとにおいて格納された要求は状態Aと状態Fとへそれぞれ戻る。主要ワーカーは、あたかも要求が主要ワーカーにおいて実行を開始していなかったかのようなやり方と同じやり方で要求をバックアップワーカーに通知する。
【0082】
図16~18を参照すると、第2のロールバックシナリオの一例が示される。
図16において、時間taにおいて発行された要求113は、コールクラスタコンポーネント110において再生バッファ112内に格納され、状態Aにある。要求113は、主要ワーカー150aにおいて揮発性メモリ155内に格納され、そして、実行を開始したので状態Bにある。要求はまた、バックアップワーカー150bにおいて格納され、状態Fにある。
【0083】
ロールバック要求が、システムを時間tr<taへロールバックするために受信される。
図17では、ロールバック要求が受信された後、要求113は、主要ワーカー150aの揮発性メモリ155及びバックアップワーカー150bの揮発性メモリ155から除去される。オリジナル要求113と同じ要求識別子(rid)に関連付けられた新しい要求113’がコールクラスタコンポーネント110によりクラスタ120へ発行される。時間tcにおいて、新しい要求113’は、クラスタ120により受信され、要求時間tcに関連付けられる。クラスタ120は、新しい要求113’に関連付けられた要求時間tcをコールクラスタコンポーネント110に通知する。再生バッファ112内の新しい要求113’は状態Aにある。
【0084】
クラスタでは、新しい要求113’は主要ワーカーへ送信される。主要ワーカー150aは新しい要求113’を要求時間tcと共にその揮発性メモリ155内に格納する。主要ワーカー150aの揮発性メモリ155内に格納された新しい要求113’は状態Aにある。
【0085】
図18を参照すると、主要ワーカー150aは新しい要求113’をバックアップワーカー150bへ送信する。バックアップワーカー150bは、新しい要求113’をその揮発性メモリ155内に格納し、要求時間tcに関連付けられる。バックアップワーカーの揮発性メモリ155内に格納された更新された要求113’は状態Fにある。
【0086】
次に、クラスタはその通常動作に従って進む(
図5~12に記載のように)。
【0087】
3.3 シナリオ3:tr<ta<tb、実行は完了した
第3の状況では、以前の要求の要求時間taは再びロールバック時間trより大きい。しかし、この場合、我々は、実行は時間tb(すなわち、tr<ta<tb)において完了したということと応答はバックアップワーカーにおいて複製され、コールクラスタコンポーネント110において受信されたということとを仮定する。すなわち、要求113はコールクラスタコンポーネント110において状態Bにあり、要求は主要ワーカー150aにおいて状態Cにあり、要求113はバックアップワーカー150bにおいて状態Gにある。第2の状況と同様に進行中の実行の実行を単に終了する必要があるのではなく、主要及びバックアップワーカーにおいて格納されていた応答115が除去される。
図4を参照して上に導入されたように、時間tbにおいて生成された応答は、特定時間及びその後の時間におけるすべての更新がデータ構造から除去され得るようなやり方で、時間tbに関連付けられた改版されたデータ構造内に格納される。この状態では、時間trより遅く更新されたすべてのデータ版を除去することにより、時間tbにおいてなされた図示された要求の更新は必ず除去され、要求は、実行を待つtcの要求時間を有する主要ワーカーにおいて状態Aへ戻され、主要ワーカーからの応答を待つバックアップワーカーにおいて状態Fへ戻された。コールクラスタコンポーネントにおいて、応答は廃棄され、要求は状態Aへ戻される。
【0088】
図19~21を参照すると、第3のロールバックシナリオの1つの単純な例が示される。
図19では、時間taにおいて発行された要求113は、コールクラスタコンポーネント110において再生バッファ112内に格納される。時間tbにおいて生成された要求115に対する応答はエスクローバッファ114内に格納される。したがって、要求113はコールクラスタコンポーネントにおいて状態Bにある。
【0089】
クラスタでは、要求113及び応答115は主要ワーカー150aにおいて揮発性メモリ155、156内に格納される。したがって、要求113は主要ワーカー150aにおいて状態Cにある。要求113及び応答115はまた、バックアップワーカーにおいて揮発性メモリ155、156内に格納される。したがって、この要求はバックアップワーカー150bにおいて状態Gにある。
【0090】
ロールバック要求が、システムを時間tr<ta<tbへロールバックするために受信される。
図20では、ロールバック要求が受信された後、応答115はコールクラスタコンポーネント110のエスクローバッファ114から除去される。クラスタ120では、要求113と応答115との両方は、主要ワーカー150aの揮発性メモリ155及びバックアップワーカー150bの揮発性メモリ155から除去される。
【0091】
オリジナル要求113と同じ要求識別子(rid)に関連付けられた新しい要求113’がコールクラスタコンポーネント110によりクラスタ120へ発行される。時間tcにおいて、新しい要求113’は、クラスタ120により受信され、要求時間tcに関連付けられる。クラスタ120は、新しい要求113’に関連付けられた要求時間tcをコールクラスタコンポーネント110に通知する。再生バッファ112内の新しい要求113’は状態Aにある。
【0092】
クラスタでは、新しい要求113’が主要ワーカー150aへ送信される。主要ワーカー150aは新しい要求113’を要求時間tcと共にその揮発性メモリ155内に格納する。主要ワーカー150aの揮発性メモリ155内に格納された新しい要求113’は状態Aにある。
【0093】
図21を参照すると、主要ワーカー150aは新しい要求113’をバックアップワーカー150bへ送信する。バックアップワーカー150bは、新しい要求113’をその揮発性メモリ155内に格納し、要求時間tcに関連付けられる。バックアップワーカーの揮発性メモリ155内に格納された更新された要求113’は状態Fにある。
【0094】
次に、クラスタはその通常動作に従って進む(
図5~12に記載のように)。
【0095】
3.4 シナリオ4:ta<tr、実行は始まっていない
第4の状況では、ロールバック時間trはオリジナル要求時間taにおける又はその後(すなわち、ta≦tr)のものであり、オリジナル要求は実行を開始していない。要求は、クラスタ120へ再送信され、主要ワーカーとバックアップワーカーとにおけるオリジナル要求(すなわち、{rid,ta})の後の実行のための待ち行列に入れられる。主要ワーカーはオリジナル要求を実行し、応答(すなわち、{rid,tb})を生成する。次に、主要ワーカーは、再送信された要求(すなわち、{rid,tc})の実行を開始することに進むが、再送信された要求のridに関連付けられた応答が既に存在していることを検知し、再送信された要求の実行を見送る。
【0096】
図22~25を参照すると、第4のロールバックシナリオの一例が示される。
図22では、時間taにおいて発行されたオリジナル要求113は、コールクラスタコンポーネント110において再生バッファ112内に格納され、状態Aにある。オリジナル要求113は主要ワーカー150aにおいて揮発性メモリ155内に格納され、実行を未だ開始していないので状態Aにある。オリジナル要求113はまた、バックアップワーカー150bにおいて格納され、状態Fにある。
【0097】
ロールバック要求が、システムを時間ta<trへロールバックするために受信される。
図23では、オリジナル要求113と同じ要求識別子(rid)に関連付けられた新しい要求113’がコールクラスタコンポーネント110によりクラスタ120へ発行される。時間tcにおいて、新しい要求113’は、クラスタ120により受信され、要求時間tcに関連付けられる。クラスタ120は、新しい要求113’に関連付けられた要求時間tcをコールクラスタコンポーネント110に通知する。再生バッファ112内の要求113は状態Aのままである。
【0098】
クラスタでは、新しい要求113’が主要ワーカー150aへ送信される。主要ワーカー150aは新しい要求113’を受信し、新しい要求113’を実行のためにオリジナル要求113の後の待ち行列に入れる。主要ワーカー150aの揮発性メモリ155内に格納されたオリジナル要求113と新しい要求113’との両方は状態Aにある。
【0099】
図24を参照すると、主要ワーカー150aは新しい要求113’をバックアップワーカー150bへ送信する。バックアップワーカー150bは新しい要求113’を受信し、新しい要求113’を実行のためにオリジナル要求113の後の待ち行列に入れる。バックアップワーカー150bの揮発性メモリ155内に格納されたオリジナル要求113と新しい要求113’との両方は状態Fにある。
【0100】
図25を参照すると、主要ワーカー150aは応答115を生成するためにオリジナル要求113を実行し、応答115はその持続性ストレージ160内に保持される。この結果、オリジナル要求113は主要ワーカー150aにおいて状態Dにある。新しい要求113’は主要ワーカー150aにおいて実行を未だ開始していなく、したがって状態Aにある。
【0101】
応答115はまた、バックアップワーカー150b及びコールクラスタコンポーネント110へ提供された。バックアップワーカー150bは、応答115をその揮発性メモリ156内に格納し、この応答をその持続性ストレージ160に対し保持した。したがって、オリジナル要求113はバックアップワーカーにおいて状態Hにある。コールクラスタコンポーネント110は応答115をそのエスクローバッファ114内に格納した。コールクラスタコンポーネントの再生バッファ112内の要求113は状態Bにある。
【0102】
新しい要求113’が主要ワーカー150aにおいて実行を開始すると、主要ワーカー150aは、新しい要求113’が応答115と同じ要求識別子ridに関連しているということを認識し、したがって、それが複製であるので、新しい要求113’を実行しない。いくつかの例では、応答115はコールクラスタコンポーネントへ再送信され得、コールクラスタコンポーネントは応答115を複製として無視する。
【0103】
次に、クラスタはその通常動作に従って進む(
図5~12に記載のように)。
【0104】
3.5 シナリオ5:ta<tr、実行が始まった
第5の状況では、ロールバック時間trはオリジナル要求時間taにおける又はその後のものであり(すなわち、ta≦tr)、オリジナル要求は実行を開始したが、主要ワーカーにおいて実行を完了していない(すなわち、要求は主要ワーカーにおいて状態Bにあり、要求はバックアップワーカーにおいて状態Fにある)。この状況では、実行は主要ワーカー及びバックアップワーカーにおいて終了される(又は完了することを許容され、応答は廃棄される)(すなわち、主要及びバックアップワーカーにおいて格納された要求は状態A、Fへそれぞれ戻る)。
【0105】
コールクラスタコンポーネント110は要求をクラスタ120へ再送信し、ここで、要求クラスタ120は主要ワーカーとバックアップワーカーとにおけるオリジナル要求(すなわち、{rid,ta})の後の実行のために待ち行列に入れられる。主要ワーカーはオリジナル要求を実行し、応答(すなわち、{rid,tb})を生成する。次に、主要ワーカーは、再送信された要求(すなわち、{rid,tc})の実行を開始することに進むが、再送信された要求のridに関連付けられた応答が既に存在しているということを検知し、再送信された要求の実行を見送る。
【0106】
図26~29を参照すると、第5のロールバックシナリオの一例が示される。
図26では、時間taにおいて発行されたオリジナル要求113は、コールクラスタコンポーネント110において再生バッファ112内に格納され、状態Aにある。オリジナル要求113は主要ワーカー150aにおいて揮発性メモリ155内に格納され、実行を開始したので状態Bにある。オリジナル要求113はまた、バックアップワーカー150bにおいて格納され、状態Fにある。
【0107】
ロールバック要求が、システムを時間ta<trへロールバックするために受信される。
図27では、オリジナル要求113と同じ要求識別子(rid)に関連付けられた新しい要求113’がコールクラスタコンポーネント110によりクラスタ120へ発行される。時間tcにおいて、新しい要求113’はクラスタ120により受信され、要求時間tcに関連付けられる。クラスタ120は、新しい要求113’に関連付けられた要求時間tcをコールクラスタコンポーネント110に通知する。再生バッファ112内の要求113は状態Aのままである。
【0108】
クラスタ120では、主要ワーカー150aの揮発性メモリ155内に格納されたオリジナル要求113の実行は終了され、オリジナル要求113は状態Aへ戻される。新しい要求113’が主要ワーカー150aへ送信される。主要ワーカー150aは新しい要求113’を受信し、新しい要求113’を実行のためにオリジナル要求113の後の待ち行列に入れる。主要ワーカー150aの揮発性メモリ155内に格納された新しい要求113’は状態Aにある。
【0109】
図28を参照すると、主要ワーカー150aは新しい要求113’をバックアップワーカー150bへ送信する。バックアップワーカー150bは新しい要求113’を受信し、新しい要求113’を実行のためにオリジナル要求113の後の待ち行列に入れる。バックアップワーカー150bの揮発性メモリ155内に格納されたオリジナル要求113と新しい要求113’との両方は状態Fにある。
【0110】
図29を参照すると、主要ワーカー150aはオリジナル要求113を実行し、応答115を生成した。応答115はその持続性ストレージ160内に保持される。この結果、オリジナル要求113は主要ワーカー150aにおいて状態Dにある。新しい要求113’は主要ワーカー150aにおいて実行を未だ開始していなく、したがって状態Aにある。
【0111】
応答115はまた、バックアップワーカー150b及びコールクラスタコンポーネント110へ複製された。バックアップワーカー150bは、応答115をその揮発性メモリ156内に格納し、この応答をその持続性ストレージ160に対し保持した。したがって、オリジナル要求113はバックアップワーカーにおいて状態Hにある。コールクラスタコンポーネント110は応答115をそのエスクローバッファ114内に格納し、コールクラスタコンポーネントの再生バッファ112内の要求113’は状態Bにある。
【0112】
新しい要求113’が主要ワーカー150aにおいて実行を開始すると、主要ワーカー150aは、新しい要求113’が応答115と同じ要求識別子ridに関連しているということを認識し、したがって、それが複製であるので、新しい要求113’を実行しない。いくつかの例では、応答115はコールクラスタコンポーネント110へ再送信され得、コールクラスタコンポーネントは応答115を複製として無視する。
【0113】
次に、クラスタはその通常動作に従って進む(
図5~12に記載のように)。
【0114】
3.6 シナリオ6:ta<tb<tr、実行は完了した
第6の状況では、ロールバック時間trは要求時間ta又はその後のものであり、要求はまた、時間tbにおいて、またロールバック時間又はその前(すなわち、ta≦tb≦tr)に実行を完了した。応答がコールクラスタコンポーネント110へ成功裡に提供されれば(すなわち、この要求はコールクラスタコンポーネントにおいて状態Bにある)、ロールバック要求は、要求を再送信させないし、またエスクローバッファ114からのいかなる応答の除去も引き起こさない。すなわち、taに関連付けられたいかなる要求とtbに関連付けられたいかなる応答も不変なままにされる。
【0115】
しかし、応答がコールクラスタコンポーネント110へ成功裡に提供されなければ、コールクラスタコンポーネント110は要求をクラスタ120へ再送信する。再送信された要求を受信すると、主要ワーカーは、再送信された要求(すなわち、{rid,tc})の実行を開始するが、要求識別子ridに関連付けられた応答115が既に存在しているということを検出する。したがって、再送信された要求は実行されなく、オリジナル要求の実行により生成された応答がコールクラスタコンポーネント110へ再送信される。コールクラスタコンポーネント110は、いつ応答がエスクローから送信され得るかをコールクラスタコンポーネントにおいて判定するために使用される応答時間tbを有する応答を受信する。
【0116】
図30~32を参照すると、第6のロールバックシナリオの一例が示される。
図30では、時間taにおいて発行されたオリジナル要求113がコールクラスタコンポーネント110において再生バッファ112内に格納される。オリジナル要求113に対する応答115が時間tbにおいて生成されたが、コールクラスタコンポーネント110のエスクローバッファ114へ到達しなかった。したがって、要求113はコールクラスタコンポーネント110において状態Aにある。
【0117】
クラスタでは、要求113及び応答115は主要ワーカー150aにおいて揮発性メモリ155、156内に格納され、したがって要求113は主要ワーカー150aにおいて状態Cにある。要求113及び応答115はまた、バックアップワーカーにおいて揮発性メモリ155、156内に格納される。したがって、この要求はバックアップワーカー150bにおいて状態Gにある。
【0118】
ロールバック要求が、システムを時間ta<tb<trへロールバックするために受信される。
図31では、オリジナル要求113と同じ要求識別子(rid)に関連付けられた新しい要求113’がコールクラスタコンポーネント110によりクラスタ120へ発行される。時間tcにおいて、新しい要求113’は、クラスタ120により受信され、要求時間tcに関連付けられる。クラスタ120は、新しい要求113’に関連付けられた要求時間tcをコールクラスタコンポーネント110に通知する。
【0119】
新しい要求113’はクラスタ120内の主要ワーカー150aへ送信される。主要ワーカー150aは新しい要求113’を受信し、新しい要求113’を実行のために揮発性メモリ155内の待ち行列に入れる。主要ワーカー150aの揮発性メモリ155内に格納されたオリジナル要求113は状態Cのままであり、主要ワーカー150aの揮発性メモリ155内に格納された新しい要求113’は状態Aにある。
【0120】
図32を参照すると、主要ワーカー150aが新しい要求の実行を開始すると、主要ワーカー150aは、新しい要求113’がオリジナル要求113と同じ要求識別子ridを有するということと、要求識別子ridに関連付けられた応答115が主要ワーカー150aにおいて既に存在しているということとを認識する。したがって、主要ワーカー150aは新しい要求113’を実行しないが、その代りに応答115をコールクラスタコンポーネント110へ再送信する。コールクラスタコンポーネント110は応答115を受信し、これをエスクローバッファ114内に格納する。コールクラスタコンポーネント110のエスクローバッファ114内に格納された応答115により、コールクラスタコンポーネント110は状態Bにある。
【0121】
次に、クラスタはその通常動作に従って進む(
図5~12に記載のように)。
【0122】
3.7 シナリオ7:ta<tr<tb、実行は完了した
第7の状況では、ロールバック時間trは要求時間taにおける又はその後のものであり、要求はロールバック時間後の時間tb(すなわち、ta≦tr<tb)において実行を完了しており、ワーカー間の応答の複製は成功しなかったかもしれない。ワーカーはtr後の時間を有するすべての応答115を廃棄する。バックアップワーカーにおいて格納された要求113は状態Fへ戻り、主要ワーカーにおいて格納された要求113は状態Bへ戻る。コールクラスタコンポーネント110は、エスクローバッファ114内のすべての応答115を廃棄し、再生バッファ112内に格納された要求113を状態Aへ戻し、要求113を、要求を再処理するクラスタ120へ再送信する。
【0123】
図33~35を参照すると、第7のロールバックシナリオの一例が示される。
図33では、時間taにおいて発行された要求113がコールクラスタコンポーネント110において再生バッファ112内に格納される。時間tbにおいて生成された要求115に対する応答はエスクローバッファ114内に格納される。したがって、要求113はコールクラスタコンポーネント110において状態Bにある。
【0124】
クラスタ120では、要求113及び応答115は主要ワーカー150aにおいて揮発性メモリ155、156内に格納される。したがって、要求113は主要ワーカー150aにおいて状態Cにある。要求113はまた、バックアップワーカー105において揮発性メモリ155、156内に格納されるが、応答115はバックアップワーカー150bへ成功裡に複製されていないかもしれない。したがって、要求はバックアップワーカー150bにおいて状態Gにないかもしれない。
【0125】
ロールバック要求が、システムを時間ta<tr<tbへロールバックするために受信される。
図34では、コールクラスタコンポーネント110のエスクローバッファ114内に格納された応答115が除去される。オリジナル要求113と同じ要求識別子(rid)に関連付けられた新しい要求113’がコールクラスタコンポーネント110によりクラスタ120へ発行される。時間tcにおいて、新しい要求113’は、クラスタ120により受信され、要求時間tcに関連付けられる。クラスタ120は、新しい要求113’に関連付けられた要求時間tcをコールクラスタコンポーネント110に通知する。再生バッファ112内の新しい要求113’は状態Aにある。
【0126】
クラスタ120では、バックアップワーカー150bは、tr後の時間に関連付けられたその揮発性メモリ156内に格納されたいかなる応答も除去し、したがって、状態Fへ戻る。主要ワーカー150aは状態Bへ戻る。新しい要求113’が主要ワーカー150aへ送信される。主要ワーカーは新しい要求113’を受信し、新しい要求113’を実行のためにオリジナル要求113の後の待ち行列に入れる。主要ワーカー150aの揮発性メモリ155内に格納された新しい要求113’は状態Aにある。
【0127】
図35では、主要ワーカー150aは、オリジナル要求113の実行を完了し、時間tdにおいて新しい応答115’を生成する。主要ワーカー150aは、新しい応答115’をバックアップワーカー150b及びコールクラスタコンポーネント110へ送信し、主要ワーカー150aの揮発性メモリ内に格納されたオリジナル要求113の状態を状態Cへ移行させる。バックアップワーカー150bは新しい応答115’を受信し、新しい応答115’をその揮発性メモリ155内に格納し、バックアップワーカーの揮発性メモリ155内に格納されたオリジナル要求113を状態Gへ移行させる。コールクラスタコンポーネント110は新しい応答115’を受信し、それをエスクローバッファ114内に格納し、再生バッファ112内に格納された新しい要求113’を状態Bへ移行させる。
【0128】
新しい要求113’が主要ワーカー150aにおいて実行を開始すると、主要ワーカー150aは、新しい要求113’がオリジナル要求113と同じ要求識別子ridを有するということを認識し、したがって、それが複製であるので、新しい要求113’を実行しない。
【0129】
次に、クラスタはその通常動作に従って進む(
図5~12に記載のように)。
【0130】
3.8 シナリオ8:ta<tr<tb、実行は完了した
最後に、第8の状況では、主要ワーカーが失われる(lost)(例えば、失敗することが知られる)と要求を処理するワーカーが存在する。ごく一般的には、失われた主要ワーカーが応答を提供するのを待っているバックアップワーカー(すなわち、バックアップワーカーは状態Fにある)におけるいかなる要求によっても、バックアップワーカーは主要ワーカーとなるように促される。例えば、当該ワーカーからのメッセージに対する返答を受信しないことにより、ワーカーが失われたことを検知すると、ルート140は、最後に複製された時間に等しい時間tr(すなわち、tr=T2)へのロールバックを開始する。バックアップワーカーは、失われたワーカーに対処するための新しい区画情報を伴い得る時間trへのロールバック要求を受信すると、バックアップワーカーは、資源が要求を実行するのを待っている状態Aへ要求の状態を変更することにより新しい主要ワーカーとして働き始める。
【0131】
図36~37を参照すると、第8のロールバックシナリオの一例が示される。
図36では、時間taにおいて発行された要求113がコールクラスタコンポーネント110において再生バッファ112内に格納され、状態Aにある。要求113は主要ワーカー150aにおいて揮発性メモリ155内に格納され、実行を開始したが実行を終了しなかったので状態Bにある。要求はまた、バックアップワーカー150bにおいて格納され、状態Fにある。要求113の実行中、主要ワーカー150aは失敗する又は失われる。
【0132】
図37では、ルートは、最後に複製された時間に等しい時間trへのロールバックを要求した。この時、バックアップワーカー150bは主要ワーカー150aとなるように促され、その状態を状態Aへ変更する。別のワーカー150cが状態Fのバックアップワーカーとして割り当てられる。
【0133】
次に、クラスタはその通常動作に従って進む(
図5~12に記載のように)。
【0134】
4.ルートノード
次にルート140の動作に移ると、上に紹介したように、ルートは現在の作業時間(間隔)T1 144を定期的にインクリメントする。一般的に、作業時間を更新する際、ルートは一組の時間(T1,T2,T3)144~146をすべてのワーカーへ分配(例えば同報通信)する。それに応じて、ワーカーは、それに基づきT2及び/又はT3時間を更新し得る情報をルートへ提供する。
【0135】
各ワーカーは、特定作業時間に関連付けられた一組のカウンタ151~152を保持する。1つのカウンタ151は、Sent(t1)と呼ばれる作業時間t1に関連付けられ、バックアップワーカーへ送信された要求時間t1を有する要求の当該ワーカーからの通信の数とバックアップワーカーへ送信された応答時間t1を有する応答の数とをカウントする。
図4では、Sent(ta)はバックアップワーカーへ送信された要求時間taを有する要求毎に状態Aにおいて更新され、Sent(tb)はバックアップワーカーにおける複製のために送信される時間tbにおいて生成された応答毎にインクリメントされる。Sent()カウンタは、ワーカーからコールクラスタコンポーネントへ送信されたメッセージに関してはインクリメントされないということに留意されたい。別のカウンタ152、Rec(t1)は、時間t1に関連付けられたワーカーにおいて受信される通信の数をカウントする。特に、バックアップワーカーは、状態Fに入ったときの要求時間taを有する要求の複製を受信するとRec(ta)をインクリメントし、状態Gに入ったときの時間tbにおいて生成された応答の複製を受信するとRec(tb)をインクリメントする。各ワーカーはワーカーwのこれらのカウンタ(Sentw(t)及びRecw(t)で表される)のそれ自体のローカルコピーを有する。時間t1に関連付けられて送信されたすべての通信もまたそれらの宛先において受信される限りにおいて、すべてのワーカーw全体にわたるSentw(t)の総和がワーカーw全体にわたるRecw(t)の総和に等しいということは明らかなはずである。
【0136】
時々、例えばルート140から現在時間(T1,T2,T3)の同報通信を受信することに応答して、ワーカー150のそれぞれは、複製時間T2より大きいすべての時間のその現在のカウントSent(t)151、Rec(t)152を送信する。これらのカウントは、ルートがT2より大きい各時間tのSent(t)とRec(t)との合計を判定するように、ルートにおいて受信され集計され、対応する時間に関連付けられてカウンタ141と142へ格納される。Sent(T2+1)がRec(T2+1)に等しければ、時間T2+1からのすべての送信は受信されており、T2は次の複製時間になるようにインクリメントされる。この処理は、Sent(T2+1)がRec(T2+1)に等しくなくなるか又はT2+1がT1に到達するまで、繰り返される。次に、このインクリメントされたT2時間(145)はルートからの次の同報通信において使用される。
【0137】
上に紹介したように、ワーカーにおけるデータ更新は、最初に揮発性メモリ内にジャーナル化され、このジャーナルは持続性ストレージへ折々に書き込まれる。各ワーカーは、持続性メモリ内のジャーナル化された変更を最大複製時間T2までの変更に関し恒久的なものにすることができる。一般的に、各ワーカーwは時間T3(w)にわたるすべての変更を恒久的なものにする機会を有し、通常、様々なワーカーは異なる時間に達した。現在時間の同報通信に応答してRec()及びSent()をルートへ戻すことに加えて、各ワーカーはまた、ルートにおいて又はルートへ戻る通信経路上でのいずれかでmin()演算に従って集計されるそのT3(w)時間を戻す。すなわち、ルートはT3=minwT3(w)を判定し、現在時間を配布する次の時間にT3のこの新しい値を配布する。
【0138】
いくつかの実施形態では、ルートは、ルートとワーカーのそれぞれとの間の直接(例えばユニキャスト)通信において時間組(T1,T2,T3)を配布する。他の実施形態では、この組はフラッディングベース(flooding-based)同報通信などの別のやり方で配布される。別の実施形態では、この組は、この組の各受側がこの組を複数の別の受側へ転送する所定のツリー構造分配ネットワークに沿って配布され、その結果、最終的にすべてのワーカーがこの時間組を受信した。
【0139】
ワーカーからのカウントの集計は各ワーカーとルートノードとの間のユニキャスト通信により行われ得、ルートはすべてのワーカーにわたる完全な加算を行う。より効率的な解決策として、カウントは時間組と同じ経路に沿って返送され得、経路内の中間ノードはカウントの合計の部分的集計を行い、これにより、ルートによる加算の負担を分散し、それにもかかわらずすべてのワーカーにわたるカウントの合計を得る。
【0140】
代替動作モードでは、応答は、応答時間が保持されるよりむしろ複製される場合にコールクラスタコンポーネントからリリースされ得る。このようにして、応答は、より少ない遅延でもってグラフへ提供され得、応答はクラスタストレージ内で未だ持続的でないかもしれない可能性がある。
【0141】
上に紹介したように、要求の実行の応答は改版されたデータ構造内に格納される。1つのこのようなデータ構造では、データ項目の各更新は別個に回復可能なバージョンとして格納され、当該バージョンは更新に関連付けられ時間でタグを付けられる。例えば、データ構造は、組(tb,値)のリストとしてアクセスキー毎に少なくとも概念的に格納され得、ここで、tbは値の更新の時間である。様々な時間の値は、下部構造を共有してもよいし格納の他の最適化を使用してもよい。いくつかの例では、これらの値は時間同士間のデータ値の編集に基づき格納される。一例として、値はツリーベース構造として表され得、各バージョンは、旧バージョンから次バージョンを生成するのに十分な「前方」増分操作として、又は現バージョンから旧バージョンを再構築するのに十分な「後方」増分操作として格納され得る。上に論述したように、この種の改版されたデータ構造はロールバック時間後にすべての更新をロールバックすることを許容する。データ項目に対するすべての更新を保持するのではなく、更新時間の開始に対する更新だけが保持され、この結果、任意の更新時間の開始へのロールバックが成し遂げられ得る。
【0142】
「ルートが複製時間T2をインクリメントした後、ワーカーは当該時間における又はそれより前の時間のバージョンへロールバックすることを要求されることはない」ということを認識すべきである。したがって、改版されたデータ構造の最適化は、複製時間T2における又はそれより前の時間のバージョンがデータ構造から除去され得るということである。
【0143】
いくつかの実施形態では、いくつかの要求が、それらの実行時間が短いという意味で「軽量」であり、したがって、バックアップワーカーにおける要求の実行は、主要ワーカーからバックアップワーカーへの応答の複製より少ない資源を消費し得る。このような実施形態では、主要ワーカーからバックアップワーカーへの応答の複製は行われない。各ワーカーは処理を異なる時間に完了し得る。ワーカーの間のデータの同期を維持するために、主要ワーカーは、上述のように終了時間tbを配布し、バックアップワーカーは、ローカルに計算された応答をあたかも当該時間に計算されたかのように処理する。
【0144】
代替の実施形態では、コールクラスタコンポーネントは、ルートから時間組を受信するという意味でクラスタに参加し、Sent()カウントとRec()カウントとをルートへ戻す。この実施形態では、コールクラスタコンポーネントは、要求の複製中にワーカーにより使用される要求の要求時間を割り当てる。ロールバックが発生すると、コールクラスタコンポーネントは保持している要求の要求時間を知るので、ロールバック時間後に要求だけを再送信するだけでよく、ロールバック時間に又はその前に生成された応答を廃棄しない。ワーカーの動作は、コールクラスタコンポーネントのこの動作に対処するために修正される。
【0145】
5.代替案
より一般的には、ta<trである上記ロールバックシナリオ4~8では、要求を再送信する際、コールクラスタコンポーネント110は、オリジナル要求が時間taにおいて送信されたということに気付かない(またそれに注意も行わない)。一方、クラスタ120は、ロールバックするべきかどうかを判定するために当該時間を使用するのでオリジナル要求の要求時間を考慮する必要がある。したがって、コールクラスタコンポーネント110が、ta<tr<tcとなるように要求(要求識別子ridを有する)をクラスタ120へ再送信すると、要求は、主要ワーカー150aにおいて受信され、時間tcに関連付けられる。主要ワーカー150aは要求をバックアップワーカー150bへ転送する。この状況では、主要ワーカーは再送信された要求(すなわち、{rid,tc})を実行する前にオリジナル要求(すなわち、{rid,ta})を実行し得る。再送信された要求(すなわち、{rid,tc}を実行することに進むと、主要ワーカー150aは、オリジナル要求(すなわち、{rid,ta})の応答が既に保持されているので、再送信された要求を複製として処理することになる。
【0146】
いくつかの例では、要求はその後のタスクを生み出す(「タスクチェイニング:task chaining」と時折呼ばれる)。このような例では、要求の応答は、生み出されたタスクが完了される後まで生成されない。いくつかの例では、要求{rid,ta}に対する応答が格納されれば、その応答をコールクラスタコンポーネントへ戻す。しかし、要求{rid,ta}に対する応答は要求{rid,ta}が未だ完了していないので未だ存在しなければ、複製ridを有するその後の要求{rid,tc}は、クラスタが「オリジナル要求は最終的に完了しそして応答(コールクラスタコンポーネントへ戻される)を生成することになる」ということを知るので、無視される。
【0147】
上述の例では、クラスタが要求を受信すると、クラスタは時間(例えばta)と要求とを関連付け、次に、この時間をコールクラスタコンポーネントに通知する。コールクラスタコンポーネントはこの時間とその応答バッファ内に格納された要求とを関連付ける。コールクラスタコンポーネントの再生バッファ内の要求に関連付けられた時間は、ロールバックの場合に要求を選択的に再生するためにコールクラスタコンポーネントにより使用され得る。しかし、いくつかの例では、クラスタ又はコールクラスタコンポーネントのいずれも要求と時間とを関連付けない。これらの例では、コールクラスタコンポーネントは、ロールバックシナリオの場合、要求を再生する際それほど選択的なものではない。例えば、コールクラスタコンポーネントは、ロールバック要求の場合、その再生バッファ内のすべての要求を系統的に再生し得る。
【0148】
6.実施形態
上述のコンピュータクラスタ管理手法は、例えば、好適なソフトウェア指示を実行するプログラム可能コンピュータシステムを使用して実施されてもよいし、フィールドプログラマブルゲートアレイ(FPGA)などの好適なハードウェアにおいて又はいくつかのハイブリッド形態で実施されてもよい。例えば、プログラム手法では、ソフトウェアは、それぞれが少なくとも1つのプロセッサ、少なくとも1つのデータストレージシステム(揮発性及び/又は不揮発性メモリ及び/又はストレージ要素を含む)、少なくとも1つのユーザインターフェース(少なくとも1つの入力デバイス又はポートを使用することにより入力を受信するための、及び少なくとも1つの出力デバイス又はポートを使用することにより出力を提供するための)を含む1つ又は複数のプログラムされた又はプログラム可能なコンピュータシステム(分散クライアント/サーバ又はグリッドなどの様々なアーキテクチャのものであり得る)上で実行する1つ又は複数のコンピュータプログラム内の手順を含み得る。ソフトウェアは、例えばデータフローグラフの設計、構成、及び実行に関係するサービスを提供するより大きなプログラムの1つ又は複数のモジュールを含み得る。プログラムのモジュール(例えばデータフローグラフの要素)は、データレポジトリ内に格納されたデータモデルに準拠するデータ構造又は他の編成されたデータとして実装され得る。
【0149】
ソフトウェアは、非一時的形式で格納され得、例えば、媒体の物理的性質(例えば表面のピット及びランド、磁区、又は電荷)を一定期間(例えばダイナミックRAMなどのダイナミックメモリデバイスのリフレッシュ期間同士間の時間)の間使用することにより揮発性又は不揮発性ストレージ媒体又は任意の他の非一時的媒体内に具現化される。指示をロードすることに備えて、ソフトウェアは、CD-ROM又は他のコンピュータ可読媒体(例えば、汎用又は特殊用途コンピュータシステム又はデバイスにより可読な)などの有形な非一時的な媒体上で提供されてもよいし、ネットワークの通信媒体上で、それが実行されるコンピュータシステムの有形な非一時的媒体へ配送されてもよい(例えば、伝播信号において符号化されてもよい)。処理の一部又はすべては、特殊用途コンピュータ上で、又はコプロセサ又はフィールドプログラマブルゲートアレイ(FPGA:field-programmable gate array)又は特定用途向け集積回路(ASIC:application-specific integrated circuit)などの専用ハードウェアを使用することにより行われ得る。処理は、ソフトウェアにより規定された計算の様々な部分が様々なコンピュータ要素により実行される分散的やり方で実施され得る。このような各コンピュータプログラムは好適には、本明細書で説明された処理を行うためにストレージデバイス媒体がコンピュータにより読み出されると、コンピュータを構成及び操作するための汎用又は特殊用途プログラム可能コンピュータによりアクセス可能なストレージデバイスのコンピュータ可読格納媒体(例えば固体メモリ又は媒体、又は磁気又は光学媒体)上に格納される又はそれへダウンロードされる。本発明システムはまた、コンピュータプログラムにより構成される有形な非一時的媒体として実現されると考えられ得、ここでは、そのように構成された媒体は、コンピュータシステムを、本明細書に記載の処理のうちの1つ又は複数を実行するように特定及び所定やり方で動作させる。
【0150】
本発明の多くの実施形態が説明された。それにもかかわらず、これまでの説明は、例示することを意図しているが、添付の特許請求の範囲により規定される本発明の範囲を制限しないように意図されているということを理解すべきである。したがって、他の実施形態もまた以下の特許請求の範囲に含まれる。例えば、様々な修正が本発明の範囲から逸脱することなく行われ得る。加えて、上に記載された工程のいくつかは、順序非依存であり得、したがって記載されたものと異なる順序で実行され得る。