JP2017535853A - 計算の非決定性の下でのリカバリ及び耐障害 - Google Patents

計算の非決定性の下でのリカバリ及び耐障害 Download PDF

Info

Publication number
JP2017535853A
JP2017535853A JP2017519919A JP2017519919A JP2017535853A JP 2017535853 A JP2017535853 A JP 2017535853A JP 2017519919 A JP2017519919 A JP 2017519919A JP 2017519919 A JP2017519919 A JP 2017519919A JP 2017535853 A JP2017535853 A JP 2017535853A
Authority
JP
Japan
Prior art keywords
node
spawn
spawner
generation
recovery
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017519919A
Other languages
English (en)
Other versions
JP6313907B2 (ja
Inventor
クレイグ ダブリュー. スタンフィル
クレイグ ダブリュー. スタンフィル
Original Assignee
アビニシオ テクノロジー エルエルシー
アビニシオ テクノロジー エルエルシー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by アビニシオ テクノロジー エルエルシー, アビニシオ テクノロジー エルエルシー filed Critical アビニシオ テクノロジー エルエルシー
Publication of JP2017535853A publication Critical patent/JP2017535853A/ja
Application granted granted Critical
Publication of JP6313907B2 publication Critical patent/JP6313907B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Retry When Errors Occur (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

少なくとも1つの処理ノードを含むコンピューティングシステムにおいて耐障害及びリカバリを促進するための方法が、第1の処理ノードにおいて、スポーナのスポーンが第1の世代インジケータを継承するように、第1の世代インジケータを割り当てられたスポーナを使用して第1のスポーンを生じさせることと、ノードのリカバリ情報を生じさせるためのチェックポイント間隔を開始することと、スポーナがスポーンを生じさせることを中断させることと、第1の世代インジケータとは異なる第2の世代インジケータをスポーナに割り当てることと、スポーナが第2の世代インジケータを継承する第2のスポーンを生じさせるようにスポーナを再開することと、第2のスポーンがメモリに書き込む範囲を制御することと、チェックポイントの間に獲得されたノードのリカバリ情報を永続的ストレージにコミットした後、第2のスポーンがメモリに書き込むことができる範囲の制御を解放することとによって第1の処理ノードの可用性及びリカバリを促進することを含む。

Description

関連出願の相互参照
本出願は、米国特許出願第62/065,941号明細書の2014年10月20日の優先日の利益を主張するものであり、この米国特許出願の内容は、参照により本明細書に組み込まれる。
この説明は、計算の非決定性が存在する状況でのリカバリ及び耐障害に関する。
計算システムは、さまざまな理由で故障することがある。そのようなシステムが故障するとき、データが失われる可能性がある。そのようなデータの喪失を防止するか又は少なくとも最小限にするための対策を取ることが望ましい。
そのような対策の例は、データベースの原子性、一貫性、コミットされるまでの独立性、コミットされるときの永続性(ACID,Atomic, Consistent, Isolated until committed, Durable when committed)を含む。これらの知られている対策は、極めて堅牢である。これらの対策は、耐障害性も持たされながら、正確性の非常に高い基準を満たすようにされ得る。
しかし、この堅牢性のすべては、代償を伴う。故障を起こさないようにするための知られている方法は、レイテンシー(latency)が長く、ときには、装置が利用不可能である長い期間を引き起こす。したがって、これらの対策は、大量のトランザクションに関しては最善でない。
加えて、一部の知られている方法は、決定性の(deterministic)計算を必要とする。決定性の計算においては、タスクが実施される(performed)順序が決まっており、計算の結果は、計算が行われる(carried out)度に毎回同じである。これらの知られている方法が、どのようにして非決定性の計算環境を効率的に扱うように適合され得るのかは、はっきりしていない。
コンピューティング装置が互いに協力する複数の処理ノードを含むときには、さらなる複雑性が生じる。そのような装置においては、装置の1つのノードが故障し、その他のノードが動き続けることがあり得る。その故障したノードがリカバリするとき、これは、その他のノードがその故障したノードがそうであると期待する状態にその故障したノードが自身を復元したという保証にはならない。
一態様において、本発明は、少なくとも1つの処理ノードを含むコンピューティングシステムにおいて耐障害及びリカバリを促進するための方法を特徴とする。そのような方法は、第1の処理ノードの可用性及びリカバリを促進するステップであって、第1の処理ノードにおいて、ノードにおいてスポーナ(spawner)を実行することであって、スポーナが、実行中に、第1のスポーン(spawn)を生じさせ、スポーナを実行することが、スポーナに第1の世代インジケータを割り当てることを含み、第1のスポーンが、第1の世代インジケータを継承する、実行することと、チェックポイント間隔を開始することであって、チェックポイント間隔の終わりに、ノードのリカバリのために使用可能であるノードのリカバリ情報が永続的ストレージにコミットされ、チェックポイント間隔を開始することが、スポーナがスポーンを生じさせることを中断させること、第1の世代インジケータとは異なる第2の世代インジケータをスポーナに割り当てること、スポーナを再開し、それによって、スポーナが第2のスポーンを生じさせることを可能にすることであって、第2のスポーンが第2の世代インジケータを継承する、可能にすること、及び第2のスポーンがメモリに書き込む範囲(extent)を制御することを含む、開始することと、ノードのリカバリ情報をコミットした後、第2のスポーンがメモリに書き込むことができる範囲の制御を解放することとを含む、ステップを含む。
一部の実践においては、第2のスポーンがメモリに書き込む範囲を制御することが、第2のスポーンがメモリへの書き込みを完了することを防止することを含む。これらの中には、リカバリ情報がコミットされた後にメモリへの書き込みを最終的に完了するために第2のスポーンがメモリへの書き込みをキューに入れることを許すステップをさらに含む実践がある。
その他の実践においては、第2のスポーンがメモリに書き込む範囲を制御することが、書き込み動作が交換可能な動作であると決定することと、交換可能な動作の完了を可能にすることとを含む。これらの実践の中には、書き込み動作が交換可能な動作であると決定することが、書き込み動作が変数をインクリメントすること(incrementing)を含むと決定することを含む実践と、書き込み動作が交換可能な動作であると決定することが、書き込み動作が指定された位置にレコードを挿入することを含むと決定することを含む実践とがある。
また、本発明の実践の中には、スポーナを中断させた後、期限を設定し、それによって、第1のタスクの世代インジケータを有するすべてのスポーンが完了するまで実行されるための時間を提供し、第1の世代インジケータを有するスポーンの状態を保存しなくてはならないことに関連するオーバーヘッドを避けるステップをさらに含む実践がある。これらの実践の中には、第1のスポーンが期限の時点でまだ実行されている場合に第1のスポーンを中断するステップを含む実践と、例えば、第1のスポーンが期限の時点でまだ実行されている場合に第1のスポーンにおいて第1のタスクの世代インジケータを第2のタスクの世代インジケータに変更することによって第1のスポーンが期限までに実行を完了することができなかった結果としての中断を避けることを可能にするステップを含む実践とがある。
第1のノードが、ノードの世代インジケータを有する場合、本発明のさらなる実践は、スポーンを第2のノードにマイグレーションするマイグラント(migrant)にさせるステップであって、第2のノードがノードの世代インジケータを有する、ステップを含む。これらの実践の中には、第2のノードのノードの世代数が、第2のノードが第1のノードより若い世代であることを示し、その場合に、方法が、マイグラントの入ってくるマイグレーション側での若返り(immigration-side youthening)か、又はマイグラントの出て行くマイグレーション側での若返り(emigration-side youthening)かのどちらかによって、マイグラントを若くする(youthen)ステップをさらに含む実践がある。
場合によっては、第1のノードは、各ノードがノードの世代数を有する複数ノードシステム内のノードであり、複数ノードシステムは、少なくとも第2のノードを含む。これらの場合、第2のノードが故障後にリカバリすると、第1のノードが第2のノードのノードの世代数に対応する状態にロールバックする本発明の実践が存在する。
その他の場合、第1のノードは、各ノードがノードの世代数を有する複数ノードシステム内のノードであり、複数ノードシステムは、少なくとも第2のノードを含む。これらの場合、本発明の一部の実践は、第1のノードが故障後にリカバリすると、チェックポイントからコミットされた作業を復元し、ジャーナルからコミットされていない作業を復元することによって第2のノードのノードの世代数に対応する状態に第1のノードをロールフォワードさせるステップを含む。
第1のノードが、各ノードがノードの世代数を有する複数ノードシステム内のノードである場合、本発明の実践は、第1のノードが特定の行為を行う実践を含む。これらは、チェックポイントが行われるべきであることを示すメッセージをマスタノードから受信するステップと、応答して第1のノードのノードの世代数を若くするステップと、スポーナがスポーンを生じさせることを中断させるステップと、スポーナの状態をリカバリするためのスポーナリカバリ情報を保存するステップと、スポーナを再開するステップと、第1のノードにおいてさらなるより古い世代の入ってくるマイグラント(immigrant)が期待されないと決定するステップと、決定に応答して、永続的ストレージにノードのリカバリ情報をコミットするステップとを含む。これらの実践の中には、期限を設定し、期限が経過すると、より若い世代のスポーンが実行を継続する一方でまだ実行されているすべてのより古い世代のスポーンを中断するステップをさらに含む実践がある。
場合によっては、第1のノードは、複数ノードシステム内のノードである。そのような場合、本発明の代替的な実践は、第2のノードにおいて第1のノードの作業メモリの複製コピーを保存し、第1のノードが故障すると、故障しなければ第1のノードによって行われたであろう処理のために複製コピーを一時的に使用し、第1のノードがリカバリすると、その後の計算が第1のノードによって行われ得るように第1のノードにおいてメモリを更新するために必要とされる情報を第1のノードに伝達するステップを含む。
別の態様において、本発明は、コンピュータ可読媒体に非一時的形態に記憶され、実行されるときに、少なくとも1つの処理ノードを含むコンピューティングシステムにおいて耐障害及びリカバリを促進するソフトウェアを特徴とする。ソフトウェアは、コンピューティングシステムに、第1の処理ノードの可用性及びリカバリを促進させるための命令を有し、可用性及びリカバリを促進することが、第1の処理ノードにおいて、ノードにおいてスポーナを実行することであって、スポーナが、実行中に、第1のスポーンを生じさせ、スポーナを実行することが、スポーナに第1の世代インジケータを割り当てることを含み、第1のスポーンが、第1の世代インジケータを継承する、実行することと、チェックポイント間隔を開始することであって、チェックポイント間隔の終わりに、ノードのリカバリのために使用可能であるノードのリカバリ情報が永続的ストレージにコミットされ、チェックポイント間隔を開始することが、スポーナがスポーンを生じさせることを中断させること、第1の世代インジケータとは異なる第2の世代インジケータをスポーナに割り当てること、スポーナを再開し、それによって、スポーナが第2のスポーンを生じさせることを可能にすることであって、第2のスポーンが第2の世代インジケータを継承する、可能にすること、及び第2のスポーンがメモリに書き込む範囲を制御することを含む、開始することと、ノードのリカバリ情報をコミットした後、第2のスポーンがメモリに書き込むことができる範囲の制御を解放することとを含む。
さらに別の態様において、本発明は、永続的ストレージを含むデータストレージシステムと、第1の処理ノードの可用性及びリカバリを促進するように構成された少なくとも1つのプロセッサを含む1又は2以上の処理ノードであって、可用性及びリカバリを促進することが、第1の処理ノードにおいて、ノードにおいてスポーナを実行することであって、スポーナが、実行中に、第1のスポーンを生じさせ、スポーナを実行することが、スポーナに第1の世代インジケータを割り当てることを含み、第1のスポーンが、第1の世代インジケータを継承する、実行することと、チェックポイント間隔を開始することであって、チェックポイント間隔の終わりに、ノードのリカバリのために使用可能であるノードのリカバリ情報が永続的ストレージにコミットされ、チェックポイント間隔を開始することが、スポーナがスポーンを生じさせることを中断させること、第1の世代インジケータとは異なる第2の世代インジケータをスポーナに割り当てること、スポーナを再開し、それによって、スポーナが第2のスポーンを生じさせることを可能にすることであって、第2のスポーンが第2の世代インジケータを継承する、可能にすること、及び第2のスポーンがメモリに書き込む範囲を制御することを含む、開始することと、ノードのリカバリ情報をコミットした後、第2のスポーンがメモリに書き込むことができる範囲の制御を解放することとを含む、1又は2以上の処理ノードとを特徴とする。
態様は、以下の利点のうちの1又は2以上を有する可能性がある。
本明細書において説明される耐障害及びリカバリを促進するための技術は、コンピューティングシステムが可用性が高いままであることを可能にする。特定のACIDの制約を戦略的に緩めることによって、コンピューティングシステムは、より極端な対策の大きなオーバーヘッドなしにリカバリ能力を提供し続けることができる。したがって、有用な作業のために利用され得るより多くのコンピューティングリソースが存在する。また、スポーン(例えば、オペレーティングシステムのプロセス又はスレッド)がメモリに書き込む範囲を制御することによって、耐障害メカニズムの完全性が維持されることを保証しながら、有用な作業が、チェックポイント間隔の間、引き続き実現され得る。したがって、これらの技術は、故障の際と正常な故障のない動作中との両方において、コンピューティングシステムの内部機能を拡張する。
計算の非決定性が存在する状況で耐障害及びリカバリを行うための単一ノードコンピューティング装置を示す図である。 図1のノードの動作中に遭遇されるチェックポイント間隔及び作動間隔(working interval)を示す図である。 スポーンが図2のチェックポイント間隔の間に完了するまで施行(run)されることを可能にされる方法を示す図である。 スポーンするプロセスが図2のチェックポイント間隔の間にスポーンを生じさせ続けることができる方法を示す図である。 メモリへの書き込みをキューに入れることによってスポーンがチェックポイント間隔の間作動し続けることができる方法を示す図である。 複数ノードコンピューティング装置を示す図である。 図7の装置からのノード内に同時に存在する2つの世代を示す図である。 チェックポイントメッセージに応答してスレーブノードによって行われる方法のステップを示す図である。 マイグラントの世代数をインクリメントすることを含む方法のステップを示す図である。 故障後のリカバリのための方法のステップを示す図である。 より迅速なリカバリを可能にするために別ノードに保有される複製を示す図である。 迅速なリカバリのために図11に示された複製を使用するための手順を示す図である。 図9に示された複数のノードに関連した、図5に示された方法の実行の例を示す図である。
図1は、計算の非決定性が存在する状況での耐障害及びリカバリのための技術が使用され得るデータ処理システムの例を示す。データ処理システムは、作業メモリ12を含むノード10を有する単一ノードコンピューティング装置8を含む。ノード10上で施行されるプロセス14は、この作業メモリ12を使用して、それらのプロセスのそれぞれのプロセスの状態を保存し、それらのプロセスのそれぞれの計算の中間的な結果を記憶する。異なる実施形態において、プロセス14は、ノード10上で施行されるオペレーティングシステム内のさまざまな種類のコンピューティングリソースのいずれかとして実装される可能性がある。例えば、プロセス14は、独自のアドレス空間を有するオペレーティングシステムの「プロセス」として、又は独自の実行コンテキスト(例えば、ステージ(stage)、レジスタなど)を有するオペレーティングシステムの「スレッド」として、又は実施される動作のシーケンスを含むが、必ずしもそのタスクに専用の特定のオペレーティングシステムのプロセス若しくはスレッドを持たない何らかのその他の種類の「タスク」として実装される可能性がある。
作業メモリ12は不揮発性であることが多いので、永続的ストレージ16に記憶されるチェックポイントファイル18にその作業メモリ12の状態を周期的に保存することが賢明である。これらのチェックポイントファイル18は、ノード10の動作中に割り込みがある場合に状態情報を復元するために使用され得る。
ノード上で施行されるプロセス14の中に、スポーナ20がある。「スポーナ」は、特性の中でもとりわけ、1又は2以上のその他のプロセスを生じさせる能力を有する一種のプロセスである。スポーナによって生じさせられるプロセスは、本明細書においては、単数形と複数形との両方で「スポーン」と呼ばれる。そのようなスポーンを生じさせる行為は、動詞「スポーンする」の適切な変化形によって言及される。図1は、スポーン22A、22Bを生じさせたスポーナ20を示す。スポーナ20は、概して、生存期間の長いプロセスであり、一方、スポーン22A、22Bは、数が多いけれども、ずっと生存期間の短い傾向がある。場合によっては、スポーナは、そのスポーナによって生じさせられるスポーンよりも長く生存するプロセスである。また、スポーン22A、22Bは、互いに独立しており、非同期であり、したがって、スポーン22A、22Bがその計算を完了した範囲はスポーナ20が最初にスポーン22A、22Bを生じさせたときとは関係がない。結果として、スポーン22A、22Bが計算を行う順序は不確定である。計算が行われる順序は、多くの場合、結果に影響を与える可能性があるので、これは、計算全体を不確定にする。
コンピューティング装置8の動作中に、コンピューティング装置8は、外界と通信する。例えば、コンピューティング装置8は、着信メッセージ24の1又は2以上のストリームを受信し、送信メッセージ28の1又は2以上のストリームを生成する可能性がある。以下でより詳細に説明されるように、これらのメッセージ24、28は、永続的ストレージ16内に装置8によって一時的に記憶される。これらのメッセージ24、28は、物理的に及び/又は論理的に別れているそれぞれの領域内にエスクロー(escrow)のために一時的に記憶される可能性がある。着信メッセージ24は、永続的ストレージ16の着信メッセージエスクロー領域26内に記憶される可能性があり、送信メッセージ28は、永続的ストレージ16の送信メッセージエスクロー領域30内に記憶される可能性がある。
図2を参照すると、ノードの動作が、チェックポイント間隔32及び作動間隔34によって印を付けられる。作動間隔34の間、ノードは、有用な作業をプロセスとして実施し、完了に向けて進める。チェックポイント間隔32の間、ノード10は、すべてのプロセスを中断し、それらのプロセスをシリアル化し、結果を永続的ストレージ16に保存する。それから、ノード10は、作業メモリ内にある他の任意のものを永続的ストレージ16に保存する。この時点で、チェックポイントは、「コミットされた」と言われ、プロセス14は、「チェックポイントを作成された」と言われる。
チェックポイント間隔32は作動間隔34よりもずっと短いことが好ましい。本明細書において説明される装置及び方法は、チェックポイント間隔32の長さを短くすることによって作動間隔34において実施され得る処理の量を増やすように意図される。
チェックポイントがコミットされると、ノード10は、プロセス14が再開することを可能にし、送信メッセージエスクロー領域30内にある送信メッセージ28をリリースする。
送信メッセージ28を直ちに送信するのではなく送信メッセージエスクロー領域30内に送信メッセージ28を記憶することは、ノード10の故障の結果として生じる可能性がある不整合を起こさないために役立つ。例えば、プロセス14が一部の計算の結果を知らせる送信メッセージ28を送信する可能性は、かなり高い。ノード10が、このメッセージ28が既に送信された後、ただし、計算結果が永続的ストレージ16にコミットされる前に故障したとすると、ノード10は、再起動し、コミットされていない計算を再実行することになる。完了すると、この第2の計算の結果を知らせる別のメッセージ28が、送信される。2つの結果が異なる場合、これは非決定性の計算の場合には起こり難いことではなく、メッセージのうちの1つが無効になる。
具体的な例として、プロセス14が乱数発生器の結果に基づいて顧客に賞を与える場合を考える。送信メッセージエスクロー領域30がないと、プロセス14は、賞が届こうとしていたことを知らせるメッセージ28を第1の顧客に送信する。そのとき、ノード10は、クラッシュし、再起動する。プロセス14の状態が保存されなかったので、その顧客のいずれかの賞を与えられたという記録、又はプロセス14が実行を正常に完了したという記録が存在しない。そして、ノード10は、プロセス14を再実行する可能性があり、プロセス14は、それから、異なる乱数を生じさせ、したがって、賞が届こうとしていたことを知らせる第2のメッセージ28を別の顧客に送信させる。これは、1つだけが意図されたものである2つの賞を与えるか、又は少なくとも1人の落胆した顧客をなんとかするかのどちらかを必要とする。
故障後にリカバリするために、ノード10は、永続的ストレージ16から、すべてのプロセス14の状態及び作業メモリ12の状態を取り出す。そして、ノード10は、送信メッセージエスクロー領域30内に記憶されるすべての送信メッセージ28を再送信し、着信メッセージエスクロー領域16から着信メッセージを処理のために取り出し、それから、生のデータに対する通常の動作を再開する。
送信メッセージエスクロー領域30内のすべてのメッセージ28の再送信は、受信者が重複したメッセージを受信する結果となり得る。一実施形態において、受信者は、繰り返されたメッセージ28を無視するように構成される。別の実施形態においては、リカバリされると、受信者及びリカバリされたノード10が、受信されたメッセージ28を特定するために通信する。これは、ノード10が重複したメッセージ28を送信することを避けることを許す。
上述の手順は、長いチェックポイント間隔32をもたらし、そして今度は、その長いチェックポイント間隔32が、低いスループットか、又は着信メッセージの受信と対応する送信メッセージの生成との間の増加したレイテンシーかのどちらかを生じる可能性がある。さまざまな方法が、このレイテンシーを減らし及び/又はスループットを増やすために使用され得る。
第1の最適化方法は、バックグラウンドでのジャーナル36の保守を特徴とする。リカバリ時にジャーナルのエントリが変更を再現するために使用され得るように、作業メモリ12内のアイテムが変更される度に、対応するエントリがジャーナル36に書き込まれる。ジャーナル36は、永続的ストレージ16に非同期に転送され得る。チェックポイント間隔32の間、ノード10は、すべてのジャーナルのエントリが確かに永続的にされたことを保証する。そのとき、リカバリは、作業メモリ12のスナップショットを含むより古いチェックポイントファイル18を使用し、ジャーナル36に示されるように変更を適用することによって実現され得る。
この最適化は、リカバリするための時間を増加させることと引き換えにチェックポイント間隔32の長さを短くする。特に、作業メモリ12の最後の完全なイメージが取得されてからの時間が長くなればなるほど、ジャーナル36内により多数のエントリが存在することになる。これは、リカバリ時間を増加させる。
第2の最適化方法は、ノード10がほんのわずかなスポーンするプロセス20を有するという事実に依拠し、それらのスポーンするプロセス20の各々は、本明細書においては、単数形と複数形との両方で「スポーン22A、22B」と呼ばれる多数の生存期間の短いプロセスを生じさせる(又は「スポーンする」)。
スポーン22A、22Bの生存期間は、ランダムであるが、スポーナ20の生存期間の期待される値よりもずっと短い期待される値を有する。したがって、チェックポイント中にスポーン22A、22Bをシリアル化するのに時間を費やすことにはほとんど意味がない。実際、場合によっては、スポーン22A、22Bをシリアル化するために必要とされる時間は、スポーンの期待される生存期間のうちのかなりの部分である。したがって、その代わりにスポーナ20を中断し、そうして、新しいスポーンを生じさせることを防止し、そして、既存のスポーン22A、22Bが思っていたとおりに終了することを可能にすることが有利であることが多い。
時間を節約するために、図3に示されるチェックポイント生成方法は、スポーナ20を中断すること(ステップ38)と、そのスポーナ20をシリアル化すること(ステップ40)とを含む。しかし、既存のスポーン22Aは、実行され続ける(ステップ42)。そして、ほとんどのスポーン22Aが実行を終えることを可能にするのに十分なだけ長いが、レイテンシーにはっきり分かる影響を与えるほどには長くないように十分に長いアイドルして動かない期間を画定するために選択されるストラグラ(straggler)の期限の後(ステップ46)、「進行の遅いスポーン(straggling spawn)」と呼ばれるまだ実行されているスポーンが、中断され(ステップ48)、シリアル化される(ステップ50)。
したがって、上述の方法は、シリアル化される必要があるプロセス14の数を減らすことによってチェックポイント間隔32の長さを短くする。上述の方法は、迅速に終了すると期待されるプロセス22が迅速に終了することを可能にすることによってそのようにし、したがって、有効なチェックポイントを生成することの一部としてそれらのプロセス22をシリアル化する必要をなくす。
第3の最適化手順は、防止されるべき害悪が、実際のところ、チェックポイント間隔32中の作業メモリ12に対する変更であるという認識から生じる。したがって、プロセス14が実際には作業メモリ12に書き込む必要がないが、その代わりに作業メモリ12を読むことだけが必要である場合、そのプロセス14を中断することには意味がない。
この第3の最適化手順を実装するために、ノード10は、各プロセスに関連する世代数に依拠する。スポーナ20はプロセスであるので、世代数を有する。スポーナのスポーン22A、22Bもプロセスであるので、やはり世代数を有する。スポーン22Aと、そのスポーン22Aをスポーンしたスポーナ20との世代数は、関連付けられる。特に、スポーン22A、22Bの世代数は、スポーン22A、22Bをスポーンしたスポーナ20の世代数に等しい。スポーン22A、22Bの世代数が、スポーン22A、22Bをスポーンしたスポーナの世代数に関連付けられるか、又はスポーン22A、22Bをスポーンしたスポーナの世代数から導出され得るようにする行為は、動詞「継承する」の適切な形によって説明される。特定の世代数を有するスポーナ20がスポーン22A、22Bを生じさせるとき、スポーン22A、22Bは、スポーナの世代数を継承したと言われる。
動作中、チェックポイント間隔32の開始前に、スポーナ20が、より古い世代のスポーン22Aを生じさせたであろう。チェックポイント間隔32の始めに、スポーナ20は、「若くされる」。
動詞「若くする」並びにその変化形及び同語源語(cognate)は、整数に対して行われ得る特定の計算動作を示す。本明細書において使用されるとき、若くする動作が操作する特定の整数が世代数である。世代数に対して行われ得る動作を示す。
本明細書において説明される特定の例において、スポーナ20を若くする行為は、そのスポーナ20の世代数をインクリメントする行為を意味する。若くされた後、スポーナ20は、チェックポイント間隔32の間、スポーンを生じさせ続け、そのときだけ、より若い世代のスポーン22Bを生じさせる。この結果は、ノード10内に2種類のスポーン22、すなわち、スポーナ20が若くされる前に生じさせたより古い世代のスポーン22Aと、スポーナ20が若くされた後に生じさせたより若い世代のスポーン22Bとが共存することである。
図4を参照すると、チェックポイント間隔の始めに、中断されている間、スポーナ20がいかなる新しいスポーンも生じさせず、そのスポーナ20のプロセスの状態が保存される(ステップ54)ように、スポーナ20が中断される(ステップ52)。それから、スポーナ20は、そのスポーナ20の世代数をインクリメントさせ(ステップ56)、その後、再開する(つまり、中断を解除される)。再開した後、スポーナ20は、またスポーン22を生じさせることができるが、今度は、すべてのそのスポーナ20のスポーン22Bは、より若い世代のスポーンに入る。
作業メモリ12に書き込もうと試みるいかなるより若い世代のスポーン22Bも、チェックポイント間隔32が完了されるまで遮断される。したがって、より若い世代のスポーン22は、完了するまで施行され得ない。それらのより若い世代のスポーン22は、初めて作業メモリ12に実際に書き込むときまでのみ施行され得る。しかしながら、より若い世代のスポーン22は、少なくとも完了への道を進み得る。これは、チェックポイント間隔32の間であっても一部の処理が行われることを可能にする。
概して、チェックポイント間隔32の間、メモリ12内のすべてのプロセス14がシリアル化される。しかし、図4の最適化方法においては、より古い世代のスポーン22Aのみをシリアル化することが望ましい。
世代数は、ノード10がどのスポーンがより若い世代のスポーン22Bであるかを特定し、したがって、それらの状態を保存することを避けることを可能にする。
残念なことに、すべてのより古い世代のスポーン22Aが終えられるか、又はストラグラの期限がより古い世代のスポーン22Aからのストラグラの中断をトリガするかのどちらかまで、より若い世代のスポーン22Bが最大の速さで進むことができなかったので、より古い世代のスポーン22Aが処理を完了するのを待たなければならないことは、レイテンシーを増やす。
第2の最適化方法の変化形においては、作業メモリ12を修正しようと試みるより若い世代のスポーン22Bを遮断し、したがって、有用な作業を行い続ける機会を失う代わりに、ノード10が、作業メモリ12内の各データアイテムを世代番号によってタグ付けすることができる。より若い世代のスポーン22Bがメモリロケーションを修正する場合、チェックポイントの後まで遮断するのではなく、ノード10は、そのメモリロケーションの世代番号を更新することによってメモリロケーションを若くする。それから、古い世代のスポーン22Aがそのような若くされたメモリロケーションに対して読み取り又は書き込みを試みる場合、より古い世代のスポーン22Aは、そのより古い世代のスポーン22A自体を中断し、そのより古い世代のスポーン22Aの状態をチェックポイントに書き込み、そのより古い世代のスポーン22Aの世代番号を更新し、若くされた状態で実行を再開することによってそのより古い世代のスポーン22A自体を自発的に若くする。また、ノード10は、スポーンのより古い世代に対応するジャーナルのエントリをスポーンのより若い世代に対応するジャーナルのエントリと区別することができるように、ジャーナルに書き込まれたエントリを世代番号によってタグ付けする。
第4の最適化方法は、より若い世代のスポーン22Bがたとえ作業メモリ12に対する最初に試みられた書き込みを過ぎても処理を継続することを可能にするという考えに依拠する。この方法は、ときどき計算結果が作業メモリ12に書き込まれる順序が問題にならないことがあるという事実に依拠する。これに当てはまる場合、作業メモリ12に対する書き込みは、単純に、後までキューに入れられる可能性がある。この方法は、より若い世代のスポーン22Bが、作業メモリ12に書き込む最初の試みの後でさえも、チェックポイント間隔32の間、働き続けることを可能にする。
概して、プロセスが動作のシーケンスを行うときにはいつも、生じる疑問は、シーケンス中の動作の順序がシーケンスの結果に違いを生むのか否かである。このシーケンス内の動作は、シーケンス内のその動作の位置が結果に影響を与えない場合、「交換可能」であると言われる。そうでない場合、動作は、「交換不可能」である。交換可能な動作の例は、値をインクリメント又はデクリメントする命令、リストのある定義された位置にレコードを挿入する命令、及び概して、値を読み取ることが行われることを必要としないすべての動作である。第4の最適化方法は、これらの交換可能な動作を利用する。
ここで図5を参照すると、この第4の最適化方法において、ノード10は、通常より若い世代のスポーン22Bがメモリ12に書き込むことを許されないときに、より若い世代のスポーン22Bからの書き込み要求を受信する(ステップ60)。しかし、この方法において、ノード10は、交換可能な動作と交換不可能な動作とを区別する(ステップ62)。提出された書き込みが交換可能である場合、ノード10は、その書き込みをキューに入れる(ステップ64)。それから、より若い世代のスポーン22Bは、実行を続ける(ステップ66)。これは、より若い世代のスポーン22Bが作業メモリ12に初めて書き込もうとした後も処理を継続することを可能にする。結果として、より若い世代のスポーン22Bは、そのより若い世代のスポーン22Bによって行われるすべての書き込み動作が交換可能である限り、チェックポイント間隔32の間、実行され続ける。一方、提出された書き込みが交換不可能な書き込みである場合、ノード10は、より若い世代のスポーン22Bの実行を中断する(ステップ68)。
交換不可能な書き込みに加えて、スポーン22Bが、通常はそのように書き込むことができないときに、条件付きで書き込むことを許容され得るその他の条件が存在する可能性がある。1つのその他の例は、より若い世代のスポーン22Bが、メモリ12を調べた後、より古い世代のスポーン22Aによるいかなるさらなるメモリアクセスもあり得ないことを認識するときに生じる。
第5の最適化方法は、チェックポイント間隔32が完了し、送信メッセージ28を生じさせることに関連するすべての計算が永続的ストレージ16にコミットされるまで送信メッセージエスクロー領域30が送信メッセージ28をリリースしないために生じるレイテンシーを減らす最適化方法である。送信メッセージエスクロー領域30からメッセージ28をリリースする前にチェックポイント間隔32の終了まで待つという考えは、誤ったメッセージを送信する結果が重大である場合には有用である。しかし、誤ったメッセージを送信する結果がごく小さいが、遅らせられたメッセージを送信する結果が重大であるときがある。
例として、送信メッセージ28が特定の小売店の品物のクーポンである場合を考える。ユーザが特定の時点でその特定の小売店の近くにいることを装置が検出したとものと仮定する。明らかに、ユーザが小売店を離れる機会を持つ前に直ちにメッセージ28を送信することが望ましい。このメッセージ28が送信メッセージエスクロー領域30に棚上げされ、送信されるのを待っているものとすると、クーポンが有用になる機会が失われることになる。一方、そのクーポンがノード10における故障が原因で後で失われる計算の結果であるものとすると、誰かが不満を言う可能性は低い。結局、店は、そうでなければ販売しなかった可能性がある販売をし、ユーザは、何らかの割引を受けて品物を手に入れたであろう。
送信メッセージ28が基礎を成すデータが永続的ストレージ16にコミットされるのを待つことなくリリースされるこの第5の最適化方法は、送信メッセージ28を届ける際に時間が極めて重要であるということと、誤った又は一貫性のない送信メッセージ28の代償がその送信メッセージ28の遅い送達の悪影響に比べてごく小さいということとを前もって仮定する。第5の最適化方法において、送信メッセージ28は、チェックポイント間隔32の完了前に送信メッセージエスクロー領域30からリリースされるか、又は送信メッセージエスクロー領域30を完全に迂回する。
図6は、図1〜6に関連して説明される種類の複数のノード72、74、76、78が互いに通信し、データ処理を行う際に互いに協力する複数ノード装置70を示す。そのような場合、タスクは、第1のノード72から第2のノード74にメッセージを送信する可能性がある。
場合によっては、メッセージは、第1のノード72から第2のノード74にタスクをマイグレーションする効果を有する可能性がある。あるノードから別のノードにマイグレーションするタスクは、「マイグラント」タスクと呼ばれる。視点に応じて、マイグラントタスクは、「入ってくるマイグラント(immigrant)」タスク又は「出て行くマイグラント(emigrant)」タスクのどちらかである。第1のノード72の視点から見て、マイグラントタスクは、タスクが第1のノードを離れているので「出て行くマイグラント」タスクである。反対に、第2のノード74の視点から見て、マイグラントタスクは、そのマイグラントタスクが第2のノード74に到着しているので「入ってくるマイグラント」タスクである。
その他の場合、メッセージは、要求元のタスクが返信のメッセージを受信するまで先に進むことができないようなリモートプロシージャコール又はリモートデータアクセス要求である可能性がある。その他の場合、タスクは、メッセージを使用して第1のノード72から第2のノード74に情報を単純に非同期に送信し得る。例えば、参照により本明細書に組み込まれる、2015年9月2日に出願した、「EXECUTING GRAPH-BASED PROGRAM SPECIFICATIONS」と題した米国特許出願第14/842,956号明細書に記載のものなどコンピューティングシステムが、本明細書において説明される耐障害及びリカバリを促進するための技術を使用して構成され得る。
そのような場合、上述の方法の応用は、第1のノード72から第2のノード76へのメッセージ80が次のチェックポイント間隔32の完了時にエスクローからリリースされるまで送信され得ないので、一部最善でない。これは、かなりのレイテンシーをもたらす。このレイテンシーは、複数ノード装置70内でノードからノードへと送信されるメッセージをエスクローとして預託されることから除外することによって潜在的に減らされる可能性があるが、そのような除外は、非決定性が原因で十分でない。
例えば、多くの計算が非決定性であるので、複数のノード72、74、76、78が存在するとき、この及びその他の困難が生じる。そのような非決定性の計算の例は、結果が読み取り及び書き込みが行われる順序に依存する非決定性の計算、リアルタイムのクロックに依拠する非決定性の計算、並びに乱数発生器の出力に依拠する非決定性の計算であり、これらの非決定性の計算の例は、送信メッセージエスクロー領域30の望ましさに関連して上で既に説明された。
第1のノード72が第2のノード74と通信し、それから、次のチェックポイント間隔32の前に(例えば、故障が原因で)連絡することができなくなる場合、装置70は、下のようにこの非決定性が原因で最終的に不整合を起こす可能性がある。故障の後、装置70は、最も最近のチェックポイントから第1のノード72をリカバリし、計算を再び始める。計算は、第1のノード72から第2のノード74へのメッセージの送信前の計算のある地点から再び始められる可能性がある。計算の非決定性の性質が原因で、第1のノード72は、チェックポイントからのリカバリの後、第2のノード74にまったく異なるメッセージをおそらく送信する可能性がある。しかし、その第2のノード74は、元のメッセージを既に受信した可能性があり、潜在的に、2つのノード72及び74を一貫性のない状態にする。例えば、ノード72は、ノード74に「新しい」バージョンのメッセージを送信した状態にあるが、ノード74は、「古い」バージョンのメッセージに既に働きかけた状態にある。さらに、ノード74は、ノード72から受信されたその元のメッセージに基づいてさらに別のノード76にメッセージを送信した可能性があり、したがって、ノード72及びノード76も一貫性のない状態にある可能性がある。したがって、不整合が、ウィルスのように装置70内のすべてのノードに広がる可能性がある。
上述の困難を避けるための1つの方法は、例えば、下のように「バリア同期(barrier sync)」動作を使用して、すべてのノード72、74、76、78がそれらのノードのチェックポイントを同期することを保証することである。「チェックポイントリーダー(checkpoint leader)」が、チェックポイント間隔を開始するようにすべてのノードに命じるメッセージをそれらのすべてのノードに送信する。そして、各チェックポイントが完了した後、各ノードが、チェックポイントリーダーに応答し、チェックポイントが完了していることを認める。チェックポイントリーダーは、すべてのノードから確認を受信したとき、チェックポイントをコミットし、それから処理を再開するようにすべてのノードに命じる。
この手法は、複数ノードのチェックポイントの問題に対する解決策の基礎を形成するが、2つの理由でその問題を完全に解決しない。第1に、複数ノード装置において、一部のノードが故障を切り抜ける可能性があり、その場合、切り抜けたノードは、それらのノードの現在の状態を(チェックポイントの状態にロールフォワードされるのではなく)チェックポイントの状態にロールバックされなければならない。第2に、チェックポイントが実施されるとき、運ばれている途中のメッセージが存在する可能性があり、そのことが、非決定性が古い処理間隔からチェックポイントを超えて新しい処理間隔へと漏れることを可能にする可能性がある。
単一ノード装置においては、ノード10は、故障する場合、コミットされていない作業をリカバリするためにロールフォワードしさえすればよい。しかし、複数ノード装置70において、ノード78が故障するとき、故障しなかったその他のノード72、74、76は、ロールバックを行う必要がある可能性がある。一部のノード78をロールフォワードし、その他のノード72、74、76をロールバックすることによって分散型の装置70がリカバリするこのメカニズムは、実際に、すべてのノード72、74、76、78が同じチェックポイントにおいて再始動させられ得ることを意味する。したがって、結果として得られる装置70は、すべてのノードに渡って同時に起こるチェックポイントの効果を達成する。しかし、装置70は、上述のように困難であるすべてのノードに渡って動作を実際に同期しようとすることによってそのようにすることはしない。その代わりに、装置70は、そのようなチェックポイントを実際に提供することを必要とせずに同期されたチェックポイントの恩恵を受けるためにノード72、74、76、78の状態を操作することによってそのようにする。
上述のリカバリ方法を実施するために、ノード72、74、76、78は、下で詳細に説明される分散型のチェックポイントの方法を実行する。図7を参照すると、分散型のチェックポイントの方法を実施するとき、あらゆるプロセス及びあらゆるメッセージが、世代数82を獲得する。加えて、各チェックポイントに関連するタスクの実行数(running count)84が保有される。また、各ノードは、そのノードのスポーナ20のスポーナレジストリ86を保有する。さらに、各ノード72は、ノードの世代数88を保有する。
ノードの世代数88は、より若い世代のスポーン22Aによって行われる作業及びより古い世代のスポーン22Bによって行われる作業が互いを妨げない世代ギャップ(generation gap)をノード76が行うことを可能にする。世代ギャップの結果として、より古い世代及びより若い世代は、多かれ少なかれ互いを無視することができる。実際には、ノード76は、2つの仮想マシンになり、一方の仮想マシンが、より古い世代のスポーン22Aによって見られ、別の仮想マシンが、より若い世代のスポーン22Bによって見られる。これらの2つの仮想マシンは、同じ物理的なプラットフォーム上に共存するが、他の点では互いに直交している(orthogonal)。
加えて、各ノード76は、ノード76が必要に応じて特定の状態にロールフォワードするか又はロールバックすることを可能にする双方向ジャーナル90も実装する。双方向ジャーナル90は、作業ストレージ92に対する変更、チェックポイントを作成されたタスクの状態のリスト94、及びチェックポイントを作成されたメッセージ96を含む。これらの要素は、時間的にロールフォワードするための方法を提供する。加えて、双方向ジャーナル90は、ノード76が時間的にロールバックすることを可能にするためのメモリ12の取り消しログ(undo log)98を特徴とする。概して、時間的にロールフォワードすることは、故障したノードがどのようにしてリカバリするかということである。時間的にロールバックすることは、装置70内の別のノードが故障したときにノードが何をするかということである。
動作中、図6に示されるように、マスタノード72は、チェックポイントメッセージ100をすべてのその他のノード74、76、78、すなわち、「スレーブノード」に送信し、チェックポイントが期限であることを示す。しかし、このチェックポイントがすべてのノード72、74、76、78において同時に起こる必要はない。
図8は、計算の非決定性が存在する状況での例示的な耐障害及びリカバリ手順に関する流れ図を示す。チェックポイントメッセージの受信に応答して(ステップ102)、スレーブノード76は、チェックポイント間隔を直ちに開始しない。上述のように、これは、非実際的である。その代わりに、スレーブノード76は、そのスレーブノード76のノードの世代数88をインクリメントし(ステップ104)、そのスレーブノード76のノードの世代数88のインクリメントを示すジャーナルのエントリを生成する(ステップ106)。
それから、スレーブノード76は、そのスレーブノード76のスポーナ22のすべてを中断し(ステップ108)、それらのスポーナ20の状態を双方向ジャーナル90に書き込む(ステップ110)。そして、そのスレーブノード76のスポーナ20の各々に関して、スレーブノード76は、そのスポーナの世代数82をインクリメントする(ステップ112)。インクリメントされたそのスポーナの世代数82を用いて、スポーナ20は、動作を再開することを許容される(ステップ114)。しかし、スポーナの世代数82がインクリメントされたであろうから、すべての結果として得られるスポーン22Bは、より若い世代である。
この時点で、2つの世代が、スレーブノード76内に共存する。より古い世代のスポーン22A、すなわち、ノードの世代数よりも1つ小さい世代数を有するスポーンは、完了するまで処理を継続し、必要に応じてメモリ12に書き込む可能性がある。より若い世代のスポーン22B、すなわち、世代数がノードの世代数88に一致するスポーンは、メモリ12に書き込むときまで処理し得る。その時点で、より若い世代のスポーン22Bは、遮断される。
ここまでの説明においては、関連する2世代のみのスポーン、すなわち、世代数82がノードの世代数88よりも1つ小さいより古い世代のスポーン22Aと、世代数82がノードの世代数88に一致するより若い世代のスポーン22Bとが存在することに留意されたい。しかし、原理的に、3つ以上の世代が同じプラットフォーム上に共存することができない理由はない。
図9を参照すると、複数ノード装置70において、タスク79が送信ノード78から外にマイグレーションし、受信ノード76の中にマイグレーションする可能性がある。図6に関連して説明されたように、そのようなタスク79は、「マイグラントタスク」又は「マイグラント」と呼ばれる。
以下の検討においては、特定の目標に関連する値に言及する必要がある。図中の参照番号による曖昧さを避けるために、標準的な数学的な表記法と整合性のある方法で、括弧が、「〜の(of)」を意味するために使用される。したがって、「88」が「ノードの世代数」に割り当てられ、「76」がノードであるので、ノード76のノードの世代数88は、88(76)と書かれる。
マイグラントの世代数82(79)が受信ノード76のノードの世代数88(76)と同じでないとき、困難が生じる可能性がある。これらの困難は、ノードの間にメッセージエスクロー領域を実装することによって避けられ得る。しかし、これは、最初に分散型のチェックポイントの方法が避けるように意図されたレイテンシーを再び招く。
分散型のチェックポイントの方法によれば、3つの起こり得ること、つまり、送信ノードのノードの数88(78)が受信ノードのノードの数88(76)と同じであることと、送信ノード78が受信ノードのノードの数88(76)よりも小さなノードの世代数88(78)を有することと、送信ノード78が受信ノードの88(76)よりも大きなノードの世代数88(78)を有することとが存在する。
第1の起こり得ることにおいて、マイグラントは、送信ノード78のノードの数88(78)と同じ世代数82(79)を有する。したがって、送信ノード78、受信ノード76、及びマイグラント79は、すべて同じ世代数を有する。その場合、特別なことは何も行われる必要がない。
第2の起こり得ることは、マイグラント79が移動中である間に受信ノード76がその受信ノード76の世代数88(76)をインクリメントするときに生じる可能性がある。これは、受信ノード76の中にマイグレーションすると、マイグラント79が、今や受信ノード76のより古い世代になるもののメンバーとしてそのマイグラント79自体を示すことを意味する。その場合、受信ノード76は、マイグラントの世代数82(79)をインクリメントすることによってマイグラント79を若くする。結果として、マイグラントタスク79は、処理を継続することができるが、より若い世代のスポーン22Bの残りと同じように、メモリ12への書き込みを遮断される。そのとき、マイグラント79を若くすることは、受信ノード76においてジャーナルに記録される。若くする行為は、受信ノード76において行われるので、「入ってくるマイグラント側での若返り(immigrant-side youthening)」と呼ばれる。
第3の起こり得ることは、マイグラント79が外にマイグレーションしたよりも前に送信ノード78がその送信ノード78の世代数88(78)をインクリメントするときに生じる可能性がある。その場合、送信ノード78は、マイグラント79が送信される前にマイグラントの世代数82(79)をインクリメントすることによってマイグラント79を若くし、送信ノードにおいて若くするイベントをジャーナルに記録する。若くする行為は、送信ノード78において行われるので、「出て行くマイグラント側での若返り(emigrant-side youthening)」と呼ばれる。
どちらの場合も、マスタノードからチェックポイントメッセージを受信したノード76は、より古い世代のスポーン22Aが施行を終えることを可能にする期限を設定し、それによって、より古い世代の近々の消滅を保証し、それらの状態を記録する必要を避ける(ステップ116)。しかしながら、終了するのが遅いより古い世代のスポーン22Aが存在する可能性がある。期限が過ぎると、まだ実行されているすべてのより古い世代のスポーン22が、中断され、シリアル化され、ジャーナルに記録され、若くされ、その後、そのより古い世代のスポーン22は、作業メモリ12が永続的ストレージ16にコミットされた後まで作業メモリ12に書き込まないという制約の下で実行を再開することを許容されるので、ノード76が長い期間待つことは非現実的である。
スレーブノード76は、より古い世代の入ってくるマイグラントが到着するともはや予測されないことが分かるまで実際のチェックポイントを開始しない。これを実施するために、ノード72は、すべてのより古い世代の出て行くマイグラントが正常に外にマイグレーションしたと認識するときにはいつでも、すべてのその他のノード74、76、78にフラッシュ(flush)メッセージをブロードキャストする。スレーブノード76は、すべてのノード72、74、78からフラッシュメッセージを受信すると、より古い世代の入ってくるマイグラントのフローが終息させられたことを知る(ステップ118)。より若い世代の入ってくるマイグラントは、より若い世代の出て行くマイグラントがスレーブノード76から引き続き出て行く可能性あるのとまったく同様に、スレーブノード76に引き続き到着する可能性がある。しかし、これらのより若い世代の出て行くマイグラントは、チェックポイントのプロセスとは関係がない。
この時点で、スレーブノード76は、今や、そのスレーブノード76の作業メモリ12を永続的ストレージ16にコミットする準備ができている(ステップ120)。これは、単一ノードの場合に関して上で説明された同じ方法で行われる。
図10に示されるノードの故障後に再始動するための手順は、関連するノードが故障したノードであるか否かに依存する。再始動する命令を受信した(ステップ122)後、ノードは、そのノードが故障したノードであるかどうか、又は装置70内の別のノードが故障したかどうかを決定する(ステップ124)。ノードは、故障したノードである場合、ログを取り出し、そのノードの最後の有効なチェックポイントからロールフォワードする(ステップ126)。ノードは、故障したノードではない場合、そのノードの最後のチェックポイントにロールバックする(ステップ128)。
「ロールバック」動作の例は、次のステップ、すなわち、(1)(スポーナとスポーンとの両方を含む)現在施行されているすべてのタスクを終了すること、(2)双方向ジャーナルのエントリを使用してメモリに対する任意の変更を元に戻すことを含む。
すべての故障したノードがロールフォワードされ、すべての故障を切り抜けたノードがロールバックされた後、装置70は、タスクを再始動することの一部としてその他の動作を実施する可能性がある。例えば、装置70は、次の動作、すなわち、(1)故障に先立つすべてのメッセージが破棄されたことを保証するために通信ネットワークをフラッシュすることと、(2)ジャーナルからタスクの保存された状態を取り出し、それらのタスクを再始動することによってチェックポイントの一部であったすべてのタスクを再始動することと、(3)チェックポイントの前に送信されたすべてのメッセージを再送信することと、(4)受信されたが、チェックポイントの時点でまだ処理されていなかったすべてのメッセージを処理することとを実施する可能性がある。
故障したノード上で最後の有効なチェックポイントからロールフォワードするタスクは、潜在的に時間がかかるタスクである。図11を参照すると、一部の実践において、第2のノード134上に第1のノード132のメモリ130の複製128を保有することが有用である。好ましくは、第2のノード134は、第1のノード132と同じ故障モードを持たない。正常動作中に、複製128は、各チェックポイントにおいて第1のノード132のメモリ130と同期される。また、複製128は、その複製128が最も最近のチェックポイントにおけるその複製128の状態にロールバックすることを可能にする関連する取り消しログ136を有する。
ここで図12を参照すると、第1のノード132が故障すると、第2のノード124の複製128がマスタとして指定される(ステップ138)。第2のノード124上のすべてのプロセスが強制終了され(ステップ140)、その後、第2のノード134が再始動される(ステップ142)。今やマスタコピーとして働く以前の複製128は、取り消しログ136の助けを借りて最後のチェックポイントまでロールバックされる(ステップ144)。それから、複数ノード装置70の動作は、再開することができ、リカバリの待機は、ロールバック時間と大体同じ程度である。これは、概して、ロールフォワード時間よりもずっと短い。一方、リカバリされる第1のノード132は、複数ノード装置70の全体のリカバリを遅くすることなく正しい状態へのロールフォワードへと進むことができる。第1のノード132は、準備ができると、再びマスタの役割を引き継ぎ、以前の複製128が、再び複製になる。
図11は1つの第2のノード134のみを示すが、2つ以上の第2のノードが存在する可能性があり、それらの第2のノードの各々が複製128及び取り消しログ136を有することが理解される。その場合、第1のノード132が故障すると、第2のノードのうちの1つが、第1のノードのメモリの新しいマスタコピーの所有者として働くように選出されなければならない。
場合によっては、多くの冪等な動作(idempotent operation)が存在する可能性がある。そのような場合、ロールフォワードする代わりに、それらの計算がいかなる害も生じないので、冪等な動作を行う計算を単純に繰り返すことは不合理なことではない。
リカバリの最終結果は、すべての点がある世代から次の世代への遷移と整合性がある状態にあることである。結果として、古い世代のプロセスからのいかなる作業も失われないが、より若い世代のプロセスによってなされたすべての作業が失われる。これは、すべてのノードに渡って一貫性のある状態を保証する。この文脈で、状態は、いかなる障害もない状態でその状態が到達され得た場合、「一貫性がある」。対照的に、状態は、その状態が1又は2以上の障害の発生によってのみ説明され得る場合、「一貫性がない」。
図13は、図6及び9に関連して言及された複数ノード装置70内の送信ノード78と受信ノード76との両方におけるいくつかのスポーンされたプロセスの状態を示す。図13において、時間は、縦軸に沿って下向きに増加する。時間軸は、第1の間隔146、第1の間隔146に続く第2の間隔148、及び第2の間隔148に続く第3の間隔150を示す。
図13は、いくつかのスポーンされたプロセス22A〜Hを示し、それらのプロセス22A〜Hの各々は、関連する世代数を有する。世代数Nを有するスポーンは、本明細書においては「第1世代のスポーン」と呼ばれる。世代数N+1を有するスポーンは、本明細書においては「第2世代のスポーン」と呼ばれる。形容詞「第1世代の」及び「第2世代の」は、ノード、マイグラントタスク、及びスポーンされたプロセスを含む、世代数によってタグ付けされるその他のエンティティを指すためにも使用される。
第1の間隔146の間、送信ノード78は、第1世代のノードである。第2の及び第3の間隔150の間、送信ノード78は、第2世代のノードである。ノードのこの進展は、第2の間隔148が第1の世代のために担っていたのと同じ役割を第2の世代のために担う間隔が第3の間隔150の後に続くように循環的であることに留意されたい。送信ノード78において起こる進展と必ずしも同調していないが、この同じ進展が受信ノード76において起こる。便宜上、送信ノード78と受信ノード76との両方における間隔を示すために同じ参照番号が使用される。しかし、これは、それらのノードが同期されることを示唆するように意図されていない。
第1の間隔146の間に、スポーンするプロセス20は、さまざまな第1世代のスポーンされたプロセス22A〜22Eをスポーンする。この第1の間隔146の間中は、いずれの第1世代のスポーンされたプロセス22A〜22Eも、送信ノードのメモリ12Aに自由に書き込むことができる。
第2の間隔148の間、送信ノード78は、第2世代のノードになる。したがって、スポーンするプロセス20は、今や、第2世代のスポーンされたプロセスのみをスポーンする。この第2の間隔148の間は、いずれの第1世代のスポーンされたプロセス22A〜22Eも、送信ノードのメモリ12Aに自由に書き込むことができるままである。第2世代のスポーンされたプロセス22F〜22Gは、自由に実行されるが、送信ノードのメモリ12Aへの書き込みを禁じられる。したがって、この第2の間隔148の目的は、すべての残っている第1世代のスポーン22C、22D、22Eがチェックポイント間隔32が発生する前にいつか実行を終えることを可能にすることである。
第3の間隔150の間、スポーンするプロセス20は、別の第2世代のスポーンされたプロセス22Hをスポーンする。この第3の間隔150の間は、いかなる第1世代のスポーンも残っておらず、すべての第2世代のスポーン22F〜22Hは送信ノードのメモリ12Aに自由に書き込むことができる。
送信ノード78において、第1の第1世代のスポーンされたプロセス22A、第2の第1世代のスポーンされたプロセス22B、第3の第1世代のスポーンされたプロセス22C、第4の第1世代のスポーンされたプロセス22D、及び第5の第1世代のスポーンされたプロセス22Eは、すべて第1の間隔146の間に開始される。しかし、これらの中で、第1の第1世代のスポーンされたプロセス22A及び第2の第1世代のスポーンされたプロセス22Bのみが、第1の間隔146の間にどうにか実行を終える。第3の第1世代のスポーンされたプロセス22Cは、第2の間隔148の間にどうにか終了する。第4の第1世代のスポーンされたプロセス22Dは、長く時間がかかり、第3の間隔150が既に始まるまでに終了することができない。第5の第1世代のスポーンされたプロセス22Eは、送信ノード78において実際に終了しない。その代わりに、第5の第1世代のスポーンされたプロセス22Eは、第2の間隔148の途中で受信ノード76にマイグレーションする。第5の第1世代のスポーンされたプロセス22Eは、受信ノード76がまだ独自の第2の間隔148にある間にそのようにする。
実行中、第1の第1世代のスポーンされたプロセス22Aは、第1の間隔146の間、送信ノードのメモリ12Aに書き込み、第3の第1世代のスポーンされたプロセス22Cは、第2の間隔148の間、送信ノードのメモリ12Aに書き込む。第2の第1世代のスポーンされたプロセス22Bは、実行中、送信ノードのメモリ12Aにまったく書き込まない。第5の第1世代のスポーンされたプロセス22Eは、最終的に、送信ノードのメモリ12Aに書き込むが、受信ノード76においてのみである。
第2の間隔148の間に、第1の第2世代のスポーンされたプロセス22Fと第2の第2世代のスポーンされたプロセス22Gとの両方が実行を始める。第2の間隔148の間のあるときに、第1の第2世代のスポーンされたプロセス22Fは、送信ノードのメモリ12Aに書き込まなければならない時点に達する。しかし、第1の第2世代のスポーンされたプロセス22Fは、まだ第2の間隔148にあるので、送信ノードのメモリ12Aへの書き込みを禁じられる。したがって、第1の第2世代のスポーンされたプロセス22Fは、破線によって示されるように中断される。第3の間隔150が始まると、第1の第2世代のスポーンされたプロセス22Fは、送信ノードのメモリ12Aに書き込み、実行を完了する。
一方、第2の第2世代のスポーンされたプロセス22Gは、送信ノードのメモリ12Aに実際に書き込まなければならないときまでに第3の間隔150が既に始まっているように、第2の間隔148の間に十分に遅く始まった。したがって、第2の第2世代のスポーンされたプロセス22Gは、中断なしに実行される。
第3の第2世代のスポーンされたプロセス22Hは、第3の間隔150の間に始まる。これは、本質的に、第1の第1世代のスポーンされたプロセス22Aのミラーイメージである。
実行中に、第1の第1世代のスポーンされたプロセス22Aは、第1のタスク152を受信ノード76にマイグレーションさせる。第1のタスク152は、第1の第1世代のスポーンされたプロセス22Aの世代番号を継承する。したがって、第1のタスク152は、第1世代のタスクとして存在し始める。この第1のタスク152は、受信ノード76がまだ第1の間隔146において動作している間に受信ノード76に到着する。したがって、受信ノード76は、第1世代のノードとして働いている。したがって、第1のタスク152は、第3の間隔150が受信ノード76において始まる前にそのようにするならば、自由に実行され、受信ノードのメモリ12Bに書き込むことができる。
やはり実行中に、第2の第1世代のスポーンされたプロセス22Bは、第2のタスク154を受信ノード76にマイグレーションさせる。第2のタスク154は、第1の第1世代のスポーンされたプロセス22Aの世代番号を継承する。したがって、第2のタスク154は、第1世代のタスクとして存在し始める。しかし、この第2のタスク154は、受信ノード76がそのノードの第2の間隔148において既に動作している間に受信ノード76に到着する。したがって、第2のタスク154は、第1世代のタスクから第2世代のタスクに変更される。これは、第2のタスク154を受信ノードのジャーナルファイル156に記録する付随するステップを含む。
同様のイベントが、送信ノード78において第5の第1世代のスポーンされたプロセス22Eに関連して起こる。この第5の第1世代のスポーンされたプロセス22Eは、実行の途中で受信ノード76にマイグレーションする。しかし、第5の第1世代のスポーンされたプロセス22Eが受信ノード76に到着するまでに、受信ノード76は、独自の第2の間隔148を既に開始した。したがって、第2のノードは、第2世代のノードになった。したがって、第5の第1世代のスポーンされたプロセス22Eは、第2世代のスポーンされたプロセスに変更される。この変更は、第5の第1世代のスポーンされたプロセス22Eを送信ノードのジャーナルファイル158に記録することによって達成される。そして、第5の第1世代のスポーンされたプロセス22Eは、第2世代のスポーンされたプロセスとしてではあるが受信ノード76上で実行を継続する。
一方、再び送信ノード78において、第4の第1世代のスポーンされたプロセス22Dは、第2の間隔148の終了までに実行を終えなかった。この時点で、第4の第1世代のスポーンされたプロセス22Dは、送信ノードのジャーナルファイル158に記録されており、かつその第4の第1世代のスポーンされたプロセス22Dが今や第2世代のスポーンされたプロセスであるようにインクリメントされたそのプロセスの世代数を有している。そして、第4の第1世代のスポーンされたプロセス22Dは、第3の間隔150の間、実行を続ける。
第4の第1世代のスポーンされたプロセス22Dは、受信ノード76への第5の第1世代のスポーンされたプロセス22Eのマイグレーション中にその第5の第1世代のスポーンされたプロセス22Eによって維持された同じ2つのステップ、すなわち、ジャーナルに記録するステップ及び世代の変更を維持したことに留意されたい。したがって、第4の第1世代のスポーンされたプロセス22Dが同じ意味でやはりマイグレーションしたと言うことは不合理なことではない。主な違いは、第5の第1世代のスポーンされたプロセス22Eがノード間マイグレーションを経た一方、第4の第1世代のスポーンされたプロセス22Dはノード内マイグレーションを経たということである。
したがって、本明細書に記載のチェックポイント及びリカバリ方法は、複数のノードに渡ってチェックポイントを同時に実行することの望ましさが、時間的同時性にではなく、むしろ時間的同時性の副次的作用に根ざすという認識に基づく。そのため、方法は、複数のノードに渡るチェックポイントの時間的同時性の副次的効果を、実際にそれを実現する必要なしに再現する。
上述の耐障害及びリカバリ手法は、例えば、好適なソフトウェア命令を実行するプログラミング可能なコンピューティングシステムを用いて実装される可能性があり、又はフィールドプログラマブルゲートアレイ(FPGA,field-programmable gate array)などの好適なハードウェアで、若しくは何らかの混成の形態で実装される可能性がある。例えば、プログラミングされる手法において、ソフトウェアは、それぞれが少なくとも1つのプロセッサ、(揮発性及び/又は不揮発性メモリ及び/又はストレージ要素を含む)少なくとも1つのデータストレージシステム、(少なくとも1つの入力デバイス又はポートを用いて入力を受け取るため、及び少なくとも1つの出力デバイス又はポートを用いて出力を与えるための)少なくとも1つのユーザインターフェースを含む(分散、クライアント/サーバ、又はグリッドなどのさまざまなアーキテクチャである可能性がある)1又は2以上のプログラミングされた又はプログラミング可能なコンピューティングシステム上で実行される1又は2以上のコンピュータプログラムのプロシージャを含み得る。ソフトウェアは、例えば、データフローグラフの設計、構成、及び実行に関連するサービスを提供するより大きなプログラムの1又は2以上のモジュールを含む可能性がある。プログラムのモジュール(例えば、データフローグラフの要素)は、データリポジトリに記憶されたデータモデルに準拠するデータ構造又はその他の編成されたデータとして実装され得る。
ソフトウェアは、ある期間(例えば、ダイナミックRAMなどのダイナミックメモリデバイスのリフレッシュ周期の間の時間)媒体の物理特性(例えば、表面ピット及びランド、磁区、又は電荷)を使用して、揮発性若しくは不揮発性ストレージ媒体又は任意のその他の非一時的媒体に具現化されるなど、非一時的形態で記憶され得る。命令をロードするのに備えて、ソフトウェアは、CD−ROM又は(例えば、多目的若しくは専用のコンピューティングシステム若しくはデバイスによって読み取り可能な)その他のコンピュータ可読媒体などの有形の非一時的媒体上に提供される可能性があり、或いはそのソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体にネットワークの通信媒体を介して配信される(例えば、伝搬信号に符号化される)可能性がある。処理の一部又はすべては、専用のコンピュータで、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ(FPGA)若しくは専用の特定用途向け集積回路(ASIC,application-specific integrated circuit)などの専用のハードウェアを使用して実施される可能性がある。処理は、ソフトウェアによって規定された計算の異なる部分が異なるコンピューティング要素によって実施される分散された方法で実装される可能性がある。それぞれのそのようなコンピュータプログラムは、本明細書において説明された処理を実施するためにストレージデバイスの媒体がコンピュータによって読み取られるときにコンピュータを構成し、動作させるために、多目的又は専用のプログラミング可能なコンピュータによってアクセスされ得るストレージデバイスのコンピュータ可読ストレージ媒体(例えば、ソリッドステートメモリ若しくは媒体、又は磁気式若しくは光学式媒体)に記憶されるか又はダウンロードされることが好ましい。本発明のシステムは、コンピュータプログラムで構成された有形の非一時的媒体として実装されると考えられる可能性もあり、そのように構成された媒体は、本明細書において説明された処理ステップのうちの1又は2以上を実施するために特定の予め定義された方法でコンピュータを動作させる。
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、添付の請求項の範囲によって画定される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、添付の請求項の範囲内にある。例えば、本発明の範囲を逸脱することなくさまざまな修正がなされ得る。さらに、上述のステップの一部は、順序に依存しない可能性があり、したがって、説明された順序とは異なる順序で実施される可能性がある。
本発明を説明したが、我々が新しいものであると主張し、特許証(letters patent)によって保証されるのは、以下のものである。

Claims (21)

  1. 少なくとも1つの処理ノードを含むコンピューティングシステムにおいて耐障害及びリカバリを促進するための方法であって、第1の処理ノードの可用性及びリカバリを促進するステップであって、第1の処理ノードにおいて、
    前記ノードにおいてスポーナを実行することであって、前記スポーナが、実行中に、第1のスポーンを生じさせ、
    前記スポーナを実行することが、前記スポーナに第1の世代インジケータを割り当てることを含み、
    前記第1のスポーンが、前記第1の世代インジケータを継承する、実行することと、
    チェックポイント間隔を開始することであって、前記チェックポイント間隔の終わりに、前記ノードのリカバリのために使用可能であるノードのリカバリ情報が永続的ストレージにコミットされ、前記チェックポイント間隔を開始することが、
    前記スポーナがスポーンを生じさせることを中断させること、
    前記第1の世代インジケータとは異なる第2の世代インジケータを前記スポーナに割り当てること、
    前記スポーナを再開し、それによって、前記スポーナが第2のスポーンを生じさせることを可能にすることであって、前記第2のスポーンが前記第2の世代インジケータを継承する、可能にすること、及び
    前記第2のスポーンがメモリに書き込む範囲を制御することを含む、開始することと、
    前記ノードのリカバリ情報をコミットした後、前記第2のスポーンがメモリに書き込むことができる前記範囲の制御を解放することとを含む、前記ステップを含む前記方法。
  2. 第2のスポーンがメモリに書き込む範囲を制御することが、前記第2のスポーンが前記メモリへの書き込みを完了することを防止することを含む請求項1に記載の方法。
  3. リカバリ情報がコミットされた後にメモリへの書き込みを最終的に完了するために第2のスポーンがメモリへの前記書き込みをキューに入れることを許すステップをさらに含む請求項2に記載の方法。
  4. 第2のスポーンがメモリに書き込む範囲を制御することが、書き込み動作が交換可能な動作であると決定することと、前記交換可能な動作の完了を可能にすることとを含む請求項1に記載の方法。
  5. 書き込み動作が交換可能な動作であると決定することが、前記書き込み動作が変数をインクリメントすることを含むと決定することを含む請求項4に記載の方法。
  6. 書き込み動作が交換可能な動作であると決定することが、前記書き込み動作が指定された位置にレコードを挿入することを含むと決定することを含む請求項4に記載の方法。
  7. スポーナを中断させた後、期限を設定し、それによって、第1のタスクの世代インジケータを有するすべてのスポーンが完了するまで実行されるための時間を提供し、前記第1の世代インジケータを有する前記スポーンの状態を保存しなくてはならないことに関連するオーバーヘッドを避けるステップをさらに含む請求項1に記載の方法。
  8. 第1のスポーンが期限の時点でまだ実行されている場合に前記第1のスポーンを中断するステップをさらに含む請求項7に記載の方法。
  9. 第1のスポーンが期限までに実行を完了することができなかった結果としての中断を避けることを可能にするステップをさらに含む請求項7に記載の方法。
  10. 第1のスポーンが期限までに実行を完了することができなかった結果としての中断を避けることを可能にするステップが、前記第1のスポーンが前記期限の時点でまだ実行されている場合に前記第1のスポーンにおいて第1のタスクの世代インジケータを第2のタスクの世代インジケータに変更することを含む請求項9に記載の方法。
  11. 第1のノードが、ノードの世代インジケータを有し、方法が、スポーンを第2のノードにマイグレーションするマイグラントにさせるステップであって、前記第2のノードがノードの世代インジケータを有する、ステップをさらに含む請求項1に記載の方法。
  12. 第2のノードのノードの世代数が、前記第2のノードが第1のノードより若い世代であることを示し、方法が、マイグラントを若くするステップをさらに含む請求項11に記載の方法。
  13. マイグラントを若くするステップが、前記マイグラントの入ってくるマイグレーション側での若返りを含む請求項12に記載の方法。
  14. マイグラントを若くするステップが、前記マイグラントの出て行くマイグレーション側での若返りを含む請求項12に記載の方法。
  15. 第1のノードが、各ノードがノードの世代数を有する複数ノードシステム内のノードであり、前記複数ノードシステムが、少なくとも第2のノードを含み、前記第2のノードが故障後にリカバリすると、前記第1のノードが前記第2のノードのノードの世代数に対応する状態にロールバックする請求項1に記載の方法。
  16. 第1のノードが、各ノードがノードの世代数を有する複数ノードシステム内のノードであり、前記複数ノードシステムが、少なくとも第2のノードを含み、前記第1のノードが故障の後にリカバリすると、前記第1のノードが、チェックポイントからコミットされた作業を復元し、ジャーナルからコミットされていない作業を復元することによって前記第2のノードのノードの世代数に対応する状態にロールフォワードする請求項1に記載の方法。
  17. 第1のノードが、各ノードがノードの世代数を有する複数ノードシステム内のノードであり、方法が、前記第1のノードにおいて、
    チェックポイントが行われるべきであることを示すメッセージをマスタノードから受信するステップと、
    応答して前記第1のノードのノードの世代数を若くするステップと、
    スポーナがスポーンを生じさせることを中断させるステップと、
    スポーナの状態をリカバリするためのスポーナリカバリ情報を保存するステップと、
    前記スポーナを再開するステップと、
    前記第1のノードにおいてさらなるより古い世代の入ってくるマイグラントが期待されないと決定するステップと、
    前記決定に応答して、永続的ストレージに前記ノードのリカバリ情報をコミットするステップとを含む請求項1に記載の方法。
  18. 期限を設定し、前記期限が経過すると、より若い世代のスポーンが実行を継続する一方でまだ実行されているすべてのより古い世代のスポーンを中断するステップをさらに含む請求項17に記載の方法。
  19. 第1のノードが、複数ノードシステム内のノードであり、方法が、第2のノードにおいて前記第1のノードの作業メモリの複製コピーを保存し、前記第1のノードが故障すると、故障しなければ前記第1のノードによって行われたであろう処理のために前記複製コピーを一時的に使用し、前記第1のノードがリカバリすると、その後の計算が前記第1のノードによって行われ得るように前記第1のノードにおいてメモリを更新するために必要とされる情報を前記第1のノードに伝達するステップを含む請求項1に記載の方法。
  20. 少なくとも1つの処理ノードを含むコンピューティングシステムにおいて耐障害及びリカバリを促進するための、コンピュータ可読媒体に非一時的形態で記憶されたソフトウェアであって、コンピューティングシステムに、第1の処理ノードの可用性及びリカバリを促進させるための命令を含み、可用性及びリカバリを促進することが、第1の処理ノードにおいて、
    前記ノードにおいてスポーナを実行することであって、前記スポーナが、実行中に、第1のスポーンを生じさせ、
    前記スポーナを実行することが、前記スポーナに第1の世代インジケータを割り当てることを含み、
    前記第1のスポーンが、前記第1の世代インジケータを継承する、実行することと、
    チェックポイント間隔を開始することであって、前記チェックポイント間隔の終わりに、前記ノードのリカバリのために使用可能であるノードのリカバリ情報が永続的ストレージにコミットされ、前記チェックポイント間隔を開始することが、
    前記スポーナがスポーンを生じさせることを中断させること、
    前記第1の世代インジケータとは異なる第2の世代インジケータを前記スポーナに割り当てること、
    前記スポーナを再開し、それによって、前記スポーナが第2のスポーンを生じさせることを可能にすることであって、前記第2のスポーンが前記第2の世代インジケータを継承する、可能にすること、及び
    前記第2のスポーンがメモリに書き込む範囲を制御することを含む、開始することと、
    前記ノードのリカバリ情報をコミットした後、前記第2のスポーンがメモリに書き込むことができる前記範囲の制御を解放することとを含む、前記ソフトウェア。
  21. 永続的ストレージを含むデータストレージシステムと、
    第1の処理ノードの可用性及びリカバリを促進するように構成された少なくとも1つのプロセッサを含む1又は2以上の処理ノードであって、可用性及びリカバリを促進することが、第1の処理ノードにおいて、
    前記ノードにおいてスポーナを実行することであって、前記スポーナが、実行中に、第1のスポーンを生じさせ、
    前記スポーナを実行することが、前記スポーナに第1の世代インジケータを割り当てることを含み、
    前記第1のスポーンが、前記第1の世代インジケータを継承する、実行することと、
    チェックポイント間隔を開始することであって、前記チェックポイント間隔の終わりに、前記ノードのリカバリのために使用可能であるノードのリカバリ情報が永続的ストレージにコミットされ、前記チェックポイント間隔を開始することが、
    前記スポーナがスポーンを生じさせることを中断させること、
    前記第1の世代インジケータとは異なる第2の世代インジケータを前記スポーナに割り当てること、
    前記スポーナを再開し、それによって、前記スポーナが第2のスポーンを生じさせることを可能にすることであって、前記第2のスポーンが前記第2の世代インジケータを継承する、可能にすること、及び
    前記第2のスポーンがメモリに書き込む範囲を制御することを含む、開始することと、
    前記ノードのリカバリ情報をコミットした後、前記第2のスポーンがメモリに書き込むことができる前記範囲の制御を解放することとを含む、1又は2以上の前記処理ノードとを含むコンピューティングシステム。
JP2017519919A 2014-10-20 2015-10-19 計算の非決定性の下でのリカバリ及び耐障害 Active JP6313907B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201462065941P 2014-10-20 2014-10-20
US62/065,941 2014-10-20
PCT/US2015/056159 WO2016064705A1 (en) 2014-10-20 2015-10-19 Recovery and fault-tolerance under computational indeterminism

Publications (2)

Publication Number Publication Date
JP2017535853A true JP2017535853A (ja) 2017-11-30
JP6313907B2 JP6313907B2 (ja) 2018-04-18

Family

ID=54477254

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017519919A Active JP6313907B2 (ja) 2014-10-20 2015-10-19 計算の非決定性の下でのリカバリ及び耐障害

Country Status (9)

Country Link
US (1) US9678834B2 (ja)
EP (1) EP3210119B1 (ja)
JP (1) JP6313907B2 (ja)
KR (1) KR102021677B1 (ja)
CN (1) CN107111532B (ja)
AU (1) AU2015336250C1 (ja)
CA (1) CA2964590C (ja)
SG (1) SG11201702953VA (ja)
WO (1) WO2016064705A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020067722A (ja) * 2018-10-22 2020-04-30 富士通株式会社 並列処理装置、並列演算実行プログラムおよびバックアップ方法

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3614267B1 (en) 2016-01-14 2022-03-09 AB Initio Technology LLC Recoverable stream processing
JP7038204B2 (ja) 2017-10-31 2022-03-17 アビニシオ テクノロジー エルエルシー 永続性レベル表示器を使用してコンピュータクラスタを管理すること
CN116010126B (zh) * 2023-02-09 2023-06-27 中国证券登记结算有限责任公司 一种服务聚合方法、装置及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003516581A (ja) * 1999-12-06 2003-05-13 エービー イニティオ ソフトウェア コーポレーション 連続フローチェックポイント設定データ処理法
JP2009501366A (ja) * 2005-06-23 2009-01-15 インテル コーポレイション スレッドレベルの投機実行を拡張するためのプリミティブ

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5313647A (en) * 1991-09-20 1994-05-17 Kendall Square Research Corporation Digital data processor with improved checkpointing and forking
KR20010037622A (ko) * 1999-10-19 2001-05-15 정선종 분산 시스템에서 메모리 체크포인트를 이용한 독립 체크포인팅 방법
US7206964B2 (en) * 2002-08-30 2007-04-17 Availigent, Inc. Consistent asynchronous checkpointing of multithreaded application programs based on semi-active or passive replication
US7305582B1 (en) * 2002-08-30 2007-12-04 Availigent, Inc. Consistent asynchronous checkpointing of multithreaded application programs based on active replication
EP1690163A4 (en) * 2003-11-17 2011-07-13 Virginia Tech Intell Prop TRANSPARENT CREATION OF CONTROL POINTS AND MIGRATION OF PROCESSES IN A DISTRIBUTED SYSTEM
KR100800044B1 (ko) * 2006-08-04 2008-01-31 한국과학기술정보연구원 체크포인트 파일 자동 관리 방법
JP5018133B2 (ja) * 2007-02-27 2012-09-05 富士通株式会社 ジョブ管理装置、クラスタシステム、およびジョブ管理プログラム
US8826070B1 (en) * 2008-12-15 2014-09-02 Open Invention Network, Llc Method and system for providing storage checkpointing to a group of independent computer applications
JP5759203B2 (ja) * 2011-02-25 2015-08-05 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 反復法の並列コンピュータ計算における非同期なチェックポイント取得とそこからの回復
AU2012271352B2 (en) * 2011-06-16 2015-05-07 Argyle Data, Inc. Software virtual machine for acceleration of transactional data processing
US9256460B2 (en) * 2013-03-15 2016-02-09 International Business Machines Corporation Selective checkpointing of links in a data flow based on a set of predefined criteria

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003516581A (ja) * 1999-12-06 2003-05-13 エービー イニティオ ソフトウェア コーポレーション 連続フローチェックポイント設定データ処理法
JP2009501366A (ja) * 2005-06-23 2009-01-15 インテル コーポレイション スレッドレベルの投機実行を拡張するためのプリミティブ

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020067722A (ja) * 2018-10-22 2020-04-30 富士通株式会社 並列処理装置、並列演算実行プログラムおよびバックアップ方法
JP7192388B2 (ja) 2018-10-22 2022-12-20 富士通株式会社 並列処理装置、並列演算実行プログラムおよびバックアップ方法

Also Published As

Publication number Publication date
CA2964590A1 (en) 2016-04-28
EP3210119A1 (en) 2017-08-30
AU2015336250C1 (en) 2018-01-25
JP6313907B2 (ja) 2018-04-18
CN107111532A (zh) 2017-08-29
AU2015336250B2 (en) 2017-07-27
KR102021677B1 (ko) 2019-09-16
AU2015336250A1 (en) 2017-05-25
CA2964590C (en) 2020-01-28
CN107111532B (zh) 2021-03-05
KR20170073659A (ko) 2017-06-28
WO2016064705A1 (en) 2016-04-28
EP3210119B1 (en) 2022-03-30
US20160110271A1 (en) 2016-04-21
US9678834B2 (en) 2017-06-13
SG11201702953VA (en) 2017-05-30

Similar Documents

Publication Publication Date Title
US11341115B2 (en) Multi-database log with multi-item transaction support
JP6613305B2 (ja) 分散データグリッド内でスレッドプールの動的サイズ変更をサポートするためのシステムおよび方法
US7206964B2 (en) Consistent asynchronous checkpointing of multithreaded application programs based on semi-active or passive replication
US9619544B2 (en) Distributed state management using dynamic replication graphs
JP6764938B2 (ja) リカバリ可能なストリーム処理
US10242027B2 (en) Three phase commit for a distributed file system
Park et al. Exploiting commutativity for practical fast replication
JP6313907B2 (ja) 計算の非決定性の下でのリカバリ及び耐障害
US10621145B2 (en) Cluster file replication
US10552057B2 (en) Methods for improving journal performance in storage networks and devices thereof
US10929238B2 (en) Management of changed-block bitmaps
Michael et al. Recovering shared objects without stable storage
US11726886B2 (en) Scalable low-loss disaster recovery for data stores
US20170344564A1 (en) Automatic and customisable checkpointing
Eldeeb et al. Transactions for Distributed Actors in the Cloud
JPH0581099A (ja) トランザクシヨン コントロール

Legal Events

Date Code Title Description
A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20170906

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170919

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171215

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180305

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180323

R150 Certificate of patent or registration of utility model

Ref document number: 6313907

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250