JP2019505916A - リカバリ可能なストリーム処理 - Google Patents

リカバリ可能なストリーム処理 Download PDF

Info

Publication number
JP2019505916A
JP2019505916A JP2018536162A JP2018536162A JP2019505916A JP 2019505916 A JP2019505916 A JP 2019505916A JP 2018536162 A JP2018536162 A JP 2018536162A JP 2018536162 A JP2018536162 A JP 2018536162A JP 2019505916 A JP2019505916 A JP 2019505916A
Authority
JP
Japan
Prior art keywords
data
processing
data units
subset
stream
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
JP2018536162A
Other languages
English (en)
Other versions
JP6764938B2 (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 JP2019505916A publication Critical patent/JP2019505916A/ja
Application granted granted Critical
Publication of JP6764938B2 publication Critical patent/JP6764938B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/70Media network packetisation
    • 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
    • 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
    • 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/1446Point-in-time backing up or restoration of persistent data
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2094Redundant storage or storage space
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2097Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/84Using snapshots, i.e. a logical point-in-time copy of the data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Multimedia (AREA)
  • Multi Processors (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Image Processing (AREA)
  • Hardware Redundancy (AREA)
  • Retry When Errors Occur (AREA)
  • Peptides Or Proteins (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

コンピューティングシステム(100)が、データユニットの少なくとも1つのストリームをそれぞれが処理するデータ処理プログラムを実行するノード(152)を含む。データストレージシステム(156、157)が、プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶する。第1のデータ処理プログラムを使用して少なくとも1つのストリームを処理することが、連続データユニットの複数のサブセットを含むデータユニットの第1のストリームを処理することと、データユニットの第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で第1のデータ処理プログラム内の処理の終了を開始することと、第1のデータ処理プログラム内の処理の終了が完了したと決定した後、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することと、第1のデータ処理プログラム内の処理を再開することとを含む。

Description

関連出願の相互参照
本出願は、2016年1月14日に出願した米国特許出願第62/278,528号の優先権を主張するものである。
この説明は、リカバリ可能なストリーム処理に関する。
一部のデータ処理プログラムは、処理されるデータのバッチ(batch)(例えば、1又は2以上のファイル又はデータベーステーブル)を受け取り、そのデータを処理するために必要とされる時間の量は、バッチ内のデータの量に基づくのではっきりと定義される。この種の処理は、「バッチ処理」と呼ばれる。一部のデータ処理プログラムは、ストリームが未知の若しくは任意の数のデータユニット又はデータユニットの潜在的に連続的なフローを含む可能性があるために潜在的に未知の量の時間の間処理されるデータの1又は2以上のストリームを受け取る。この種の処理は、「ストリーム処理」又は「連続フロー処理(continuous flow processing)」と呼ばれる。データ処理システムにおいてリカバリ可能性を提供することに関連する要因は、使用されている処理の種類と、複数のインタラクションするデータ処理プログラムが存在するか否か、及びデータユニットを処理する順序が決定性(deterministic)であるか否かなどのその他の特徴とに依存する可能性がある。
一態様においては、概して、装置が、1又は2以上のノードを含むコンピューティングシステムであって、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するように構成された、コンピューティングシステムと、1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムであって、使用中、複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶する、データストレージシステムとを含む。1又は2以上のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、データユニットの第1のストリームを処理して、データユニットの第1のストリーム内の連続データユニットの複数のサブセットの各々に関して出力を生じさせることと、データユニットの第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で第1のデータ処理プログラム内の処理の終了を開始することと、第1のデータ処理プログラム内の処理の終了が完了したと決定した後、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することと、変更が恒久的に記憶された後、第1のデータ処理プログラム内の処理を再開することと、変更が恒久的に記憶された後、連続データユニットの第1のサブセットに関して生じさせられた第1の出力を第1のデータ処理プログラムから解放することとを含む。
態様は、以下の特徴のうちの1又は2以上を含み得る。
複数のデータ処理プログラムは、それぞれ、データユニットの少なくとも1つのストリームを、プログラム状態情報がストリーム内の3つ以上の隣接するデータユニットにわたって保持されないようにして処理する。
データストレージシステムは、不揮発性ストレージ媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することは、変更を不揮発性ストレージ媒体に記憶することを含む。
データストレージシステムは、複数のノードに接続された通信媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することは、通信媒体を介して複数のノードの第1のノードから少なくとも第2のノードに変更を送信することを含む。
データストレージシステムは、複数のデータ処理プログラムのうちの少なくとも1つによって処理されるデータユニットの1又は2以上のストリームに関連するストリーム状態情報も記憶する。
少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、第1のデータ処理プログラム内の処理の終了が完了したと決定した後、データユニットの第1のストリームに関連するストリーム状態情報を恒久的に記憶することをさらに含む。
連続データユニットの第1のサブセットに関して生じさせられた第1の出力を第1のデータ処理プログラムから解放することは、コンピューティングシステム上で実行される複数のデータ処理プログラムに含まれない外部プログラムに第1の出力を解放することを含む。
連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する恒久的に記憶された変更は、連続データユニットの第2のサブセットを処理することによって引き起こされた共有データに対する恒久的に記憶された変更と区別される(例えば、下でより詳細に説明されるように、パイプライン化チェックポイント(pipelined checkpoint)を可能にする)。
連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更は、連続データユニットの第2のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更が始まった後に恒久的に記憶され、連続データユニットの第1のサブセットは、データユニットの第1のストリーム内で連続データユニットの第2のサブセットの前にある。
連続データユニットの第1のサブセットに関して生じさせられた第1の出力は、連続データユニットの第1のサブセットを処理することによって引き起こされたすべての変更が恒久的に記憶された後、第1のデータ処理プログラムから解放される。
変更の第1の部分が恒久的に記憶された後であるが、変更の第2の部分が恒久的に記憶される前に、第1のデータ処理プログラム内で処理が再開される。
第1のデータ処理プログラムは、データユニットの第1のストリームを処理することを周期的に終了し、コンピューティングシステムは、第1のデータ処理プログラムが終了される間に、データユニットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶し始める。
第1のデータ処理プログラム内の処理の終了を開始することは、連続データユニットの第1のサブセットと連続データユニットの第2のサブセットとの間にストリーム終了インジケータを挿入することを含み、第1のデータ処理プログラム内の処理の終了は、第1のデータ処理プログラムによって規定されたタスクを実行するすべてのプロセスがストリーム終了インジケータに応答して正常に終了した後に完了している。
共有データは、複数のデータ処理プログラムのすべてによってアクセスされ得る。
別の態様においては、概して、装置が、1又は2以上のノードを含むコンピューティングシステムであって、(複数のデータ処理プログラムのうちの複数のデータ処理プログラムの少なくとも第1のグループがデータユニットの2又は3以上のストリームを処理するように)データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するように構成された、コンピューティングシステムと、1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムであって、使用中、複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶する、データストレージシステムとを含む。複数のデータ処理プログラムのうちの複数のデータ処理プログラムの少なくとも第1のグループを使用してデータユニットの2又は3以上のストリームを処理することは、第1のグループ内の各データ処理プログラムに関して、連続データユニットの複数のサブセットを含むデータユニットのそれぞれのストリームを処理することと、データユニットのそれぞれのストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で第1のグループ内の各データ処理プログラム内の処理の終了を開始することと、第1のグループ内の各データ処理プログラム内の処理の終了が完了したと決定した後、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することと、変更が恒久的に記憶された後、第1のグループ内の各データ処理プログラム内の処理を再開することとを含む。
態様は、以下の特徴のうちの1又は2以上を含み得る。
複数のデータ処理プログラムは、それぞれ、データユニットの少なくとも1つのストリームを、プログラム状態情報がストリーム内の3つ以上の隣接するデータユニットにわたって保持されないようにして処理する。
データストレージシステムは、不揮発性ストレージ媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することは、変更を不揮発性ストレージ媒体に記憶することを含む。
データストレージシステムは、複数のノードに接続された通信媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することは、通信媒体を介して複数のノードの第1のノードから少なくとも第2のノードに変更を送信することを含む。
データストレージシステムは、複数のデータ処理プログラムのうちの少なくとも1つによって処理されるデータユニットの1又は2以上のストリームに関連するストリーム状態情報も記憶する。
複数のデータ処理プログラムの少なくとも第1のグループを使用してデータユニットの2又は3以上のストリームを処理することは、第1のグループ内の各データ処理プログラム内の処理の終了が完了したと決定した後、第1のグループ内のデータ処理プログラムのいずれかによって処理されたデータユニットのそれぞれのストリームに関連するストリーム状態情報を恒久的に記憶することをさらに含む。
複数のデータ処理プログラムの少なくとも第1のグループを使用してデータユニットの2又は3以上のストリームを処理することは、変更が恒久的に記憶された後、連続データユニットの第1のサブセットに関して生じさせられた第1の出力を複数のデータ処理プログラムの第1のグループから解放することをさらに含む。
連続データユニットの第1のサブセットに関して生じさせられた第1の出力を複数のデータ処理プログラムの第1のグループから解放することは、複数のデータ処理プログラムの第1のグループに含まれないコンピューティングシステム上で実行される複数のデータ処理プログラムのうちの1つに第1の出力を解放することを含む。
連続データユニットの第1のサブセットに関して生じさせられた第1の出力を複数のデータ処理プログラムの第1のグループから解放することは、コンピューティングシステム上で実行される複数のデータ処理プログラムに含まれない外部プログラムに第1の出力を解放することを含む。
外部プログラムは、第1のグループ内の少なくとも1つのデータ処理プログラムによってアクセスされ得る特定の共有データにアクセスする要求を送信し、要求の結果は、要求が受け取られる前に行われた特定の共有データへのすべての変更が恒久的に記憶された後、外部プログラムに解放される。
連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する恒久的に記憶された変更は、連続データユニットの第2のサブセットを処理することによって引き起こされた共有データに対する恒久的に記憶された変更と区別される。
連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更は、連続データユニットの第2のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更が始まった後に恒久的に記憶され、連続データユニットの第1のサブセットは、データユニットの第1のストリーム内で連続データユニットの第2のサブセットの前にある。
連続データユニットの第1のサブセットに関して生じさせられた第1の出力は、連続データユニットの第1のサブセットを処理することによって引き起こされたすべての変更が恒久的に記憶された後、複数のデータ処理プログラムの第1のグループから解放される。
データユニットの2又は3以上のストリームを処理することは、少なくとも、複数のデータ処理プログラムのうちの複数のデータ処理プログラムの第1のグループ及び複数のデータ処理プログラムの第2のグループを使用してデータユニットの4又は5以上のストリームを処理することを含む。
複数のデータ処理プログラムの各グループは、データユニットのそれぞれのストリームの処理を周期的に終了し、コンピューティングシステムは、そのグループ内のすべてのデータ処理プログラムが終了される間に、データユニットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶し始める。
データ処理プログラムの第1のグループは、データユニットのそれぞれのストリームの処理を第1の頻度で終了し、データ処理プログラムの第2のグループは、データユニットのそれぞれのストリームの処理を第1の頻度とは異なる第2の頻度で終了する。
変更の第1の部分が恒久的に記憶された後であるが、変更の第2の部分が恒久的に記憶される前に、第1のグループ内の各データ処理プログラム内で処理が再開される。
複数のデータ処理プログラムの第1のグループは、データユニットの2又は3以上のストリームの処理を周期的に終了し、コンピューティングシステムは、第1のグループ内のすべてのデータ処理プログラムが終了される間に、データユニットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶し始める。
第1のデータ処理プログラム内の処理の終了を開始することは、連続データユニットの第1のサブセットと連続データユニットの第2のサブセットとの間にストリーム終了インジケータを挿入することを含み、第1のデータ処理プログラム内の処理の終了は、第1のデータ処理プログラムによって規定されたタスクを実施するすべてのプロセスがストリーム終了インジケータに応答して正常に終了した後に完了している。
共有データは、複数のデータ処理プログラムのすべてによってアクセスされ得る。
別の態様においては、概して、装置が、1又は2以上のノードを含むコンピューティングシステムであって、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するように構成された、コンピューティングシステムと、1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムであって、使用中、複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶する、データストレージシステムとを含む。複数のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、連続データユニットの複数のサブセットを含むデータユニットの第1のストリームを処理することと、データユニットの第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で第1のデータ処理プログラム内の処理の終了を開始することと、第1のデータ処理プログラム内の処理の終了が完了したと決定した後、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することと、変更のすべてが恒久的に記憶されることを完了する前に、第1のデータ処理プログラム内の処理を再開することとを含む。
態様は、以下の特徴のうちの1又は2以上を含み得る。
複数のデータ処理プログラムは、それぞれ、データユニットの少なくとも1つのストリームを、プログラム状態情報がストリーム内の3つ以上の隣接するデータユニットにわたって保持されないようにして処理する。
データストレージシステムは、不揮発性ストレージ媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することは、変更を不揮発性ストレージ媒体に記憶することを含む。
データストレージシステムは、複数のノードに接続された通信媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することは、通信媒体を介して複数のノードの第1のノードから少なくとも第2のノードに変更を送信することを含む。
少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、共有データの少なくとも1つのスナップショットを記憶することと、スナップショットが記憶された後、データユニットを処理することによって引き起こされた共有データに対する変更のジャーナルを記憶することとをさらに含む。
連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することは、スナップショットの少なくとも一部を記憶することと、変更のジャーナルの少なくとも一部を記憶することとを含む。
データストレージシステムは、複数のデータ処理プログラムのうちの少なくとも1つによって処理されるデータユニットの1又は2以上のストリームに関連するストリーム状態情報も記憶する。
少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、第1のデータ処理プログラム内の処理の終了が完了したと決定した後、データユニットの第1のストリームに関連するストリーム状態情報を恒久的に記憶することをさらに含む。
少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、第1のデータ処理プログラム内の処理の終了が完了したと決定する前に、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することをさらに含む。
少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、第1のデータ処理プログラム内の処理を再開した後、連続データユニットの第2のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することをさらに含む。
連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する恒久的に記憶された変更は、連続データユニットの第2のサブセットを処理することによって引き起こされた共有データに対する恒久的に記憶された変更と区別される。
連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更は、連続データユニットの第2のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更が始まった後に恒久的に記憶され、連続データユニットの第1のサブセットは、データユニットの第1のストリーム内で連続データユニットの第2のサブセットの前にある。
少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、連続データユニットの複数のサブセットの各々に関して出力を生じさせることと、変更が恒久的に記憶されることを完了した後、連続データユニットの第1のサブセットに関して生じさせられた第1の出力を第1のデータ処理プログラムから解放することとをさらに含む。
連続データユニットの第1のサブセットに関して生じさせられた第1の出力は、連続データユニットの第1のサブセットを処理することによって引き起こされたすべての変更が恒久的に記憶された後、第1のデータ処理プログラムから解放される。
第1のデータ処理プログラムは、データユニットの第1のストリームを処理することを周期的に終了し、コンピューティングシステムは、第1のデータ処理プログラムが終了される間に、データユニットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶し始める。
第1のデータ処理プログラム内の処理の終了を開始することは、連続データユニットの第1のサブセットと連続データユニットの第2のサブセットとの間にストリーム終了インジケータを挿入することを含み、第1のデータ処理プログラム内の処理の終了は、第1のデータ処理プログラムによって規定されたタスクを実施するすべてのプロセスがストリーム終了インジケータに応答して正常に終了した後に完了している。
共有データは、複数のデータ処理プログラムのすべてによってアクセスされ得る。
別の態様においては、概して、装置が、上述の装置のいずれかの処理を実行するための手段を含む。
別の態様においては、概して、方法が、上述の装置のいずれかの処理を実行する。
別の態様においては、概して、ソフトウェアが、コンピュータ可読媒体に非一時的形態で記憶され、ソフトウェアは、コンピューティングシステムに上述の装置のいずれかの処理を実行させるための命令を含む。
別の態様においては、概して、方法が、1又は2以上のノードを含むコンピューティングシステム上で、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するステップと、1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムに、複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶するステップとを含み、1又は2以上のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、データユニットの第1のストリームを処理して、データユニットの第1のストリーム内の連続データユニットの複数のサブセットの各々に関して出力を生じさせることと、データユニットの第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で第1のデータ処理プログラム内の処理の終了を開始することと、第1のデータ処理プログラム内の処理の終了が完了したと決定した後、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することと、変更が恒久的に記憶された後、第1のデータ処理プログラム内の処理を再開することと、変更が恒久的に記憶された後、連続データユニットの第1のサブセットに関して生じさせられた第1の出力を第1のデータ処理プログラムから解放することとを含む。
別の態様においては、概して、ソフトウェアが、コンピュータ可読媒体に非一時的形態で記憶され、ソフトウェアは、コンピューティングシステムに、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行させ、複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶させるための命令を含み、1又は2以上のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、データユニットの第1のストリームを処理して、データユニットの第1のストリーム内の連続データユニットの複数のサブセットの各々に関して出力を生じさせることと、データユニットの第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で第1のデータ処理プログラム内の処理の終了を開始することと、第1のデータ処理プログラム内の処理の終了が完了したと決定した後、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することと、変更が恒久的に記憶された後、第1のデータ処理プログラム内の処理を再開することと、変更が恒久的に記憶された後、連続データユニットの第1のサブセットに関して生じさせられた第1の出力を第1のデータ処理プログラムから解放することとを含む。
別の態様においては、概して、方法が、1又は2以上のノードを含むコンピューティングシステム上で、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するステップと、1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムに、複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶するステップとを含み、複数のデータ処理プログラム(plurarity of data prosessing programs)のうちの複数データ処理プログラム(multiple data processing programs)の少なくとも第1のグループを使用してデータユニットの2又は3以上のストリームを処理することは、第1のグループ内の各データ処理プログラムに関して、連続データユニットの複数のサブセットを含むデータユニットのそれぞれのストリームを処理することと、データユニットのそれぞれのストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で第1のグループ内の各データ処理プログラム内の処理の終了を開始することと、第1のグループ内の各データ処理プログラム内の処理の終了が完了したと決定した後、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することと、変更が恒久的に記憶された後、第1のグループ内の各データ処理プログラム内の処理を再開することとを含む。
別の態様においては、概して、ソフトウェアが、コンピュータ可読媒体に非一時的形態で記憶され、ソフトウェアは、コンピューティングシステムに、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行させ、複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶させるための命令を含み、複数のデータ処理プログラム(plurarity of data prosessing programs)のうちの複数データ処理プログラム(multiple data processing programs)の少なくとも第1のグループを使用してデータユニットの2又は3以上のストリームを処理することは、第1のグループ内の各データ処理プログラムに関して、連続データユニットの複数のサブセットを含むデータユニットのそれぞれのストリームを処理することと、データユニットのそれぞれのストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で第1のグループ内の各データ処理プログラム内の処理の終了を開始することと、第1のグループ内の各データ処理プログラム内の処理の終了が完了したと決定した後、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することと、変更が恒久的に記憶された後、第1のグループ内の各データ処理プログラム内の処理を再開することとを含む。
別の態様においては、概して、方法が、1又は2以上のノードを含むコンピューティングシステム上で、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するステップと、1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムに、複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶するステップとを含み、複数のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、連続データユニットの複数のサブセットを含むデータユニットの第1のストリームを処理することと、データユニットの第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で第1のデータ処理プログラム内の処理の終了を開始することと、第1のデータ処理プログラム内の処理の終了が完了したと決定した後、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することと、変更のすべてが恒久的に記憶されることを完了する前に、第1のデータ処理プログラム内の処理を再開することとを含む。
別の態様においては、概して、ソフトウェアが、コンピュータ可読媒体に非一時的形態で記憶され、ソフトウェアは、コンピューティングシステムに、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行させ、複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶させるための命令を含み、複数のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することは、連続データユニットの複数のサブセットを含むデータユニットの第1のストリームを処理することと、データユニットの第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で第1のデータ処理プログラム内の処理の終了を開始することと、第1のデータ処理プログラム内の処理の終了が完了したと決定した後、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することと、変更のすべてが恒久的に記憶されることを完了する前に、第1のデータ処理プログラム内の処理を再開することとを含む。
態様は、以下の利点のうちの1又は2以上を有する可能性がある。
リアルタイムデータ処理のために構成されたコンピューティングシステムは、多くの場合、1又は2以上の到着するデータストリーム内の比較的大きな量のデータを扱う必要があり、低レイテンシーで到着する要求に応答することができる必要もある。本明細書において説明される技術は、そのようなシステムがリカバリ可能性、耐障害性、及び高可用性を有することを可能にし、その一方、応答レイテンシーの要件を損なわない。技術は、複数のインタラクションするデータ処理プログラムのコレクション(collection)にも適用され得る。リカバリ可能性のために使用されるメカニズムのうちの1つは、チェックポイント作成である。(例えば、約10msから100msの周期の)高い頻度のチェックポイント作成が実現される可能性があり、要求に応じて低レイテンシーで第三者預託(escrow)される出力を提供する能力をサポートする。
本発明のその他の特徴及び利点は、以下の説明及び請求項から明らかになるであろう。
タスクに基づくコンピューティングシステムのブロック図である。 パルス式摂取コンピューティングシステム(pulsed ingestion computing system)おける入力データの第1のパルス(pulse)及び第2のパルスの成功裏の処理と入力データの第3のパルスの失敗した処理とを示す処理のタイムラインの図である。 入力データの第2のパルスの成功裏の処理に関連するチェックポイントまで処理の状態を復元するリカバリ動作を示す図2Aの処理のタイムラインの図である。 出力データの第3のパルスの成功裏の再処理を示す図2Aの処理のタイムラインの図である。 概括的なパルス式摂取チェックポイント作成手法(general pulsed ingestion checkpointing approach)の処理のタイムラインの図である。 図3の概括的なパルス式摂取チェックポイント作成手法のリカバリ手順の処理のタイムラインの図である。 図3の概括的なパルス式摂取チェックポイント作成手法の複数グラフバージョンの処理のタイムラインの図である。 増分パイプライン化パルス式摂取チェックポイント作成手法(incremental and pipelined pulsed ingestion checkpointing approach)の処理のタイムラインの図である。 増分パイプライン化パルス式摂取チェックポイント作成手法を実装する例示的なコンピューティングシステムの図である。 入力データの第1のパルスを処理し、第1のパルスの処理に関連する状態変化のジャーナルを作成する図7Aのコンピューティングシステムの図である。 入力データの第1のパルスの処理を終えた後の休止状態の図7Aのコンピューティングシステムを示す図である。 入力データの第1のパルスに関連する状態変化を恒久的に記憶する間に入力データの第2のパルスを処理し、第2のパルスの処理に関連する状態変化のジャーナルを作成する図7Aのコンピューティングシステムを示す図である。 入力データの第1のパルスに関連する状態変化を恒久的に記憶することを完了すると入力データの第1のパルスから生じさせられた出力データを第三者預託から解放する図7Aのコンピューティングシステムを示す図である。 入力データの第2のパルスから生じさせられた出力データを第三者預託して保持し続け、入力データの第2のパルスに関連する状態変化のジャーナルを作成する図7Aのコンピューティングシステムを示す図である。 入力データの第2のパルスの処理においてエラーからリカバリする図7Aのコンピューティングシステムを示す図である。 分散型増分パイプライン化パルス式摂取チェックポイント作成手法(distributed incremental and pipelined pulsed ingestion checkpointing approach)を実装するコンピューティングシステムの図である。 トランザクションデータストア(transactional data store)とインタラクションし、増分パイプライン化パルス式摂取チェックポイント作成手法を実装する複数のコンピューティングシステムを示す図である。 図9Aのシステムのためのトランザクションデータストアのコミット手順を示す図である。
1 システムの概要
図1を参照すると、タスクに基づくコンピューティングシステム100が、高レベルのプログラム仕様110を使用して、プログラム仕様110によって規定された計算を実行するようにコンピューティングプラットフォーム150の計算及び記憶リソースを制御する。コンパイラ/インタープリタ120は、高レベルのプログラム仕様110を受け取り、タスクに基づくランタイムインターフェース/コントローラ140によって実行され得る形態のタスクに基づく仕様130を生じさせる。コンパイラ/インタープリタ120は、複数のデータ要素の各々に適用される細分化されたタスクとして個々に又は一体としてインスタンス化され得る1又は2以上の「構成要素」の1又は2以上の「実行セット」を特定する。コンパイル又は解釈プロセスの一部は、下でより詳細に説明されるように、これらの実行セットを特定することと、実行するためにセットを準備することとを含む。コンパイラ/インタープリタ120は、高レベルのプログラム仕様110を解析するステップ、構文を検証するステップ、データフォーマットの型検査を行うステップ、任意のエラー又は警告を生じさせるステップ、タスクに基づく仕様130を準備するステップなどのステップを含むさまざまなアルゴリズムのいずれかを使用する可能性があり、コンパイラ/インタープリタ120は、例えば、コンピューティングプラットフォーム150上で実行される計算の効率を最適化するためにさまざまな技術を利用する可能性がある。コンパイラ/インタープリタ120によって生じさせられる目標のプログラム仕様は、それ自体、タスクに基づく仕様130を生成するためにシステム100の別の部分によってさらに処理される(例えば、さらにコンパイルされる、解釈されるなど)ことになる中間形態である可能性がある。下の検討は、そのような変換の1又は2以上の例を概説するが、例えば、コンパイラの設計に精通する者によって理解されるように、もちろん、変換のその他の手法があり得る。
概して、計算プラットフォーム150は、いくつかの計算ノード152(例えば、分散された計算リソースと分散された記憶リソースとの両方を提供する個々のサーバコンピュータ)から構成され、それによって、高度な並列処理を可能にする。下でさらに詳細に検討されるように、高レベルのプログラム仕様110において表される計算は、比較的細分化されたタスクとしてコンピューティングプラットフォーム150上で実行され、さらに、規定された計算の効率的な並列実行を可能にする。
2 データ処理グラフ
一部の実施形態において、高レベルのプログラム仕様110は、データに対して実行されるデータ処理の計算の全体の一部をそれぞれが規定する「構成要素」の組を含む「データ処理グラフ」と呼ばれるある種のグラフに基づくプログラム仕様である。構成要素は、例えば、プログラミングユーザインターフェース及び/又は計算のデータ表現においてグラフ内のノードとして表される。上述のデータ処理グラフなどの一部のグラフに基づくプログラム仕様とは異なり、データ処理グラフは、データの転送、又は制御の転送、又はこれら両方のいずれかを表すノード間のリンクを含み得る。リンクの特徴を示す1つの方法は、構成要素に異なる種類のポートを設けることによる。リンクは、上流の構成要素の出力ポートから下流の構成要素の入力ポートに接続される有向リンクである。ポートは、データ要素がどのようにして書き込まれ、リンクから読まれるのか及び/又は構成要素がデータを処理するためにどのようにして制御されるのかの特徴を表すインジケータを有する。
これらのポートは、いくつかの異なる特徴を有する可能性がある。ポートの1つの特徴は、入力ポート又は出力ポートとしてのそのポートの方向性である。有向リンクは、データ及び/又は制御が上流の構成要素の出力ポートから下流の構成要素の入力ポートに運ばれることを表す。作成者は、異なる種類のポートを一緒にリンクすることを可能にされる。データ処理グラフのデータ処理の特徴の一部は、異なる種類のポートがどのようにして一緒にリンクされるのかに依存する。例えば、異なる種類のポート間のリンクは、下でより詳細に説明されるように、階層的形態の並列処理を提供する、異なる「実行セット」内の構成要素の入れ子にされたサブセットにつながる可能性がある。特定のデータ処理の特徴が、ポートの種類によって示唆される。構成要素が有する可能性がある異なる種類のポートは、以下を含む。
・構成要素のインスタンスがポートに接続されたリンクを通り越すコレクションのすべてのデータ要素をそれぞれ読むか又は書くことを意味するコレクション入力ポート又はコレクション出力ポート。構成要素のコレクションポート間の単一のリンクを有する構成要素の対に関して、下流の構成要素は、概して、データ要素が上流の構成要素によって書かれるときにそれらのデータ要素を読むことを可能にされ、上流の構成要素と下流の構成要素との間のパイプライン並列処理を可能にする。下でより詳細に説明されるように、データ要素は、並べ替えられる可能性もあり、それが、並列処理の効率を可能にする。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのようなコレクションポートは、概して、構成要素の四角いコネクタ記号によって示される。
・構成要素のインスタンスが、それぞれ、ポートに接続されたリンクから最大で1つのデータ要素を読むか又はポートに接続されたリンクに最大で1つのデータ要素を書くことを意味するスカラ入力ポート又はスカラ出力ポート。構成要素のスカラポート間の単一のリンクを有する構成要素の対に関して、上流の構成要素が実行を終えた後の下流の構成要素の直列実行が、単一のデータ要素の転送を制御の転送として使用することによって強制される。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのようなスカラポートは、概して、構成要素の三角のコネクタ記号によって示される。
・スカラ入力又はスカラ出力と同様であるが、いかなるデータ要素も送信される必要がなく、構成要素間の制御の転送を伝達するために使用される制御入力ポート又は制御出力ポート。構成要素の制御ポート間のリンクを有する構成要素の対に関して、上流の構成要素が実行を終えた後の下流の構成要素の直列実行が(たとえそれらの構成要素がコレクションポート間のリンクも有するとしても)強制される。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのような制御ポートは、概して、構成要素の丸いコネクタ記号によって示される。
これらの異なる種類のポートが、データ処理グラフの柔軟な設計を可能にし、ポートの種類の重なり合う特性によってデータ及び制御フローの強力な組合せを許容する。特に、(「データポート」と呼ばれる)ある形態でデータを運ぶ2つの種類のポート、コレクションポート及びスカラポートが存在し、(「シリアルポート」と呼ばれる)直列実行を強制する2つの種類のポート、スカラポート及び制御ポートが存在する。データ処理グラフは、概して、いかなる接続された入力データポートも持たない「ソース構成要素」である1又は2以上の構成要素と、いかなる接続された出力データポートも持たない「シンク構成要素」である1又は2以上の構成要素とを有する。一部の構成要素は、接続された入力データポートと接続された出力データポートとの両方を有する。一部の実施形態において、グラフは、巡回することを許されず、したがって、有向非巡回グラフ(DAG,directed acyclic graph)でなければならない。この特徴は、下でより詳細に説明されるように、DAGの特定の特徴を利用するために使用され得る。
また、データ処理グラフの構成要素における専用の制御ポートの使用は、特定のその他の制御フロー技術を使用してはあり得ない計算の異なる部分の柔軟な制御を可能にする。例えば、データ処理グラフの間に依存関係の制約を適用することができるジョブ制御の解決策は、単一のデータ処理グラフ内の構成要素間の依存関係の制約を定義する制御ポートによって可能にされる細分化された制御を提供しない。さらに、逐次的に実行される異なるフェーズに構成要素を割り当てるデータ処理グラフは、個々の構成要素を順番に並べる柔軟性を許容しない。例えば、単純なフェーズを使用してはあり得ない入れ子にされた制御トポロジーが、本明細書において説明される制御ポート及び実行セットを使用して定義され得る。このより大きな柔軟性は、より多くの構成要素が可能であるときに同時に実行されることを可能にすることによって性能を潜在的に向上させる可能性もある。
異なる方法で異なる種類のポートを接続することによって、作成者は、データ処理グラフの構成要素のポートの間の異なる種類のリンクの構成を規定することができる。例えば、ある種類のリンクの構成が、特定の種類のポートが同じ種類のポートに接続されることに対応する可能性があり(例えば、スカラ−スカラリンク)、別の種類のリンクの構成が、特定の種類のポートが異なる種類のポートに接続されることに対応する可能性がある(例えば、コレクション−スカラリンク)。これらの異なる種類のリンクの構成は、作成者がデータ処理グラフの一部に関連する意図された振る舞いを視覚的に特定する方法と、その振る舞いを可能にするために必要とされる対応する種類のコンパイルプロセスをコンパイラ/インタープリタ120に示す方法との両方として働く。本明細書において説明される例は異なる種類のリンクの構成を視覚的に表現するために異なる種類のポートに一意の形状を使用するが、システムのその他の実施形態は、異なる種類のリンクを提供し、それぞれの種類のリンクに一意の視覚的インジケータ(例えば、太さ、リンクの種類、色など)を割り当てることによって異なる種類のリンクの構成の振る舞いを区別する可能性がある。しかし、ポートの種類の代わりにリンクの種類を使用して、上で挙げられた3種類のポートによって可能なのと同じさまざまなリンクの構成を表すためには、4種類以上のリンク(例えば、スカラ−スカラ、コレクション−コレクション、制御−制御、コレクション−スカラ、スカラ−コレクション、スカラ−制御など)が存在することになるであろう。その他の例は、異なる種類のポートを含むが、ただし、データ処理グラフ内でポートの種類を視覚的に明示的に示さない可能性がある。
コンパイラ/インタープリタ120は、実行するためにデータ処理グラフを準備するための手順を実行する。第1の手順は、構成要素の潜在的に入れ子にされた実行セットの階層を特定するための実行セット発見前処理手順である。第2の手順は、各実行セット内の構成要素の実行を制御するためにランタイムで状態機械を効果的に実施する制御コードを形成するためにコンパイラ/インタープリタ120が使用する対応する制御グラフを各実行セットに関して生じさせるための制御グラフ生成手順である。これらの手順の各々が、以下でより詳細に説明される。
少なくとも1つの入力データポートを有する構成要素は、各入力データ要素若しくはコレクション(又は複数の構成要素の入力ポート上のデータ要素及び/若しくはコレクションのタプル)に対して実行される処理を規定する。そのような規定の1つの形態は、1つの入力データ要素及び/若しくはコレクション又は入力データ要素及び/若しくはコレクションのタプルに対して実行される手順としての形態である。構成要素は、少なくとも1つの出力データポートを有する場合、対応する1つの出力データ要素及び/若しくはコレクション又は出力データ要素及び/若しくはコレクションのタプルを生成し得る。そのような手順は、高レベルのステートメントに基づく言語で(例えば、米国特許第8,069,129号明細書「Editing and Compiling Business Rules」(ビジネス規則の編集とコンパイル)において使用されたJavaのソースステートメント若しくはデータ操作言語(DML,Data Manipulation Language)を使用して)規定される可能性があり、又は何らかの完全に若しくは部分的にコンパイルされた形態で(例えば、Javaのバイトコードとして)提供される可能性がある。例えば、構成要素は、その構成要素の入力データ要素及び/若しくはコレクション並びにその構成要素の出力データ要素及び/若しくはコレクション、或いはより広く、そのようなデータ要素若しくはコレクションへの、又は入力を獲得し、出力データ要素若しくはコレクションを提供するために使用される手順若しくはデータオブジェクト(本明細書においては「ハンドル」と呼ばれる)への参照を引数が含む作業手順を有する可能性がある。
作業手順は、さまざまな種類である可能性がある。規定され得る手順の種類を限定することを意図することなく、ある種類の作業手順は、レコードフォーマットに従ってデータ要素に対する個別的な計算を規定する。単一のデータ要素は、テーブル(又はその他の種類のデータセット)からのレコードである可能性があり、レコードのコレクションは、テーブル内のレコードのすべてである可能性がある。例えば、単一のスカラ入力ポート及び単一のスカラ出力ポートを有する構成要素に関するある種類の作業手順は、1つの入力レコードを受け取ることと、そのレコードに対して計算を実行することと、1つの出力レコードを提供することとを含む。別の種類の作業手順は、複数のスカラ入力ポートから受け取られた入力レコードのタプルが複数のスカラ出力ポートにおいて送出される出力レコードのタプルを形成するためにどのようにして処理されるかを規定する可能性がある。
データ処理グラフによって規定される計算の意味的(semantic)定義は、グラフによって定義される計算の処理の順序付け及び同時性に対する制約及び/又は制約がないことを表すので元来並列的である。したがって、計算の定義は、結果が計算のステップの何らかの逐次的な順序付けと等価であることを必要としない。一方、計算の定義は、計算の部分を順番に並べることを必要とする特定の制約と、計算の部分の並列実行の制限を確かに与える。
データ処理グラフの検討において、ランタイムシステム内の別個の「タスク」としての構成要素のインスタンスの実施形態は、順番に並べる制約及び並列実行の制約を表す手段であると考えられる。意味的定義に合致するように計算を実装する、タスクに基づく仕様へのデータ処理グラフの実施形態のより詳細な検討は、グラフに基づく仕様自体の特徴の検討の後により完全に検討される。
概して、データ処理グラフ内の各構成要素は、グラフの実行中にコンピューティングプラットフォームにおいて何度かインスタンス化される。各構成要素のインスタンスの数は、複数の実行セットのうちのどれに構成要素が割り当てられるのかに依存する可能性がある。構成要素の複数のインスタンスがインスタンス化されるとき、2つ以上のインスタンスが並列に実行される可能性があり、異なるインスタンスがシステム内の異なるコンピューティングノードにおいて実行される可能性がある。ポートの種類を含む構成要素の相互接続が、規定されたデータ処理グラフによって認められる並列処理の性質を決定する。
概して、構成要素の異なるインスタンスの実行の間で状態は保持されないが、以下で検討されるように、構成要素の複数のインスタンスの実行にまたがる可能性がある「永続的なデータ」を明示的に参照するためにシステム内で特定のプロビジョニング(provision)が行われる。そのような永続的なデータが後の実行のために利用可能になる及び/又は特定の障害が起こった場合にリカバリ可能になることを保証するための1つの方法は、恒久的なストレージ媒体(例えば、不揮発性ストレージ媒体などの、停電などの1又は2以上の所定の障害が起こった場合に損失なく情報が記憶され得る媒体)にそのような永続的なデータを恒久的に記憶することである。
単一のレコードが単一の出力レコードを生成するためにどのようにして処理されるかを作業手順が規定し、ポートがコレクションポートであるものとして示される例においては、構成要素の単一のインスタンスが実行される可能性があり、連続的なレコードを処理して連続的な出力レコードを生じさせるために作業手順が反復される。この状況においては、反復毎に構成要素内で状態が保持されることがあり得る。
単一のレコードが単一の出力レコードを生成するためにどのようにして処理されるかを作業手順が規定し、ポートがスカラポートであるものとして示される例においては、構成要素の複数のインスタンスが実行される可能性があり、異なる入力レコードに関する作業手順の実行の間で状態は保持されない。
また、一部の実施形態において、システムは、上で導入された最も細分化された仕様に従わない作業手順をサポートする。例えば、作業手順は、例えば、スカラポートを通じて単一のレコードを受け付け、コレクションポートを通じて複数の出力レコードを提供する反復を内部で実施する可能性がある。
上述のように、ある形態でデータを運ぶ2つの種類のデータポート、コレクションポート及びスカラポートが存在し、直列実行を強制する2つの種類のシリアルポート、スカラポート及び制御ポートが存在する。場合によっては、ある種類のポートが、別の種類のポートにリンクによって接続される可能性がある。それらの場合の一部が、下で説明される。場合によっては、ある種類のポートが、同じ種類のポートにリンクされる。2つの制御ポート間のリンク(「制御リンク」と呼ばれる)は、リンクを介してデータが送信されることを必要とせずに、リンクされた構成要素の間に直列実行の順序付けを課す。2つのデータポート間のリンク(「データリンク」と呼ばれる)は、データフローを提供し、さらに、スカラポートの場合は直列実行の順序付けの制約を強制し、コレクションポートの場合は直列実行の順序付けを必要としない。概して、典型的な構成要素は、入力データポート及び出力データポート(コレクションポートか又はスカラポートかのどちらか)並びに入力制御ポート及び出力制御ポートを含む少なくとも2種類のポートを有する。制御リンクは、上流の構成要素の制御ポートを下流の構成要素の制御ポートに接続する。同様に、データリンクは、上流の構成要素のデータポートを下流の構成要素のデータポートに接続する。
3 コンピューティングプラットフォーム
再び図1を参照すると、データ処理グラフの構成要素のインスタンスが、データ処理グラフを実行する文脈でタスクとしてスポーン(spawn)され、概して、コンピューティングプラットフォーム150の複数のコンピューティングノード152において実行される。以下でより詳細に検討されるように、インターフェース/コントローラ140は、例えば、計算負荷の割り振り、通信又は入力/出力のオーバーヘッドの削減、及びメモリリソースの使用に関連するシステムの性能目標を達成するために、それらのタスクの実行のスケジューリング及び位置(locus)の監視制御の態様を提供する。
概して、コンパイラ/インタープリタ120による変換後、計算全体は、コンピューティングプラットフォーム150によって実行され得る目標言語の手順によってタスクに基づく仕様130として表される。これらの手順は「spawn」及び「wait」などのプリミティブを利用し、高レベルの(例えば、グラフに基づく)プログラム仕様110内の構成要素に関してプログラマによって規定された作業手順をそれらの手順の中に含むか又はそのような作業手順を呼び出す可能性がある。
多くのインスタンスにおいて、構成要素の各インスタンスは、いくつかのタスクが単一の構成要素の単一のインスタンスを実施し、いくつかのタスクが実行セットの複数の構成要素の単一のインスタンスを実施し、いくつかのタスクが構成要素の連続的なインスタンスを実施するようにしてタスクとして実施される。構成要素及びそれらの構成要素のインスタンスからの特定のマッピングは、結果として起こる実行が計算の意味的定義に合致したままであるようにコンパイラ/インタープリタの特定の設計に応じて決まる。
概して、ランタイム環境内のタスクは、例えば、1つの最上位のタスクが、例えば、データ処理グラフの最上位の構成要素の各々のために1つずつ複数のタスクをスポーンするようにして階層的に構成される。同様に、実行セットの計算は、複数の(つまり、多くの)サブタスクがコレクションの要素を処理するためにそれぞれ使用されるようにしてコレクション全体を処理するために1つのタスクを有する可能性がある。
ランタイム環境において、スポーンされた各タスクは、可能な状態の組の中の1つの状態にある可能性がある。初めてスポーンされるとき、タスクは、最初に実行される前、Spawned状態にある。実行するとき、タスクは、Executing状態にある。時々、タスクは、Suspended状態にある可能性がある。例えば、特定の実施形態において、スケジューラは、タスクがプロセッサ利用のクォンタムを超えたとき、リソースを待っているときなどにそのタスクをSuspended状態にする可能性がある。一部の実施形態において、タスクの実行は、プリエンプトされず、タスクが、制御を放棄しなければならない。3つのSuspended下位状態(sub-state)、すなわち、Runnable、Blocked、及びDoneが存在する。タスクは、例えば、そのタスクがそのタスクの計算を完了する前に制御を放棄した場合、Runnableである。タスクは、例えば、親タスクがそのタスクの戻り値を回収する前にそのタスクがそのタスクの処理を完了したとき、Doneである。タスクは、そのタスクがそのタスクの外部のイベント、例えば、別のタスクの完了(例えば、そのタスクが「wait for」プリミティブを使用したことが原因)、又はデータレコードが利用可能になることを待っている(例えば、in.read( )又はout.write( )関数の1つの実行をブロックする)場合、Blockedである。
再び図1を参照すると、各コンピューティングノード152は、1又は2以上の処理エンジン154を有する。各コンピューティングノード152は、バッファメモリ156(例えば、揮発性ストレージ媒体)、データストレージ157(例えば、不揮発性ストレージ媒体)、及びI/Oインターフェース158も含み、I/Oインターフェース158は、コンピューティングプラットフォーム150によって消費される及び/又は生成されるデータの送信元及び/又は送信先160にアクセスし得る。コンピューティングノード152のうちの1又は2以上のバッファメモリ156及び/又はデータストレージ157のどちらか又は両方は、複数のコンピューティングノード152によってアクセスされ得るように構成される可能性がある。少なくとも一部の実施形態において、各処理エンジン154は、コンピューティングノード152上で実行される単一のオペレーティングシステムプロセスに関連付けられる。コンピューティングノード152の特徴に応じて、単一のコンピューティングノード152上で複数の処理エンジン154を実行することが効率的である可能性がある。例えば、コンピューティングノード152は、複数の別々のプロセッサを有するサーバコンピュータである可能性があり、又はサーバコンピュータは、複数のプロセッサコアを有する単一のプロセッサを有する可能性があり、又は複数のコアを有する複数のプロセッサの組合せが存在する可能性がある。いずれの場合も、複数の処理エンジンを実行することが、コンピューティングノード152上で単一の処理エンジンのみを使用するよりも効率的である可能性がある。
処理エンジンの一例は、仮想マシンに関連してホストされる。1つの種類の仮想マシンは、Java Bytecodeとしてコンパイルされた形態で規定されるタスクが実行され得る環境を提供するJava仮想マシン(JVM,Java Virtual Machine)である。しかし、仮想マシンアーキテクチャを使用する可能性があるか又は使用しない可能性があるその他の形態の処理エンジンが、使用され得る。
4 リカバリ
一部の例において、上述のコンピューティングシステム100は、処理の障害が起こる(例えば、コンピューティングノードが処理動作中に故障する)場合に、システムが故障しなかったか又はスリープしたか又はある期間の間速度が落ちたとした場合に生成された可能性がある結果を生成するように再始動され得ることを保証するためのリカバリアルゴリズムを実装する。
1つの簡単なリカバリアルゴリズムは、障害の後、データ処理グラフによって行われた作業のすべてがロールバックされるように作業のアトミックな単位としてデータを処理することを含む。このバッチ処理手法において、コンピューティングシステムは、障害が発生した処理中に変更されたすべてのファイルを処理が始まる前のそれらのファイルの状態に復元することによってリカバリ可能性を実現する。このようにして、リカバリアルゴリズムは、障害が発生した処理中に行われたすべての作業及び変更が破棄されることを保証し得る。この種のリカバリアルゴリズムは、比較的短い量の時間でデータのすべてを処理する単一のデータ処理グラフによってデータが処理されているときに特に有用である。
しかし、永続的な共有リソースを更新する複数のグラフを扱うとき、又は長い(不定である可能性がある)継続時間にわたってデータを処理するグラフを処理するとき、データの処理を障害の後にすべてロールバックされ得る作業のアトミックな単位として扱うことは実際的でなく、ときに不可能である。
4.1 もつれ
例えば、コンピューティングシステムが、永続的な共有データを更新することを含め、複数のデータ処理グラフを使用して1又は2以上の共有リソースを同時に処理するとき、リカバリ可能性は、「もつれ」と呼ばれる状態が原因で失われる。共有データは、少なくとも2つの異なるデータ処理グラフの各々によって読まれ、書き込まれ(又は修正され)得るデータである。共有データは、例えば、データ処理グラフの間で共有状態及び/又は共有通信(shared communication)の形態として異なるデータ処理グラフによって値が読まれ、書き込まれる変数である可能性がある。
もつれの例に関して、2つのデータ処理グラフが共有データの独立した組を処理しており、各データ処理グラフが共有データに対してアトミックに変更を行う状況を考える。2つのデータ処理グラフのうちの第1のデータ処理グラフがデータの組を処理し、アトミックな更新において変更を行い、その変更をコミットしてそれらの変更が永続的にされた(例えば、恒久的に記憶された)ことを確定し、その後、2つのデータ処理グラフのうちの第2のデータ処理グラフの実行中に障害が発生する状況が起こり得る。システムが第2のデータ処理グラフの障害が発生した処理中に変更された(共有データを含む)すべてのデータを処理が始まる前のそのデータの元の状態に復元するリカバリ手順を実施する場合、第1のデータ処理グラフが共有データに対して行った変更の少なくとも一部が元に戻され、不整合を生じる。一方、システムが第2のデータ処理グラフの障害が発生した処理中に変更された(共有データを含む)すべてのデータを処理が始まる前のそのデータの元の状態に復元しない場合、第2のデータ処理グラフの出力は、その第2のデータ処理グラフの処理の始めに共有データの状態が誤っていることが原因で誤っている可能性がある。したがって、もつれが原因で、共有データを操作するデータ処理グラフは、障害の後、独立して復元され得ない。
もつれたプロセスの存在下でリカバリを行う1つの手法は、グラフが互いの変更を見ることができないように複数のデータ処理グラフを互いに分離することを含む。しかし、データ処理グラフが同じデータアイテムを操作しており、したがって、分離が可能でない場合が多い。さらに、一部の例においては、複数のデータ処理グラフが比較的長い継続時間の間実行され、そのことは、(悲観的並行性制御を使用する場合)デッドロックが原因で又は(楽観的並行性制御を使用する場合)コミット時間の衝突が原因で一方のデータ処理グラフがもう一方のデータ処理グラフがロックを解除するのを待つか又は一方のデータ処理グラフがロールバックされるかどちらかの結果となる可能性が高い。もつれたプロセスの存在下でリカバリを行うその他の手法は、複数のデータ処理グラフを作業の単一のアトミックな単位の一部として実行すること、又は複数のデータ処理グラフを逐次的に実行することを含む。
4.2 長時間実行グラフ
一部の例において、コンピューティングシステム100内で実行されるデータ処理グラフは、いかなる明確に定義された終了点もなくデータの連続したストリームを処理する。これらのデータ処理グラフは、「摂取グラフ(ingestion graph)」と呼ばれることがある。データの連続したストリームを処理するとき、データのすべての処理を作業の単一のアトミックな単位として扱うことは不適切であり、上述のリカバリ手法はコンピューティングシステム内の障害から成功裏にリカバリするのに不適切である。
そのようなコンピューティングシステム内の障害からリカバリするための1つの手法は、入力データの連続したストリームを入力データの一連のより小さな「パルス」に分割することと、入力データの一連のパルスを個々に処理することとを含む。入力データの所与のパルスの処理の完了時に、グラフの内部状態のチェックポイントが作成される。障害が起こった場合、コンピューティングシステムは、チェックポイントを使用してグラフの内部状態を復元し、連続したデータストリームの処理の中間点で処理を再始動することができる。一部の例において、コンピューティングシステムは、もつれた長時間実行グラフを含む場合、グラフのすべてが共通のコミット時間を共有することを保証するためにチェックポイントを調整しなければならない。
本明細書において使用されるとき、「データユニットのストリーム」とも呼ばれる、パルスに分割される入力データは、例えば、外部ソースから受け取られた後に読まれる入力レコードの任意のシーケンス、又は任意の共有された変数の記憶された状態若しくは入力データのソースとして働く任意の内部システム状態にアクセスすることによって読まれたデータの任意の単位を含むと見なされる。
例えば、図2Aを参照すると、コンピューティングシステム100は、「A」とラベル付けされた第1のグラフ及び「B」とラベル付けされた第2のグラフを時間tに開始し、グラフは、入力データの第1のパルスの処理を始める。時間tにおいて、第1のグラフと第2のグラフとの両方は、入力データの第1のパルスの処理を完了し、第1のチェックポイントを書き込む。第1のチェックポイントが書き込まれた状態で、第1のグラフ及び第2のグラフは、入力データの第2のパルスの処理を始める。時間tにおいて、第1のグラフと第2のグラフとの両方は、入力データの第2のパルスの処理を完了し、第2のチェックポイントを書き込む。第2のチェックポイントが書き込まれた状態で、第1のグラフ及び第2のグラフは、入力データの第3のパルスの処理を始める。時間tで、入力データの第3のパルスの処理において障害が発生する。
図2Bを参照すると、障害からリカバリするために、コンピューティングシステムは、第2のチェックポイントを使用して第1のグラフ及び第2のグラフを、入力データの第2のパルスの処理の完了時のそれらのグラフのそれぞれの状態に復元する。
図2Cを参照すると、第1のグラフ及び第2のグラフが入力データの第2のパルスの処理の完了時のそれらのグラフのそれぞれの状態に復元された状態で、グラフは、入力データの第3のパルスを成功裏に再処理し、時間tにおいて第3のチェックポイントを書き込む。
4.3 通常のチェックポイント作成アルゴリズム
チェックポイントデータを保存する1つの手法は、「チェックポイントマスタ」ノード(例えば、システム内のコンピューティングノードのうちの1つ)に、新しいチェックポイントメッセージをコンピューティングシステム内のすべてのその他のコンピューティングノードにブロードキャストすることによってまずチェックポイントを開始させることを含む。コンピューティングノードにおいて受け取られると、新しいチェックポイントメッセージは、サーバにすべてのコンピューティング活動を中断させる。それから、コンピューティングシステムは、システム内のコンピューティングノード間を移動中のすべてのメッセージが届けられるのを待つ。
すべてのメッセージが届けられると、各コンピューティングノードは、そのコンピューティングノードのタスクの状態、保留中のメッセージ、永続的なデータ、及び一時的な状態をチェックポイントファイルに保存する。そして、マスタコンピューティングノードは、チェックポイントをコミットするジャーナルエントリを書き込み、システム内のコンピューティングノードのすべてにメッセージを送信して処理を再開する。
上述の手法は、入力データの連続したストリームを処理する際に障害からリカバリすることができるチェックポイント作成手順をもたらすが、手法に関連するいくつかの欠点が存在する。例えば、上の手法は、比較的長い継続時間の間、処理の中断を必要とし、その継続時間中、コンピューティングシステムは、有用な処理を完了することができない。さらに、コンピューティングノードのタスクの状態を保存することは、計算量が多く、コンピューティングシステムが入力データの処理ではなくタスクの状態の保存に過度な量の時間を費やす結果となる。最後に、コンピューティングシステムは、トランザクションデータストアのコミットマネージャ、トランザクションデータストアのテーブル及びインデックスに対するインフライト(in-flight)更新、インフライトサービス呼び出し、あるサーバから別のサーバに移動するインフライトデータ、あるサーバから別のサーバにマイグレーションするインフライトプロセス、並びに共有データ(例えば、コンピューティングシステム100において実行される(データ処理グラフの構成要素に関連する)2又は3以上のタスクによってアクセスされ得るデータ)へのインフライトアクセスの状態などの大量の一時的な状態を有する。一部の例において、この一時的な状態を保存することは、計算コストが高く、計算が複雑である。
4.4 パルス式摂取アルゴリズム
パルス式摂取アルゴリズムは、通常のチェックポイント作成アルゴリズムに関連する欠点を避けるために、コンピューティングシステムにおいて実行されるグラフのいくつかの特性に依拠する。コンピューティングシステムにおいて実行される摂取グラフの1つの特性は、それらの摂取グラフが一度に1レコードずつデータを摂取する(ingest)ことである(例えば、摂取(ingestion)は、繰り返しレコードを読み、共有された永続的なデータを更新することを含む)。コンピューティングシステムにおいて実行される摂取グラフの別の特性は、それらの摂取グラフがレコード毎にステートレスであることである。つまり、すべての状態が、グラフによってアクセスされ得る永続的なデータ(例えば、共有データのコレクション及びトランザクションデータストアのテーブル)内に保持される。さらに、一部の例において、コンピューティングシステムにおいて実行されるデータ処理グラフは、レコード毎にステートレスである構成要素のみを含む。
コンピューティングシステムにおいて実行されるグラフのこれらの特性に基づいて、グラフの単一の実行において入力データストリーム全体を摂取することと、入力データストリームから入力データのパルスを摂取し、グラフをきれいにシャットダウンし(つまり、データのパルスに関連する任意の処理を完了した後にすべてのプロセスが正常に終了することを可能にし)、それから、入力データストリームの後続のパルスを処理するためにグラフを再始動することとの間で違いはない。パルス式摂取手法(pulsed ingestion approach)においてはグラフがきれいにシャットダウンすることを可能にされるので、コンピューティングシステムは、チェックポイント作成プロセス中に大量の内部のグラフの状態を保存する必要がない。
4.4.1 単一グラフパルス式摂取アルゴリズム
図3を参照すると、単一のグラフにおいて入力データのストリームを処理するためのパルス式摂取アルゴリズムは、時間tにおいてグラフを開始することを含む。開始されると、グラフは、入力データのストリームからの入力データの第1のパルスを処理して出力データを生じさせ、そのグラフは、その出力データを第三者預託して記憶する(つまり、出力は、下流のプロセスに直ちに提供されない)。時間tにおいて、パルス終了インジケータ(例えば、ファイル終端(EOF,end-of-file)文字)が、入力データのストリームに挿入され、入力データの第1のパルスの終末を示す。グラフは、時間tにおいてパルス終了インジケータに遭遇するとき、入力データストリームから新しいデータを摂取することをやめる。それから、時間tから時間tまで、グラフは、そのグラフが時間tにおいて既に処理していたすべてのデータを処理することを終える(つまり、グラフは、「休止する(quiesce)」ことを可能にされる)。時間tと時間tとの間の休止期間は、図3において処理負荷の下り傾斜370として示される。
時間tにおいて、グラフが休止すると、コンピューティングシステムは、すべての永続的なデータ、ストリーミング入力データの状態(例えば、現在位置)、及び出力データの状態を含むチェックポイントを恒久的なストレージに書き込み始める。時間tにおいて、恒久的なストレージへのチェックポイントの書き込みを完了すると、入力データの第1のパルスに関連する第三者預託された出力データが、下流のプロセスに解放される。そして、時間tにおいて、グラフが再始動され、(上述の手順に従って)入力データのストリームからの入力データの第2のパルスを処理し始める。
概して、グラフがチェックポイントを書き込む前に休止することを可能にされるとすると、グラフが実行されていないので、プロセスの状態、メッセージ、及び過渡状態(transient)は、システム内に存在しない。一部の例においては、入力データのあらゆるパルスが非常に小さい(例えば、1秒につき100個のパルスが存在する)ので、グラフをシャットダウンすること及び再始動することに関連するオーバーヘッドはほとんどない。これは、十分に短い応答レイテンシーを必要とするアプリケーションにとって理想的な高頻度のチェックポイント作成(例えば、10msのチェックポイント間隔)をもたらし得る。例えば、特定のアプリケーションは、再始動(つまり、グラフをシャットダウンすること、プロセスが正常に終了するのを待つこと、及び再び始動すること)のオーバーヘッドが10msよりも著しく小さい(例えば、1ms未満である)ことを必要とする。さらに、チェックポイントを書き込むために必要とされる時間も、チェックポイント間隔と比較されたとき、小さい(例えば、1ms)。一部の例において、再始動のタイミングの要件は、特定の始動に関連する処理結果を記憶し、より速い始動のために入力データの後続のパルスのためにそれらの結果を(再計算するのではなく)再利用することによって達成される。一部の例において、記憶される結果は、低い頻度で(例えば、10秒毎又は1分毎に)再計算される。
図4を参照すると、リカバリ手順の例において、コンピューティングシステムは、(上述のように)単一のグラフを使用して入力データの第1のパルスを処理し、時間tにおいて第1のチェックポイントを記憶する。時間tにおいて、システムは、グラフを使用して入力データの第2のパルスの処理を始める。それから、時間tで、第2のパルスの処理において障害が発生する。障害が原因で、システムは、時間tにおいてすべての計算をシャットダウンし(例えば、障害の起こらなかったすべてのコンピューティングノード上の処理を止め)、第1のチェックポイントを使用してそのシステムの入力及び出力データの状態をデータの第1のパルスの処理の完了時の(つまり、時間tにおける)システムの状態に復元する。そのようにするために、システムは、入力データの第2のパルスをそのシステムの初期(つまり、時間tにおける)状態まで巻き戻し、入力データの第2のパルスに関するすべての第三者預託された出力データを破棄する。時間tにおいて、システムの永続的なデータをデータの第1のパルスの処理の完了時のそのシステムの状態に復元するためにチェックポイントが使用される。
時間tにおいて、システムがデータの第1のパルスの処理の完了時のそのシステムの状態に完全に復元された状態で、グラフが再始動し、入力データの第2のパルスの再処理を始める。図4において、入力データの第2のパルスの再処理は成功する。
4.4.2 複数グラフパルス式摂取アルゴリズム
図5を参照すると、一部の例において、システムは、複数のグラフ(例えば、複数の摂取グラフ)のコレクションを含むとき、グラフのコレクションを通じて同時にデータのパルスを処理するように構成される。
特に、複数のグラフのコレクションにおいて入力データの1又は2以上のストリームを処理するためのパルス式摂取アルゴリズムは、時間tにおいてコレクション内のグラフのすべてを開始することを含む。開始されると、グラフの各々が、入力データの1又は2以上のストリームからの入力データの第1のパルスを処理して、それぞれの1又は2以上の出力データストリームを生じさせ、それらの出力データストリームは、第三者預託して記憶される(つまり、出力データストリームは、下流のプロセスに直ちに提供されない)。時間tにおいて、パルス終了インジケータが、入力データのストリームに挿入され、入力データの第1のパルスの終末を示す。一部の例においては、パルス終了インジケータが入力データストリームのうちの2又は3以上に同期して挿入されることを保証するためにバリア同期(barrier synchronization)動作が使用される。グラフは、時間tにおいてパルス終了インジケータに遭遇するとき、入力データストリームから新しいデータを摂取することをやめる。それから、時間tから時間tまで、グラフは、それらのグラフが時間tにおいて既に処理していたすべてのデータを処理することを終える(つまり、グラフは、「休止する」ことを可能にされる)。時間tと時間tとの間の休止期間は、図5において処理負荷の下り傾斜570として示される。
一部の例においては、グラフのすべてが終了するのを待つために別のバリア同期が使用される。時間tにおいて、グラフがすべて終了すると、チェックポイントが書き込まれ、すべての永続的なデータ、ストリーミング入力データの状態(例えば、現在位置)、及び出力データの状態が恒久的なストレージに書き込まれる。時間tにおいて、恒久的なストレージへのチェックポイントの書き込みを完了すると、入力データの第1のパルスに関連する第三者預託された出力データストリームが、下流のプロセスに解放される。そして、時間tにおいて、グラフは、別のバリア同期動作を使用して同期して再始動され、(上述の手順に従って)入力データのストリームからの入力データの第2のパルスを処理し始める。
4.4.3 増分パイプライン化チェックポイント
一部の例において、あらゆるチェックポイント動作に関して永続的なデータの内容全体を保存することは、システムが摂取されるデータを1秒のほんの何分の1かの間に利用可能にする必要がある可能性がある一方で、そのようにすることが数分又はさらには数時間かかる可能性があるので実際的でない。
あらゆるチェックポイントに関して保存されるデータの量を削減する1つの手法は、入力データの特定のパルスが処理されるときに、永続的なデータに対する変更をジャーナルに増分書き込みすることである。そのようにすることは、所与のチェックポイントに関して書き込まれるデータの量を、入力データの特定のパルスの処理において変更されたデータの量に制限する。そのようにすることの1つの利点は、(永続的なデータに対する変更を表す)ジャーナルへのエントリが、少なくとも、システムがチェックポイントを形成し、記憶し始める前に恒久的に記憶される過程にあることである。さらに、ジャーナルに変更を増分書き込みすることは、変更されたデータアイテムの「ダーティリスト」を保持し、チェックポイントが形成されるときにそのリストを見て回る(walk)オーバーヘッドを背負い込むことを防止する。ジャーナルに変更を増分書き込みすることの別の利点は、ジャーナルへのエントリが、異なるパルスに関するジャーナルエントリの間の境界を特定するために使用され得る「チェックポイントマーカ」によってタグ付けされる可能性があることである。チェックポイントマーカを使用するとき、システムは、第1の前のパルスに関するジャーナルエントリがまだ恒久的に記憶されている間に第2のパルスの処理を始めることができる。
図6を参照すると、増分パイプライン化チェックポイント作成を用いるパルス式摂取アルゴリズムが、時間tにおいてグラフを開始することを含む。開始されると、グラフは、入力データのストリームからの入力データの第1のパルスを処理して出力データの1又は2以上のストリームを生成し、出力データのそれらのストリームは、第三者預託して記憶される。さらに、入力データの第1のパルスの処理中に発生する永続的なデータに対する変更は、それらの変更が起こるときにジャーナルにエントリとして非同期に記憶される。
時間tにおいて、パルス終了インジケータが、入力データのストリームに挿入され、入力データの第1のパルスの終末を示す。グラフは、時間tにおいてパルス終了インジケータに遭遇するとき、入力データストリームから新しいデータを摂取することをやめる。それから、時間tから時間tまで、グラフは、それらのグラフが時間tにおいて既に処理していたすべてのデータを処理することを終える(つまり、グラフは、「休止する」ことを可能にされる)。時間tと時間tとの間の休止期間は、図6において処理負荷の下り傾斜670として示される。
時間tにおいて、グラフが休止すると、チェックポイントカウンタを含むチェックポイントレコードが、ジャーナルに書き込まれ、システムが、(すべての永続的なデータ、ストリーミング入力データの状態(例えば、現在位置)、及び出力データの状態を恒久的に記憶することを含め)チェックポイントレコードを恒久的に記憶し始める。時間tにおいて、チェックポイントレコードが恒久的に記憶される前に、グラフは、再始動され、入力データのストリームからの入力データの第2のパルスの処理を始める。時間tにおいて、システムは、チェックポイントレコードを恒久的に記憶することを完了し、入力データの第1のパルスに関連する第三者預託された出力データが、下流のプロセスに解放される。システムは、上述のアルゴリズムに従って入力データの第2のパルスの処理を継続する。
一部の例においては、上述のアルゴリズムが、複数のチェックポイントが同時に進行することを可能にするために修正される。そのようにするために、恒久的に記憶されたデータの異なる組が、互いに区別される。例えば、第三者預託されたまま保たれるすべての出力データが、チェックポイントカウンタによってタグ付けされ、ジャーナルに書き込まれるチェックポイントレコードが、チェックポイントカウンタによってタグ付けされる。
所与のチェックポイントnに関するすべてのチェックポイントレコードが恒久的になるときにはいつでも、所与のチェックポイントがコミットされ、所与のチェックポイントのチェックポイントカウンタによってタグ付けされたすべての出力データが第三者預託から解放される。この手法においては、チェックポイント作成アルゴリズムの後続の反復を実行する前に現在のチェックポイントからのチェックポイントレコードが恒久的になるのを待つのではなく、この最後のステップが、チェックポイント作成アルゴリズムの反復と非同期に実行されることに留意されたい。異なるチェックポイントの反復からのチェックポイントレコードの書き込みは重ならないが、チェックポイントレコードを永続的に記憶するための処理は、重なることを可能にされる。
4.4.3.1 増分パイプライン化チェックポイントの例
図7Aを参照すると、増分パイプライン化チェックポイント作成手法の一例において、コンピューティングシステム100は、入力フロー111からの入力データのストリーム112を受け取り、入力データのストリーム112を処理し、出力データのストリームを出力フロー131に提供する。コンピューティングシステム100は、例えば、コンピューティングノード152に関して上でより詳細に説明されているように、入力データを分散して処理して出力データを生じさせるいくつかのコンピューティングノード121を含む。
動作中、コンピューティングシステム100は、摂取グラフを使用して、一度に1個又は数個のレコードずつ入力データのストリームからデータを摂取する。摂取されたデータは、コンピューティングシステム102のコンピューティングノード121上で実行される1又は2以上のデータ処理グラフを使用して処理される。入力データストリーム112は、すべてがパルス終了インジケータによって分けられる入力データの第1のパルス112A、入力データの第2のパルス112B、及び入力データの第3のパルス112Cを含むパルスにセグメント分けされる。一部の例においては、パルス終了インジケータが、入力データの既存の又は固有の構造に従って(例えば、各レコード、nレコード毎などで)入力データストリーム112に挿入される。一部の例においては、システムが、パルス終了インジケータを入力データストリーム112のどこに挿入すべきかを動的に又は任意に決定する。一部の例において、システムは、システムが少しの間休止しているときにパルス終了インジケータを挿入する。入力データの各「パルス」は、入力データストリーム112内の連続データユニットのサブセットを含む。本明細書において使用されるとき、「連続」データユニットの各サブセットは、入力データストリーム112内の何らかの順序付けによる順序通りであり、連続データユニットのいかなるその他のサブセットとも重ならないデータユニットを含む。
一部の例においては、パルスのサイズ(「チェックポイント間隔」と呼ばれることがある)が、頻繁なチェックポイント作成が招くスループットの悪化と、アプリケーションによって必要とされる応答レイテンシー(応答レイテンシーは、任意の所与の時間に、完全なチェックポイントが実行されるまでグラフからの応答が供給されない可能性があるので、チェックポイント間隔によって制限される)との間のトレードオフに基づいて決定される。
図7Bを参照すると、コンピューティングシステム100がデータストリームの第1のパルス112Aからデータを摂取するとき、摂取されたデータ122A(例えば、個々のレコード)は、1又は2以上のデータ処理グラフに従って処理するためにコンピューティングノード121に与えられる。また、リカバリ動作が必要とされる場合に後で取り出すために、第1のパルス112Aからの摂取されたデータ113Aのコピーが恒久的に記憶される。
コンピューティングノード121によって生じさせられた出力データのストリーム132Aは、出力フロー131に与えられるが、第1のパルス112A全体が成功裏に処理されるまで出力データ132が下流のプロセス(例えば、下流のコンピューティングシステムにおいて実施されるプロセス−図示せず)に与えられないように第三者預託して保有される(開スイッチ135によって表される)。一部の例において、出力データのストリームは、出力データをその関連する入力データパルスにリンクする一意識別子に関連付けられる。
入力データストリーム112の第1のパルス112Aの処理が進むとき、永続的なデータの状態、ストリーミング入力の状態、及びストリーミング出力の状態が変わる。一部の例において、コンピューティングシステム100は、これらの状態変化が起こるときにこれらの状態変化が揮発性の一時的ジャーナル141に(ときに非同期に)記録されるチェックポイント手順を実行する。一時的ジャーナル141は、記録された状態変化を恒久的ジャーナル142に非同期に書き込む。一部の例においては、出力データのストリーム及びジャーナルに記憶された状態変化が両方ともそれらの関連する入力データパルスにリンクされるように、一時的ジャーナル141及び恒久的ジャーナル142に記憶された状態変化が一意識別子にやはり関連付けられる。一部の例において、一意識別子は、「チェックポイント識別子」と呼ばれる。
図7Cを参照すると、第1のパルス112A全体を摂取すると、コンピューティングシステム100は、チェックポイント手順を実行するようにコンピューティングシステム100に信号を送るパルス終了インジケータに遭遇する。チェックポイント手順において、コンピューティングシステムは、データを摂取することを止め、コンピューティングノード121が休止する(つまり、コンピューティングシステム100内に存在する第1のパルス112Aのすべての未処理のレコードの処理を終わらせる)ことを可能にする。この時間中に、一時的ジャーナル141は、記録された状態変化を恒久的ジャーナル142に非同期に書き込むことを続ける。結局、コンピューティングノード121が休止すると、コンピューティングシステム100は、第1のパルス112Aに関連する状態変化を一時的ジャーナル141に記録することを完了する。
コンピューティングシステムが休止することを可能にすることによって、システムが第1のパルス112Aに関連する状態変化を一時的ジャーナル141に記録することを完了するとき、データ処理グラフがそのとき実行されていないので、プロセスの状態、メッセージ、又は過渡状態はコンピューティングシステム内に存在しないことが保証される。
図7Dを参照すると、第1のパルス112Aに関するチェックポイントが一時的ジャーナル141に記録された状態で、コンピューティングシステム100が、データの第2のパルス112Bの処理を始める。そのようにするために、コンピューティングシステム100は、データストリームの第2のパルス112Bからデータを摂取し、摂取されたデータを、1又は2以上のデータ処理グラフに従って処理するためにコンピューティングノード121に与える。また、リカバリ動作が必要とされる場合に後で取り出すために、第2のパルス112Bからの摂取されたデータ113Bのコピーが永続的なデータに記憶される。
データストリームの第2のパルス112Bの処理が進むとき、永続的なデータの状態、ストリーミング入力の状態、及びストリーミング出力の状態が変わる。状態変化が起こるときにそれらの状態変化が一時的ジャーナル141に記録される第2のパルス112Bに関するチェックポイント手順が、実行される。図7Dに示された時間に、一時的ジャーナル141は、第1のパルス112Aに関する記録された状態変化を恒久的ジャーナル142に非同期に書き込むことを完了しておらず、したがって、一時的ジャーナル141は、第1のパルス112Aと第2のパルス112Bとの両方に関する記録された状態変化(それらのそれぞれの一意のチェックポイント識別子によってそれぞれが特定される)を含む。一部の例においては、入力データの第1の前のパルスに関連するジャーナルエントリが恒久的にされる前に入力データの第2のパルスに関連するジャーナルエントリが書き込まれることを可能にすることによって、コンピューティングシステムは、チェックポイントレコードが恒久的にされる(これは、ディスクのおよそまるまる1回転待つことを必要とする可能性がある)前にチェックポイント及びひいてはパルスが繰り返し得るので、パルス間隔をディスクの1回転(約10ms)未満に縮めることができる。
出力データの第1のストリーム132Aは、一時的ジャーナル141が第1のパルス112Aに関する記録された状態変化を非同期に書き込むことを完了しない限り、第三者預託された状態のままである。
コンピューティングノード121によって生じさせられた出力データの第2のストリーム132Bは、第2のパルス112Bが成功裏に処理されるまで出力データの第2のストリーム132Bが下流のプロセスに提供されないように出力フロー131に提供され、さらに第三者預託して保有される(出力データの第1のストリーム132Aの背後に)。
図7Eを参照すると、一時的ジャーナル141が恒久的ジャーナル142への第1のパルス112Aに関する記録された状態変化の書き込みを完了する(つまり、チェックポイントがコミットされる)とき、スイッチ135は閉じられ、出力データの第1のストリーム132Aが下流のプロセスに解放される。恒久的ジャーナル142に記憶された第1のパルス112Aに関する記録された状態変化は、第1のパルス112Aの処理の完了時のコンピューティングシステム100の状態を表し、集合的に第1のチェックポイントと呼ばれる。第1のチェックポイントが恒久的ストレージに書き込まれた状態で、第1のパルス112Aに関連する状態変化は、一時的ジャーナル141内にもはや存在しない。
図7Fを参照すると、出力データの第2のストリーム132Bが第三者預託されたままであるように、スイッチ135が再び開けられる。コンピューティングシステム100は、出力データの第2のストリーム132Bに追加するために、データの第2のパルス112Bを摂取し処理し続ける。第1のチェックポイントが恒久的ジャーナル142に書き込まれた状態で、一時的ジャーナル141は、第2のパルス112Bに関する記録された状態変化を含む第2のチェックポイントを恒久的ジャーナル142に非同期に書き込み始める。
図7Gを参照すると、第2のパルス112Bの処理中のいずれかの時点で、エラーが発生し、リカバリ手順が実行される。概して、エラーリカバリ手順は、コンピューティングシステムの状態を第1のチェックポイントにおけるそのコンピューティングシステムの状態(つまり、第1のパルス112Aの処理の完了時のそのコンピューティングシステムの状態)に復元する。例えば、リカバリ手順において、永続的なデータの状態、ストリーミング入力の状態、及びストリーミング出力の状態が復元される。これは、出力データ132Bの第2のストリームを消すことと、第2のパルス112Bに関する摂取されたデータ113Bのコピーを第2のパルス112Bの未処理の部分と組み合わせて元の第2のパルス112Bを再構築することとを含む。恒久的ジャーナル142内の状態情報が、コンピューティングシステム100の状態(つまり、永続的なデータの状態、ストリーミング入力の状態、及びストリーミング出力の状態)を第1のチェックポイントによって表される状態に復元するために使用される。
リカバリ手順が完了すると、コンピューティングシステム100は、エラーがこれまで発生していないかのように第2のパルス112Bの処理を開始する。
4.5 分散型ジャーナル
上述のコンピューティングシステムにおいて、状態変化を含むチェックポイントレコードは、単一のグローバルなジャーナルに恒久的に書き込まれる。一部の例においては、単一のグローバルなジャーナルを使用することは、システムのスケーラビリティを制限する可能性がある。図8を参照すると、よりスケーラブルな手法において、コンピューティングシステム100は、チェックポイントを記憶するために分散型ジャーナルを使用する。例えば、コンピューティングノード121の各々は、独自の個々の一時的ジャーナル141及び恒久的ジャーナル142を保持する。
一部の例において、コンピューティングノード121によって保持される個々のジャーナルは、ジャーナルフラグメントと呼ばれ、各ジャーナルフラグメントは、永続的なデータの異なるフラグメントに対応する。例えば、コンピューティングシステム100内の各コンピューティングノード121が、コンピューティングノード121に関連するデータを包含するジャーナルフラグメントに関連付けられる。コンピューティングシステム100は、データアイテムを変更するときにはいつも、データアイテムに関連するジャーナルフラグメントに(つまり、データアイテムを記憶するコンピューティングノード121に関連するジャーナルフラグメントに)ジャーナルエントリを書き込む。
4.5.1 スナップショット作成
一部の例において、1つの潜在的な問題は、すべてのジャーナルフラグメントの総サイズは、際限なく大きくなり、際限のない量のストレージを消費する可能性があることである。さらに、そのとき、システムがジャーナルフラグメント全体を再現する必要があるので、障害からリカバリするための時間も際限なく大きくなる。この潜在的な問題に対する解決策は、ジャーナルフラグメントに対応するデータの「スナップショットを作成」し、それから、スナップショットプロセスの開始前に作成されたジャーナルフラグメントの部分を破棄することを含む。障害が起こった場合、コンピューティングシステムは、スナップショットをロードし、それから、スナップショットからのデータにジャーナルを適用することによってリカバリすることができる。一部の実施形態において、スナップショットは、特定の特性をデータベースチェックポイントと共有する。
スナップショットを記憶する1つの手法において、各スナップショットは、関連する開始時間及び関連する終了時間を有する。スナップショット内の永続的なデータの任意の特定の部分の状態は、開始時間と終了時間との間の時間に存在することが知られている。一部の例において、スナップショットは、各スナップショットフラグメントが所与のジャーナルフラグメントに結びつけられるようにしてスナップショットフラグメントとして分散される。概して、システムは、各データフラグメントに関するスナップショットフラグメントを、システムがシャットダウンされるまで繰り返し生じさせる。そのようにするために、各データフラグメントに関して、システムは、スナップショットフラグメントを作成し、そのスナップショットフラグメントを「保留中」としてタグ付けする。一部の例において、スナップショットフラグメントは、複数のサーバにまたがって複製される。そして、コンピューティングシステムは、スナップショットフラグメントの開始時間を、現在処理しているチェックポイントに関する一意のチェックポイント識別子(例えば、チェックポイントカウンタ)の現在の値として設定する。スナップショットが保留状態であり、一意のチェックポイント識別子に関連付けられた状態で、スナップショットは、「開始された」と見なされる。
そして、データフラグメントに関連する永続的なデータが、スキャンされ、現在のデータ値(つまり、前のスナップショットフラグメント以降にジャーナルにまだ恒久的に書き込まれていないデータ値)が、データフラグメントに関連するスナップショットフラグメントに書き込まれる。一部の例において、スナップショットに書き込まれたそれぞれの現在のデータ値は、現在のデータ値が有効であったタイムスタンプに関連付けられる。システムは、スナップショットフラグメントが恒久的になり、それから、現在のジャーナルフラグメントがコミットするのを待ち、スナップショットフラグメントがコミットされたデータのみを含むことを保証する。そのとき、スナップショットフラグメントは、スナップショットフラグメントの「終わり」と見なされる、一意のチェックポイント識別子の現在の値に設定されたそのスナップショットフラグメントの終了時間を有する。スナップショットフラグメントは、最終として印を付けられ、すべての前のスナップショットフラグメントが、消される。一部の例においては、スナップショットフラグメントの開始前の一意のチェックポイント識別子に関連するすべてのジャーナルエントリが無視されることを保証するためにジャーナルが前方トランケート(forward-truncate)され、結果として、ストレージ空間が再利用される。
コンピューティングシステム100において障害が起こると、システムは、ジャーナルフラグメントに関連する恒久的なストレージを、スナップショットの「終わり」以上のいずれかのコミットされたチェックポイントに復元することができる。一部の例において、システム100は、最初にスナップショットフラグメントの内容を恒久的なストレージにロードすることによってそのようにする。そのとき、システム100は、スナップショットフラグメント内のデータアイテム及びそれらの関連するタイムスタンプを、タイムスタンプの時点で有効であったデータアイテムのバージョンに対応するジャーナルフラグメント内の特定されたエントリまで調べる。そして、システム100は、所望のチェックポイントマーカが見つかるまで、スナップショットフラグメントにまだ反映されていないジャーナルフラグメントからの任意の更新をやり直すことによってスナップショットフラグメントからのデータアイテムの値をロールフォワードすることにより、恒久的なストレージをコミットされたチェックポイントに復元する(ロールフォワードは、ジャーナルフラグメント内の特定されたエントリから始まる)。ジャーナルフラグメントに関連する恒久的なストレージが障害を切り抜ける場合、システムは、ジャーナルフラグメントをスナップショットフラグメント内の値から始まって逆順にスキャンし、恒久的なストレージが所望のチェックポイントに関連する状態になるまですべての変更を元に戻すことによって、スナップショットの「終わり」以上の任意の所望のチェックポイントまでその恒久的なストレージをロールバックすることができる。
一部の例において、ジャーナルフラグメントは、各チェックポイントに関してはっきりと異なるファイルとして形成される。システムは、より古いチェックポイントに関するファイルを削除することによってジャーナルを前方トランケートすることができる。一部の例において、コンピューティングシステム100は、複数のチェックポイントを単一のファイルにまとめる。したがって、各ファイルは、ある範囲のチェックポイントを含む。システムは、ジャーナルを前方トランケートするとき、トランケートの時点の前の最も高いチェックポイントによるファイルを削除する。リカバリ時に、システムは、トランケートの時点の前のすべてのジャーナルエントリを無視する。このプロセスは、所与のファイル内の各チェックポイントレコードのファイルオフセット(file-offset)を補助ファイルに記録することによって迅速化され得る。
上のジャーナルの構造を前提として、コンピューティングシステムは、コンピューティングシステム内のすべての処理をまず停止することによって最も最近コミットされたチェックポイントをリカバリすることができる。それぞれの障害が起こったコンピューティングノードに関しては、新しいコンピューティングノードが(おそらくは異なる物理ノード上で)開始される。コンピューティングノードに関連するジャーナルフラグメント及びスナップショットフラグメントの少なくとも1つの複製が位置を特定され、(上述のように)コミットされたチェックポイントまで復元するために使用される。すべての生き残ったコンピューティングノードは、それらのコンピューティングノードの永続的なデータをコミットされたチェックポイントまでロールバックさせ、第三者預託されたデータが、消される。コンピューティングシステムへの入力データは、前のパルス終了インジケータまでロールバックされ、処理が再開される。
上のリカバリ手順に基づいて、システムは、処理を再開する前に、すべての永続的なデータを作業の最も最近コミットされた単位の時点のそのシステムの状態に復元し、それから、作業の後続の単位による処理を再始動済みである。
リカバリ可能な処理技術のさまざまなその他の例が、米国特許第6,584,581号明細書及び米国特許第9,354,981号明細書に記載の技術を含め、本明細書に記載の技術と組み合わせて使用される可能性があり、それらの明細書の各々は、参照により本明細書に組み込まれる。
4.6 複製
上述の手法は、リカバリ可能性を提供するが、高い可用性又は耐障害性を必ずしも提供しない。例えば、障害の後、システムは、スナップショットから任意の障害が発生したサーバに関連する永続的なデータを再ロードし、それから、所望のチェックポイントまですべての変更を再適用する必要があり、これは数時間かかる可能性があり、その間、システムは利用できない。
一部の例においては、障害がすべての複製を破壊する可能性が低いように(例えば、データベース共有又はパーティショニング技術を使用して)永続的なデータを複製することによって、高い可用性及び耐障害性が実現される。例えば、単一のクラッシュがすべての複製を破壊し得ないように、各データが異なる物理ノード上に複製される可能性がある。そのようにすることは、例えば、複製が異なる電源を用いるノードに又は異なるデータセンターにさえもあることを保証することによってより高い度合いの耐性をもたらす。場合によっては、複製の手法は、チェックポイント及びスナップショットデータを恒久的に記憶する必要もなくす。
1つの手法において、データアイテムのマスタ複製及びデータアイテムの1又は2以上のバックアップ複製が存在するように、永続的なデータの各データアイテム(例えば、トランザクションデータストアのテーブルの行、共有データインスタンス)が複製される。この手法を実施するために、チェックポイントカウンタが、始めに0に初期化される。それから、コンピューティングシステム内で動作するすべてのグラフが、開始される。永続的なデータ内のデータアイテムが変更される度に、チェックポイントカウンタによってタグ付けされた複製メッセージが、そのデータアイテムの複製に非同期に送信される。コンピューティングシステムによって生じさせられたすべての出力データは、第三者預託されたまま保たれ、チェックポイントカウンタによってタグ付けされ、直ちに見えるようにされない。
結局、パルス終了インジケータがすべてのストリーミング入力に関して受け取られ、コンピューティングシステムにおいて実行されるグラフのすべてのきれいなシャットダウンを引き起こす。グラフのすべてが終了すると、チェックポイントカウンタがインクリメントされる。それから、コンピューティングシステム内のグラフのすべてが、再始動される。
所与のチェックポイントに関するすべての複製メッセージが受け取られると、チェックポイントがコミットされ、そのチェックポイントカウンタ値によってタグ付けされた出力データが、第三者預託から解放される。したがって、この方式において、複製は、ジャーナル作成をまったく完全に置き換える。
上述の複製方式を使用するときに障害からリカバリするためには、まず、すべての処理が停止される。コンピューティングノードの障害において失われたすべてのマスタ複製に関して、マスタ複製として働くようにバックアップ複製のうちの1つを選択されたい。そして、各複製に関して、複製の状態が、その複製の最後にコミットされたチェックポイントにリカバリされる。すべての第三者預託された出力データが、消され、すべての入力データが、最後のパルス終了インジケータが挿入された時点まで復元される。それから、上述の方法を使用して処理が再開される。
一部の例において、マスタ複製は、始めに、組内の少なくとも1つのサーバが障害を切り抜ける可能性が高いようなサーバのリストを生成するためにハッシュされ得る主キーをあらゆるデータアイテムに含めることによって選択される。リスト内の第1のサーバが、マスタ複製として選択される。すべてのその他のサーバは、スレーブ(slaves)である。コンピューティングノードに障害が発生する場合、システムは、そのコンピューティングノードにもはや動作可能でないものとして印を付ける。コンピューティングノードが復元される場合、システムは、そのコンピューティングノードに動作可能であるものとしてもう一度印を付ける。
一部の例において、本明細書に記載の複製技術の重要な要件は、障害が発生し、リカバリ動作が必要であるときに、複製をコミットされたチェックポイントまでロールバックすることができることである。この要件を満たす1つの複製技術は、以下のアルゴリズムに従って動作する。システムは、データアイテムを変更するとき、データアイテムのための新しい値に関する複製メッセージを送信する。コンピューティングノードは、複製メッセージを受け取るとき、その複製メッセージをキューにいれ、その複製メッセージを目標の複製に非同期に適用する。一部の例において、システムは、データアイテムに複製メッセージを適用するとき、そのシステムが変更を元に戻すことを可能にするロールバックエントリを作成する。ロールバックエントリは、障害の後のロールバック処理のために使用される。一部の例においては、ロールバックエントリが、関連する一意のチェックポイント識別子によってタグ付けされる。代替的に、システムは、データアイテムの複数のバージョンをメモリ内に保つ。
障害の後、それぞれの生き残ったサーバは、チェックポイントの状態に復元するために以下の手順を実行する。まず、リカバリ点の後の一意のチェックポイント識別子によってタグ付けされていないすべての未処理の複製メッセージが、処理される。それから、リカバー点の後のチェックポイント生成によってタグ付けされるすべてのロールバックエントリが、受け取りの逆順に適用される。すべてのロールバックエントリを適用した後、すべてのデータは、所望のリカバリ点に対応する状態にある。作業の量は、ロールバックされる必要がある任意の生成中に変更されたデータの量に比例し、したがって、システムが1秒未満の摂取パルスを有する場合、システムが1秒未満のリカバリを実現し得ることはまったく妥当である。
結局、障害が発生したサーバが、サービスを行うように復元される(又は、代わりのサーバが、オンラインにされる)。そして、複製システムは、障害が発生したサーバにデータを複製し直し、おそらくは、そのサーバ上の一部の又はすべてのデータの「マスタ」ステータスを復元する。
4.7 組み合わされた複製及びジャーナル作成
いくつかの手法においては、複製とジャーナル作成との両方が、コンピューティングシステムにおいて使用される。例えば、複製は、高い可用性及び耐障害性を実現するために使用されるが、余りにも多くのサーバ(例えば、データセンター全体に対する電力又は冷却の喪失が原因でそれらのサーバのすべて)の同時障害がリカバリの可能性なしにデータを永久的に損なう壊滅的な障害の形態に悩まされる。ジャーナル作成は、ディスクドライブなどの非常に恒久的なストレージにリカバリ情報を記憶することによってそのような障害から守るために、複製に加えて使用される。この手法において、ジャーナルの使用は、かなりの動作不能時間を伴う可能性が高い災害復旧の形態である。
一例において、組み合わされた複製及びジャーナル作成が、ジャーナル後複製手順(journal then replicate procedure)において実行される。例えば、コンピューティングシステムは、データアイテムに対する変更が行われる地点で(つまり、マスタ複製において)それらの変更のジャーナルを作成し、それから、ジャーナルを複数のデバイスに複製する。この種の手法は、ファイルに書き込まれたすべてのものを複製するために構成されるHDFS(HDFS,Hadoop File System)と共に使用され得る。一部の例において、この手法の不都合な点は、あらゆるデータアイテムの更新がネットワークトラフィックの2つの波、すなわち、データを複製するための1つの波及びジャーナルを複製するための1つの波をもたらすことである。別の例においては、組み合わされたジャーナル作成及び複製が、複製後ジャーナル手順(replicate then journal procedure)において実行される。例えば、より旧来型のファイルシステム上で、コンピューティングシステムは、変更が行われる地点で、及び複製の地点で遠隔で変更のジャーナルを作成する可能性がある。これは、ジャーナルが複製と同じ場所に置かれるので、システムがデータを複製するときにネットワークトラフィックの1つの波しか含まない。上述の2つの組み合わされたジャーナル作成及び複製の例は、ネットワークトラフィックの違いを除いて本質的に等価である。
ディスクへの書き込みにかかるレイテンシーが原因で、コンピューティングシステムは、結局、所与のチェックポイントに関する2つのレベルの恒久性、すなわち、複製レベルの恒久性及びジャーナルレベルの恒久性に行き着く。複製レベルの恒久性は、壊滅的な複数ノードの障害に対する保障がない。区別は、システムが第三者預託からデータを解放する地点に影響を与える可能性がある。システムが複製レベルの恒久性を有する地点でシステムが第三者預託から外に出て行くデータを解放する場合、システムは、レイテンシーを削減し、パルスの頻度を上げることができる。そのようにすることの不都合な点は、壊滅的な障害の後、その他のアプリケーションがロールバックされるデータを「見た」可能性があることである。壊滅的な障害はめったにない(と見込まれる)ことを考えると、これは、妥当なトレードオフである可能性がある。しかし、保守的な選択は、ジャーナルレベルの恒久性を待つことである。
4.8 トランザクションデータストアとのインタラクション
図9Aを参照すると、一部の例において、2又は3以上のコンピューティングシステム100は、上述のジャーナル作成技術を採用し、かつ、トランザクションデータストア151とインタラクションする。トランザクションデータストア151は、トランザクションの原子性、一貫性、独立性、及び恒久性(ACID,atomicity, consistency, isolation, and durability)特性を独立して保証する。一部の例において、トランザクションデータストア151のこの特性は、たとえトランザクションデータストアのトランザクションが一部となっていたチェックポイントが障害によりロールバックされたとしてもそのトランザクションデータストアのトランザクションを恒久的にする可能性があるので、その特性は、チェックポイントメカニズムをだめにする潜在性を持っている。
この問題に対処するために、トランザクションデータストア151のコミットプロトコルが、「ACI」を「D」と分けるように修正される。つまり、トランザクションデータストアのトランザクションは、コミットするとき、原子性、一貫性、及び独立性を保証するが、恒久性は保証しない。修正されたコミットプロトコルにおいて、恒久性は、チェックポイントがコミットし、恒久的になるときに発生する。一部のコンピューティングシステムにおいて、この分離は禁止されるが、チェックポイントがコミットすることができない場合、トランザクションデータストアのコミットのすべての証拠がロールバック中に消去されるので、本明細書において説明されるコンピューティングシステムにおいては許容される。特に、そのコンピューティングシステムが参加したすべての応答が、第三者預託して保有され、ロールバック中に破棄されることになっているであろう。
図9Aにおいて、第1のデータパルス112Aに関連するトランザクションデータストアのトランザクションは、トランザクションデータストア151にまだコミットされておらず、第1のデータパルス112Aに関連するチェックポイントがまだ恒久的でないので、第1のデータパルス112Aから生成された出力データのストリーム132Aが、第三者預託して保有される。図9Bを参照すると、第1のデータパルス112Aに関連するチェックポイントが恒久的にされると、第1のデータパルス112Aに関連するトランザクションデータストアのトランザクションが、トランザクションデータストア151にコミットされ、出力データのストリーム132Aが、第三者預託から解放される。
4.9 チェックポイントのトリガ
上述の例において、チェックポイントのトリガは、時間に基づく(例えば、チェックポイントは、周期的にトリガされる)。しかし、チェックポイントのトリガは、必ずしも時間に基づかなくてよい。一部の例において、チェックポイントは、リソースの制約に基づいてトリガされる。例えば、キューイングシステムは、限られた数のレコードのみが、受け取られたメッセージがコミットされる前に受け取られることを可能にする可能性がある。この場合、したがって、システムは、規定された可能性があるいかなるパルス間隔とも無関係に、この限界が達せられるか又はかなり接近されるとき、チェックポイントをトリガしなければならない。
4.10 チェックポイントを作成されないアプリケーション及びデータとのインタラクション
すべてのアプリケーションが、上述のチェックポイントアルゴリズムの下で動作することができる又は動作しなければならないわけではない。例えば、一部のアプリケーションは、余りにも粗い時間的粒度で動作する(例えば、数時間動作するバッチグラフ)。その他のアプリケーションは、余りにも細かい時間的粒度で動作する可能性がある(例えば、チェックポイント間隔よりも短い必要とされる応答時間を有するサービス)。一部の例において、本明細書において説明される手法は、チェックポイントを作成されないアプリケーション及びデータとインタラクションするために「チェックポイントグループ」の概念を使用する。
4.10.1 チェックポイントグループ
極めて広く言って、チェックポイントグループは、同じパルススケジュールでチェックポイントを作成される永続的なデータ及び関連するグラフの組である。システムは、異なるアプリケーションが異なる時間/スループットのトレードオフを有する場合、複数のチェックポイントグループを含み得る。例えば、システムは、効率のために比較的大きな(例えば、100ミリ秒の)チェックポイント間隔を必要とする大量の到着するデータ(例えば、サーバクラスタの100個のコアによって処理される1億レコード/秒)を伴う1つのチェックポイントグループと、応答時間を最適化するために選択された10ミリ秒のチェックポイントを用いるより少ない量の到着するデータを伴う別のチェックポイントグループとを有する可能性がある。1秒に近づくチェックポイント間隔は、一部のアプリケーションのための十分に短い応答レイテンシーを提供しない可能性がある。
一部の例において、チェックポイントグループは、データ処理グラフ内の宣言構成要素(declaration component)を使用して構成され得る。この構成要素は、グループに参加する必要があるすべてのグラフに含まれる可能性がある。加えて、この構成要素は、グループ内で管理される必要がある任意の共有データ又はトランザクションデータストアのテーブルの宣言内で参照される。所与のデータセットは、多くても単一のチェックポイントグループによって「所有」される可能性があり、その理由は、それが、そのチェックポイント間隔を決定するものであるからである。一部の例において、チェックポイントグループの宣言は、所望の複製方式、チェックポイント及びジャーナルが保たれ得るデータディレクトリ、パルスの頻度などの追加的な情報を含む。
すべてのデータ及びすべてのグラフが、チェックポイントグループ内にあるとはかぎらない。例えば、トランザクションデータストアのテーブルは、主として、ストリーミング摂取グラフよりもトランザクションサービスによって使用される可能性がある。Cassandra及びOracleなどのサードパーティの永続的なストアに記憶されたデータは、必ずチェックポイントグループの外にあることになる。
4.10.2 内部及び外部アクセス
これに関連して、タスクの2つのクラス(内部及び外部)並びにデータの2つのクラス(内部及び外部)が存在し、「内部」とはチェックポイントグループによって管理されることを意味し、「外部」とはチェックポイントグループによって管理されないことを意味する。複数のチェックポイントグループが存在する場合、それらのチェックポイントグループの各々は、それ以外のチェックポイントグループを「外部」と見なす。内部と外部との間のすべてのアクセスは、「対外的(foreign)」と見なされる。概して、対外的アクセスの4つの場合、すなわち、内部タスクが外部データを読む場合、内部タスクが外部データを書き込む場合、外部タスクが内部データを読む場合、及び外部タスクが内部データを書き込む場合がある。これらの各々は、正確さに関して関連する問題を有する。
4.10.2.1 内部タスクが外部データを読む
チェックポイントグループ内のタスクは、正確さにいかなる影響も与えずにチェックポイントグループ外のデータを読む可能性がある。例えば、内部タスクがCassandraからデータを読み、障害があり、チェックポイントがロールバックされ、タスクが再始動され、タスクが再始動後にCassandraからデータを読み、異なる答えを得る状況を考える。
一見すると、システムは、第2の読み取りで異なる答えを得たので不整合に晒されているように見える可能性がある。しかし、第1の読み取りのすべての証拠がロールバックによって消去されたので、不整合は存在しない。これは、丁度、アプリケーションがしばらくスリープし、それから、スリープから覚め、Cassandraから「第2の」答えを得たかのようである。したがって、システムは、リカバリ可能性の定義を確かに満たす。
4.10.2.2 内部タスクが外部データを書き込む
チェックポイントグループ内のタスクがそのチェックポイントグループ外にデータを書き込む場合、システムは、おそらく、2つの方法のうちの1つでリカバリ可能性を妨害する可能性がある。第1に、書き込みは恒久的になり得るが、更新をしたタスクがロールバックされる。これは、重複した更新を生じる結果となる可能性があり、したがって、それらの更新は、誤っている。これは、慎重なアプリケーションの設計によってのみ対処され得る。第2に、書き込みは、更新が恒久的になるのを書き込み側が待たない(又は待てない)場合、失われる可能性がある。したがって、例えば、内部タスクが、Cassandraを更新し、それから、ロールバックされる可能性があり、Cassandraの更新が、恒久的になる可能性がある。慎重なアプリケーションの設計は、そのような不測の事態を避けることを求められる。
4.10.2.3 外部タスクが内部データを読む
チェックポイントグループ外のタスクが内部のデータを読む場合、システムは、障害後にロールバックされる可能性があるデータの「ダーティリード」を行う危険を冒す。以下は、この問題を解決するための2つの方法の例である。第1に、システムが、楽観的にダーティリードを実行する可能性がある。例えば、アドホッククエリが、メモリ内のデータに対して実行され、ダーティリードの影響がいずれかの検出可能な結果を生じることは、極めて疑わしい。加えて、データベーストランザクションが処理の正常な過程でロールバックされる一方で、チェックポイントグループのロールバックが大きな障害の後にのみ行われ、処理の正常な過程では行われないので、チェックポイントグループ内のダーティリードは、データベースに対してよりもずっと安全である。これは、ダーティリードがともかくいずれかの影響をもたらすことが極めてまれになることを意味する。
第2に、システムは、読み取りをチェックポイントグループにプッシュする可能性がある。この形態において、システムは、チェックポイントグループ内で実行されるサービスにSV apply又はトランザクションデータストアのトランザクションを送信し、答えは、次のチェックポイントまで第三者預託して保有される。この動作は、レイテンシーを招くが、ダーティリードをクリーンな読み取りに変換する。また、この動作は、ユーザがリード−プッシュ(read-push)に気がつかないように完全にサーバソフトウェア内で処理され得る。
第2の手法は、データが第三者預託から解放されるまで読み取り側のチェックポイントグループがチェックポイントを作成し得ない(すべてのタスクが終了するまでシステムがチェックポイントを行わない)ので、あるチェックポイントグループが別のチェックポイントグループ内のデータにアクセスすることを可能にするために使用され得ないことに留意されたい。これは、潜在的に、チェックポイントグループA内のタスクがチェックポイントグループBからの読み取りに対する答えが返るのを待っており、したがって、グループAがチェックポイントを作成し得ないデッドロックにつながる可能性がある。同時に、チェックポイントグループB内のタスクは、まったく同じことをしている。どちらのグループも、いつまでも休止になることができず、どちらのグループも、いつまでもチェックポイントを作成することができない。
4.10.2.4 外部タスクが内部データを書き込む
チェックポイントグループ外のタスクが内部にデータを書き込む場合、システムは、チェックポイントがロールバックされる場合、書き込みを喪失する危険を冒す。やはり、同じトレードオフが存在し、つまり、システムは、更新を喪失する可能性が小さいことを期待して任意の方法でそのような危険を冒す可能性があり、又はシステムは、書き込みを上述のようにチェックポイントグループにプッシュする可能性がある。そして、書き込みは、書き込み動作の確定を示す第三者預託された答えを待つ。その他の点で、問題は、上述の問題と同じである。
なお、これは、チェックポイントグループ内のアプリケーションの正確さに影響を与えない。論理は、内部が外部を読む場合と同じであり、つまり、外部タスクが内部データを書き込み、システムが障害に遭い、外部タスクによる書き込みをロールバックするロールバックを行い、システムが再始動し、内部から、システムが外部タスクがこれまでに発生したことを伝える方法を持たず、したがって、システムが一貫した状態にある。外部のエンティティは、一貫性の障害を持つことになるが、それは、内部タスクの正確さに影響を与えない。
まとめると、対外的アクセスは、(いつもではないが)ときどき、不整合の可能性を招く。内部が外部を読むことは、常に一貫性がある。内部が外部に書き込むことは、書き込み側を重複した及び/又は喪失した書き込みに晒す。外部が内部を読むことは、ダーティリードをもたらすが、これは、読み取りをチェックポイントグループにプッシュすることによって直され得る。外部が内部に書き込むことは、喪失した書き込みをもたらす可能性があるが、これは、書き込みをチェックポイントグループにプッシュすることによって直され得る。
ダーティリード及び喪失した書き込みは、障害モードオンリーフォールト(failure-mode-only fault)である。システムは、システムがサーバ障害に遭うまでグループレベルのロールバックを実行せず、したがって、これらの故障は、障害の後にのみ現れる。通常動作において、対外的読み取り/書き込みは、まったく安全である。
システムは、2つのグループの間のインタラクションがデッドロックにつながる可能性があるので、異なるチェックポイントグループの間で「読み取り/書き込みのプッシュ」の方策を使用しない可能性がある。必要な場合、これは、非同期動作を打ち出すこと、例えば、メッセージをキューに並べ、答えを待たないことによって直され得る。しかし、システムは、システムが(非常にまれな)ダーティリード又は喪失した書き込みを受け入れることができる限り、異なるチェックポイントグループ内のデータを引き続き読む/書き込むことができる。
5 実施形態
(添付の付録を含む)本明細書において説明されたリカバリ可能性の技術は、例えば、好適なソフトウェア命令を実行するプログラミング可能なコンピューティングシステムを用いて実装される可能性があり、又はフィールドプログラマブルゲートアレイ(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以上を実行するために特定の予め定義された方法でコンピュータを動作させる。
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、添付の請求項の範囲によって画定される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、添付の請求項の範囲内にある。例えば、本発明の範囲を逸脱することなくさまざまな修正がなされ得る。さらに、上述のステップの一部は、順序に依存しない可能性があり、したがって、説明された順序とは異なる順序で実行される可能性がある。

Claims (57)

  1. 1又は2以上のノードを含むコンピューティングシステムであって、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するように構成された、前記コンピューティングシステムと、
    前記1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムであって、使用中、前記複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶する、前記データストレージシステムとを含み、
    前記1又は2以上のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、
    データユニットの第1のストリームを処理して、データユニットの前記第1のストリーム内の連続データユニットの複数のサブセットの各々に関して出力を生じさせることと、
    データユニットの前記第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの前記第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で前記第1のデータ処理プログラム内の処理の終了を開始することと、
    前記第1のデータ処理プログラム内の処理の前記終了が完了したと決定した後、連続データユニットの前記第1のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更を恒久的に記憶することと、
    前記変更が恒久的に記憶された後、前記第1のデータ処理プログラム内の処理を再開することと、
    前記変更が恒久的に記憶された後、連続データユニットの前記第1のサブセットに関して生じさせられた第1の出力を前記第1のデータ処理プログラムから解放することとを含む装置。
  2. 複数のデータ処理プログラムが、それぞれ、データユニットの少なくとも1つのストリームを、プログラム状態情報が前記ストリーム内の3つ以上の隣接するデータユニットにわたって保持されないようにして処理する、請求項1に記載の装置。
  3. データストレージシステムが、不揮発性ストレージ媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することが、前記変更を前記不揮発性ストレージ媒体に記憶することを含む、請求項1又は2に記載の装置。
  4. データストレージシステムが、複数のノードに接続された通信媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することが、前記通信媒体を介して前記複数のノードの第1のノードから少なくとも第2のノードに前記変更を送信することを含む、請求項1〜3のいずれかに記載の装置。
  5. データストレージシステムが、複数のデータ処理プログラムのうちの少なくとも1つによって処理されるデータユニットの1又は2以上のストリームに関連するストリーム状態情報も記憶する、請求項1〜4のいずれかに記載の装置。
  6. 少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、前記第1のデータ処理プログラム内の処理の終了が完了したと決定した後、データユニットの前記第1のストリームに関連するストリーム状態情報を恒久的に記憶することをさらに含む、請求項5に記載の装置。
  7. 連続データユニットの第1のサブセットに関して生じさせられた第1の出力を第1のデータ処理プログラムから解放することが、コンピューティングシステム上で実行される複数のデータ処理プログラムに含まれない外部プログラムに前記第1の出力を解放することを含む、請求項1〜6のいずれかに記載の装置。
  8. 連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する恒久的に記憶された変更が、連続データユニットの第2のサブセットを処理することによって引き起こされた前記共有データに対する恒久的に記憶された変更と区別される、請求項1〜7のいずれかに記載の装置。
  9. 連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更が、連続データユニットの第2のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更が始まった後に恒久的に記憶され、連続データユニットの前記第1のサブセットが、データユニットの第1のストリーム内で連続データユニットの前記第2のサブセットの前にある、請求項8に記載の装置。
  10. 連続データユニットの第1のサブセットに関して生じさせられた第1の出力が、連続データユニットの前記第1のサブセットを処理することによって引き起こされたすべての変更が恒久的に記憶された後、第1のデータ処理プログラムから解放される、請求項9に記載の装置。
  11. 変更の第1の部分が恒久的に記憶された後であるが、変更の第2の部分が恒久的に記憶される前に、第1のデータ処理プログラム内で処理が再開される、請求項1〜10のいずれかに記載の装置。
  12. 第1のデータ処理プログラムが、データユニットの第1のストリームを処理することを周期的に終了し、コンピューティングシステムが、前記第1のデータ処理プログラムが終了される間に、データユニットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶し始める、請求項1〜11のいずれかに記載の装置。
  13. 第1のデータ処理プログラム内の処理の終了を開始することが、連続データユニットの第1のサブセットと連続データユニットの第2のサブセットとの間にストリーム終了インジケータを挿入することを含み、前記第1のデータ処理プログラム内の処理の前記終了が、前記第1のデータ処理プログラムによって規定されたタスクを実施するすべてのプロセスが前記ストリーム終了インジケータに応答して正常に終了した後に完了している、請求項1〜12のいずれかに記載の装置。
  14. 共有データが、複数のデータ処理プログラムのすべてによってアクセスされ得る、請求項1〜13のいずれかに記載の装置。
  15. 1又は2以上のノードを含むコンピューティングシステムであって、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するように構成された、前記コンピューティングシステムと、
    前記1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムであって、使用中、前記複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶する、前記データストレージシステムとを含み、
    前記複数のデータ処理プログラムのうちの複数のデータ処理プログラムの少なくとも第1のグループを使用してデータユニットの2又は3以上のストリームを処理することが、
    前記第1のグループ内の各データ処理プログラムに関して、連続データユニットの複数のサブセットを含むデータユニットのそれぞれのストリームを処理することと、
    データユニットの前記それぞれのストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの前記第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で前記第1のグループ内の各データ処理プログラム内の処理の終了を開始することと、
    前記第1のグループ内の各データ処理プログラム内の処理の前記終了が完了したと決定した後、連続データユニットの前記第1のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更を恒久的に記憶することと、
    前記変更が恒久的に記憶された後、前記第1のグループ内の各データ処理プログラム内の処理を再開することとを含む装置。
  16. 複数のデータ処理プログラムが、それぞれ、データユニットの少なくとも1つのストリームを、プログラム状態情報が前記ストリーム内の3つ以上の隣接するデータユニットにわたって保持されないようにして処理する、請求項15に記載の装置。
  17. データストレージシステムが、不揮発性ストレージ媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することが、前記変更を前記不揮発性ストレージ媒体に記憶することを含む、請求項15又は16に記載の装置。
  18. データストレージシステムが、複数のノードに接続された通信媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することが、前記通信媒体を介して前記複数のノードの第1のノードから少なくとも第2のノードに前記変更を送信することを含む、請求項15〜17のいずれかに記載の装置。
  19. データストレージシステムが、複数のデータ処理プログラムのうちの少なくとも1つによって処理されるデータユニットの1又は2以上のストリームに関連するストリーム状態情報も記憶する、請求項15〜18のいずれかに記載の装置。
  20. 複数のデータ処理プログラムの少なくとも第1のグループを使用してデータユニットの2又は3以上のストリームを処理することが、前記第1のグループ内の各データ処理プログラム内の処理の終了が完了したと決定した後、前記第1のグループ内の前記データ処理プログラムのいずれかによって処理されたデータユニットのそれぞれのストリームに関連するストリーム状態情報を恒久的に記憶することをさらに含む、請求項19に記載の装置。
  21. 複数のデータ処理プログラムの少なくとも第1のグループを使用してデータユニットの2又は3以上のストリームを処理することが、変更が恒久的に記憶された後、連続データユニットの第1のサブセットに関して生じさせられた第1の出力を複数のデータ処理プログラムの前記第1のグループから解放することをさらに含む、請求項15〜20のいずれかに記載の装置。
  22. 連続データユニットの第1のサブセットに関して生じさせられた第1の出力を複数のデータ処理プログラムの第1のグループから解放することが、複数のデータ処理プログラムの前記第1のグループに含まれないコンピューティングシステム上で実行される前記複数のデータ処理プログラムのうちの1つに前記第1の出力を解放することを含む、請求項21に記載の装置。
  23. 連続データユニットの第1のサブセットに関して生じさせられた第1の出力を複数のデータ処理プログラムの第1のグループから解放することが、コンピューティングシステム上で実行される前記複数のデータ処理プログラムに含まれない外部プログラムに前記第1の出力を解放することを含む、請求項21に記載の装置。
  24. 外部プログラムが、第1のグループ内の少なくとも1つのデータ処理プログラムによってアクセスされ得る特定の共有データにアクセスする要求を送信し、前記要求の結果が、前記要求が受け取られる前に行われた特定の共有データへのすべての変更が恒久的に記憶された後、前記外部プログラムに解放される、請求項23に記載の装置。
  25. 連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する恒久的に記憶された変更が、連続データユニットの第2のサブセットを処理することによって引き起こされた前記共有データに対する恒久的に記憶された変更と区別される、請求項15〜24のいずれかに記載の装置。
  26. 連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更が、連続データユニットの第2のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更が始まった後に恒久的に記憶され、連続データユニットの前記第1のサブセットが、データユニットの第1のストリーム内で連続データユニットの前記第2のサブセットの前にある、請求項25に記載の装置。
  27. 連続データユニットの第1のサブセットに関して生じさせられた第1の出力が、連続データユニットの前記第1のサブセットを処理することによって引き起こされたすべての変更が恒久的に記憶された後、複数のデータ処理プログラムの第1のグループから解放される、請求項26に記載の装置。
  28. データユニットの2又は3以上のストリームを処理することが、少なくとも、複数のデータ処理プログラムのうちの複数のデータ処理プログラムの第1のグループ及び複数のデータ処理プログラムの第2のグループを使用してデータユニットの4又は5以上のストリームを処理することを含む、請求項15〜27のいずれかに記載の装置。
  29. 複数のデータ処理プログラムの各グループが、データユニットのそれぞれのストリームの処理を周期的に終了し、コンピューティングシステムが、前記グループ内のすべてのデータ処理プログラムが終了される間に、データユニットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶し始める、請求項28に記載の装置。
  30. データ処理プログラムの第1のグループが、データユニットのそれぞれのストリームの処理を第1の頻度で終了し、データ処理プログラムの第2のグループが、データユニットのそれぞれのストリームの処理を前記第1の頻度とは異なる第2の頻度で終了する、請求項29に記載の装置。
  31. 変更の第1の部分が恒久的に記憶された後であるが、変更の第2の部分が恒久的に記憶される前に、第1のグループ内の各データ処理プログラム内で処理が再開される、請求項15〜30のいずれかに記載の装置。
  32. 複数のデータ処理プログラムの第1のグループが、データユニットの2又は3以上のストリームの処理を周期的に終了し、コンピューティングシステムが、前記第1のグループ内のすべてのデータ処理プログラムが終了される間に、データユニットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶し始める、請求項15〜31のいずれかに記載の装置。
  33. 第1のデータ処理プログラム内の処理の終了を開始することが、連続データユニットの第1のサブセットと連続データユニットの第2のサブセットとの間にストリーム終了インジケータを挿入することを含み、前記第1のデータ処理プログラム内の処理の前記終了が、前記第1のデータ処理プログラムによって規定されたタスクを実施するすべてのプロセスが前記ストリーム終了インジケータに応答して正常に終了した後に完了している、請求項15〜32のいずれかに記載の装置。
  34. 共有データが、複数のデータ処理プログラムのすべてによってアクセスされ得る、請求項15〜33のいずれかに記載の装置。
  35. 1又は2以上のノードを含むコンピューティングシステムであって、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するように構成された、前記コンピューティングシステムと、
    前記1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムであって、使用中、前記複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶する、前記データストレージシステムとを含み、
    前記複数のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、
    連続データユニットの複数のサブセットを含むデータユニットの第1のストリームを処理することと、
    データユニットの前記第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの前記第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で前記第1のデータ処理プログラム内の処理の終了を開始することと、
    前記第1のデータ処理プログラム内の処理の前記終了が完了したと決定した後、連続データユニットの前記第1のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更を恒久的に記憶することと、
    前記変更のすべてが恒久的に記憶されることを完了する前に、前記第1のデータ処理プログラム内の処理を再開することとを含む装置。
  36. 複数のデータ処理プログラムが、それぞれ、データユニットの少なくとも1つのストリームを、プログラム状態情報が前記ストリーム内の3つ以上の隣接するデータユニットにわたって保持されないようにして処理する、請求項35に記載の装置。
  37. データストレージシステムが、不揮発性ストレージ媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することが、前記変更を前記不揮発性ストレージ媒体に記憶することを含む、請求項35又は36に記載の装置。
  38. データストレージシステムが、複数のノードに接続された通信媒体を含み、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することが、前記通信媒体を介して前記複数のノードの第1のノードから少なくとも第2のノードに前記変更を送信することを含む、請求項35〜37のいずれかに記載の装置。
  39. 少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、共有データの少なくとも1つのスナップショットを記憶することと、前記スナップショットが記憶された後、データユニットを処理することによって引き起こされた前記共有データに対する変更のジャーナルを記憶することとをさらに含む、請求項35〜38のいずれかに記載の装置。
  40. 連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することが、スナップショットの少なくとも一部を記憶することと、変更のジャーナルの少なくとも一部を記憶することとを含む、請求項39に記載の装置。
  41. データストレージシステムが、複数のデータ処理プログラムのうちの少なくとも1つによって処理されるデータユニットの1又は2以上のストリームに関連するストリーム状態情報も記憶する、請求項35〜40のいずれかに記載の装置。
  42. 少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、前記第1のデータ処理プログラム内の処理の終了が完了したと決定した後、データユニットの第1のストリームに関連するストリーム状態情報を恒久的に記憶することをさらに含む、請求項41に記載の装置。
  43. 少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、前記第1のデータ処理プログラム内の処理の終了が完了したと決定する前に、連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することをさらに含む、請求項35〜42のいずれかに記載の装置。
  44. 少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、前記第1のデータ処理プログラム内の処理を再開した後、連続データユニットの第2のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶することをさらに含む、請求項43に記載の装置。
  45. 連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する恒久的に記憶された変更が、連続データユニットの第2のサブセットを処理することによって引き起こされた前記共有データに対する恒久的に記憶された変更と区別される、請求項35〜44のいずれかに記載の装置。
  46. 連続データユニットの第1のサブセットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更が、連続データユニットの第2のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更が始まった後に恒久的に記憶され、連続データユニットの前記第1のサブセットが、データユニットの第1のストリーム内で連続データユニットの前記第2のサブセットの前にある、請求項45に記載の装置。
  47. 少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、連続データユニットの複数のサブセットの各々に関して出力を生じさせることと、変更が恒久的に記憶されることを完了した後、連続データユニットの第1のサブセットに関して生じさせられた第1の出力を前記第1のデータ処理プログラムから解放することとをさらに含む、請求項35〜46のいずれかに記載の装置。
  48. 連続データユニットの第1のサブセットに関して生じさせられた第1の出力が、連続データユニットの前記第1のサブセットを処理することによって引き起こされたすべての変更が恒久的に記憶された後、第1のデータ処理プログラムから解放される、請求項47に記載の装置。
  49. 第1のデータ処理プログラムが、データユニットの第1のストリームを処理することを周期的に終了し、コンピューティングシステムが、前記第1のデータ処理プログラムが終了される間に、データユニットを処理することによって引き起こされた共有データに対する少なくともいくつかの変更を恒久的に記憶し始める、請求項35〜48のいずれかに記載の装置。
  50. 第1のデータ処理プログラム内の処理の終了を開始することが、連続データユニットの第1のサブセットと連続データユニットの第2のサブセットとの間にストリーム終了インジケータを挿入することを含み、前記第1のデータ処理プログラム内の処理の前記終了が、前記第1のデータ処理プログラムによって規定されたタスクを実施するすべてのプロセスが前記ストリーム終了インジケータに応答して正常に終了した後に完了している、請求項35〜49のいずれかに記載の装置。
  51. 共有データが、複数のデータ処理プログラムのすべてによってアクセスされ得る、請求項35〜50のいずれかに記載の装置。
  52. 1又は2以上のノードを含むコンピューティングシステム上で、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するステップと、
    前記1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムに、前記複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶するステップとを含み、
    1又は2以上のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、
    データユニットの第1のストリームを処理して、データユニットの前記第1のストリーム内の連続データユニットの複数のサブセットの各々に関して出力を生じさせることと、
    データユニットの前記第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの前記第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で前記第1のデータ処理プログラム内の処理の終了を開始することと、
    前記第1のデータ処理プログラム内の処理の前記終了が完了したと決定した後、連続データユニットの前記第1のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更を恒久的に記憶することと、
    前記変更が恒久的に記憶された後、前記第1のデータ処理プログラム内の処理を再開することと、
    前記変更が恒久的に記憶された後、連続データユニットの前記第1のサブセットに関して生じさせられた第1の出力を前記第1のデータ処理プログラムから解放することとを含む方法。
  53. コンピュータ可読媒体に非一時的形態で記憶されたソフトウェアであって、コンピューティングシステムに、
    データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行させ、
    前記複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶させるための命令を含み、
    1又は2以上のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、
    データユニットの第1のストリームを処理して、データユニットの前記第1のストリーム内の連続データユニットの複数のサブセットの各々に関して出力を生じさせることと、
    データユニットの前記第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの前記第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で前記第1のデータ処理プログラム内の処理の終了を開始することと、
    前記第1のデータ処理プログラム内の処理の前記終了が完了したと決定した後、連続データユニットの前記第1のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更を恒久的に記憶することと、
    前記変更が恒久的に記憶された後、前記第1のデータ処理プログラム内の処理を再開することと、
    前記変更が恒久的に記憶された後、連続データユニットの前記第1のサブセットに関して生じさせられた第1の出力を前記第1のデータ処理プログラムから解放することとを含む、前記ソフトウェア。
  54. 1又は2以上のノードを含むコンピューティングシステム上で、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するステップと、
    前記1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムに、前記複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶するステップとを含み、
    前記複数のデータ処理プログラムのうちの複数データ処理プログラムの少なくとも第1のグループを使用してデータユニットの2又は3以上のストリームを処理することが、
    前記第1のグループ内の各データ処理プログラムに関して、連続データユニットの複数のサブセットを含むデータユニットのそれぞれのストリームを処理することと、
    データユニットの前記それぞれのストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの前記第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で前記第1のグループ内の各データ処理プログラム内の処理の終了を開始することと、
    前記第1のグループ内の各データ処理プログラム内の処理の前記終了が完了したと決定した後、連続データユニットの前記第1のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更を恒久的に記憶することと、
    前記変更が恒久的に記憶された後、前記第1のグループ内の各データ処理プログラム内の処理を再開することとを含む方法。
  55. コンピュータ可読媒体に非一時的形態で記憶されたソフトウェアであって、コンピューティングシステムに、
    データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行させ、
    前記複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶させるための命令を含み、
    前記複数のデータ処理プログラムのうちの複数データ処理プログラムの少なくとも第1のグループを使用してデータユニットの2又は3以上のストリームを処理することが、
    前記第1のグループ内の各データ処理プログラムに関して、連続データユニットの複数のサブセットを含むデータユニットのそれぞれのストリームを処理することと、
    データユニットの前記それぞれのストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの前記第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で前記第1のグループ内の各データ処理プログラム内の処理の終了を開始することと、
    前記第1のグループ内の各データ処理プログラム内の処理の前記終了が完了したと決定した後、連続データユニットの前記第1のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更を恒久的に記憶することと、
    前記変更が恒久的に記憶された後、前記第1のグループ内の各データ処理プログラム内の処理を再開することとを含む、前記ソフトウェア。
  56. 1又は2以上のノードを含むコンピューティングシステム上で、データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行するステップと、
    前記1又は2以上のノードのうちの少なくとも1つへアクセス可能な少なくとも1つのデータストレージシステムに、前記複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶するステップとを含み、
    前記複数のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、
    連続データユニットの複数のサブセットを含むデータユニットの第1のストリームを処理することと、
    データユニットの前記第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの前記第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で前記第1のデータ処理プログラム内の処理の終了を開始することと、
    前記第1のデータ処理プログラム内の処理の前記終了が完了したと決定した後、連続データユニットの前記第1のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更を恒久的に記憶することと、
    前記変更のすべてが恒久的に記憶されることを完了する前に、前記第1のデータ処理プログラム内の処理を再開することとを含む方法。
  57. コンピュータ可読媒体に非一時的形態で記憶されたソフトウェアであって、コンピューティングシステムに、
    データユニットの少なくとも1つのストリームをそれぞれが処理する複数のデータ処理プログラムを実行させ、
    前記複数のデータ処理プログラムのうちの少なくとも2つによってアクセスされ得る共有データを記憶させるための命令を含み、
    前記複数のデータ処理プログラムのうちの少なくとも第1のデータ処理プログラムを使用してデータユニットの少なくとも1つのストリームを処理することが、
    連続データユニットの複数のサブセットを含むデータユニットの第1のストリームを処理することと、
    データユニットの前記第1のストリーム内で連続データユニットの第1のサブセットを処理することと連続データユニットの前記第1のサブセットに隣接する連続データユニットの第2のサブセットを処理することとの間で前記第1のデータ処理プログラム内の処理の終了を開始することと、
    前記第1のデータ処理プログラム内の処理の前記終了が完了したと決定した後、連続データユニットの前記第1のサブセットを処理することによって引き起こされた前記共有データに対する少なくともいくつかの変更を恒久的に記憶することと、
    前記変更のすべてが恒久的に記憶されることを完了する前に、前記第1のデータ処理プログラム内の処理を再開することとを含む、前記ソフトウェア。
JP2018536162A 2016-01-14 2017-01-13 リカバリ可能なストリーム処理 Active JP6764938B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201662278528P 2016-01-14 2016-01-14
US62/278,528 2016-01-14
PCT/US2017/013309 WO2017123849A1 (en) 2016-01-14 2017-01-13 Recoverable stream processing

Publications (2)

Publication Number Publication Date
JP2019505916A true JP2019505916A (ja) 2019-02-28
JP6764938B2 JP6764938B2 (ja) 2020-10-07

Family

ID=58016792

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018536162A Active JP6764938B2 (ja) 2016-01-14 2017-01-13 リカバリ可能なストリーム処理

Country Status (9)

Country Link
US (1) US10601890B2 (ja)
EP (3) EP3403182B1 (ja)
JP (1) JP6764938B2 (ja)
KR (1) KR102121139B1 (ja)
CN (1) CN108475218B (ja)
AU (1) AU2017207404B2 (ja)
CA (1) CA3009359C (ja)
SG (1) SG11201805201XA (ja)
WO (1) WO2017123849A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10439917B2 (en) * 2016-11-15 2019-10-08 At&T Intellectual Property I, L.P. Recovering a replica in an operator in a data streaming processing system
CA3078476C (en) * 2017-10-31 2022-10-18 Ab Initio Technology Llc Managing a computing cluster using durability level indicators
US10922199B2 (en) * 2018-07-04 2021-02-16 Vmware, Inc. Role management of compute nodes in distributed clusters
US10664397B2 (en) * 2018-07-31 2020-05-26 EMC IP Holding Company LLC Cache recovery method in a distributed storage system
US10489321B1 (en) 2018-07-31 2019-11-26 EMC IP Holding Company LLC Performance improvement for an active-active distributed non-ALUA system with address ownerships
US10733191B2 (en) * 2018-09-28 2020-08-04 Microsoft Technology Licensing, Llc Static streaming job startup sequence
SG11202103504UA (en) * 2018-10-23 2021-05-28 Tzero Ip Llc Context based filtering within subsets of network nodes implementing a trading system
CN110018926B (zh) * 2018-11-22 2023-08-01 创新先进技术有限公司 故障恢复方法、装置、电子设备及计算机可读存储介质
JP7331604B2 (ja) * 2019-10-04 2023-08-23 富士通株式会社 情報処理システム、情報処理方法、および情報処理プログラム
CN111541747B (zh) * 2020-04-10 2023-05-12 深圳前海微众银行股份有限公司 一种数据的检查点设置方法及装置
US20220318099A1 (en) * 2021-03-31 2022-10-06 Nutanix, Inc. File analytics systems and methods including retrieving metadata from file system snapshots

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2281644A (en) * 1993-09-02 1995-03-08 Ibm Fault tolerant transaction-oriented data processing.
US5712971A (en) 1995-12-11 1998-01-27 Ab Initio Software Corporation Methods and systems for reconstructing the state of a computation
US5857204A (en) 1996-07-02 1999-01-05 Ab Initio Software Corporation Restoring the state of a set of files
US6584581B1 (en) 1999-12-06 2003-06-24 Ab Initio Software Corporation Continuous flow checkpointing data processing
CA2355473A1 (en) * 2000-09-29 2002-03-29 Linghsiao Wang Buffer management for support of quality-of-service guarantees and data flow control in data switching
DE10161034A1 (de) * 2001-12-12 2003-07-03 Siemens Ag Verfahren zur Übergabe und Verarbeitung von Daten an eine Datenverarbeitungseinheit
US7039663B1 (en) * 2002-04-19 2006-05-02 Network Appliance, Inc. System and method for checkpointing and restarting an asynchronous transfer of data between a source and destination snapshot
JP2004178788A (ja) * 2002-11-15 2004-06-24 Matsushita Electric Ind Co Ltd 記録装置および記録方法
US7353218B2 (en) * 2003-08-14 2008-04-01 International Business Machines Corporation Methods and apparatus for clustering evolving data streams through online and offline components
CN100390738C (zh) * 2005-10-18 2008-05-28 中国科学院计算技术研究所 一种基于数据流分析的访存合并优化方法
US8225129B2 (en) * 2007-04-10 2012-07-17 International Business Machines Corporation Methods and apparatus for effective on-line backup selection for failure recovery in distributed stream processing systems
US8069129B2 (en) 2007-04-10 2011-11-29 Ab Initio Technology Llc Editing and compiling business rules
US7779298B2 (en) 2007-06-11 2010-08-17 International Business Machines Corporation Distributed job manager recovery
JP4560074B2 (ja) 2007-09-26 2010-10-13 株式会社東芝 仮想計算機システム及び同システムにおける仮想計算機復元方法
US8949801B2 (en) 2009-05-13 2015-02-03 International Business Machines Corporation Failure recovery for stream processing applications
US8286191B2 (en) * 2009-05-14 2012-10-09 International Business Machines Corporation Dynamically composing data stream processing applications
US8205113B2 (en) * 2009-07-14 2012-06-19 Ab Initio Technology Llc Fault tolerant batch processing
JP4925143B2 (ja) * 2009-08-12 2012-04-25 株式会社日立製作所 ストリームデータ処理システム、ストリームデータ処理方法及びストリームデータ処理プログラム
US9116759B2 (en) * 2011-02-18 2015-08-25 Ab Initio Technology Llc Restarting data processing systems
US9021299B2 (en) * 2011-02-18 2015-04-28 Ab Initio Technology Llc Restarting processes
US8826072B2 (en) 2012-05-09 2014-09-02 Imec Method and system for real-time error mitigation
US8843524B2 (en) * 2012-09-25 2014-09-23 International Business Machines Corporation Handling out-of-sequence data in a streaming environment
US9654538B1 (en) * 2013-03-11 2017-05-16 DataTorrent, Inc. Dynamic partitioning of instances in distributed streaming platform for real-time applications
CA2926935C (en) 2013-10-21 2022-05-31 Ab Initio Technology Llc Checkpointing a collection of data units
US9641580B2 (en) 2014-07-01 2017-05-02 Microsoft Technology Licensing, Llc Distributed stream processing in the cloud
AU2015336250C1 (en) 2014-10-20 2018-01-25 Ab Initio Technology Llc Recovery and fault-tolerance under computational indeterminism
US10339796B2 (en) * 2015-07-07 2019-07-02 Ilumi Sulutions, Inc. Wireless control device and methods thereof

Also Published As

Publication number Publication date
AU2017207404A1 (en) 2018-07-12
EP3403182B1 (en) 2019-09-04
WO2017123849A1 (en) 2017-07-20
KR20180101547A (ko) 2018-09-12
CA3009359C (en) 2020-09-15
US20170208113A1 (en) 2017-07-20
CN108475218A (zh) 2018-08-31
KR102121139B1 (ko) 2020-06-17
EP3614266A3 (en) 2020-07-29
EP3614266B1 (en) 2022-03-09
EP3614267A2 (en) 2020-02-26
AU2017207404B2 (en) 2020-12-10
JP6764938B2 (ja) 2020-10-07
CN108475218B (zh) 2022-03-22
EP3403182A1 (en) 2018-11-21
US10601890B2 (en) 2020-03-24
EP3614266A2 (en) 2020-02-26
EP3614267B1 (en) 2022-03-09
CA3009359A1 (en) 2017-07-20
EP3614267A3 (en) 2020-07-29
SG11201805201XA (en) 2018-07-30

Similar Documents

Publication Publication Date Title
JP6764938B2 (ja) リカバリ可能なストリーム処理
Quiané-Ruiz et al. RAFTing MapReduce: Fast recovery on the RAFT
Zhou et al. Foundationdb: A distributed unbundled transactional key value store
Kwon et al. Fault-tolerant stream processing using a distributed, replicated file system
JP2013531835A (ja) ハイブリッドoltp及びolap高性能データベースシステム
Li et al. Tachyon: Memory throughput i/o for cluster computing frameworks
Thomson et al. Fast distributed transactions and strongly consistent replication for OLTP database systems
Wang et al. BeTL: MapReduce checkpoint tactics beneath the task level
AU2015336250B2 (en) Recovery and fault-tolerance under computational indeterminism
Tardieu et al. Reliable actors with retry orchestration
Michael et al. Recovering shared objects without stable storage
Jeong Fault-tolerant parallel processing combining Linda, checkpointing, and transactions
Gankevich et al. Subordination: providing resilience to simultaneous failure of multiple cluster nodes
US20240152429A1 (en) Recoverable Processes
Carvalho Generic replication of software transactional memory
Silvestre Clonos: Consistent High-Availability for Distributed Stream Processing through Causal Logging
Salem Comparative Analysis of Big Data Stream Processing Systems
Kanna et al. A communication framework for fault-tolerant parallel execution
Almeida Geo-replication in large scale cloud computing applications
Silvestre Consistent High-Availability for Distributed Streaming Computations
Yoo A unified framework for transparent parallelism and fault-tolerance in distributed systems
Xue et al. Task-D: A Task Based Programming Framework for Distributed System
Maier Fault-tolerant parallel programming with atomic actions
Birman et al. Transactional Systems
Leong Exploiting semantics in parallel and distributed computations

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180820

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190626

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190708

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20191002

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191206

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200109

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200226

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: 20200824

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200914

R150 Certificate of patent or registration of utility model

Ref document number: 6764938

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250