KR102121139B1 - 복구 가능한 스트림 프로세싱 - Google Patents

복구 가능한 스트림 프로세싱 Download PDF

Info

Publication number
KR102121139B1
KR102121139B1 KR1020187023523A KR20187023523A KR102121139B1 KR 102121139 B1 KR102121139 B1 KR 102121139B1 KR 1020187023523 A KR1020187023523 A KR 1020187023523A KR 20187023523 A KR20187023523 A KR 20187023523A KR 102121139 B1 KR102121139 B1 KR 102121139B1
Authority
KR
South Korea
Prior art keywords
data
processing
data units
subset
stream
Prior art date
Application number
KR1020187023523A
Other languages
English (en)
Other versions
KR20180101547A (ko
Inventor
브라이언 필 도루
크레이그 더블유. 스탠필
요셉 스케핑튼 3세 호울리
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 KR20180101547A publication Critical patent/KR20180101547A/ko
Application granted granted Critical
Publication of KR102121139B1 publication Critical patent/KR102121139B1/ko

Links

Images

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)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (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)
  • Retry When Errors Occur (AREA)
  • Image Processing (AREA)
  • Hardware Redundancy (AREA)
  • Information Transfer Between Computers (AREA)
  • Peptides Or Proteins (AREA)
  • Computer And Data Communications (AREA)

Abstract

컴퓨팅 시스템(100)은 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 데이터 프로세싱 프로그램들을 실행하는 노드들(152)을 포함한다. 데이터 저장 시스템(156,157)은 프로그램의 적어도 2개에 의해 엑세스 가능한 공유된 데이터를 저장한다. 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은: 연속된 데이터 유닛들의 복수의 서브세트를 포함하는 데이터 유닛들의 제 1 스트림을 프로세싱하는 단계; 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램 내의 프로세싱의 종료를 개시(initiating)하는 단계; 상기 제 1 데이터 프로세싱 프로그램내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 상기 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및 상기 제 1 데이터 프로세싱 프로그램내의 프로세싱을 재시작하는 단계를 포함한다.

Description

복구 가능한 스트림 프로세싱
본 출원은 2016 년 1 월 14 일에 출원된 미국 출원 번호 62/278,528 의 우선권을 주장한다.
본 명세서는 복구 가능한 스트림 프로세싱과 관련이 있다.
일부 데이터 프로세싱 프로그램들은 프로세싱될 배치(batch) 데이터를 수신하여 프로세싱(예: 적어도 하나의 파일들 또는 데이터베이스 테이블들)하며 배치(batch) 데이터 양에 기반하므로 해당 데이터를 프로세싱 하는데 필요한 시간이 잘 정의 되어 있다. 이러한 형태의 프로세싱은 “배치 프로세싱(batch processing)”이라 불려진다. 일부 데이터 프로세싱 프로그램들은 스트림에 알 수 없거나 임의의 수의 데이터 단위 또는 잠재적으로 데이터 단위들의 연속된 흐름이 포함 될 수 있으므로 잠재적으로 알려지지 않은 시간 동안 프로세싱되는 하나 이상의 데이터 스트림을 수신한다. 이러한 타입의 프로세싱을 "스트림 프로세싱"또는 "연속된 흐름 프로세싱" 라고 한다. 데이터 프로세싱 시스템에서 복구 가능성 제공과 관련된 요소들은 다수의 상호 작용하는 데이터 프로세싱 프로그램이 있는지 여부, 그리고 데이터 단위들의 프로세싱 순서가 결정론적(deterministic)인지 여부와 같은 다른 특성들 뿐만 아니라 사용중인 프로세싱 유형에 따라 달라질 수 있다.
일 측면에 따르면, 일반적으로, 장치는 적어도 하나의 노드들을 포함하고, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하도록 구성된 컴퓨팅 시스템; 및 상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 - 상기 데이터 저장 시스템은, 사용시, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장함 - 을 포함한다. 상기 적어도 하나의 데이터 프로세싱 프로그램들의 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은: 데이터 유닛들의 제 1 스트림내의 연속된(contiguous) 데이터 유닛들의 복수의 서브세트들(subsets)의 각각에 대한 출력을 생성하기 위한 상기 데이터 유닛들의 제 1 스트림을 프로세싱 하는 단계; 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림 내의 연속된 데이터 유닛들의 제 1 서브 세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램 내에서의 프로세싱의 종료를 개시(initiating)하는 단계; 상기 제 1 데이터 프로세싱 프로그램 내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브 세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 상기 변경들이 지속성 있게 저장된 이후에 상기 제 1 데이터 프로세싱 프로그램 내에서 프로세싱을 재시작하는 단계; 및 상기 변경들이 지속적으로 저장된 이후에 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 제 1 출력을, 상기 제 1 데이터 프로세싱 프로그램으로부터, 릴리스하는 단계를 포함한다.
측면들은 적어도 하나의 다음 특징들을 포함할 수 있다.
상기 복수의 데이터 프로세싱 프로그램들 각각은 상기 스트림 내의 적어도 2개의 근접한 데이터 유닛들에 대해 유지되는 프로그램 상태 정보를 가지고 있지 않은 데이터 유닛들의 적어도 하나의 스트림을 프로세싱한다.
상기 데이터 저장 시스템은 비-휘발성 저장 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브 세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대해 적어도 일부의 변경들을 지속성 있게 저장하는 것은 상기 비-휘발성 저장 매체에서 상기 변화들을 저장하는 단계를 포함한다.
상기 데이터 저장 시스템은 복수의 노드들에 결합된 통신 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브 세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대해 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 통신 매체를 통해 상기 복수의 노드들 중 제 1 노드에서 적어도 제 2 노드로 상기 변경을 송신하는 단계를 포함한다.
상기 데이터 저장 시스템은 또한 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 하나에 의해 프로세싱된 데이터 유닛들의 적어도 하나의 스트림들과 연관된 스트림 상태 정보를 저장한다.
적어도 상기 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은, 상기 제 1 데이터 프로세싱 프로그램 내의 프로세싱의 종료가 완료되었음을 결정한 이후에, 상기 데이터 유닛들의 제 1 스트림과 연관된 스트림 상태 정보를 지속성 있게 저장하는 단계를 더 포함한다.
상기 연속된 데이터 유닛들의 제 1 서브 세트에 대해 생성된 상기 제 1 출력을, 상기 제 1 데이터 프로세싱 프로그램으로부터, 릴리즈(release)하는 단계는 상기 컴퓨팅 시스템 상에서 실행되는 상기 복수의 데이터 프로세싱 프로그램들에 포함되지 않은 외부 프로그램에 대한 제 1 출력을 릴리즈하는 단계를 포함한다.
상기 연속된 데이터 유닛들의 제 1 서브 세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 지속성 있게 저장된 변경들은 상기 연속된 데이터 유닛들의 제 2 서브 세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 지속적으로 저장된 변경들과 구별된다.
상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대한 적어도 일부 변경들은 상기 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 대한 적어도 일부 변경들이 시작된 이후에 지속성 있게 저장되고, 상기 연속된 데이터 유닛들의 제 1 서브세트는 데이터 유닛들의 제 1 스트림 내의 상기 연속된 데이터 유닛들의 제 2 서브 세트 전에 있다.
상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 상기 제 1 출력(output)은 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 모든 변경들이 지속성 있게 저장된 이후 상기 제 1 데이터 프로세싱 프로그램으로부터 릴리즈(release)된다.
변경들의 제 1 부분(portion)이 지속성 있게 저장된 이후에 그러나 변경들의 제 2 부분이 지속적으로 저장되기 이전에 상기 제 1 데이터 프로세싱 프로그램 내에서 재시작된다.
상기 제 1 데이터 프로세싱 프로그램은 상기 데이터 유닛들의 제 1 스트림을 주기적으로 프로세싱하는 것을 종료하고, 상기 컴퓨팅 시스템은 상기 제 1 데이터 프로세싱 프로그램이 종료되는 동안 데이터 유닛들을 프로세싱함으로써 야기된 상기 공유된 데이터에 대해 적어도 일부 변경들을 지속성 있게 저장하는 단계를 시작한다.
상기 제 1 데이터 프로세싱 프로그램내의 프로세싱의 종료를 개시하는 단계는 상기 연속된 데이터 유닛들의 제 1 서브세트, 상기 연속된 데이터 유닛들의 제 2 서브세트 사이에 스트림-엔딩(stream-ending) 지시자를 삽입하는 단계를 포함하고, 상기 제 1 데이터 프로세싱 프로그램에 의해 특정된 태스크들을 수행하는 모든 프로세스들이 상기 스트림-엔딩 지시자에 대한 응답으로써 정상적으로 엑시트된 이후에 상기 제 1 데이터 프로세싱 프로그램내의 프로세싱의 종료가 완료된다.
상기 공유된 데이터는 상기 복수의 데이터 프로세싱 프로그램들 모두에 엑세스 가능하다.
또 다른 측면에 따르면, 일반적으로, 장치는 적어도 하나의 노드들을 포함하고, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하도록 구성된 컴퓨팅 시스템; 및 상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 - 상기 데이터 저장 시스템은, 사용시, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장함 - 을 포함한다. 상기 복수의 데이터 프로세싱 프로그램들의 다수의 데이터 프로세싱 프로그램들의 적어도 제 1 그룹을 사용하여 데이터 유닛들의 적어도 2개의 스트림들을 프로세싱하는 것은: 연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 개별적인 스트림을, 상기 제 1 그룹내의 각각의 데이터 프로세싱 프로그램들에 대하여, 프로세싱하는 단계; 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 개별적인 스트림내의 연속된 데이터 유닛들의 상기 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 프로세싱의 종료를 개시(initiating)하는 단계; 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 프로세싱의 종료가 완료되었는지를 결정한 이후에 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및 상기 변경들이 지속성 있게 저장된 이후에 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하는 단계를 포함한다.
측면들은 적어도 하나의 다음 특징들을 포함할 수 있다.
상기 복수의 데이터 프로세싱 프로그램들 각각은 상기 스트림 내의 적어도 2개의 근접한 데이터 유닛들에 대해 유지되는 프로그램 상태 정보를 가지고 있지 않은 적어도 하나의 데이터 유닛들의 스트림을 프로세싱한다.
상기 데이터 저장 시스템은 비-휘발성 저장 매체를 포함하고, 상기 지속적인 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 비-휘발성 저장 매체에 상기 변경들을 저장하는 단계를 포함한다.
상기 데이터 저장 시스템은 복수의 노드들에 결합된 통신 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 통신 매체 상에서 복수의 노드들의 제 1 노드에서 적어도 제 2 노드까지 상기 변경들을 송신하는 단계를 포함한다.
상기 데이터 저장 시스템은 상기 복수의 데이터 프로세싱 프로그램들의 적어도 하나에 의해 프로세싱되는 데이터 유닛들의 적어도 하나의 스트림들과 연관된 스트림 상태 정보를 또한 저장한다.
다수의 데이터 프로세싱 프로그램들의 적어도 상기 제 1 그룹을 사용하여 데이터 유닛들의 적어도 2개의 스트림들을 프로세싱하는 것은 상기 제 1 그룹 내에서 각각의 데이터 프로세싱 프로그램 내의 프로세싱의 종료가 완료되었는지를 결정한 이후, 상기 제 1 그룹 내의 데이터 프로세싱 프로그램들 중 어느 것에 의해 프로세싱되는 데이터 유닛들의 각각의 개별적인 스트림과 연관된 스트림 상태 정보를 지속성 있게 저장하는 단계를 더 포함한다.
적어도 다수의 데이터 프로세싱 프로그램들의 상기 제 1 그룹을 사용하여 데이터 유닛들의 적어도 2개의 스트림들을 프로세싱하는 것은 상기 변경들이 지속성 있게 저장된 이후 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 제 1 출력을, 다수의 데이터 프로세싱 프로그램들의 상기 제 1 그룹으로부터 릴리즈(release)하는 단계를 더 포함한다.
상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 제 1 출력을, 상기 다수의 데이터 프로세싱 프로그램들의 제 1 그룹으로부터 릴리즈하는 단계는 상기 다수의 데이터 프로세싱 프로그램들의 제 1 그룹에 포함되지 않은 상기 컴퓨팅 시스템상에서 실행되는 상기 복수의 데이터 프로세싱 프로그램들 중 하나에 상기 제 1 출력을 릴리즈하는 단계를 포함한다.
상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 제 1 출력을, 상기 다수의 데이터 프로세싱 프로그램들의 제 1 그룹으로부터 릴리즈하는 단계는 상기 컴퓨팅 시스템상에서 실행되는 상기 복수의 데이터 프로세싱 프로그램들에 포함되지 않은 외부 프로그램에 상기 제 1 출력을 릴리즈하는 단계를 포함한다.
상기 외부 프로그램은 상기 제 1 그룹내의 적어도 하나의 데이터 프로세싱 프로그램에 의해 엑세스 가능한 특정 공유된 데이터에 엑세스 하기 위한 요청을 송신하고, 상기 요청의 결과는 상기 요청이 수신되기 이전에 발생한 상기 특정 공유된 데이터에 대한 모든 변경들이 지속성 있게 저장된 이후에 상기 외부 프로그램으로 릴리즈된다.
상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 지속성 있게 저장된 변경들은 상기 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 지속성 있게 저장된 변경들과 구별된다.
상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대한 적어도 일부 변경들은 상기 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대한 적어도 일부 변경들이 시작된 이후에 지속성 있게 저장되고, 상기 연속된 데이터 유닛들의 제 1 서브세트는 상기 데이터 유닛들의 제 1 스트림내의 상기 연속된 데이터 유닛들의 제 2 서브세트 전에 있다.
상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 상기 제 1 출력은 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 모든 변경들이 지속성 있게 저장된 이후에 상기 다수의 데이터 프로세싱 프로그램들의 제 1 그룹으로부터 릴리즈된다.
데이터 유닛들의 적어도 2개의 스트림들을 프로세싱하는 단계는 다수의 데이터 프로세싱 프로그램들의 적어도 제 1 그룹과 상기 복수의 데이터 프로세싱 프로그램들의 다수의 데이터 프로세싱 프로그램들의 제 2 그룹을 사용하여 데이터 유닛들의 적어도 4개의 스트림을 프로세싱하는 단계를 포함한다.
다수의 데이터 프로세싱 프로그램들의 각각의 그룹들은 데이터 유닛들의 개별적인 스트림들을 주기적으로 프로세싱하는 것을 종료하고, 상기 컴퓨팅 시스템은 모든 데이터 프로세싱 프로그램들이 그 그룹에서 종료되는 동안 데이터 유닛들을 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계를 시작한다.
데이터 프로세싱 프로그램의 상기 제 1 그룹은 제 1 빈도로 데이터 유닛들의 개별적인 스트림들의 프로세싱을 종료하고, 데이터 프로세싱 프로그램들의 상기 제 2 그룹은 상기 제 1 빈도와 상이한 제 2 빈도로 데이터 유닛들의 개별적인 스트림들의 프로세싱을 종료한다.
변경들의 제 1 부분(portion)이 지속성 있게 저장된 이후에 그러나 변경들의 제 2 부분이 지속성 있게 저장되기 이전에 상기 제 1 그룹내의 각각의 데이터 프로세싱 프로그램내에서 프로세싱이 재시작된다.
다수의 데이터 프로세싱 프로그램들의 상기 제 1 그룹은 상기 데이터 유닛들의 적어도 2개의 스트림들을 주기적으로 프로세싱하는 것을 종료하고, 상기 컴퓨팅 시스템은 상기 제 1 그룹의 모든 데이터 프로세싱 프로그램들이 종료되는 동안 데이터 유닛들을 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계를 시작한다.
상기 제 1 데이터 프로세싱 프로그램 내의 프로세싱의 종료를 개시하는 단계는 상기 연속된 데이터 유닛들의 제 1 서브세트와 상기 연속된 데이터 유닛들의 제 2 서브세트 사이에 스트림-엔딩 지시자를 삽입하는 단계를 포함하며, 상기 제 1 데이터 프로세싱 프로그램에 의해 특정된 태스크들을 수행하는 모든 프로세스들이 상기 스트림-엔딩 지시자에 대한 응답으로 정상적으로 엑시트(exit)된 이후 상기 제 1 데이터 프로세싱 프로그램내의 프로세싱의 종료가 완료된다.
상기 공유된 데이터는 상기 모든 복수의 데이터 프로세싱 프로그램들 모두에 의해 엑세스 가능하다.
또 다른 일 측면에 따르면, 일반적으로, 장치들은 적어도 하나의 노드들을 포함하고, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하도록 구성된 컴퓨팅 시스템; 및 상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 - 상기 데이터 저장 시스템은, 사용시, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장함 - 을 포함한다. 상기 복수의 데이터 프로세싱 프로그램들의 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은: 연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 제 1 스트림을 프로세싱하는 단계; 연속된 데이터 유닛들의 제 1 서브세트을 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한(adjacent) 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램내에서의 프로세싱의 종료를 개시하는 단계; 상기 제 1 데이터 프로세싱 프로그램내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및
상기 모든 변경들이 지속적으로 저장되기 이전에 상기 제 1 데이터 프로세싱 프로그램 내에서 프로세싱을 재시작하는 단계를 포함한다.
측면들은 적어도 하나의 다음 특징들을 포함할 수 있다.
상기 복수의 데이터 프로세싱 프로그램들 각각은 상기 스트림 내의 적어도 2 개의 근접한 데이터 유닛들에 대해 유지되는 프로그램 상태 정보를 가지고 있지 않은 데이터 유닛들의 적어도 하나의 스트림을 프로세싱한다.
상기 데이터 저장 시스템은 비-휘발성 저장 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱 함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 비-휘발성 저장 매체 내에 상기 변경들을 저장하는 단계를 포함한다.
상기 데이터 저장 시스템은 복수의 노드들에 결합된 통신 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 통신 매체를 통해 상기 복수의 노드들 중 상기 제1 노드에서 적어도 제 2 노드까지 상기 변경들을 송신하는 단계를 포함한다.
상기 적어도 제 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 서브세트와 상기 연속된 데이터 유닛들의 제 2 서브세트 사이에 스트림-엔딩 지시자를 삽입하는 단계와, 상기 제 1 데이터 프로세싱 프로그램에 의해 특정된 태스크들을 수행하는 모든 프로세스들이 스트림-엔딩 지시자에 대한 응답으로 정상적으로 엑시트(exit)된 이후 상기 제 1 데이터 프로세싱 프로그램 내의 프로세싱의 종료가 완료된다.
상기 공유된 데이터는 복수의 데이터 프로세싱 프로그램들 모두에 의해 엑세스 가능하다.
또 다른 측면에서, 일반적으로, 상기 장치들 중 임의의 장치의 프로세싱을 수행하는 수단을 포함한다.
또 다른 측면에서, 일반적으로, 상기 장치들 중 임의의 하나의 프로세싱을 수행하는 방법.
또 다른 측면에서, 일반적으로, 소프트웨어는 컴퓨터 판독 가능 매체 상에 비 일시적 형태로 저장되고, 소프트웨어는 컴퓨팅 시스템으로 하여금 상기 장치 중 임의의 것의 프로세싱을 수행하게하는 명령을 포함한다.
또 다른 측면에서, 일반적으로, 방법은 데이터 유닛들의 적어도 하나의 스트림을 각각 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하는 단계; 그리고
상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2 개에 의해 액세스 가능한 공유된 데이터를 저장하는 단계를 포함하며; 상기 적어도 하나의 데이터 프로세싱 프로그램의 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은: 상기 데이터 유닛들의 제 1 스트림내의 연속된(contiguous) 데이터 유닛들의 복수의 서브세트들의 각각에 대해 출력을 생성하기 위해 데이터 유닛들의 제 1 스트림을 프로세싱하는 단계; 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램 내에서의 프로세싱의 종료를 개시하는 단계; 상기 제 1 데이터 프로세싱 프로그램 내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 상기 변경들이 지속성 있게 저장된 이후에 상기 제 1 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하는 단계; 그리고 상기 변경들이 지속적으로 저장된 이후에 상기 연속된 데이터 유닛들의 상기 제 1 서브세트에 대해 생성된 제 1 출력을, 상기 제 1 데이터 프로세싱 프로그램으로부터, 릴리즈하는 단계를 포함한다.
또 다른 측면에 따르면, 일반적으로, 컴퓨터-판독가능한 매체상에서 비-일시적으로 저장되는 소프트웨어는, 데이터 유닛들의 적어도 하나의 스트림을 각각 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하고; 그리고 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2 개에 의해 액세스 가능한 공유된 데이터를 저장하도록 하는 인스트럭션들을 포함하며; 상기 적어도 하나의 데이터 프로세싱 프로그램의 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은: 상기 데이터 유닛들의 제 1 스트림내의 연속된(contiguous) 데이터 유닛들의 복수의 서브세트들의 각각에 대해 출력을 생성하기 위해 데이터 유닛들의 제 1 스트림을 프로세싱하고; 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램 내에서의 프로세싱의 종료를 개시하고; 상기 제 1 데이터 프로세싱 프로그램 내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하고; 상기 변경들이 지속성 있게 저장된 이후에 상기 제 1 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하고; 그리고 상기 변경들이 지속적으로 저장된 이후에 상기 연속된 데이터 유닛들의 상기 제 1 서브세트에 대해 생성된 제 1 출력을, 상기 제 1 데이터 프로세싱 프로그램으로부터, 릴리즈한다.
또 다른 측면에 따르면, 일반적으로, 방법은: 적어도 하나의 노드들을 포함하는 컴퓨팅 시스템상에서, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램을 실행하는 단계; 및 상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 상에서, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장하는 단계를 포함하되; 상기 복수의 데이터 프로세싱 프로그램 중 다수의 데이터 프로세싱 프로그램들의 적어도 제 1 그룹을 사용하여 적어도 2개의 데이터 유닛들의 스트림들을 프로세싱하는 것은: 연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 개별적인 스트림을, 상기 제 1 그룹내의 각각의 데이터 프로세싱 프로그램들에 대하여, 프로세싱하는 단계; 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 개별적인 스트림내의 연속된 데이터 유닛들의 상기 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 프로세싱의 종료를 개시하는 단계; 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및 상기 변경들이 지속적으로 저장된 이후 상기 제 1 그룹내의 각각의 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하는 단계를 포함한다.
또 다른 측면에 따르면, 일반적으로, 소프트웨어는 컴퓨팅 시스템으로 하여금:
데이터 유닛들의 적어도 하나의 스트림을 각각 프로세싱하는 복수의 데이터 프로세싱 프로그램을 실행하고; 및 상기 복수의 데이터 프로세싱 프로그램들의 적어도 2개에 의해 엑세스가능한 공유된 데이터를 저장하도록 하는 인스트럭션들을 포함하며; 상기 복수의 데이터 프로세싱 프로그램들의 다수의 데이터 프로세싱 프로그램들의 적어도 제 1 그룹을 사용하여 데이터 유닛들의 적어도 2개의 스트림들을 프로세싱하는 것은: 연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 개별적인 스트림을, 상기 제 1 그룹내의 각각의 데이터 프로세싱 프로그램들에 대하여, 프로세싱하는 단계; 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 개별적인 스트림내의 연속된 데이터 유닛들의 상기 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 프로세싱의 종료를 개시하는 단계; 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 프로세싱의 종료가 완료되었는지 결정한 이후에 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및 상기 변경들이 지속적으로 저장된 이후에 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하는 단계를 포함한다.
또 다른 측면에 따르면, 일반적으로, 방법은: 적어도 하나의 노드들을 포함하는 컴퓨팅 시스템상에서, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하는 단계; 및 상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 상에, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장하는 단계를 포함하되; 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은: 연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 제 1 스트림을 프로세싱하는 단계; 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램내에서의 프로세싱 종료를 개시하는 단계; 상기 제 1 데이터 프로세싱 프로그램내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및 상기 모든 변경들이 지속적으로 저장되기 이전에 상기 제 1 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하는 단계를 포함한다.
또 다른 측면에 따르면, 일반적으로, 컴퓨터 판독-가능 매체 상에 비-일시적 형태로 저장된 소프트웨어로서, 상기 소프트웨어는 컴퓨팅 시스템으로 하여금: 각각이 데이터 유닛들의 적어도 하나의 스트림을 각각 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하고; 및 상기 복수의 데이터 프로세싱 프로그램들의 적어도 2개에 의해 엑세스 가능한 공유된 데이터를 저장하도록 하는 인스트럭션들을 포함하며; 상기 복수의 데이터 프로세싱 프로그램들의 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은: 연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 제 1 스트림을 프로세싱하는 단계; 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램내에서의 프로세싱의 종료를 개시하는 단계; 상기 제 1 데이터 프로세싱 프로그램내의 상기 프로세싱의 종료가 완료되었는지 결정한 이후 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및 상기 모든 변경들이 지속적으로 저장되기 전에 상기 제 1 데이터 프로세싱 프로그램 내에서 프로세싱을 재시작하는 단계를 포함한다.
측면들은 적어도 하나의 다음과 같은 효과들을 가질 수 있다.
실 시간(real-time) 데이터 프로세싱을 위해 구성된 컴퓨팅 시스템은 종종 적어도 하나의 수신되는 데이터 스트림들 내의 상대적으로 큰 용량을 다룰 필요가 있으며, 작은 지연으로 들어오는 요청에 응답 할 수 있어야 한다. 본 명세서에 기술된 기술은 그러한 시스템들이 응답 지연 요청을 손상시키지 않으면서 복구 가능성(recoverability), 내결함성(fault tolerance) 및 고 가용성(high availability)을 가질 수 있도록 한다. 본 기술들은 복수의 상호 작용하는 데이터 프로세싱 프로그램의 컬렉션들(collections)에도 적용될 수 있다. 복구 가능성에 사용되는 메커니즘들 중 하나가 체크포인팅(checkpointing) 이다. 요청에 응답하여 작은 지연으로 에스크로우된(escrowed) 출력을 제공하는 능력을 지원하는 고 주파수 체크 포인팅(예를 들어, 약 10 ms 내지 100 ms의 주기)가 달성 될 수 있다.
본 발명의 다른 특징들 및 이점들은 하기의 설명 및 청구 범위로부터 명백해질 것이다.
도 1은 태스크 기반의(task-based) 컴퓨팅 시스템의 블록도이다.
도 2a는 펄스 프로세싱 시스템에서 입력 데이터의 제 1 및 제 2 펄스들의 성공적인 프로세싱과 입력 데이터의 제 3 펄스의 프로세싱 장애를 나타내는 프로세싱 타임라인이다.
도 2b는 입력 데이터의 제 2 펄스의 성공적인 프로세싱과 연관된 체크 포인트에(checkpoint) 대한 프로세싱의 상태를 복구하는 복구 오퍼레이션(operation)을 도시하는 도 2a 의 프로세싱 타임 라인이다.
도 2c 는 출력 데이터의 제 3 펄스의 성공적인 리프로세싱(reprocessing)을 도시하는 도 2a 의 프로세싱 타임라인이다.
도 3 은 일반적인 펄스된 인제스천 체크포인팅 접근법의 프로세싱 타임라인이다.
도 4는 도 3 의 일반적인 펄스된 인제스천(ingestion) 체크포인팅 접근법에서의 복구 프로시져의 타임라인이다.
도 5는 도 3의 일반적인 펄스된 인제스천 체크포인팅 접근법의 다수의 그래프 버전의 프로세싱 타임라인이다.
도 6 은 증분적인(incremental) 그리고 파이프라인된 펄스된 인제스천 체크포인팅 접근법의 프로세싱 타임라인이다.
도 7a 는 증분(implementing) 및 파이프라인된 펄스 인제스천 체크 포인트 접근법을 구현하는 예시적인 컴퓨팅 시스템이다.
도 7b는 입력 데이터의 제 1 펄스를 프로세싱하고 제 1 펄스의 프로세싱과 연관된 상태 변화들을 저널링하는(journaling) 도 7a 의 컴퓨팅 시스템이다.
도 7c 는 입력 데이터의 제 1 펄스의 프로세싱을 종료 한 이후에 정지 상태에 있는 도 7a 의 컴퓨팅 시스템을 도시한다.
도 7d 는 입력 데이터의 제 1 펄스에 연관된 상태 변화들을 지속성 있게 저장하는 동안 제 2 펄스의 프로세싱과 연관된 입력 데이터의 제 2 펄스와 저널링 상태 변화들을 프로세싱하는 도 7a의 컴퓨팅 시스템을 도시한다.
도 7e 는 입력 데이터의 제 1 펄스에 연관된 상태 변화들을 지속성 있게 저장 한 이후에 에스크로우(escrow)부터 입력 데이터의 제 1 펄스로부터 생성된 출력 데이터를 해제하는 도 7a 의 컴퓨팅 시스템을 도시한다.
도 7f 는 입력 데이터의 제 2 펄스에 연관된 에스크로우(escrow)와 저널링 상태 변화들에서 입력 데이터의 제 2 펄스들로부터 생성된 출력 데이터를 계속 유지하는 도 7a 의 컴퓨팅 시스템을 도시한다.
도 7g 는 입력 데이터의 제 2 펄스를 프로세싱할 때 에러로부터 회복하는 도 7a 의 컴퓨팅 시스템을 도시한다.
도 8은 분산 증분 및 파이프라인된 펄스된 인제스천 체크포인팅 접근법을 구현하는 컴퓨팅 시스템이다.
도 9a는 트랜잭션(transactional) 데이터 저장과 상호 작용하고 증분 및 파이프라인된 펄스된 인제스천 체크포인팅 접근법을 구현하는 다수의 컴퓨팅 시스템을 도시한다.
도 9b 는 도 9a 에 대한 트랜잭션 데이터 저장 커밋 프로시져를 도시한다.
1. 시스템 개요(system overview)
도 1 을 참조하면, 태스크-기반(task-based) 컴퓨팅 시스템(100)은 높은 레벨의 프로그램 명세(program specification)(110)를 사용하여 상기 프로그램 명세(110)에 의해 특정된(specified) 계산(computation)을 실행하기 위해 컴퓨팅 플랫폼(150)의 계산 및 저장 자원들을 컨트롤한다. 컴파일러(compiler)/인터프리터(interpreter)(120)는 높은 레벨의 프로그램 명세(110)를 수신하고 태스크-기반 런타임 인터페이스/컨트롤러(140)에 의해 실행될 수 있는 형태의 태스크-기반 명세(130)를 생성한다. 컴파일러/인터프리터(120)는 개별적으로 또는 하나의 단위로 인스턴스화 될 수 있는 적어도 하나의 "컴포넌트들(components)"의 적어도 하나의 "실행 세트들(execution sets)"를 다수의 데이터 요소들(elements) 각각에 적용될 세분화된 태스크들로서 식별한다. 하기에 보다 상세히 기술되는 것처럼, 컴파일레이션(compilation) 또는 인터프리테이션(interpretation) 프로세스의 일부는 이러한 실행 세트들을 식별하고 실행에 대한 세트들을 준비하는 것을 포함한다. 컴파일러/인터프리터(120)는 높은-레벨의 프로그램 명세(110)를 파싱(parsing)하고, 구문(syntax)을 검증하고, 데이터 포맷들을 타입체크(type check)하고, 임의의 에러들 또는 경고들을 생성하고, 테스크-기반 명세(130)을 준비하는 것과 같은 단계들을 포함하는 임의의 다양한 알고리즘들을 사용할 수 있다는 것과, 컴파일러/인터프리터(120)는, 예를 들어, 컴퓨팅 플랫폼(150)상에서 수행되는 계산의 효율을 최적화하기 위해 다양한 기술들을 사용할 수 있다는 것을 이해해야 할 것이다. 컴파일러/인터프리터(120)에 의해 생성된 타겟(target) 프로그램 명세는 그 자체가 태스크-기반 명세(130)를 생성하기 위해 시스템(100)의 다른 부분에 의해 추가 프로세싱 될(예를 들어, 추가적인 컴파일드(compiled), 인터프리티드 등) 될 중간 형태 일 수 있다. 하기의 논의는 그러한 변형들의 적어도 하나의 예시들을 개략적으로 설명하지만 물론 컴파일러 설계에 능숙한 사람이 이해할 수 있는 변형들에 대한 다른 접근법들도 가능하다.
일반적으로, 계산 플랫폼(150)은 다수의 컴퓨팅 노드들(computing nodes)(152)(예를 들어, 분산된 계산 리소스들 및 분산된 저장 리소스들 모두를 제공하는 개별 서버 컴퓨터들)로 이루어져, 그 결과 높은 병렬 도들(degrees of parallelism) 가능하게 한다. 하기에서 보다 상세히 기술되는 바와 같이, 높은-레벨 프로그램 명세(110)에 표현된 계산은 상대적으로 정렬이 잘된 태스크들로서 계산 플랫폼 (150)상에서 실행되어, 특정된 계산의 효율적인 병렬 실행을 더 가능하게 한다.
2. 데이터 프로세싱 그래프들(Data Processing Graphs)
일부 실시 예들에서, 높은 레벨의 프로그램 명세(110)는 "컴포넌트들"의 세트를 포함하는 "데이터 프로세싱 그래프(data processing graph)" 라 불리는 일종의 그래프-기반 프로그램 명세의 유형이며, 각각은 데이터 상에서 수행될 전체적인 데이터 프로세싱 계산의 일부를 특정한다. 예를 들어, 컴포넌트들은 프로그래밍 사용자 인터페이스 및/또는 계산의 데이터 표현에서 그래프의 노드로서 표시된다. 상기에 기술된 데이터 프로세싱 그래프와 같은 일부 그래프-기반 프로그램 명세들과 다르게, 데이터 프로세싱 그래프들에는 데이터의 전송 또는 컨트롤 전송 중 하나 또는 둘 모두를 나타내는 노드들 사이의 링크들이 포함될 수 있다. 상기 링크들의 특성들을 지시하는 한 가지 방법은 컴포넌트들 상의 포트들의 다른 유형들을 제공하는 것이다. 링크들은 업스트림 컴포넌트의 출력 포트부터 다운스트림 컴포넌트의 입력 포트까지 결합되는 디렉티드 링크들(directed links)이다. 포트들에는 데이터 요소들이 링크에서 어떻게 기록되고 읽히는지 및/또는 컴포넌트들이 컨트롤되어 데이터를 프로세스하는지의 특성을 나타내는 지시자들(indicators)이 있다.
이러한 포트들에는 다양한 특성들이 있을 수 있다. 포트의 한 가지 특징은 입력 포트 또는 출력 포트로서의 방향성이다. 디렉티드 링크들(directed links)은 업스트림 컴포넌트의 출력 포트로부터 다운스트림 컴포넌트 입력 포트까지 전달되는 데이터 및/또는 컨트롤을 나타낸다. 개발자는 상이한 유형들의 포트들을 함께 링크(link)하도록 허가될 수 있다. 데이터 프로세싱 그래프의 데이터 프로세싱 특징들 중 일부는 상이한 유형들의 포트들이 함께 링크되는 방법에 따라 다르다. 예를 들어, 상이한 유형들의 포트들 사이의 링크들은 계층 구조의 병렬 프로세싱을 제공하는 상이한 "실행 세트들" 에 있는 컴포넌트들의 중첩된(nested) 서브세트들(subsets)으로 이어질 수 있다(보다 상세한 내용은 하기에서 기술됨). 특정 데이터 프로세싱 특징들은 포트 유형에 의해 암시된다. 컴포넌트에 포함될 수 있는 상이한 포트들의 유형들은 다음이 포함된다:
● 포트에 결합된 링크 위로 통과하는 컬렉션의 모든 데이터 요소들을 컴포넌트들의 인스턴스가 개별적으로 읽거나 또는 기록하는 것을 의미하는 컬렉션 입력 또는 출력 포트들. 컬렉션 포트들 사이에 싱글 링크를 가진 컴포넌트들의 한 쌍의 경우, 상기 다운스트림 컴포넌트는 일반적으로 업스트림 컴포넌트가 기록될 때 데이터 요소들을 읽을 수 있으므로, 그 결과 업스트림 컴포넌트와 다운스트림 컴포넌트들 사이의 파이프 라인 병렬 프로세싱이 가능하다. 또한, 상기 데이터 요소들은 재정렬 될 수 있으며, 이는 보다 하기에서 상세히 기술되는 바와 같이, 병렬화(parallelization)에서 효율을 가능하게 한다. 예를 들어, 프로그래밍 그래픽 인터페이스들과 같은 일부 그래픽적인 표현들에서, 그러한 컬렉션 포트들은 일반적으로 컴포넌트에서 사각형 커넥터 심볼(square connector symbol)에 의해 표시된다.
● 적어도 하나의 데이터 요소를 포트에 결합된 링크로 또는 링크로부터 컴포넌트가 각각 읽거나 기록하는 인스턴스를 의미하는 스칼라 입력 또는 출력 포트들. 스칼라 포트들 사이에 싱글 링크를 가진 컴포넌트들의 한 쌍의 경우, 업스트림 컴포넌트가 실행을 완료한 후 다운스트림 컴포넌트의 직렬 실행은 싱글 데이터 요소의 전송을 컨트롤 전송으로서 사용하여 시행되도록 강요된다. 예를 들어, 그래픽 인터페이스들을 프로그래밍하는 것과 같은 일부 그래픽적 표현들에서, 그러한 스칼라 포트들은 일반적으로 컴포넌트들에서 삼각형 커넥터 심볼(triangle connector symbol)로 표시된다.
● 스칼라 입력들 또는 출력들과 유사하지만 데이터 요소가 전송되지 않아도 되고 컴포넌트들 간의 컨트롤 전송을 통신하는 데 사용되는 컨트롤 입력 또는 출력 포트들. 컨트롤 포트들 사이에 링크를 가진 한 쌍의 컴포넌트들의 경우, 업스트림 컴포넌트가 실행을 마친 이후 다운스트림 컴포넌트의 직렬 실행이 실행된다(비록 이러한 컴포넌트들에도 컬렉션 포트들간에 링크를 가진 경우에 있어서도). 예를 들어, 그래픽 인터페이스들을 프로그래밍하는 것과 같은 일부 그래픽적 표현들에서, 그러한 컨트롤 포트들은 일반적으로 컴포넌트들에서 원형 커넥터 심볼(circular connector symbol)로 표시된다.
이러한 상이한 유형들의 포트들은 데이터 프로세싱 그래프들의 유연한(flexible) 설계를 가능하게 하여 포트 유형들의 중복(overlapping) 속성들을 가진 데이터와 컨트롤 흐름의 강력한 조합들을 허용하게 한다. 특히 데이터를 어떤 형태로 전달하는 ("데이터 포트들”(“data ports”)라고 함) 컬렉션 포트들(collection ports)과 스칼라 포트들(scalar ports) 라는 두 가지 유형의 포트들이 있으며; 직렬 실행(“직렬 포트들(“Serial ports”)”라고 함)을 시행하는 두 가지 유형의 포트들, 스칼라 포트들과 및 컨트롤 포트들이 있다. 데이터 프로세싱 그래프는 연결된 입력 데이터 포트들이 하나도 없는 "소스 컴포넌트들”(“source components”)인 적어도 하나의 컴포넌트들을 일반적으로 가지고, 연결된 출력 데이터 포트들이 하나도 없는 "싱크 컴포넌트들”(“sink components”)인 적어도 하나의 컴포넌트들을 일반적으로 가진다. 일부 컴포넌트들은 입력 및 출력 데이터 포트들이 모두 연결된다. 일부 실시 예들에서, 그래프들은 사이클들을 가지도록 허용되지 않으므로, 디렉티드 비사이클 그래프(directed acyclic graph : DAG)여야 한다. 이 특징은 하기에서 자세히 기술되는 DAG들의 특정 특성들을 활용하는 데 사용할 수 있다.
데이터 프로세싱 그래프의 컴포넌트들 상에 전용 컨트롤 포트들을 사용하면 특정 다른 제어 흐름 기술들을 사용함으로써 수행 할 수 없는 계산의 상이한 부분들을 유연하게 컨트롤 할 수 있다. 예를 들어, 데이터 프로세싱 그래프들 간에 종속성 제한을 적용 할 수 있는 작업 컨트롤 솔루션(job control solutions)은 싱글 데이터 프로세싱 그래프 내의 컴포넌트들 간의 종속성 제한을 정의하는 컨트롤 포트들을 통해 미세 조정된 컨트롤을 제공하지 않는다. 또한 순차적으로 실행되는 상이한 단계들(phases)의 컴포넌트들을 할당하는 데이터 프로세싱 그래프들은 개별적인 컴포넌트들을 시퀀싱(sequencing)하는 유연성을 허용하지 않는다. 예를 들어, 간단한 단계들을 사용하여 불가능한 중첩 컨트롤 토폴로지들(nested control topologies)은 본 명세서에 기술된 컨트롤 포트들 및 실행 세트들을 사용하여 정의 될 수 있다. 이 뛰어난 유연성은 가능할 때 더 많은 컴포넌트들을 동시에 실행(run)할 수 있게 함으로써 잠재적으로 성능을 향상시킬 수 있다.
상이한 유형들의 포트들을 상이한 방법들로 연결함으로써, 개발자는 데이터 프로세싱 그래프의 컴포넌트들의 포트들 사이에서 상이한 유형들의 링크 구성들을 특정(specify)할 수 있다. 한 유형의 링크 구성은 동일한 유형의 포트(예: 스칼라 -스칼라 링크)에 연결된 특정 유형의 포트에 해당 할 수 있으며, 예를 들어 또 다른 유형의 링크 구성은 상이한 유형의 포트(예: 컬렉션 - 스칼라 링크)에 연결된 특정 유형의 포트에 해당 할 수 있다. 이러한 상이한 유형들의 링크 구성들은 개발자가 데이터 프로세싱 그래프의 일부와 연관된 의도된 동작들을 시각적으로 식별 할 수 있는 방법으로써, 컴파일러/인터프리터(120)에게 그 동작을 가능하게 하는 데 필요한 대응하는 유형의 컴파일 프로세스를 지시하는 방법으로서 사용된다. 본 명세서에 기술된 예시들은 상이한 유형들의 링크 구성들을 시각적으로 나타내기 위해 상이한 유형의 포트들에 대해 고유한 형상을 사용하지만, 시스템의 상이한 구현들(implementations)은 상이한 유형들의 링크들을 제공하고 각 유형의 링크에 고유한 시각적 지시자(예를 들어, 두께, 선 유형, 색 등)를 할당함으로써 상이한 유형들의 링크 구성들의 거동을 구별 할 수 있다. 그러나 포트 유형 대신 링크 유형을 사용하여 상기에 리스트된 세 가지 유형들의 포트들을 사용하여 동일한 링크 구성들을 나타낼 수 있도록 세 가지 유형들의 링크들이 있다(예: 스칼라 - 스칼라, 컬렉션 - 컬렉션, 컨트롤 - 컨트롤, 컬렉션 - 스칼라, 스칼라 - 컬렉션, 스칼라 - 컨트롤 등). 다른 예들은 포트들의 유형들이 다르지만 데이터 프로세싱 그래프에서 포트 유형을 시각적으로 나타내지 않아도 된다.
컴파일러/인터프리터(120)는 실행을 위해 데이터 프로세싱 그래프를 준비하는 프로시져들(procedures)을 수행한다. 제 1 프로시져는 잠재적으로 중첩된 실행 집합들의 컴포넌트들의 계층을 식별하기 위한 실행 세트 검색 사전-프로세싱 프로시져(execution set discovery pre-processing procedure)이다. 제 2 프로시져는 각각의 실행 세트에 대해, 컴파일러/인터프리터(120)가 각각의 실행 세트 내의 컴포넌트의 실행을 컨트롤하기 위해 런타임에서 상태 머신을 효과적으로 구현할 컨트롤 코드를 형성하는데 사용할 대응하는 컨트롤 그래프를 생성하는 컨트롤 그래프 생성 프로시져다. 이러한 프로시져들의 각각은 하기에서 보다 더 자세히 설명 될 것이다.
적어도 하나의 입력 데이터 포트를 가진 컴포넌트는 각각의 입력 데이터 요소 또는 컬렉션(컬렉션들의 튜플 및/또는 다수의 그 입력 포트들의 상에서 컬렉션)에서 수행 될 프로세싱을 지정한다. 그러한 명세의 한 가지 형태는 하나 또는 입력 데이터 요소들 및/또는 컬렉션들의 튜플(tuple)에서 수행되는 프로시져다. 컴포넌트가 적어도 하나의 출력 데이터 포트를 가지면, 대응하는 출력 데이터 요소 및/또는 컬렉션들의 튜플을 생성 할 수 있다. 그러한 프로시져는 높은 레벨의 표현(statement)-기반 언어(예: (미국 특허 제 8,069,129 "비즈니스 규칙 편집 및 컴파일링"( Editing and Compiling Business Rules”)에서 사용된 것처럼 Java 소스 표현(statement) 또는 DML(Data Manipulation Language) 사용) 로 특정되거나, 일부 또는 전체적으로 컴파일된 형식(예 : Java 바이트 코드)으로 제공 될 수 있다. 예를 들어, 컴포넌트는 입력 데이터 요소 및/또는 컬렉션과 출력 데이터 요소들 및/또는 컬렉션을 포함하는 아규먼트들(arguments)을 가진 작업 프로시져를 가질 수 있으며, 보다 일반적으로는, 입력을 얻고 출력 데이터 요소 또는 컬렉션을 제공하는데 사용되는 프로시져들 또는 데이터 객체들(본 명세서에서는 "핸들들(handles)"이라고 함)또는 그러한 데이터 요소들 또는 컬렉션들을 지칭한다.
작업 프로시져들은 다양한 유형들일 수 있다. 특정될 수 있는 프로시져들 유형들을 제한하려 의도하지 않고, 한 가지 유형의 작업 프로시져는 레코드 포맷에 따라 데이터 요소들에 대한 이산 계산(discrete computation)을 특정한다. 싱글 데이터 요소는 테이블(또는 다른 유형의 데이터세트(dataset))의 레코드 일 수 있으며, 레코드들의 컬렉션은 테이블의 모든 레코드 일 수 있다. 예를 들어, 싱글 스칼라 입력 포트와 싱글 스칼라 출력 포트를 가진 컴포넌트에 대한 한 가지 유형의 작업 프로시져에는 하나의 입력 레코드 수신단계, 그 레코드에 대한 계산 수행단계 및 하나의 출력 레코드 제공단계가 포함된다. 또 다른 유형의 작업 프로시져는 다수의 스칼라 입력 포트들에서 수신된 입력 레코드들의 튜플을 프로세싱하여 다수의 스칼라 출력 포트들에서 송신된 출력 레코드들의 튜플을 형성하는 방법을 특정할 수 있다.
데이터 프로세싱 그래프에 의해 특정된 계산의 의미론적(semantic) 정의는 그래프에 의해 정의된 계산의 프로세싱 순서(order) 및 동시성(concurrency)에 대한 제한들 및/ 또는 제한이 없는 점에서 본질적으로(inherently) 평행하다. 따라서, 계산의 정의는 결과가 계산의 단계들의 순차적인 순서와 동등할 필요로 하지 않는다. 반면에, 계산의 정의는 계산의 부분들(parts)을 시퀀싱하고 계산의 부분들의 병렬 실행을 제한하는 특정 제한들을 제공한다.
데이터 프로세싱 그래프들에 대한 논의에서, 런타임(runtime) 시스템에서 별도의 "태스크들(tasks)"으로 컴포넌트들의 인스턴스들을 구현하는 것은 시퀀싱 및 병렬 제한을 나타나는 수단으로 간주된다. 의미 기반 정의와 일관되게 계산을 구현하는 태스크-기반 명세의 데이터 프로세싱 그래프 구현의 보다 구체적인 논의는 그래프 -기반 명세 자체의 특성들에 대한 논의 이후에 전적으로 논의된다.
일반적으로, 데이터 프로세싱 그래프의 각각의 컴포넌트들은 그래프를 실행하는 동안 다수의 시간들 동안 컴퓨팅 플랫폼에서 인스턴스화(instantiated)된다. 각각의 컴포넌트의 인스턴스들의 개수(number)는 컴포넌트들이 할당된 다수의 실행 세트들의 수에 따라 달라질 수 있다. 컴포넌트의 다수의 인스턴스들이 인스턴스화 될 때, 적어도 한개의 인스턴스가 병렬로 실행될 수 있으며, 시스템의 상이한 컴퓨팅 노드들에서 상이한 인스턴스들이 실행될 수 있다. 포트들의 유형들을 포함하여, 컴포넌트들의 상호 연결들(interconnections)은 특정된 데이터 프로세싱 그래프에 의해 허용되는 병렬 프로세싱의 본질(nature)을 결정한다.
하기에 기술된 것처럼, 컴포넌트의 상이한 인스턴스들의 실행들 사이에는 일반적으로 상태가 유지되지 않지만, 컴포넌트의 다수의 인스턴스들의 실행들을 확장(span) 할 수 있는 '지속적인 데이터(persistent data)'를 명시적으로 지칭하는 시스템에 특정 프로비전들 제공될 수 있다. 그러한 지속적인 데이터가 후속 실행들을 위해 이용 가능하도록 및/또는 특정 결함들(faults)이 발생한 경우에 복구 가능함을 보장하는 한 가지 방법은, 지속적인(persistent) 데이터를 지속성 있는 저장 매체에 오래가도록 저장하는 것이다(예를 들어, 비-휘발성 저장 매체와 같은 전원 차단들과 같은 적어도 하나의 미리결정된 결함들의 경우에 정보가 손실 없이 저장 될 수 있는 매체).
작업 프로시져는 어떻게 싱글 레코드가 프로세싱되어 싱글 출력 레코드를 생성하는지를 특정하고 포트들이 컬렉션 포트들로 지시되는 예들에서, 컴포넌트의 싱글 인스턴스가 실행될 수 있으며, 그리고 상기 작업 프로시져는 연속된 레코드들을 반복적으로 프로세싱하여 연속된 출력 레코드들을 생성한다. 이러한 경우에서, 반복적으로 컴포넌트내에서 상태가 유지되는 것이 가능하다.
작업 프로시져가 싱글 레코드가 싱글 출력 레코드를 생성하기 위해 프로세싱되는 방법을 특정하고, 포트들이 스칼라 포트들로 식별되는 실시 예들에서, 컴포넌트의 다수의 인스턴스들이 실행될 수 있으며, 상이한 입력 레코드들에 대한 작업 프로 시져 실행 사이에 상태가 유지되지 않는다.
또한, 일부 실시 예들에서, 시스템은 상기에 도입된 가장 정교한 명세를 따르지 않는 작업 프로시져들을 지지한다. 예를 들어, 작업 프로시져는 스칼라 포트를 통해 싱글 레코드를 허용하고 컬렉션 포트를 통해 다수의 출력 레코드들을 제공하는 반복을 내부적으로 구현할 수 있다.
상기에 기술했듯이, 일부 형태의 데이터를 전송하는 컬렉션 포트들과 스칼라 포트들의 2 가지 유형의 데이터 포트들이 있고; 직렬 실행을 실시하는 스칼라 포트들과 컨트롤 포트들의 2 가지 직렬 포트들의 유형이 있다. 일부 경우들에 있어서, 한 유형의 포트를 또 다른 유형의 포트에 대한 링크로 연결할 수 있다. 이러한 경우들 중 일부는 하기에 기술되어 있다. 일부 경우들에는 한 유형의 포트가 동일한 유형의 포트에 링크된다. 두 개의 컨트롤 포트들 사이의 링크 ("컨트롤 링크(control link)"라고 함)는 링크 위에 데이터를 전송하지 않고도 링크된 컴포넌트들 사이에서 직렬 실행 순서를 특정한다. 두 개의 데이터 포트들 사이의 링크("데이터 링크(data link)"라고 함)는 데이터 흐름을 제공하고, 스칼라 포트들의 경우 직렬 실행 순서 제한을 강화하며 컬렉션 포트들의 경우 직렬 실행 순서를 요구하지 않는다. 일반적인 컴포넌트는 입력 및 출력 데이터 포트들(컬렉션 포트들 또는 스칼라 포트들)과 입력 및 출력 컨트롤 포트를 포함하는 적어도 두 종류의 포트들을 포함한다. 컨트롤 링크(control link)는 업스트림(upstream) 컴포넌트의 컨트롤 포트를 다운스트림(downstream) 컴포넌트의 컨트롤 포트에 연결한다. 마찬가지로, 데이터 링크들(data links)은 업스트림 컴포넌트의 데이터 포트를 다운스트림(downstream) 컴포넌트의 데이터 포트에 연결한다.
3. 컴퓨팅 플랫폼(computing platform)
도 1로 다시 돌아가서 참조하면, 데이터 프로세싱 그래프의 컴포넌트들의 인스턴스들은 데이터 프로세싱 그래프를 실행하는 컨텍스트(context)에서 태스크들로써 스?p(spawn)되고 일반적으로 컴퓨팅 플랫폼(150)의 다수의 컴퓨팅 노드들(152)에서 실행된다. 하기에서 보다 상세히 기술되는 것처럼, 예를 들어, 상기 인터페이스/컨트롤러(140)는 계산 로드(computation load)의 할당, 통신 또는 입력/출력 오버헤드(overhead)의 감소 및 메모리 리소스들 사용과 관련있는 시스템에 대한 성능 목표를 달성하기 위해 이러한 태스크들의 스케줄링 및 실행 궤적(locus)의 관리상의 컨트롤 측면을 제공한다.
일반적으로, 컴파일러/인터프리터(120)에 의한 변환(translation) 이후에, 전체 계산은 컴퓨팅 플랫폼(150)에 의해 실행될 수 있는 타겟 언어(target language)의 프로시져들의 관점에서 태스크-기반 명세(130)로서 표현된다. 이러한 프로시져들은 "스?p(spawn)" 및 "대기(wait)"와 같은 프리미티브들(primitives)을 사용하며, 높은 레벨(예, 그래프-기반) 프로그램 명세(110)의 컴포넌트들에 대한 프로그래머에 의해 특정된 작업 프로시져들을 포함 시키거나 호출(call) 할 수 있다.
많은 경우들에 있어서, 컴포넌트의 각각의 인스턴스는 태스코로서 구현되며, 싱글 컴포넌트의 싱글 인스턴스를 구현하는 일부 태스크들을, 실행 세트의 다수의 컴포넌트의 싱글 인스턴스를 구현하는 일부 태스크들 및 컴포넌트의 연속된 인스턴스들을 구현하는 일부 태스크들로 구현된다. 컴포넌트들과 그들의 인스턴스들의 특정 맵핑(mapping)은 컴파일러/인터프리터의 특정 디자인에 따라 달라지므로, 결과적인 실행은 계산의 의미론적 정의와 일치하게 된다.
일반적으로, 예를 들어 런타임 환경의 태스크들은 계층적으로 정렬되며 데이터 프로세싱 그래프의 탑-레벨(top-level) 컴포넌트들의 각각에 대해 하나씩, 하나의 탑-레벨의 태스크가 다수의 태스크들을 생성한다. 유사하게, 실행 세트의 계산은 컬렉션의 요소를 프로세싱하는데 각각 사용되는 다수의(즉, 많은) 서브 - 태스크들을 갖는 전체 컬렉션을 프로세싱하기 위한 하나의 태스크를 가질 수 있다.
런타임 환경에서, 스?p된(spawned) 각각의 태스크는 가능한 상태들 세트 중 하나에 있을 수 있다. 처음 스?p될 때, 태스크는 초기에 실행되기 전에 스?p된(spawned) 상태에 있다. 실행 중일 때는 실행 상태이다. 때때로, 태스크가 중단(suspended) 상태 일 수 있다. 예를 들어, 특정 구현들에서, 스케줄러는 프로세서 사용량을 초과하거나 리소스를 기다리는 등의 태스크를 중지 상태로 만들 수 있다. 일부 구현들에서는, 태스크들의 실행이 선점(preempted)되지 않으며 태스크가 컨트롤을 포기해야 한다. 중단된(Suspended) 하위 상태들에는 실행가능한(Runnable), 차단된(Blocked) 및 완료된(Done)이 있다. 예를 들어, 태스크가 자신의 계산을 완료하기 전에 컨트롤을 포기한 경우 태스크는 실행가능한(Runnable) 이다. 예를 들어, 부모(parent) 태스크가 해당 태스크의 리턴 값(return value)을 검색하기 전에 프로세싱이 완료되면 태스크는 완료(done)된다. 예를 들어, 또 다른 작업의 완료(예: "대기(wait for)" 선점을 사용했기 때문에) 또는 데이터 레코드의 가용성(예: in.read() 또는 out.write() 함수의 하나의 실행을 차단)과 같이 해당 태스크의 외부의 이벤트를 기다리는 경우 태스크는 차단(block)된다.
도 1 을 다시 참조하여, 각각의 컴퓨팅 노드(152)는 적어도 하나의 프로세싱 엔진들(154)를 갖는다. 또한, 각각의 컴퓨팅 노드(152)는 버퍼 메모리(156)(예를 들어, 휘발성 저장 매체), 데이터 저장소(157)(예를 들어, 비 휘발성 저장 매체), 및 컴퓨팅 플랫폼(150)에 의해 소비 및/또는 생성되는 데이터에 대한 소스 및/또는 데스티네이션(destination)(160)에 액세스 할 수 있는 I/O 인터페이스(158)를 포함한다. 적어도 하나의 컴퓨팅 노드(152)상의 버퍼 메모리(156) 및/또는 데이터 저장소(157) 중 하나 또는 모두는 다수의 컴퓨팅 노드들(152)에 액세스 가능하도록 구성 될 수 있다. 적어도 일부 실시 예들에서, 각각의 프로세싱 엔진(154)은 컴퓨팅 노드(152)상에서 실행되는 싱글 오퍼레이팅 시스템 프로세스와 연관된다. 컴퓨팅 노드(152)의 특성들에 따라, 싱글 컴퓨팅 노드(152)상에서 다수의 프로세싱 엔진들(154)을 실행하는 것이 효율적일 수 있다. 예를 들어, 컴퓨팅 노드(152)는 다수의 개별적인 프로세서들을 갖는 서버 컴퓨터 일 수 있거나, 서버 컴퓨터는 다수의 프로세서 코어들을 갖는 싱글 프로세서를 가질 수 있거나, 다수의 코어들을 갖는 다수의 프로세서들의 조합 일 수 있다. 모든 경우에서, 다수의 프로세싱 엔진들을 실행하는 것은 컴퓨팅 노드(152)상의 싱글 프로세싱 엔진만을 사용하는 것보다 효율적일 수 있다.
프로세싱 엔진의 한 예가 가상 머신의 컨텍스트에서 호스팅된다. 가상 머신의 한 유형은 JVM(Java Virtual Machine)이며, Java 바이트 코드로 컴파일된 형식으로 특정된 태스크를 실행할 수 있는 환경을 제공한다. 그러나 가상 시스템 아키텍처를 사용하거나 사용하지 않을 수 있는 다른 형태들의 프로세싱 엔진들을 사용할 수 있다.
4. 복구(Recovery)
일부 예들에서, 전술한 컴퓨팅 시스템(100)은 프로세싱 알고리즘이 구현되어, 만약 프로세싱 장애가 발생하면(예를 들어, 컴퓨팅 노드가 프로세싱 오퍼레이션 동안 장애 함), 시스템에 장애가 발생하지 않았거나 슬립(sleep) 상태로 되었거나 일정 시간 동안 속도가 느려지는 경우가 생성 될 수 있는 결과인 시스템이 재시작 될 수 있다.
하나의 간단한 복구 알고리즘은 데이터를 원자(atomic) 단위의 작업으로 프로세싱하여 장애 이후 데이터 프로세싱 그래프에 의해 수행된 모든 작업을 롤백(roll back)하는 작업이 포함된다. 이러한 배치 프로세싱 접근법에서, 컴퓨팅 시스템은 장애한 프로세스 중에 변경된 파일들을 프로세싱이 시작되기 이전의 상태로 복원하여 복구 가능성을 달성한다. 이러한 방식으로, 복구 알고리즘은 장애한 프로세싱 중에 수행된 모든 작업과 변경들이 폐기(discarded)되도록 보장 할 수 있다. 이 유형 회복 알고리즘은 데이터가 비교적 짧은 시간 내에 모든 데이터를 프로세싱하는 싱글 데이터 프로세싱 그래프에 의해 프로세싱 될 때 특히 유용하다.
그러나, 지속적이고 공유 가능한 자원을 업데이트하는 다수의 그래프들을 다루거나 긴(무기한의)기간 동안 데이터를 프로세싱하는 그래프들을 다룰 때, 데이터 프로세싱 장애 후에 완전히 롤백 할 수 있는 원자 단위(atomic unit)의 작업으로 취급하는 것은 비실용적이며 때로는 불가능하다.
4.1 얽힘(Entanglement)
일부 예들에서, 컴퓨팅 시스템이 지속적이고 공유된 데이터를 업데이트하는 것을 포함하여, 다수의 데이터 프로세싱 그래프들을 사용하여 적어도 하나의 공유된 리소스들을 동시에 프로세싱 하는 경우, '얽힘(entanglement)'이라고 하는 조건으로 인해 복구 가능성이 상실된다. 공유된 데이터는 적어도 2 개의 상이한 데이터 프로세싱 그래프들 각각에 의해 판독 및 기록된(또는 수정된) 될 수 있는 데이터이다. 예를 들어, 공유된 데이터는 데이터 프로세싱 그래프들 사이에서 공유된 상태 및/또는 공유된 통신의 형태로서 상이한 데이터 프로세싱 그래프들에 의해 값들이 판독되고 기록되는 변수들(variables) 일 수 있다.
얽힘(entanglement)의 예에서, 각각의 데이터 프로세싱 그래프는 공유된 데이터를 원자적으로 변경하면, 두 개의 데이터 프로세싱 그래프들이 독립적인 공유된 데이터의 세트들을 프로세싱하는 상황을 고려해본다. 두 데이터 프로세싱 그래프들의 첫 번째가 데이터의 세트를 프로세싱하고, 원자적 업데이트에서 변경을 수행하며, 지속적으로 되었는지를(예컨대, 지속성 있게 저장되었는지)를 확인하기 위해 그 변경을 커미트(commit)하는 경우가 발생 될 수 있으며, 그 후에 두 개의 데이터 프로세싱 그래프들 중 두번째가 실행 시에 장애가 발생된다. 시스템이 두 번째 데이터 프로세싱 그래프의 실패한 프로세싱 동안 프로세싱이 시작되기 전의 상태로 변경된 임의의 데이터(공유된 데이터 포함)를 복원하는 복구 프로시져를 구현하는 경우, 첫 번째 데이터 프로세싱 그래프가 공유된 데이터에 대해 수행한 변경 중 적어도 일부는 취소되어, 그 결과 불일치가 발생하게 된다. 반면에, 시스템이 제 2 데이터 프로세싱 그래프의 프로세싱중에 그 프로세싱이 시작되기 전의 상태로 변경된 데이터(공유된 데이터를 포함 함)를 복원하지 않으면, 출력 프로세싱이 시작될 때 공유된 데이터의 상태가 정확하지 않기 때문에 제 2 데이터 프로세싱 그래프의 정확하지 않을 수 있다. 따라서, 얽히게 함으로 인해 공유된 데이터에서 작동하는 데이터 프로세싱 그래프는 장애 이후 독립적으로 복원 될 수 없다.
얽힌 프로세스들이 존재할 때의 복구 방법 중 하나는 그래프들이 서로의 변경 사항들을 볼 수 없도록 하기 위해 다수의 데이터 프로세싱 그래프들을 격리시키는 것을 포함한다. 그러나 데이터 프로세싱 그래프들이 동일한 데이터 항목들에서 작동하고 격리가 불가능한 경우가 종종 있다. 또한, 일부 예들에서, 다수의 데이터 프로세싱 그래프들은 상대적으로 긴 지속 기간 동안 실행되고, 데드록 (비관적 동시성 제어 사용) 또는 커밋-시간 충돌(낙관적 동시성 제어 사용)로 인해 하나의 데이터 프로세싱 그래프가 다른 하나가 락(lock)을 해제하기를 기다리거나 하나의 데이터 프로세싱 그래프가 롤백되는 결과를 초래할 수 있다. 얽힌 프로세스들이 존재하는 상태에서 복구하는 다른 방법들은 다수의 데이터 프로세싱 그래프를 하나의 원자 단위 부분으로 실행하거나 다수의 데이터 프로세싱 그래프들을 연속적으로 실행하는 것이다.
4.2 장기 실행 그래프들(Long Running Graphs)
일부 예들에서, 컴퓨팅 시스템(100)에서 실행되는 데이터 프로세싱 그래프들은 잘 정의된(well-defined) 엔딩 포인트(ending point) 없이 연속된 데이터의 스트림들을 프로세싱한다. 이러한 데이터 프로세싱 그래프들은 때때로 '인제스천(ingestion) 그래프들'라고도 한다. 연속된 데이터의 스트림을 프로세싱 할 때, 모든 데이터의 프로세싱을 싱글, 원자 단위의 작업으로 프로세싱하는 것은 부적절하며 전술한 복구 접근법들은 컴퓨팅 시스템의 장애(failure)로부터 성공적으로 복구하기에는 부적절하다.
이러한 컴퓨팅 시스템에서의 장애로부터 복구하기 위한 한 가지 접근법은 입력 데이터의 연속된 스트림을 일련의 더 작은 입력 데이터 '펄스들(pulses)'로 분할하고 일련의 입력 데이터 펄스들을 개별적으로 프로세싱 하는 것을 포함한다. 입력 데이터의 주어진 펄스의 프로세싱이 완료되면, 그래프의 내부 상태에 대한 체크 포인트(checkpoint)가 생성된다. 장애의 경우, 컴퓨팅 시스템은 체크 포인트를 사용하여 그래프의 내부 상태를 복원하고 연속된 데이터 스트림의 프로세싱의 중간 지점에서 프로세싱을 재시작 할 수 있다. 일부 예들에서, 컴퓨팅 시스템이 얽힌 긴 실행 그래프들을 포함하는 경우, 모든 그래프들이 공통 커밋 시간들(commit times)을 공유하도록 체크 포인트들을 조정해야 한다.
본 명세서에서,“데이터 유닛들의 스트림”이라고 지칭되는 펄스들로 나누어지는 입력데이터는, 예를 들어, 외부 소스로부터 수신된 이후 읽혀지는 입력 레코드들의 임의의 시퀀스(any sequence), 또는 임의의 공유된 변수들의 저장된 상태 또는 입력 데이터의 소스로써 작용하는 임의의 내부 시스템 상태를 엑세싱함으로써 읽혀지는 데이터의 임의의 유닛들을 포함하도록 고려된다.
예를 들어, 도 2a 를 참조하면, 컴퓨팅 시스템(100)은 t0 시간에 'A'로 라벨링된(labeled) 제 1 그래프와 'B'로 라벨링된 제 2 그래프를 시작하고, 그래프들은 입력 데이터의 제 1 펄스를 프로세싱하기 시작한다. t1 시간에서, 제 1 그래프와 제 2 그래프 모두 입력 데이터의 제 1 펄스 프로세싱을 완료하고 제 1 체크 포인트를 기록한다. 제 1 체크 포인트가 기록되면 제 1 그래프와 제 2 그래프는 입력 데이터의 제 2 펄스를 프로세싱하기 시작한다. t2 시간에서, 제 1 그래프와 제 2 그래프 모두는 입력 데이터의 제 2 펄스를 프로세싱하고 제 2 체크 포인트를 기록한다. 기록된 제 2 체크 포인트를 사용하여, 제 1 그래프와 제 2 그래프는 입력 데이터의 제 3 펄스를 프로세싱하기 시작한다. 시간 t3에서, 입력 데이터의 제 3 펄스의 프로세싱에서의 장애(failure)가 발생한다.
도 2b 를 참조하면, 장애로부터 회복하기 위해, 컴퓨팅 시스템은 제 2 체크 포인트를 사용하여 입력 데이터의 제 2 펄스의 프로세싱 완료 시의 각각의 상태들로 제 1 그래프와 제 2 그래프를 복구한다.
도 2c 를 참조하면, 입력 데이터의 제 2 펄스의 프로세싱 완료시점에서의 각각의 상태들로 제 1 그래프와 제 2 그래프가 복구되면, 그래프들은 입력 데이터의 제 3 펄스를 성공적으로 재-프로세싱(re-process)하고 시간 t4 에서 제 3 체크 포인트를 기록한다.
4.3 일반적인 체크포인팅 알고리즘(General Checkpointing Algorithm)
체크 포인트 데이터를 저장하는 한 가지 접근법은 컴퓨팅 시스템에서 모든 다른 컴퓨팅 노드들에 새로운 체크 포인트 메시지를 브로드캐스트(broadcast)함으로써 체크 포인트를 먼저 시작하는 '체크포인트 마스터(checkpoint master)' 노드 (예를 들어, 시스템 내의 컴퓨팅 노드들 중 하나)를 포함한다. 컴퓨팅 노드들에서 수신되면, 새로운 체크포인팅 메시지는 서버들로 하여금 모든 컴퓨팅 활동을 중단하도록 한다. 그 다음, 컴퓨팅 시스템은 시스템 내의 컴퓨팅 노드들 사이에 전송(transit)되는 모든 메시지들이 전달 될 때까지 대기(wait)한다.
모든 메시지들이 전달되면, 각각의 컴퓨팅 노드는 태스크 상태, 보류중인 메시지들(pending messages), 지속적인 데이터, 그리고 일시적인 상태를 체크포인트 파일에 저장한다. 그런 다음, 마스터 컴퓨팅 노드는 체크 포인트를 커밋팅(committing)하는 저널 엔트리(journal entry)를 기록하고 프로세싱을 다시 시작하도록 시스템의 모든 컴퓨팅 노드들에 메시지를 보낸다.
전술한 접근법은 입력 데이터의 연속된 스트림을 프로세싱 할 때의 장애들로부터 회복 할 수 있는 체크 포인트 프로시져를 발생시키지만, 이 접근법과 연관된 다수의 단점들(drawbacks)이 있다. 예를 들어, 전술한 접근법은 컴퓨팅 시스템이 유용한 프로세싱을 완료 할 수 없는 상대적으로 긴 지속 기간 동안 프로세싱 중지를 요구한다. 또한, 컴퓨팅 노드들의 태스크 상태를 저장하는 것은 계산적으로 집중되며, 컴퓨팅 시스템이 과도한 양의 시간을 소비하여 태스크 상태를 저장하고 입력 데이터를 프로세싱하지 않게 된다. 마지막으로 컴퓨팅 시스템은 트랜잭션 데이터 저장소 커밋 관리자의 상태, 트랜잭션 데이터 저장소 테이블 인덱스들에 대한 인-플라이트(in-flight) 업데이트, 인-플라이트 서비스 호출, 한 서버에서 다른 서버로 이동하는 인-플라이트 데이터, 한 서버에서 다른 서버로 마이그레이션(migration)하는 인-플라이트 프로세스들과 공유된 데이터(컴퓨팅 시스템(100)에서 실행되는 적어도 2 개의 태스크들(데이터 프로세싱 그래프의 컴포넌트와 관련된)에 액세스 가능한 데이터)에 대한 인-플라이트 액세스와 같은 많은 양의 과도(transient) 상태들을 갖는다. 일부 예들에서, 이러한 일시성(transients)를 저장하는 것은 계산 상으로 비용이 많이 들며 복잡하다.
4.4 펄스된 인제스천 알고리즘(Pulsed Ingestion Algorithm)
펄스된 인제스천 알고리즘은 일반적인 체크포인팅 알고리즘과 연관된 단점들을 피하기 위해 컴퓨팅 시스템에서 실행되는 그래프들의 다수의 특성들에 의존한다. 컴퓨팅 시스템에서 실행되는 인제스천 그래프들의 한 가지 특성은 데이터를 한 번에 하나의 레코드씩 인제스트(ingest) 한다는 것이다(예를 들어, 인제스천은 반복적으로 레코드 읽기와 공유된 지속적인 데이터 업데이트 포함). 컴퓨팅 시스템에서 실행되는 인제스천 그래프들의 또 다른 특성은 하나의 레코드에서 다음 레코드로 상태가 비보존된다는 것이다. 즉, 그래프들에 액세스 할 수 있는 지속적인 데이터(예: 공유된 데이터 인제스천들과 트랜잭션 데이터 저장소 테이블들)에 모든 상태가 유지된다. 또한, 일부 예들에서, 컴퓨팅 시스템에서 실행되는 데이터 프로세싱 그래프들은 하나의 레코드에서 다음 레코드로 상태를 저장하지 않는 컴포넌트들만을 포함한다.
컴퓨팅 시스템에서 실행되는 그래프들의 이러한 특성들을 기반으로, 그래프들의 싱글 실행(run)에서 전체 입력 데이터 스트림을 인제스천하고 그래프들을 완전히 셧 다운(shut down)하고(즉, 모든 프로세스들이 데이터 펄스와 연관된 임의의 프로세싱을 완료 한 이후에 정상적으로 엑시트하게 함), 그래프들을 다시 시작하여 입력 데이터 스트림의 후속 펄스를 프로세싱하여 입력 데이터 스트림에서 입력 데이터의 펄스를 인제스천하는 것 간에는 차이가 없다. 그래프들은 펄스된 인제스천 접근법으로 명확히 종료 될 수 있기 때문에, 컴퓨팅 시스템은 체크 포인팅 프로세스 동안 많은 양의 내부 그래프 상태를 저장할 필요가 없다.
4.4.1 싱글 그래프 펄스된 인제스천 알고리즘(Single Graph Pulsed Ingestion Algorithm)
도 3을 참조하면, 싱글 그래프에서 입력 데이터의 스트림을 프로세싱하는 펄스된 인제스천 알고리즘은 t0에서 그래프를 시작하는 단계를 포함한다. 그래프가 시작되면, 그래프는 입력 데이터의 스트림으로부터 입력 데이터의 제 1 펄스를 프로세싱하여 출력 데이터를 생성하고, 에스크로우(즉, 출력은 다운스트림 프로세스들에 즉시 제공되지는 않음)에 저장한다. t1 시간에, 입력 데이터의 제 1 펄스의 종료를 나타내는 펄스-엔딩 지시자(예를 들어, 파일 엔드(end-of-file) 문자)가 입력 데이터의 스트림에 삽입된다. 그래프가 시간 t1 에서 펄스-엔딩 지시자를 만날 때, 입력 데이터 스트림으로부터 새로운 데이터를 인제스트(ingest) 하는 것을 중단한다. 시간 t1에서 시간 t2 까지, 그래프는 t1에서 이미 프로세싱중인 모든 데이터의 프로세싱을 종료한다(즉, 그래프는 '정지(quiesce)'되도록 허용된다). 시간 t1 과 t2 사이의 정지 기간은 도 3의 프로세싱 로드에서 램프 다운(ramp down)(370)으로써 도시된다.
시간 t2 에서, 그래프가 정지되면, 컴퓨팅 시스템은 모든 지속적인 데이터, 스트리밍 입력 데이터(예를 들어, 현재 위치)의 상태를 포함하는 체크 포인트를 기록하기 시작하고, 출력 데이터의 상태가 지속성있는 저장소에 기록된다. 시간 t3 에서, 체크 포인트를 지속성있는 저장소에 기록하는 것이 완료되면, 입력 데이터의 제 1 펄스와 연관된 에스크로우된(escrowed) 출력 데이터가 다운스트림 프로세스들로 릴리스(release)된다. 그 다음, 시간 t4 에서, 그래프는 재시작되고 입력 데이터의 스트림으로부터 입력 데이터의 제 2 펄스를 프로세싱하기 시작한다(전술한 프로시져에 따라).
일반적으로 그래프가 체크 포인트를 기록하기 전에 정지되도록 허용되면 그래프가 실행 중이지 않기 때문에 프로세스 상태, 메시지들 그리고 일시성(transients)은 시스템에 존재하지 않는다. 일부 예들에서, 입력 데이터의 모든 펄스가 매우 작기 때문에(예를 들어, 초당 100 펄스) 그래프를 셧다운(shut down)과 재시작 하는 것과 연관된 오버 헤드가 거의 없다. 이는 충분히 짧은 응답 지연을 필요로 하는 애플리케이션들에 이상적인 높은 빈도의 체크 포인트팅(예를 들어, 10ms 체크 포인트 간격)결과를 가져올 수 있다. 예를 들어, 어떤 애플리케이션들은 재시작(즉, 그래프들을 셧다운하고, 프로세스들을 정상적으로 엑시트하는 것을 대기하고, 다시 시작하는 것) 오버 헤드가 10ms 보다 충분히 적어야 한다(예를 들어, 1ms 미만). 또한, 체크 포인트를 기록하는데 필요한 시간은 체크 포인트 간격(예를 들어, 1ms)과 비교할 때 또한 작다. 일부 예들에서, 재시작 타이밍 요구 사항은 특정 시작 관련 프로세싱 결과를 저장하고 빠른 시작을 위해 입력 데이터의 후속 펄스에 대한 결과들을 재사용(다시 계산하는 것 보다는)함으로써 달성된다. 일부 예들에서, 저장된 결과들은 낮은 빈도(예를 들어, 매 10 초마다 또는 매분 마다)로 다시 계산된다.
도 4 를 참조하면, 복구 프로시져의 예에서, 컴퓨팅 시스템은 싱글 그래프를(전술 한 바와 같이) 사용하여 입력 데이터의 제 1 펄스를 프로세싱하고 시간 t3 에서 제 1 체크 포인트를 저장한다. 시간 t4 에서, 시스템은 그래프를 사용하여 입력 데이터의 제 2 펄스를 프로세싱하기 시작한다. 그 후, 시간 t5 에서, 제 2 펄스의 프로세싱에서 장애(failure)가 발생한다. 장애로 인해, 시스템은 시간 t6 에서 모든 계산(예를 들어, 장애하지 않은 임의의 컴퓨팅 노드들에서 프로세싱을 중단함)을 셧 다운 하고 제 1 체크 포인트를 사용하여 데이터의 제 1 펄스(즉, 시간 t2 에서) 프로세싱 완료시점에서 시스템의 상태로 입력 및 출력 데이터의 상태를 복원한다. 그렇게 하기 위해, 시스템은 입력 데이터의 제 2 펄스를 초기 상태 (즉, 시간 t4)로 리와인드하고(rewinds), 입력 데이터의 제 2 펄스에 대한 에스크로우된 출력 데이터를 폐기(discard)된다. 시간 t7 에서 체크 포인트는 데이터의 제 1 펄스 프로세싱 완료시점에서의 상태로 시스템의 지속적인 데이터를 복원하는 데 사용된다.
시간 t8 에서, 시스템이 데이터의 제 1 펄스 프로세싱 완료시점에서의 자신의 상태로 완전히 복원되면, 그래프가 다시 시작되고 입력 데이터의 제 2 펄스가 재프로세싱(re-processing)되기 시작한다. 도 4에서, 입력 데이터의 제 2 펄스의 리프로세싱은 계속된다.
4.4.2 다수의 그래프 펄스된 인제스천 알고리즘(Multiple Graph Pulsed Ingestion Algorithm)
도 5 를 참조하면, 일부 예들에서, 시스템이 다수의 그래프들(예를 들어, 다수의 인제스천 그래프들)의 컬렉션(collection)을 포함하는 경우, 시스템은 그래프들의 컬렉션(collection)을 통해 동기적(in synchrony)으로 데이터의 펄스들을 프로세싱하도록 구성된다.
특히, 다수의 그래프들의 컬렉션(collection)에서 적어도 하나의 입력 데이터 스트림들을 프로세싱하기 위한 펄스된 인제스천 알고리즘은 시간 t0 에서 컬렉션 내의 모든 그래프들을 시작하는 것을 포함한다. 일단 시작되면, 각각의 그래프들은 에스크로우(escrow)(즉, 출력 데이터 스트림들은 다운스트림 프로세스들에 즉시 제공되지 않음)에 저장된 각각의 적어도 하나의 출력 데이터 스트림을 생성하기 위해 입력 데이터의 적어도 하나의 스트림들로부터 입력 데이터의 제 1 펄스를 프로세싱한다. 시간 t1 에서 입력 데이터의 제 1 펄스들의 끝을 식별하는 펄스-엔딩 지시자가 입력 데이터의 스트림들에 삽입된다. 일부 예들에서, 펄스-엔딩 지시자들이 적어도 2개의 입력 데이터 스트림들에 동기식으로 삽입되도록 보장하기 위해 배리어 동기화 오퍼레이션(barrier synchronization operation)이 사용된다. 그래프들이 시간 t1 에서 펄스-엔딩 지시자를 만나면 입력 데이터 스트림들에서 새 데이터 인제스천을 중단(cease)한다. 시간 t1 에서 시간 t2 까지, 그래프들은 시간 t1에서 이미 프로세싱중인 모든 데이터를 프로세싱을 종료한다(즉, 그래프는 '정지'되도록 허용됨). 시간 t1 과 t2 사이의 정지 기간은 도 5 의 프로세싱 로드에서 램프 다운(ramp down)(570)으로 도시된다.
일부 예들에서, 다른 배리어 동기화는 모든 그래프들이 엑시트(exit) 될 때까지 대기하는 데 사용된다. 그래프들이 모두 시간 t2 에서 엑시트(exit)되면, 모든 지속적인 데이터, 스트리밍 입력 데이터의 상태(예를 들어, 현재 위치), 그리고 출력 데이터의 상태가 지속성있는 저장소에 기록되도록 체크 포인트가 기록된다. 시간 t3 에서, 체크 포인트를 지속성 있는 저장소에 기록하는 것을 완료하면, 입력 데이터의 제 1 펄스와 연관된 에스크로우된 출력 데이터 스트림들이 다운스트림 프로세스들로 릴리스된다. 이후, 시간 t4에서, 그래프들은 또 다른 배리어 동기화 오퍼레이션을 이용하여 동기식으로 재시작되고, 입력 데이터의 스트림들로부터 입력 데이터의 제 2 펄스를 프로세싱하기 시작한다(전술된 프로시져에 따라).
4.4.3 증분 및 파이프 라인 체크포인트들(Incremental and Pipelined Checkpoints)
일부 예들에서는, 모든 체크 포인트 오퍼레이션에 대해 지속적인 데이터의 전체 내용을 저장하는 것이, 분(minute) 또는 더 나아가 시간(hour)이 걸릴 수 있으므로, 실용적이지 않지만, 시스템은 최소 일초의 몇 분의 일 이내에 인제스천된 데이터를 사용할 수 있도록 해야 할 수도 있다.
모든 체크 포인트에 대해 저장된 데이터의 양을 줄이는 한 가지 방법은 입력 데이터의 특정 펄스가 프로세싱될 때 지속적인 데이터에 대한 변경 내용을 점진적으로 저널(journal)에 기록하는 것이다. 이렇게 하면 특정 체크 포인트에 대해 기록된 데이터의 양이 입력 데이터의 특정 펄스 프로세싱에서 변경된 데이터 양으로 제한된다. 그렇게 하는 것의 한 가지 장점은 시스템이 체크포인트를 형성하고 저장하기 전에 저널에 대한 엔트리들(지속적인 데이터의 변경들을 나타냄)이 적어도 지속성 있게 저장되는 프로세스에 있다는 것이다. 또한 변경 사항을 저널에 점진적으로 기록하면 변경된 데이터 항목의 '더티 리스트(dirty list)'을 관리하는 오버헤드와 체크 포인트가 만들어지면 그 목록을 보류하는 오버 헤드가 발생하지 않는다. 변경 사항들을 점진적으로 저널에 쓰는 또 다른 이점은 저널 엔트리들에 '체크 포인트 마커(checkpoint marker)'라는 태그를 붙일 수 있다는 것이며, 상이한 펄스들에 대한 저널 엔트리들 간의 경계를 식별하는 데 사용할 수 있다. 체크포인트 마커들(checkpoint markers)을 사용할 때, 시스템은 제 2 펄스 프로세싱을 시작할 수 있지만, 제 1, 이전 펄스들에 대한 저널 엔트리들은 여전히 지속성 있게 저장된다.
도 6 을 참조하면, 증가하는 그리고 파이프라인된 체크 포인트를 갖는 펄스된 인제스천 알고리즘은 시간 t0 에서 그래프들을 시작하는 것을 포함한다. 일단 시작되면, 그래프들은 입력 데이터의 스트림들부터 입력 데이터의 제 1 펄스를 프로세싱하여 에스크로우에 저장되는 적어도 하나의 출력 데이터의 스트림들을 생성한다. 또한 입력 데이터의 제 1 펄스들을 프로세싱하는 동안 발생하는 지속적인 데이터의 변경들은 발생하는 저널의 엔트리들로 비동기식으로 저장된다.
시간 t1 에서, 펄스-엔딩 지시자들은 입력 데이터의 스트림들에 삽입되어 입력 데이터의 제 1 펄스들의 엔드를 지시한다. 그래프들이 시간 t1 에서 펄스-엔딩 지시자를 만나면 입력 데이터 스트림들에서 새로운 데이터 인제스천을 중단한다. 시간 t1 에서 시간 t2 까지, 그래프는 시간 t1에서 이미 프로세싱중인 모든 데이터의 프로세싱을 종료한다(즉, 그래프는 '정지'되도록 허용된다). 시간 t1과 t2 사이의 정지 기간은 도 6 의 프로세싱 부하에서 램프 다운(670)으로 도시된다.
시간 t3 에서, 그래프들이 정지되면, 체크포인트 카운터를 포함하는 체크포인트 레코드가 저널에 기록되고 시스템은 체크포인트 레코드(지속성 있게 모든 지속적인 데이터를 저장하는 것, 스트리밍 입력 데이터의 상태(현재 위치) 및 출력 데이터의 상태)를 지속성 있게 저장하기 시작한다. 시간 t4 에서 체크포인트 레코드가 지속성 있게 저장되기 전에, 그래프가 재시작되고 입력 데이터의 스트림들로부터 입력 데이터의 제 2 펄스들을 프로세싱하기 시작한다. 시간 t5 에서, 시스템은 체크 포인트 레코드를 지속성 있게 저장하고, 입력 데이터의 제 1 펄스들과 연관된 에스크로우된 출력 데이터가 다운 스트림 프로세스들로 릴리스된다. 시스템은 전술 한 알고리즘에 따라 입력 데이터의 제 2 펄스들을 계속 프로세싱한다.
일부 예들에서, 전술한 알고리즘은 다수의 체크 포인트들이 동시에 프로세스될 수 있도록 수정된다. 그렇게 하기 위해, 지속성 있게 상이한 저장된 데이터 세트들은 서로 구별된다. 예를 들어, 에스크로우에 저장된 모든 출력 데이터에는 체크포인트 카운터가 태그로 지정되고, 저널에 기록된 체크포인트 레코드들에는 체크포인트 카운터가 태그된다.
주어진 체크 포인트 n 에 대한 모든 체크 포인트 레코드들이 지속될 때마다, 주어진 체크 포인트는 커밋되고 주어진 체크 포인트의 체크 포인트 카운터로 태그 된 모든 출력 데이터는 에스크로에서 해제된다. 이 접근법에서는, 체크포인트 알고리즘의 후속 반복을 수행하기 전에 체크포인트가 현재 체크 포인트에서 기록 될 때까지 기다리지 않고 이 최종 단계가 체크포인트 알고리즘의 반복과 비동기적으로 수행된다. 상이한 체크포인트 반복들에서 체크포인트 레코드들을 기록하는 것은 중첩되지 않지만, 체크포인트 레코드들을 지속적으로 저장하는 프로세싱은 중첩될 수 있다.
4.4.3.1 증가적인 그리고 파이프라인된 체크포인트들 예시(Incremental and Pipelined Checkpoints Example)
도 7a 를 참조하면, 증가적인 그리고 파이프라인된 체크포인트 접근법의 예시에서, 컴퓨팅 시스템(100)은 입력 흐름(111)으로부터 입력 데이터 스트림(112)을 수신하고, 입력 데이터 스트림(112)을 프로세싱하고, 출력 데이터 스트림을 출력 흐름(131)으로 제공한다. 예를 들어, 컴퓨팅 시스템(100)은, 컴퓨팅 노드(152)에 대해보다 상세히 기술된 바와 같이, 입력 데이터를 분산 방식으로 프로세싱하여 출력 데이터를 생성하는 다수의 컴퓨팅 노드(121)를 포함한다.
오퍼레이션 시에, 컴퓨팅 시스템(100)은 입력 데이터의 스트림으로부터 데이터를 인제스천 그래프들을 사용하여 한 번에 하나 또는 몇 개의 레코드로 인제스천한다. 인제스천된 데이터는 컴퓨팅 시스템(102)의 컴퓨팅 노드들(121)상에서 실행되는 적어도 하나의 데이터 프로세싱 그래프를 사용하여 프로세싱된다. 입력 데이터 스트림(112)은, 모두 펄스 종료 지시자들에 의해 분리된, 입력 데이터의 제 1 펄스(112a), 입력 데이터의 제 2 펄스(112b) 그리고 입력 데이터의 제 3 펄스 (112c)를 포함하는 펄스들로 분할된다. 일부 예들에서, 펄스-엔딩 지시자는 입력 데이터의 기존 또는 고유 구조(예를 들어, 각각의 레코드, 모든 n 개의 레코드 등)에 따라 입력 데이터 스트림(112)에 삽입된다. 일부 예들에서, 시스템은 동적으로 또는 임의로 입력 데이터 스트림(112)에 펄스-엔딩 지시자를 삽입 할 위치를 결정한다. 일부 예들에서, 시스템은 순간 정지 상태 일 때 펄스-엔딩 지시자를 삽입한다. 입력 데이터의 각각의 '펄스'는 입력 데이터 스트림(112) 내의 연속된 데이터 유닛들의 서브 세트를 포함한다. 본 명세서에서 사용 된 바와 같이, '연속된(contiguous)' 데이터 유닛들의 각각의 서브 세트는 입력 데이터 스트림(112) 내의 일부 순서에 따라 순차적(in-sequence)이며 연속된 데이터 유닛들의 임의의 다른 서브 세트와 중첩되지 않는 데이터 유닛들을 포함한다.
일부 예들에서, 펄스들의 크기("체크포인트 간격"이라고도 함)은 빈번한 체크 포인트가 발생하는 성능 저하와 애플리케이션에 필요한 응답 지연(주어진 시간에 전체 체크 포인트가 수행 될 때까지 그래프의 응답이 제공되지 않을 수 있기 때문에 체크포인트 간격으로 제한됨)사이의 트레이드-오프(trade-off)에 따라 결정된다.
도 7b 를 참조하면, 컴퓨팅 시스템(100)이 데이터 스트림의 제 1 펄스(112a)로부터 데이터를 인제스천 할 때, 인제스천된 데이터(122a)(예를 들어, 개별적인 레코드들)는 적어도 하나의 데이터 프로세싱 그래프들에 따라 프로세싱하기 위해 컴퓨팅 노드들(121)에 제공된다. 제 1 펄스(112a)로부터의 인제스천된 데이터(113a)의 복사본은 또한 회복 오퍼레이션이 요구되는 경우 추후 검색을 위해 지속성 있게 저장된다.
컴퓨팅 노드들(121)에 의해 생성된 출력 데이터 스트림(132a)은 출력 흐름(131)으로 제공되지만, 제 1 펄스(112a) 전체가 성공적으로 프로세싱될 때까지 출력 데이터 (132)가 다운 스트림 프로세스(예를 들어, 다운스트림 컴퓨팅 시스템에 구현된 프로세스들 - 도시되지 않음)들에 제공되지 않도록 에스크로우(오픈 스위치(135)에 의해 표시됨)에 유지된다. 일부 예들에서, 출력 데이터의 스트림은 출력 데이터를 그와 연관된 입력 데이터 펄스에 링킹(linking)시키는 고유 지시자와 연관된다.
입력 데이터 스트림(112)의 제 1 펄스(112a)의 프로세싱이 프로세싱됨에 따라, 지속적인 데이터의 상태, 스트리밍 입력들의 상태 그리고 스트리밍 출력들의 상태가 변경된다. 일부 예들에서, 컴퓨팅 시스템(100)은 체크 포인트 프로시져를 수행하며, 이러한 상태 변경들은 휘발성 임시적인 저널(temporary journal)(141)에 기록된다(때때로 비동기 적으로). 임시적인 저널(temporary journal)(141)은 기록된 상태 변경들을 지속성 있는 저널(durable journal)(142)에 비동기식으로 기록한다. 일부 예들에서, 임시적인 저널(141) 그리고 지속성 있는 저널(142)에 저장된 상태 변경들은 또한 출력 데이터의 스트림과 저널된 상태 변경들 모두가 연관된 입력 데이터 펄스에 링크되도록 고유 식별자와 연관된다. 일부 예들에서, 고유 식별자는 "체크포인트 식별자(checkpoint identifier)"라고 불린다.
도 7c 를 참조하면, 전체적인 제 1 펄스(112a)를 인제스천할 때, 컴퓨팅 시스템(100)은 컴퓨팅 시스템(100)에 체크 포인트 프로시져를 수행하도록 시그널(signal)하는 펄스-엔딩 지시자를 만난다. 체크 포인트 프로시져에서, 컴퓨팅 시스템은 데이터를 인제스천하는 것을 중단하고 컴퓨팅 노드들(121)이 정지(quiesce)하도록(즉, 컴퓨팅 시스템(100)에 존재하는 제 1 펄스(112a)의 임의의 프로세싱되지 않은 레코드를 프로세싱 완료)하게한다. 이 시간 동안, 임시 저널(141)은 레코드된 상태 변경들을 지속성 있는 저널(142)에 비동기적으로 기록하는 것을 계속한다. 결국, 컴퓨팅 노드들(121)이 정지되면, 컴퓨팅 시스템(100)은 제 1 펄스(112a)와 관련된 상태 변경들을 임시 저널(141)에 기록하는 것을 완료한다.
컴퓨팅 시스템이 정지하게 허용함으로써, 데이터 프로세싱 그래프가 그 시간에 실행되지 않기 때문에, 시스템이 제 1 펄스(112a)와 관련된 상태 변경들을 임시 저널(141)에 레코딩(recording) 완료 할 때, 프로세스 상태, 메시지들 또는 일시성(transients)이 컴퓨팅 시스템에 존재하지 않음을 보증한다
도 7d 를 참조하면, 컴퓨팅 시스템(100)은, 임시 저널(141)에 레코드된 제 1 펄스 (112a)에 대한 체크 포인트와 함께, 제 2 데이터 펄스(112b)의 프로세싱을 시작한다. 이렇게 하기 위해, 컴퓨팅 시스템(100)은 데이터 스트림의 제 2 펄스 (112b)로부터 데이터를 인제스천하고, 적어도 하나의 데이터 프로세싱 그래프들에 따라 프로세싱하기 위해 컴퓨팅 노드들(121)에 인제스천된 데이터를 제공한다. 제 2 펄스 (112b)로부터의 인제스천된 데이터(113b)의 복사본은 또한 회복 오퍼레이션이 요구되는 경우 추후 검색을 위해 지속적인 데이터에 저장된다.
데이터 스트림의 제 2 펄스(112b)의 프로세싱이 진행됨에 따라, 지속적인 데이터의 상태 스트리밍 입력들의 상태와 스트리밍 출력들의 상태가 변경된다. 제 2 펄스(112b)에 대한 체크 포인트 프로시져가 수행되어 상태 변경들이 임시 저널 (141)에 기록된다. 도 7d 에 도시된 시간에서, 임시 저널(141)은 제 1 펄스 (112a)에 대한 레코드된 상태 변경들을 지속성 있는 저널(142)에 비동기 적으로 기록하는것을 완료하지 않고, 임시 저널(141)은 제 1 펄스(112a)와 제 2 펄스(112b)(각각의 고유 한 체크 포인트 식별자에 의해 식별됨) 모두에 대해 레코드된 상태 변경들을 포함한다. 일부 예들에서, 입력 데이터의 제 1, 이전 펄스와 연관된 저널 엔트리들이 지속성 있게 되기전에, 입력 데이터의 제 2 펄스와 연관된 저널 엔트리들이 기록되도록 허용함으로써, 컴퓨팅 시스템은 체크 포인트 레코드들이 지속성을 갖기 전에(이는 완전한 디스크 회전의 순서 상 대기를 필요로 함) 체크 포인트들, 그리고 그 결과 펄스들이 반복 될 수 있기 때문에 펄스 간격을 1 디스크 회전(약 10ms) 미만으로 줄일 수 있다.
임시 저널(141)이 제 1 펄스(112a)에 대한 레코드된 상태 변경들을 비동기적으로 기록하는 것을 완료하지 않는 한 출력 데이터의 제 1 스트림(132a)은 에스크로우 된 상태로 유지된다.
컴퓨팅 노드들(121)에 의해 생성된 출력 데이터(132b)의 제 2 스트림은 출력 흐름(131)으로 제공되고, 출력 데이터(132b)의 제 2 스트림이 두 번째 제 1 펄스(112b)가 성공적으로 프로세싱될 때까지 다운 스트림 프로세스에 제공되지 않도록 에스크로우(출력 데이터(132a)의 제 1 스트림의 뒤) 상태로 유지된다.
도 7e를 참조하면, 임시적인 저널(141)이 제 1 펄스(112a)에 대한 레코드된 상태(즉, 체크포인트는 커밋됨)를 지속성 있는 저널(142)에 기록을 완료하면, 스위치(135)는 폐쇄되고 출력 데이터 (132a)의 제 1 스트림은 다운 스트림 프로세스로 릴리즈된다. 지속성 있는 저널(142)에 저장된 제 1 펄스(112a)에 대해 레코드된 상태 변화는 제 1 펄스(112a)의 프로세싱 완료시점에서 컴퓨팅 시스템 (100)의 상태를 나타내며 집합적으로 제 1 체크 포인트로 지칭된다. 지속적인 저장소에 기록된 제 1 체크 포인트에 의해, 제 1 펄스(112a)와 연관된 상태 변경들은 임시 저널(141)에 더 이상 존재하지 않는다.
도 7f 를 참조하면, 출력 데이터(132b)의 제 2 스트림이 에스크로우 상태로 유지되도록 스위치(135)가 다시 열린다(reopend). 컴퓨팅 시스템(100)은 출력 데이터(132b)의 제 2 스트림에 더하기 위해 데이터의 제 2 펄스(112b)를 계속해서 인제스천(ingest)하고 프로세싱(process)한다. 제 1 체크 포인트가 지속성 있는 저널(142)에 기록된 상태에서, 임시 저널(141)은 제 2 펄스(112b)에 대한 레코드된 상태 변경들을 포함하는 제 2 체크 포인트를 지속성 있는 저널(142)에 비동기적으로(asynchronously) 기록하기 시작한다.
도 7g 를 참조하면, 제 2 펄스(112b)의 프로세싱 동안의 어떤 시점에서, 에러가 발생하고 복구 프로시져(recovery procedure)가 수행된다. 일반적으로, 에러 복구 프로시져는 컴퓨팅 시스템의 상태를 제 1 체크 포인트에서의 상태(즉, 제 1 펄스 (112a)의 프로세싱 완료시점의 상태)로 복귀시킨다. 예를 들어, 복구 프로시져에서 지속적인 데이터의 상태, 스트리밍 입력들의 상태 및 스트리밍 출력들의 상태가 복원(restore)된다. 이는 출력 데이터(132b)의 제 2 스트림을 클리어(clear)하고 원래의 제 2 펄스(112b)를 재구성(reconstruct)하기 위해 제 2 펄스(112b)에 대한 인제스천된 데이터(113b)의 복사본을 제 2 펄스(112b)의 프로세싱되지 않은 부분(portion)과 결합하는 것을 포함한다. 지속성 있는 저널(142) 내의 상태 정보는 컴퓨팅 시스템(100)의 상태(즉, 지속적인 데이터의 상태, 스트리밍 입력들의 상태 그리고 스트리밍 출력들의 상태)를 제 1 체크 포인트에 의해 표현된 상태로 복원하는데 사용된다.
복구 프로시져가 완료되면, 컴퓨팅 시스템(100)은 에러가 발생하지 않았던 것처럼 제 2 펄스(112b)를 프로세싱하기 시작한다.
4.5 분산된 저널(Distributed Journal)
전술한 컴퓨팅 시스템에서, 상태 변경들을 포함하는 체크 포인트 레코드들은 싱글 글로벌 저널(single global journal)에 지속성이 있다. 일부 예들에서, 싱글 글로벌 저널을 사용하면 시스템 확장성(scalability)이 제한 될 수 있다. 도 8 을 참조하면, 보다 확장성 있는 접근법에서, 컴퓨팅 시스템(100)은 체크 포인트들을 저장하기 위해 분산된 저널(distributed journal)을 사용한다. 예를 들어, 컴퓨팅 노드들(121) 각각은 그 자신의 개별적인 임시 저널(141)과 지속성 있는 저널(142)을 유지한다.
일부 예들에서, 컴퓨팅 노드들(121)에 의해 유지되는 개별적인 저널들은 저널 프래그먼트들(journal fragments)으로 지칭되고, 각 저널 프래그먼트들은 지속적인 데이터의 상이한 프래그먼트에 대응한다. 예를 들어, 컴퓨팅 시스템(100)의 각각의 컴퓨팅 노드(121)는 컴퓨팅 노드(121)와 연관된 데이터를 커버(cover)하는 저널 프래그먼트와 연관된다. 컴퓨팅 시스템(100)이 데이터 아이템을 변경할 때마다, 데이터 아이템과 관련된 저널 프래그먼트(즉, 데이터 아이템을 저장하는 컴퓨팅 노드(121)와 연관된 저널 프래그먼트)에 저널 엔트리를 기록한다.
4.5.1 스냅샷팅 ( Snapshotting )
일부 예들에서, 잠재적인 문제점 중 하나는 모든 저널 프래그먼트들의 전체 사이즈가 제한 없이 증가하여, 제한 없는 양의 저장소를 사용한다는 것이다. 더 나아가, 시스템이 전체적으로 저널 프래그먼트들을 리플레이(replay)해야하기 때문에 장애로부터 복구하는 시간은 또한 제한 없이 증가 할 것이다. 이 잠재적인 문제를 해결하려면 저널 프래그먼트에 대응하는 데이터를 '스냅샷팅(Snapshotting)'한 다음 스냅샷 프로세스(snapshot process)를 시작하기 이전에 생성된 저널 프래그먼트의 일부들을 폐기해야 한다. 장애 발생시, 스냅 샷을 로딩(loading)한 다음 스냅샷으로부터의 데이터에 저널을 적용(apply)함으로써 컴퓨팅 시스템은 복구 될 수 있다. 일부 구현들에서는, 스냅샷들이 데이터베이스 체크 포인트들과 특정 속성들을 공유한다.
스냅샷(들)을 저장하는 하나의 접근법에서, 각각의 스냅샷은 연관된 시작 시간과 그리고 연관된 종료 시간을 갖는다. 스냅샷 내의 지속적인 데이터의 특정 부분(portion)의 상태는 시작 그리고 종료 시간 사이에 존재하는 것으로 알려져 있다. 일부 예들에서, 스냅샷들은 스냅샷 프래그먼트들로 분배되며 각각의 스냅샷 프래그먼트들은 주어진 저널 프래그먼트에 연결된다. 일반적으로, 시스템은 시스템이 셧 다운(shut down)될 때까지 각각의 데이터 프래그먼트에 대한 스냅샷 프래그먼트를 반복적으로 생성한다. 이렇게 하기 위해, 각각의 데이터 프래그먼트에 대해, 시스템은 스냅샷 프래그먼트를 생성하고 '보류 중(pending)'으로 태그를 지정한다. 일부 예들에서, 스냅샷 프래그먼트들은 다수의 서버들에 복제(replicated)된다. 컴퓨팅 시스템은 스냅샷 프래그먼트의 시작 시간을 현재 프로세싱 체크 포인트에 대한 고유의 체크 포인트 식별자(예를 들어, 체크 포인트 카운터)의 현재 값(current value)으로 설정한다. 보류중인 상태의 스냅샷과 고유의 체크 포인트 식별자와 연관된 스냅샷은 '시작된' 것으로 고려된다.
데이터 프래그먼트와 연관된 지속적인 데이터가 스캔되고, 현재 데이터 값(즉, 과거의 스냅샷 프래그먼트 이후 아직 저널에 기록되지 않은 데이터 값들)이 데이터 프래그먼트와 연관된 스냅샷 프래그먼트에 기록된다. 일부 예들에서, 스냅샷에 기록된 현재 데이터 값은 현재 데이터 값이 유효한 타임스탬프(timestamp)와 연관된다. 시스템은 스냅샷 프래그먼트가 지속성을 갖기를 기다린 다음 현재 저널 프래그먼트가 커밋하도록 대기하고. 스냅샷 프래그먼트에 커밋된 데이터만 포함되도록 개런티(guarantee)한다. 그런 다음 스냅샷 프래그먼트의 종료(end)시간을 고유한 체크포인트 식별자의 현재 값으로 설정하며, 이 값은 스냅샷 프래그먼트의 '종료(end)'으로 고려된다. 스냅샷 프래그먼트가 파이널(final)으로 표시되고 이전 과거의 스냅샷 프래그먼트가 클리어(clear)된다. 일부 예들에서, 저널은 스냅샷 프래그먼트의 시작 전에 고유한 체크 포인트 식별자들과 연관된 모든 저널 엔트리들이 무시되도록 보장하기 위해 전방 절단하며(forward-truncated), 그 결과 저장 공간(storage space)의 회수(reclamation)를 가져온다.
컴퓨팅 시스템(100)에서의 장애(failure)시점에서, 시스템은 저널 프래그먼트과 연관된 지속성 있는 저장소를 스냅샷의 '종료(end)'보다 크거나 동일한 커밋된 체크 포인트로 복원 할 수 있다. 일부 예들에서, 시스템(100)은 먼저 스냅샷 프레그먼트의 내용을 지속성 있는 저장소에 로딩(loading)함으로써 이를 수행한다. 그 다음, 시스템(100)은 타임스탬프에서 유효한 데이터 아이템들의 버전들에 대응하는 저널 프래그먼트 내의 식별된 엔트리들을 식별하기 위해서 스냅샷 프래그먼트 내의 데이터 아이템들 그리고 그들의 연관된 타임스탬프들을 조사한다. 시스템(100)은 원하는 체크 포인트 마커(check point marker)가 발견 될 때까지(롤링 포워드(rolling forward)는 저널 프래그먼트의 식별된 엔트리들에서 시작됨), 스냅샷 프래그먼트에 아직 반영되지 않은 저널 프래그먼트로부터의 임의의 업데이트를 재실행(redoing)함으로써 스냅 샷 프래그먼트로부터 데이터 아이템들의 값들을 롤링함으로써 지속성 있는 저장소를 커미트된 체크 포인트로 복원한다. 저널 프래그먼트와 연관된 지속성 있는 저장소가 장애(failure)를 견디면, 저널 프래그먼트를 역순으로 스캐닝하고, 스냅샷 프래그먼트 내의 값들을 시작하고, 그리고 요구되는 체크포인트와 연관된 스테이지에서 지속성 있는 저장소가 마주칠때까지 모든 변경들을 실행하지 않음으로써, 시스템은 스냅 샷의 '끝'보다 크거나 같은 원하는 모든 체크 포인트로로 롤백 할 수 있다.
일부 예들에서, 저널 프래그먼트들은 각각의 체크 포인트에 대해 별개의 파일로 형성된다. 시스템은 과거의 체크포인트들과 관련된(pertaining) 파일들을 제거함으로써 저널을 전방 절단(forward truncate)할 수 있다. 일부 예들에서, 컴퓨팅 시스템(100)은 다수의 체크 포인트들을 싱글 파일로 패키징(package)한다. 따라서 각각의 파일에는 체크포인트들의 범위(range)가 포함된다. 시스템이 저널을 전방 절단하면, 절단(truncation) 포인트 이전에 가장 높은 체크포인트를 가진 파일들을 삭제한다. 복구 시간에 시스템은 절단 포인트 앞에 있는 모든 저널 엔트리들을 무시한다. 이 프로세스는 주어진 파일의 각각의 체크 포인트 레코드의 파일-오프셋(file-offset)을 보조 파일(auxiliary file)에 레코딩함으로써 신속하게 될 수 있다.
전술한 저널 구조가 주어지면, 컴퓨팅 시스템은 먼저 컴퓨팅 시스템에서 모든 프로세싱을 중지함으로써 가장 최근에 커밋된 체크 포인트를 복구 할 수 있다. 실패한 각각의 컴퓨팅 노드에 대해, 새로운 컴퓨팅 노드가 시작된다(상이한 물리적 노드에서 가능). 컴퓨팅 노드와 연관된 저널 프래그먼트(들) 그리고 스냅샷 프래그먼트(들)의 적어도 하나의 복제본(replica)이 찾아지고 그리고 커밋된 체크 포인트로 복원하는 데 사용된다(전술한 것처럼). 생존하는 모든 컴퓨팅 노드는 그들의 지속적인 데이터를 커밋된 체크 포인트로 롤백(roll back)하고 에스크로우된 데이터는 클리어된다. 컴퓨팅 시스템에 대한 입력 데이터는 이전의 펄스 종료 지시자로 롤백 되고 프로세싱이 재시작된다.
전술한 복구 프로시져을 기반으로, 시스템이 프로세싱을 재시작하기 전에, 가장 최근에 커밋된 작업 유닛의 상태로 모든 지속적인 데이터를 복원한 후 후속 작업 유닛으로 다시 시작한다.
회복 가능한 프로세싱 기술들의 다양한 다른 실시 예들이 본 명세서에 기술된 기술들과 조합하여 사용될 수 있으며, 이는 U.S. 미국 특허 제 6,584,581 호, 미국 특허 제 9,354,981 호에 기재되어 있으며, 이들 각각은 본 명세서에 참고로 인용된다.
4.6 복제(Replication)
전술한 접근법은 복구 가능성을 제공하지만 항상 높은 가용성 또는 결함 허용(fault tolerance)를 제공하지는 않는다. 예를 들어, 장애가 발생한 후에는, 시스템이 장애가 난 서버들과 연관된 지속적인 데이터를 스냅 샷으로부터 다시 로드(reload) 한 다음 원하는 체크 포인트까지 모든 변경 사항들을 다시 적용해야 할 필요성이 있으며, 이 프로세스는 몇 시간이 걸리며, 이 프로세스 동안 시스템을 사용할 수 없다.
일부 예들에서, 고 가용성 및 결함 허용이 장애가 모든 복제본들을 파괴하지 않을것 같은 지속적인 데이터(예를 들어, 데이터베이스 샤딩(sharding) 또는 파티셔닝 기술들을 사용)를 복제함(replicate)으로써 달성된다. 예를 들어, 하나의 충돌(crash)로 모든 복제본들(replicas)을 파괴 할 수 없도록 각각의 데이터 조각(piece)을 다른 물리적 노드에 복제 할 수 있다. 이렇게 함으로써 복제본들이 상이한 전원 공급 장치들 또는 상이한 데이터 센터들의 노드들 상에 있음을 보장함으로써 더 높은 정도의 탄력성이라는 결과를 가져온다. 일부 상황들에서, 복제 접근법들은 또한 체크 포인트 그리고 스냅샷 데이터를 지속적으로 저장할 필요성을 제거(obviate)한다.
하나의 접근법에서, 지속적인 데이터의 각각의 데이터 아이템(예를 들어, 트랜잭션 데이터 저장소 테이블의 행(row), 공유된 데이터 인스턴스)은 데이터 아이템의 마스터 복제본과 데이터 아이템의 적어도 하나의 백업 복제본들이 존재하도록 복제된다. 이 접근법을 구현하기 위해, 먼저 체크포인트 카운터가 0으로 초기화된다. 컴퓨팅 시스템에서 작동하는 모든 그래프들이 시작된다. 지속적인 데이터의 데이터 아이템이 변경 될 때마다, 체크 포인트 카운터로 태그 지정된 복제 메시지가 해당 복제본에 비동기적으로 전송된다. 컴퓨팅 시스템에 의해 생성 된 모든 출력 데이터는 에스크로우 상태로 유지되고 체크 포인트 카운터로 태그 지정되며, 즉시 표시되지 않는다.
결과적으로 모든 스트리밍 입력들에 대해 펄스-엔딩 지시자가 수신되어, 컴퓨팅 시스템에서 실행중인 모든 그래프들이 완전히 종료된다. 모든 그래프들이 종료되면 체크포인트 카운터가 증가한다. 컴퓨팅 시스템의 모든 그래프들은 다시 시작된다.
주어진 체크 포인트에 대한 모든 복제 메시지가 수신되면, 체크 포인트는 해당 체크 포인트 카운터 값으로 태그 지정된 출력 데이터가 에스크로우에서 해제된다. 따라서, 이 구성표에서, 복제는 저널링을 정확하게 완전히 대체한다.
전술한 복제 체계(replication scheme)를 사용할 때 장애(failure)로부터 복구하기 위해, 모든 프로세싱이 먼저 중지된다. 컴퓨팅 노드의 장애로 인해 손실된 마스터 복제본들(replicas)의 경우, 마스터 복제본으로 작용할 백업 복제본들 중 하나를 선택한다. 그런 다음, 각각의 복제본에 대해, 복제본의 상태가 마지막 커밋된 체크 포인트로 복구된다. 에스크로우된 출력 데이터는 지워지고 모든 입력 데이터는 마지막 펄스 종료 지시자가 삽입된 지점으로 복원된다. 그런 다음 위에서 설명한 방법을 사용하여 프로세싱이 재개된다.
일부 예들에서, 마스터 복제본(master replica)은 먼저 서버들의 리스트를 산출(yield)하기 위해 해시 될 수 있는 모든 데이터 아이템에 프라이머리 키(primary key)를 포함시킴으로써, 세트에서 적어도 하나의 서버가 장애를 견뎌 낼 수 있도록 선택된다. 리스트의 제 1 서버가 마스터 복제본으로 선택된다. 모든 다른것들은 슬레이브들(slaves)이다. 컴퓨팅 노드에 장애가 발생하면, 시스템은 더 이상 작동하지 않는 것으로 표시된다. 컴퓨팅이 복원되면, 시스템은 이를 다시 작동 가능으로 마크한다.
일부 예들에서, 본 명세서에서 기술된 복제 기술들의 핵심 요구 사항은 장애(failure)가 발생하고 복구 오퍼레이션이 필요할 때 복제본들을 커밋된 체크 포인트로 롤백 할 수 있다는 것이다. 이 요구 사항을 만족하는 하나의 복제 기술은 다음 알고리즘에 따라 오퍼레이션한다. 시스템이 데이터 아이템을 변경하면, 데이터 아이템에 대한 새로운 값에 대한 복제 메시지를 전송한다. 컴퓨팅 노드가 복제 메시지를 수신하면, 대기열(queue)에 넣고 타겟 복제본에 비동기적으로 적용한다. 일부 예들에서, 시스템은 복제 메시지를 데이터 아이템에 적용 할 때, 변경 사항을 실행 취소 할 수 있는 롤백 엔트리를 생성한다. 롤백 엔트리는 장애 이후 롤백 프로세싱에 사용된다. 일부 예들에서 롤백 엔트리들은 연관된 고유한 체크 포인트 지시자로 태그가 지정된다. 또는 시스템은 다수의 버전들의 데이터 아이템을 메모리에 보관한다.
장애가 발생한 이후에는, 살아있는 각각의 서버가 다음 프로시져를 수행하여 체크포인트 상태로 회복한다. 먼저 복구 포인트 다음에 고유한 체크포인트 지시자가 태그되지 않은 모든 프로세싱되지 않은 복제 메시지들이 프로세싱된다. 그런 다음 복구 지점 다음에 체크 포인트 생성 태그된 모든 롤백 엔트리들이 수신의 역순(reverse-order)으로 적용된다. 모든 롤백 엔트리들을 적용하면, 모든 데이터가 원하는 복구 지점에 해당하는 상태가 된다. 작업량은 롤백을 필요로하는 세대들(generations)동안 변경된 데이터의 양에 비례하므로 시스템에 서브-세컨드(sub-second) 인제스천 펄스가 있을 경우 시스템이 서브-세컨드 복구를 달성 할 수 있다는 전제가 있다.
결국 장애가 발생한 서버는 서비스로 복원된다(또는 대체가 온라인 상태가 됨). 그런 다음 복제 시스템은 장애가 발생한 서버로 데이터를 복제하고, 가능하면, 해당 서버의 일부 또는 모든 데이터의 '마스터' 상태를 복원한다.
4.7 복제 및 저널링 결합 (Combined Replication and Journaling )
일부 접근 방식들에서는, 복제와 저널링이 모두 컴퓨팅 시스템에 사용된다. 예를 들어, 복제는 고 가용성(high availability)과 내결함성(fault tolerance)을 달성하는 데 사용되지만 너무 많은 서버의 동시 실패(예를 들어, 전체 데이터 센터로의 전력 손실 또는 냉각으로 인한 모든 것)로 인해 복구 가능성이 없는 데이터가 지속적으로 손실되는 치명적인 장애 모드가 있다. 저널링은 디스크 드라이브들(disk drives)과 같은 지속성이 뛰어난 저장소에 복구 정보를 저장함으로써 이러한 장애들(failures)을 보호(gurad)하기 위한 복제에도 추가적으로 사용된다. 이러한 접근법에서, 저널들의 사용은 재해 복구의 한 형태이며 상당한 다운 타임을 초래할 수 있다.
일례에서, 결합된 복제 그리고 저널링은 저널에서 수행된 다음 복제 프로시져를 수행한다. 예를 들어, 컴퓨팅 시스템 저널들은 데이터 아이템들이 발생하는 지점 (즉, 마스터 복제본)으로 변경 한 다음 다수의 디바이스들에 저널을 복제한다. 이러한 유형의 접근법은 파일들에 기록된 모든 것을 복제하도록 구성된 HDFS (Hadoop File System)에서 사용할 수 있다. 일부 예들에서, 이 접근법의 다운사이드는 모든 데이터 아이템 업데이트가 네트워크 트래픽의 두 가지 웨이브들을 초래한다는 것이다(하나는 데이터 복제, 하나는 저널 복제). 또 다른 예에서, 결합된 저널링과 복제는 복제 이후 저널 프로시져에서 수행된다. 예를 들어, 보다 일반적인 파일 시스템에서, 컴퓨팅 시스템은 복제 포인트들에서 원격으로 발생하는 포인트에서 변경 사항들을 저널 할 수 있다. 저널은 복제본과 함께 배치(co-locate)되기 때문에 시스템이 데이터를 복제 할 때 네트워크 트래픽의 하나의 웨이브만 포함된다. 전술한 두 가지 결합된 저널링과 복제 예제들은 본질적으로 네트워크 트래픽의 차이점을 제외하고는 동일하다.
디스크에 기록하는데 소요되는 지연으로 인해, 컴퓨팅 시스템은 주어진 체크 포인트에 대해 복제 - 수준 지속성과 저널 - 수준 지속성의 두 가지 수준의 지속성을 갖게된다. 복제 - 수준의 지속성이 멀티 - 노드 장애들을 개런티할 수는 없다. 이러한 구분은 시스템이 에스크로우로부터 데이터를 릴리즈하는 시점에 영향을 미칠 수 있다. 시스템이 복제 수준 지속성을 갖는 시점에서 시스템이 에스크로로부터 나가는 데이터를 릴리스하면, 시스템은 지연을 줄이고 펄스들의 빈도를 높일 수 있다. 그렇게함으로써 단점은 치명적인 장애가 발생하면 다른 애플리케이션들이 롤백 할 데이터를 '볼 수 있다' 라는 것이다. 치명적인 장애의(희망적으로) 희소성을 감안할 때 이는 합당한 트레이드오프(tradeoff) 일 수 있다. 그러나 보수적인 선택은 저널-수준의 지속성을 기다리는 것이다.
4.8 트랜잭션 데이터 저장소와의 상호 작용 (Interaction with Transactional Data Store)
도 9a를 참조하면, 몇몇 예들에서 적어도 2개의 컴퓨팅 시스템(100)은 전술한 저널링 기술들을 사용하고 트랜잭션 데이터 저장소(151)와 상호 작용한다. 트랜잭션 데이터 저장소(151)는 트랜잭션들의 ACID(원자성, 일관성, 격리 및 지속성) 특성들을 독립적으로 개런티한다. 일부 예들에서, 트랜잭션 데이터 저장소 (151)의 이러한 속성은 그것이 존재하는 체크포인트가 장애로인해 롤백된 경우에도 트랜잭션 데이터 저장소 트랜잭션을 지속성 있게 만들 수 있기 때문에 체크포인트 메커니즘을 파괴 할 가능성이 있다.
이 문제를 해결하기 위해, 트랜잭션 데이터 저장소(151)의 커밋 프로토콜이 수정되어 "D"로부터 “ACI”가 분리된다. 즉, 트랜잭션 데이터 저장소 트랜잭션이 커밋될 때 원자성, 일관성 및 격리를 개런티하지만 지속성은 보장하지 않는다. 수정된 커밋 프로토콜에서, 체크포인트가 커밋되고 지속성이 될 때, 지속성이 발생한다. 일부 컴퓨팅 시스템에서는, 이러한 분리가 금지되지만 본 명세서에서 기술된 컴퓨팅 시스템에서는 체크 포인트가 커밋되지 않으면 트랜잭션 데이터 저장소 커밋의 모든 증거가 롤백 중에 삭제되기 때문에 이러한 분리가 허용된다. 특히, 참여된 모든 응답들은 에스크로우에 유지되어 롤백 중에 폐기(discard)된다.
도 9a 에서, 제 1 데이터 펄스들(112a)와 관련된 체크포인트들이 아직 지속성 있지 않기 때문에 제 1 데이터 펄스(112a)로부터 생성된 출력 데이터 스트림(132a)은 에스크로우에서 유지되며, 제 1 데이터 펄스(112a)와 관련된 트랜잭션 데이터 저장 트랜잭션들은 트랜잭션 데이터 저장소(151)에 아직 커밋되지 않는다. 도 9b를 참조하면, 제 1 데이터 펄스(112a)와 관련된 체크 포인트들이 지속성 있게 되면, 제 1 데이터 펄스(112a)와 관련된 트랜잭션 데이터 저장 트랜잭션들은 트랜잭션 데이터 저장소(151)에 커밋되고 출력 데이터 스트림들(132a)은 에스크로우부터 릴리즈된다.
4.9 체크포인트 트리거링 (Checkpoint Triggering)
전술 한 예들에서, 체크 포인트들의 트리거링은 시간 기반(예를 들어, 체크 포인트들이 주기적으로 트리거됨)이다. 그러나 체크포인트들의 트리거링(triggering)은 시간 기반 일 필요는 없다. 일부 예들에서, 체크포인트는 리소스 제한에 따라 트리거 된다. 예를 들어, 큐잉 시스템(queuing system)은 수신 된 메시지들이 커밋되기 전에 제한된 수의 레코드만 수신하도록 허용 할 수 있다. 따라서, 이 경우 시스템은 특정된 펄스 간격에 관계없이 이 한계에 도달하거나 가까이 접근하게되면 체크 포인트를 트리거 해야한다.
4.10 비-체크포인트 애플리케이션들 그리고 데이터와의 상호 작용 (Interaction with Non- Checkpointed Applications and Data)
전술한 체크포인트 알고리즘 아래에서 모든 애플리케이션들이 작동 할 수 있거나 작동해야 하는 것은 아니다. 예를 들어, 일부 애플리케이션들은 너무 조잡한(coarse) 시간 정밀도(granularity)(예를 들어: 몇 시간 동안 실행되는 배치 그래프)에서 작동한다. 다른 애플리케이션들은 너무 세밀한 시간 정밀도(예컨대, 체크 포인트 간격보다 짧은 요구되는 응답 시간을 갖는 서비스)로 동작 할 수 있다. 일부 예들에서, 본 명세서에서 기술된 접근법들은 체크 포인트가 아닌 애플리케이션들과 데이터와 상호 작용하는 "체크 포인트 그룹(checkpoint group)"의 개념을 사용한다.
4.10.1 체크포인트 그룹들 (Checkpoint Groups)
매우 일반적으로, 체크 포인트 그룹은 동일한 펄스 스케쥴에서 체크포인트된 지속적인 데이터와 연관된 그래프 세트이다. 상이한 애플리케이션들의 시간/ 프로세싱 양이 상이한 경우 시스템에 다수의 체크 포인트 그룹이 포함될 수 있다. 예를 들어, 시스템은 효율성을 위해 상대적으로 큰(예를 들어, 100 밀리세컨드) 체크 포인트 간격을 필요로 하는 다량의 수신 데이터(예를 들어, 서버 클러스터에서 100 코어들에 의해 프로세싱되는 초당 100 밀리언 레코드들)를 가진 하나의 체크 포인트 그룹과, 응답 시간을 최적화하기 위해 선택되는 10 밀리세컨드(millisecond) 체크 포인트를 가진 소량의 수신 데이터를 가지는 다른 체크 포인트 그룹을 가질 수 있다. 체크 포인트 간격이 1 초에 가까워지면 일부 애플리케이션들의 응답 지연이 짧아 질 수 있다.
일부 예들에서, 체크 포인트 그룹은 데이터 프로세싱 그래프의 데클레어레이션 컴포넌트(declaration component)를 사용하여 구성 할 수 있다. 이 컴포넌트는 그룹에 참여해야 하는 모든 그래프들에 포함될 수 있다. 또한, 그룹 내에서 관리해야 하는 공유된 데이터 또는 트랜잭션 데이터 저장소 테이블들의 데클레어레이션들에서 지칭된다. 주어진 데이터 세트는 체크 포인트 간격을 결정하기 때문에 최대 하나의 체크 포인트 그룹만 소유 할 수 있다. 일부 예들에서, 체크 포인트 그룹 데클레어레이션은 원하는 복제 계획, 체크 포인트 그리고 저널들이 보관 될 수 있는 데이터 디렉토리들, 펄스 주파수들 등과 같은 추가적인 정보를 포함한다.
모든 데이터 그리고 모든 그래프들이 체크 포인트 그룹 내에 존재하는 것은 아니다. 예를 들어, 트랜잭션 데이터 저장소 테이블은 주로 스트리밍 인제스천 그래프들이 아닌 트랜잭션 서비스들에서 사용된다. 카산드라(Cassandra) 그리고 오라클(Oracle)과 같은 타사 지속적인 저장소들에 저장된 데이터는 반드시 체크 포인트 그룹 외부에 있어야 한다.
4.10.2 내부 및 외부 접근 (Inside and Outside Access)
이 컨텍스트에는 두 가지 태스크들 클래스들(내부 및 외부)와 데이터(내부 및 외부)의 두 클래스가 있으며, '내부'는 체크포인트 그룹에 의해 관리되고 '외부'는 체크포인트 그룹에 의해 관리되지 않음을 의미한다. 다수의 체크 포인트 그룹들이 있는 경우, 각각의 그룹들은 다른 '외부' 그룹을 고려한다. 내부와 외부 간의 모든 액세스는 '외부'로 고려된다. 일반적으로, 외부 액세스의 네 가지 경우가 있다: 내부 태스크는(inside task) 외부 데이터를 읽고 내부 태스크는 외부 데이터를 기록하고 외부 태스크는 내부 데이터를 읽고 외부 태스크는 내부 데이터를 기록한다. 이들 각각들은 정확성을 유지하는것과 관련된 이슈가 있다.
4.10.2.1 내부 태스크는 외부 데이터를 읽음(Inside Task Reads Outside Data)
체크 포인트 그룹 내부의 태스크는 정확성에 영향을 미치지 않고 체크 포인트 그룹 외부의 데이터를 읽을 수 있다. 예를 들어, 내부 태스크가 카산드라(Cassandra)에서 데이터를 읽는 중에, 장애가 있고 체크 포인트가 롤백되고, 태스크가 다시 시작되며, 다시 시작한 이후 카산드라(Cassandra) 로부터 데이터를 읽고 상이한 대답을 얻는 상황을 고려해보아라.
처음에는, 시스템이 두 번째 읽기에서 상이한 대답을 얻었기 때문에 시스템이 일관성이 없는 것처럼 보일 수 있다. 그러나, 첫 번째 읽기에 대한 모든 증거가 롤백(rollback)에 의해 제거(obliterate)되었으므로 일관성이 없다. 애플리케이션이 잠시 슬립(sleep) 이후 깨어나서 Cassandra의 '두 번째' 답변을 얻은 것과 같다. 따라서 시스템은 복구 가능성의 정의를 충족시킨다.
4.10.2.2 내부 태스크는 외부 데이터를 기록함 (Inside Task Writes Outside Data)
체크 포인트 그룹 내부의 태스크가 데이터를 외부로 기록한다면 시스템은 다음 두 가지 방법 중 하나로 복구 가능성을 위반 할 수 있다. 첫째, 기록이 지속성이 될 수 있지만 업데이트를 만든 태스크는 롤백된다. 이로 인해 중복된 업데이트가 발생할 수 있으며, 이는 결과적으로 부정확하다. 이는 신중한 애플리케이션 설계로만 처리될 수 있다. 둘째, 작성자가 업데이트가 지속될 때까지 기다릴 수 없거나 (또는 기다릴 수 없는 경우) 기록이 손실 될 수 있다. 예를 들어, 내부 태스크가 카산드라(Casandra)를 업데이트 한 다음 다시 롤백 할 수 있고 카산드라 업데이트가 지속될 수 있다. 이러한 사태를 피하려면 신중한 애플리케이션 설계가 필요하다.
4.10.2.3 외부 태스크는 내부 데이터를 읽음(Outside Task Reads Inside Data)
체크 포인트 그룹 외부의 태스크가 내부의 데이터를 읽으면, 시스템은 장애(failure)후 롤백 될 수 있는 데이터의 '더티 읽기(dirty read)'를 수행 할 위험이 있다. 다음은 이 문제를 해결하는 두 가지 방법의 예시들이다. 첫째, 시스템은 낙관적으로(optimistically) 더티 읽기를 수행 할 수 있다. 예를 들어, 애드-혹 쿼리들(ad-hoc queries)이 메모리 내의 데이터에 대해 실행되면, 더티 읽기의 영향들로 감지 할 수 있는 결과가 발생하지 않을지에 대해 의심스러울 수 있다. 또한 체크 포인트 그룹 롤백들은 주요한 장애 이후에만 발생하고 정상적인 프로세싱 과정에서는 발생하지 않지만 데이터베이스 트랜잭션은 정상적인 프로세싱 과정에서 롤백되기 때문에 체크포인트 그룹 내부의 더티 읽기는 데이터베이스보다 훨씬 안전하다. 즉, 더티 읽기가 무슨 영향을 미치는것은 매우 드물다는 것을 의미한다.
둘째, 시스템은 상기 읽기를 체크포인트 그룹으로 푸쉬(push)할 수 있다. 이 모드에서, 시스템은 SV 적용 또는 트랜잭션 데이터 저장소 트랜잭션을 체크포인트 그룹 내에서 실행되는 서비스로 전송하고 응답은 다음 체크포인트까지 에스크로우에 유지된다. 이 오퍼레이션을 수행하면 지연이 발생하지만 더티 읽기를 깨끗한 것으로 변환(convert)한다. 이 오퍼레이션은 서버 소프트웨어에서 완전히(entirely) 프로세싱 될 수 있으므로 사용자는 읽기 - 푸시를 전혀 알지 못할 수 있다.
리더기(reader`s)의 체크포인트 그룹은 데이터가 에스크로우에서 릴리즈 될 때까지 체크포인트 할 수 없기 때문에(모든 태스크들이 종료 될 때까지 시스템이 체크포인트를 수행하지 않음) 두 번째 접근법은 하나의 체크포인트 그룹이 다른 체크포인트 그룹의 데이터에 액세스하는 것을 허용하는데 사용할 수 없다는 것에 주의해야 한다. 체크포인트 A 그룹의 태스크가 체크포인트 B로부터의 읽기에 대한 답변을 리턴하는 것을 기다리고 있으므로 그룹 A 는 체크 포인트를 할 수 없어 잠재적으로 교착 상태가 발생할 수 있다. 동시에, 체크 포인트 그룹 B 의 태스크도 똑같은 일을 수행한다. 어느 그룹도 정지(quiescent) 상태가 될 수 없으며 어느 그룹도 체크 포인트를 사용할 수 없다.
4.10.2.4 외부 태스크는 내부 데이터를 기록함 (Outside Task Writes Inside Data)
체크 포인트 그룹 외부의 태스크가 내부에 데이터를 쓰는 경우, 시스템은 체크 포인트가 롤백될 경우 쓰기의 손실 될 리스크(risk)가 있다. 다시 말해서, 동일한 트래이드오프(tradeoff)가 있다: 업데이트를 잃을 확률이 적기 때문에 시스템에서 이를 수행 할 수 있거나 또는 전술한 바와 같이 시스템이 체크 포인트 그룹에 쓰기를 푸시 할 수 있다. 그런 다음 쓰기는 쓰기 오퍼레이션의 확인을 식별하는 에스크로우된 응답을 대기한다. 그 밖의 이슈들은 위에서 전술한 것과 동일하다.
참고로, 이는 체크포인트 그룹 내부의 애플리케이션들의 정확성들에는 영향을 미치지 않는다. 로직은 내부-읽기-아웃사이드(inside-reads-outside)의 경우와 같다: 외부 태스크는 데이터 내부에 기록하고, 시스템은 장애가 있고 외부 태스크에 의한 기록을 롤백하는 롤백을 수행하고 시스템을 다시 시작하며, 내부에서부터 시스템은 외부 태스크가 발생하여 시스템이 일관된 상태에 있음을 알 수 있는 방법이 없다. 외부의 엔티티는 일관성 장애를 가지지만 내부 태스크들의 정확성들에는 영향을 미치지 않는다.
요약하면, 때때로 외국 접근(foreign access)은(항상 그런 것은 아니지만) 불일치의 가능성을 수반(entail)한다. 외부 쪽에서의 읽기는 항상 일치한다. 내부에 기록하면 라이터(writer)는 기록하거나 잃어 버릴 수 있다. 외부 읽기는 더티 읽기 결과를 가져오지만, 읽기를 체크 포인트 그룹으로 푸시하면 해결된다. 내부에 대한 외부 기록은 기록이 손실 될 수 있지만, 기록을 체크포인트 그룹에 푸시함으로써 해결할 수 있다.
더티 읽기 그리고 손실 기록은 장애-모드-만의 장애들(failure-mode-only faults) 이다. 서버 장애가 있지 않는 한 시스템은 그룹-레벨 롤백을 수행하지 않으며, 장애가 발생한 후에만 이러한 장애들이 나타난다. 정상 오퍼레이션에서 외부(foreign) 읽기/쓰기는 완벽하게 안전하다.
두 개의 그룹들 사이의 상호 작용으로 교착 상태가 발생할 수 있기 때문에 시스템에서 상이한 체크 포인트 그룹들 사이의 '읽기/기록 푸싱(read/write pushing)'트릭을 사용할 수 없다. 예를 들어, 필요하다면 비동기 오퍼레이션 메시지를 대기열에 올려 놓고 응답을 기다리지 않고 이를 해결할 수 있다. 그러나 시스템은 여전히 더티 읽기들 또는 기록 손실들을 허용(매우 드문 경우) 할 수 있는 한 상이한 체크 포인트 그룹 내에서 데이터를 읽고 기록할 수 있다.
5. 구현들(Implementations)
본 명세서에 기술된 복구 가능성 기술들은(첨부된 별첨 포함), 예를 들어, 적절한 소프트웨어 명령을 실행하는 프로그램 가능한 컴퓨팅 시스템을 사용하여 구현 될 수 있거나, 또는 필드 - 프로그래머블 게이트 어레이(field-programmable gate array: FPGA)와 같은 적절한 하드웨어 또는 일부 하이브리드 형태로 구현 될 수 있다. 예를 들어, 적어도 하나의 프로세서를 포함하는 적어도 하나의 프로그램된 또는 프로그램 가능한 컴퓨팅 시스템(이는 분산, 클라이언트 / 서버 또는 그리드와 같은 다양한 아키텍처 일 수 있음)에서 실행되는 적어도 하나의 컴퓨터 프로그램들 내의 프로시져들, 적어도 하나의 데이터 저장소 시스템(휘발성 및/또는 비-휘발성 메모리 및/또는 저장소 요소들), 적어도 하나의 유저 인터페이스(적어도 하나의 입력 디바이스 또는 포트를 사용하여 입력을 수신하고 적어도 하나의 출력 디바이스 또는 포트를 사용하여 출력을 제공하기 위함)을 프로그램된 접근법 소프트웨어는 포함한다. 예를 들어, 소프트웨어는 데이터 프로세싱 그래프들의 설계, 구성 그리고 실행과 연관된 서비스를 제공하는 큰 프로그램의 적어도 하나의 모듈들 포함 할 수 있다. 프로그램 모듈들(예를 들어, 데이터 프로세싱 그래프의 요소들)은 데이터 저장소 또는 데이터 저장소에 저장된 데이터 모델을 따르는 다른 조직화된 데이터로 구조들로 구현 될 수 있다.
소프트웨어는 휘발성 또는 비-휘발성 저장 매체로 구현되는 것과 같은 비-일시적 형태 또는 다른 비-일시적 매체에 일정 기간 동안(예를 들어, 동적 RAM과 같은 동적 메모리 디바이스의 리프레시 주기들 사이의 시간) 매체의 물리적 특성(예를 들어: 표면 피트들 및 랜드들, 자성 영역들, 또는 전하)을 사용하여 저장 될 수 있다. 인스트럭션들을 로딩하기 위한 준비에서, 소프트웨어는 CD-ROM 또는 다른 컴퓨터-읽기 가능한 매체(예를 들어, 일반 또는 특수 목적 컴퓨팅 시스템 또는 디바이스에 의해 읽기 가능함)와 같은 유형의 비-일시적인 매체 상에 제공되거나, 네트워크의 통신 매체를 통해 실행되는 컴퓨팅 시스템의 유형적이고 비 일시적인 매체에 전달 (예를 들어, 전파된 신호로 인코딩됨) 될 수 있다. 프로세싱의 일부 또는 전부는 특수 목적 컴퓨터에서 수행되거나 코 프로세서들(coprocessors) 또는 필드-프로그램가능한 게이트 어레이(Field-Programmable Gate Array:FPGA) 또는 특정 애플리케이션-특정 집적 회로(Application-Specific Integrated Circuit:ASIC)와 같은 특수 목적 하드웨어를 사용하여 수행 될 수 있다. 프로세싱은 소프트웨어에 의해 특정된 계산의 다른 부분들이 상이한 계산 요소들에 의해 수행되는 분산된 방식으로 구현 될 수 있다. 이러한 각각의 컴퓨터 프로그램은 바람직하게는 일반적인 또는 특수 목적 프로그램 가능한 컴퓨터에 의해 액세스 가능한 저장 장치의 컴퓨터-읽기 가능한 저장 매체(예를 들어, 고체 상태 메모리 또는 매체, 또는 자기 또는 광학 매체) 상에 저장되거나 다운로드되며, 본 명세서에 기술된 프로세싱을 수행하기 위해 저장 장치 매체가 컴퓨터에 의해 읽게 될 때 컴퓨터를 구성하고 오퍼레이팅(operating)한다. 본 발명의 시스템은 또한 컴퓨터 프로그램으로 구성되는 유형의 비-일시적인 매체로서 구현되는 것으로 고려 될 수 있으며, 그렇게 구성된 매체는 컴퓨터가 특정 그리고 사전 정의된 방식으로 오퍼레이트하여 적어도 하나의 프로세싱 단계들이 본 명세서에 기술되어 있다.
본 발명의 많은 실시 예들이 설명되었다. 그럼에도 불구하고, 전술 한 설명은 예시하기 위한 것이지, 다음의 청구 범위의 범주에 의해 정의되는 본 발명의 범위를 제한하는 것은 아니다. 따라서, 다른 실시 예들은 또한 다음의 청구항들의 범위 내에 있다. 예를 들어, 본 발명의 범위를 벗어나지 않고 다양한 변형이 이루어질 수 있다. 또한, 전술 한 단계들의 일부는 순서에 독립적 일 수 있으며, 따라서 설명 된 것과 다른 순서로 수행 될 수 있다.

Claims (57)

  1. 적어도 하나의 노드들을 포함하고, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하도록 구성된 컴퓨팅 시스템; 및
    상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 - 상기 데이터 저장 시스템은, 사용시, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장함 - 을 포함하되;
    상기 적어도 하나의 데이터 프로세싱 프로그램들의 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은:
    데이터 유닛들의 제 1 스트림내의 연속된(contiguous) 데이터 유닛들의 복수의 서브세트들(subsets)의 각각에 대한 출력을 생성하기 위한 상기 데이터 유닛들의 제 1 스트림을 프로세싱 하는 단계;
    연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림 내의 연속된 데이터 유닛들의 제 1 서브 세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램 내에서의 프로세싱의 종료를 개시(initiating)하는 단계;
    상기 제 1 데이터 프로세싱 프로그램 내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브 세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계;
    상기 변경들이 지속성 있게 저장된 이후에 상기 제 1 데이터 프로세싱 프로그램 내에서 프로세싱을 재시작하는 단계; 및
    상기 변경들이 지속성 있게 저장된 이후에 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 제 1 출력을, 상기 제 1 데이터 프로세싱 프로그램으로부터, 릴리스하는 단계를 포함하는 장치.
  2. 제 1 항에 있어서, 상기 복수의 데이터 프로세싱 프로그램들 각각은 상기 스트림 내의 적어도 2개의 근접한 데이터 유닛들에 대해 유지되는 프로그램 상태 정보를 가지고 있지 않은 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 장치.
  3. 제 1 항 또는 제 2 항에 있어서, 상기 데이터 저장 시스템은 비-휘발성 저장 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브 세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대해 적어도 일부의 변경들을 지속성 있게 저장하는 것은 상기 비-휘발성 저장 매체에서 상기 변경들을 저장하는 단계를 포함하는 장치.
  4. 제 1 항에 있어서, 상기 데이터 저장 시스템은 복수의 노드들에 결합된 통신 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브 세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대해 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 통신 매체를 통해 상기 복수의 노드들 중 제 1 노드에서 적어도 제 2 노드로 상기 변경을 송신하는 단계를 포함하는 장치.
  5. 제 1 항에 있어서, 상기 데이터 저장 시스템은 또한 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 하나에 의해 프로세싱된 데이터 유닛들의 적어도 하나의 스트림들과 연관된 스트림 상태 정보를 저장하는 장치.
  6. 제 5 항에 있어서, 적어도 상기 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은, 상기 제 1 데이터 프로세싱 프로그램 내의 프로세싱의 종료가 완료되었음을 결정한 이후에, 상기 데이터 유닛들의 제 1 스트림과 연관된 스트림 상태 정보를 지속성 있게 저장하는 단계를 더 포함하는 장치.
  7. 제 1 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브 세트에 대해 생성된 상기 제 1 출력을, 상기 제 1 데이터 프로세싱 프로그램으로부터, 릴리즈(release)하는 단계는 상기 컴퓨팅 시스템 상에서 실행되는 상기 복수의 데이터 프로세싱 프로그램들에 포함되지 않은 외부 프로그램에 대한 제 1 출력을 릴리즈하는 단계를 포함하는 장치.
  8. 제 1 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브 세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 지속성 있게 저장된 변경들은 상기 연속된 데이터 유닛들의 제 2 서브 세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 지속성 있게 저장된 변경들과 구별되는 장치.
  9. 제 8 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대한 적어도 일부 변경들은 상기 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 대한 적어도 일부 변경들이 시작된 이후에 지속성 있게 저장되고, 상기 연속된 데이터 유닛들의 제 1 서브세트는 데이터 유닛들의 제 1 스트림 내의 상기 연속된 데이터 유닛들의 제 2 서브 세트 전에 있는 장치.
  10. 제 9 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 상기 제 1 출력(output)은 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 모든 변경들이 지속성 있게 저장된 이후 상기 제 1 데이터 프로세싱 프로그램으로부터 릴리즈(release)되는 장치.
  11. 제 1 항에 있어서, 변경들의 제 1 부분(portion)이 지속성 있게 저장된 이후에 그러나 변경들의 제 2 부분이 지속성 있게 저장되기 이전에 상기 제 1 데이터 프로세싱 프로그램 내에서 재시작되는 장치.
  12. 제 1 항에 있어서, 상기 제 1 데이터 프로세싱 프로그램은 상기 데이터 유닛들의 제 1 스트림을 주기적으로 프로세싱하는 것을 종료하고, 상기 컴퓨팅 시스템은 상기 제 1 데이터 프로세싱 프로그램이 종료되는 동안 데이터 유닛들을 프로세싱함으로써 야기된 상기 공유된 데이터에 대해 적어도 일부 변경들을 지속성 있게 저장하는 단계를 시작하는 장치.
  13. 제 1 항에 있어서, 상기 제 1 데이터 프로세싱 프로그램내의 프로세싱의 종료를 개시하는 단계는 상기 연속된 데이터 유닛들의 제 1 서브세트, 상기 연속된 데이터 유닛들의 제 2 서브세트 사이에 스트림-엔딩(stream-ending) 지시자를 삽입하는 단계를 포함하고, 상기 제 1 데이터 프로세싱 프로그램에 의해 특정된 태스크들을 수행하는 모든 프로세스들이 상기 스트림-엔딩 지시자에 대한 응답으로써 정상적으로 엑시트된 이후에 상기 제 1 데이터 프로세싱 프로그램내의 프로세싱의 종료가 완료되는 장치.
  14. 제 1 항에 있어서, 상기 공유된 데이터는 상기 복수의 데이터 프로세싱 프로그램들 모두에 엑세스 가능한 장치.
  15. 적어도 하나의 노드들을 포함하고, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하도록 구성된 컴퓨팅 시스템; 및
    상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 - 상기 데이터 저장 시스템은, 사용시, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장함 - 을 포함하되;
    상기 복수의 데이터 프로세싱 프로그램들의 다수의 데이터 프로세싱 프로그램들의 적어도 제 1 그룹을 사용하여 데이터 유닛들의 적어도 2개의 스트림들을 프로세싱하는 것은:
    연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 개별적인 스트림을, 상기 제 1 그룹내의 각각의 데이터 프로세싱 프로그램들에 대하여, 프로세싱하는 단계;
    연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 개별적인 스트림내의 연속된 데이터 유닛들의 상기 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 프로세싱의 종료를 개시(initiating)하는 단계;
    상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 프로세싱의 종료가 완료되었는지를 결정한 이후에 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및
    상기 변경들이 지속성 있게 저장된 이후에 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하는 단계를 포함하는 장치.
  16. 제 15 항에 있어서, 상기 복수의 데이터 프로세싱 프로그램들 각각은 상기 스트림 내의 적어도 2개의 근접한 데이터 유닛들에 대해 유지되는 프로그램 상태 정보를 가지고 있지 않은 적어도 하나의 데이터 유닛들의 스트림을 프로세싱하는 장치.
  17. 제 15 항 또는 16 항에 있어서, 상기 데이터 저장 시스템은 비-휘발성 저장 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 비-휘발성 저장 매체에 상기 변경들을 저장하는 단계를 포함하는 장치.
  18. 제 15 항에 있어서, 상기 데이터 저장 시스템은 복수의 노드들에 결합된 통신 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 통신 매체 상에서 복수의 노드들의 제 1 노드에서 적어도 제 2 노드까지 상기 변경들을 송신하는 단계를 포함하는 장치.
  19. 제 15 항에 있어서, 상기 데이터 저장 시스템은 상기 복수의 데이터 프로세싱 프로그램들의 적어도 하나에 의해 프로세싱되는 데이터 유닛들의 적어도 하나의 스트림들과 연관된 스트림 상태 정보를 또한 저장하는 장치.
  20. 제 19 항에 있어서, 다수의 데이터 프로세싱 프로그램들의 적어도 상기 제 1 그룹을 사용하여 데이터 유닛들의 적어도 2개의 스트림들을 프로세싱하는 것은 상기 제 1 그룹 내에서 각각의 데이터 프로세싱 프로그램 내의 프로세싱의 종료가 완료되었는지를 결정한 이후, 상기 제 1 그룹 내의 데이터 프로세싱 프로그램들 중 어느 것에 의해 프로세싱되는 데이터 유닛들의 각각의 개별적인 스트림과 연관된 스트림 상태 정보를 지속성 있게 저장하는 단계를 더 포함하는 장치.
  21. 제 15 항에 있어서, 적어도 다수의 데이터 프로세싱 프로그램들의 상기 제 1 그룹을 사용하여 데이터 유닛들의 적어도 2개의 스트림들을 프로세싱하는 것은 상기 변경들이 지속성 있게 저장된 이후 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 제 1 출력을, 다수의 데이터 프로세싱 프로그램들의 상기 제 1 그룹으로부터 릴리즈(release)하는 단계를 더 포함하는 장치.
  22. 제 21 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 제 1 출력을, 상기 다수의 데이터 프로세싱 프로그램들의 제 1 그룹으로부터 릴리즈하는 단계는 상기 다수의 데이터 프로세싱 프로그램들의 제 1 그룹에 포함되지 않은 상기 컴퓨팅 시스템상에서 실행되는 상기 복수의 데이터 프로세싱 프로그램들 중 하나에 상기 제 1 출력을 릴리즈하는 단계를 포함하는 장치.
  23. 제 21 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 제 1 출력을, 상기 다수의 데이터 프로세싱 프로그램들의 제 1 그룹으로부터 릴리즈하는 단계는 상기 컴퓨팅 시스템상에서 실행되는 상기 복수의 데이터 프로세싱 프로그램들에 포함되지 않은 외부 프로그램에 상기 제 1 출력을 릴리즈하는 단계를 포함하는 장치.
  24. 제 23 항에 있어서, 상기 외부 프로그램은 상기 제 1 그룹내의 적어도 하나의 데이터 프로세싱 프로그램에 의해 엑세스 가능한 특정 공유된 데이터에 엑세스 하기 위한 요청을 송신하고, 상기 요청의 결과는 상기 요청이 수신되기 이전에 발생한 상기 특정 공유된 데이터에 대한 모든 변경들이 지속성 있게 저장된 이후에 상기 외부 프로그램으로 릴리즈되는 장치.
  25. 제 15 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 지속성 있게 저장된 변경들은 상기 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 지속성 있게 저장된 변경들과 구별되는 장치.
  26. 제 25 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대한 적어도 일부 변경들은 상기 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대한 적어도 일부 변경들이 시작된 이후에 지속성 있게 저장되고, 상기 연속된 데이터 유닛들의 제 1 서브세트는 상기 데이터 유닛들의 제 1 스트림내의 상기 연속된 데이터 유닛들의 제 2 서브세트 전에 있는 장치.
  27. 제 26 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 상기 제 1 출력은 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 모든 변경들이 지속성 있게 저장된 이후에 상기 다수의 데이터 프로세싱 프로그램들의 제 1 그룹으로부터 릴리즈되는 장치.
  28. 제 15 항에 있어서, 데이터 유닛들의 적어도 2개의 스트림들을 프로세싱하는 단계는 다수의 데이터 프로세싱 프로그램들의 적어도 제 1 그룹과 상기 복수의 데이터 프로세싱 프로그램들의 다수의 데이터 프로세싱 프로그램들의 제 2 그룹을 사용하여 데이터 유닛들의 적어도 4개의 스트림을 프로세싱하는 단계를 포함하는 장치.
  29. 제 28 항에 있어서, 다수의 데이터 프로세싱 프로그램들의 각각의 그룹들은 데이터 유닛들의 개별적인 스트림들을 주기적으로 프로세싱하는 것을 종료하고, 상기 컴퓨팅 시스템은 모든 데이터 프로세싱 프로그램들이 그 그룹에서 종료되는 동안 데이터 유닛들을 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계를 시작하는 장치.
  30. 제 29 항에 있어서, 데이터 프로세싱 프로그램의 상기 제 1 그룹은 제 1 빈도로 데이터 유닛들의 개별적인 스트림들의 프로세싱을 종료하고, 데이터 프로세싱 프로그램들의 상기 제 2 그룹은 상기 제 1 빈도와 상이한 제 2 빈도로 데이터 유닛들의 개별적인 스트림들의 프로세싱을 종료하는 장치.
  31. 제 15 항에 있어서, 변경들의 제 1 부분(portion)이 지속성 있게 저장된 이후에 그러나 변경들의 제 2 부분이 지속성 있게 저장되기 이전에 상기 제 1 그룹내의 각각의 데이터 프로세싱 프로그램내에서 프로세싱이 재시작되는 장치.
  32. 제 15 항에 있어서, 다수의 데이터 프로세싱 프로그램들의 상기 제 1 그룹은 상기 데이터 유닛들의 적어도 2개의 스트림들을 주기적으로 프로세싱하는 것을 종료하고, 상기 컴퓨팅 시스템은 상기 제 1 그룹의 모든 데이터 프로세싱 프로그램들이 종료되는 동안 데이터 유닛들을 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계를 시작하는 장치.
  33. 제 15 항에 있어서, 상기 제 1 데이터 프로세싱 프로그램 내의 프로세싱의 종료를 개시하는 단계는 상기 연속된 데이터 유닛들의 제 1 서브세트와 상기 연속된 데이터 유닛들의 제 2 서브세트 사이에 스트림-엔딩 지시자를 삽입하는 단계를 포함하며, 상기 제 1 데이터 프로세싱 프로그램에 의해 특정된 태스크들을 수행하는 모든 프로세스들이 상기 스트림-엔딩 지시자에 대한 응답으로 정상적으로 엑시트(exit)된 이후 상기 제 1 데이터 프로세싱 프로그램내의 프로세싱의 종료가 완료되는 장치.
  34. 제 15 항에 있어서, 상기 공유된 데이터는 상기 복수의 데이터 프로세싱 프로그램들 모두에 의해 엑세스 가능한 장치.
  35. 적어도 하나의 노드들을 포함하고, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하도록 구성된 컴퓨팅 시스템; 및
    상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 - 상기 데이터 저장 시스템은, 사용시, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장함 - 을 포함하되;
    상기 복수의 데이터 프로세싱 프로그램들의 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은:
    연속된 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 제 1 스트림을 프로세싱하는 단계;
    연속된 데이터 유닛들의 제 1 서브세트을 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한(adjacent) 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램내에서의 프로세싱의 종료를 개시하는 단계;
    상기 제 1 데이터 프로세싱 프로그램내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및
    모든 상기 변경들이 지속성 있게 저장되기 이전에 상기 제 1 데이터 프로세싱 프로그램 내에서 프로세싱을 재시작하는 단계를 포함하는 장치.
  36. 제 35 항에 있어서, 상기 복수의 데이터 프로세싱 프로그램들 각각은 상기 스트림 내의 적어도 2 개의 근접한 데이터 유닛들에 대해 유지되는 프로그램 상태 정보를 가지고 있지 않은 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 장치.
  37. 제 35 항 또는 36항 중 어느 한 항에 있어서, 상기 데이터 저장 시스템은 비-휘발성 저장 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱 함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 비-휘발성 저장 매체 내에 상기 변경들을 저장하는 단계를 포함하는 장치.
  38. 제 35 항에 있어서, 상기 데이터 저장 시스템은 복수의 노드들에 결합된 통신 매체를 포함하고, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 통신 매체를 통해 상기 복수의 노드들 중 제1 노드에서 적어도 제 2 노드까지 상기 변경들을 송신하는 단계를 포함하는 장치.
  39. 제 35 항에 있어서, 상기 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은 상기 공유된 데이터의 적어도 하나의 스냅샷을 저장하는 단계와 상기 스냅샷이 저장된 이후 데이터 유닛들을 프로세싱함으로써 야기된 상기 공유된 데이터에 저널의 변경들을 저장하는 단계를 더 포함하는 장치.
  40. 제 39 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계는 상기 스냅샷의 적어도 일부를 저장하는 단계와 상기 저널의 변경들의 적어도 일부를 저장하는 단계를 포함하는 장치.
  41. 제 35 항에 있어서, 상기 데이터 저장 시스템은 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 하나에 의해 프로세싱되는 데이터 유닛들의 적어도 하나의 스트림들과 연관된 스트림 상태 정보를 또한 저장하는 장치.
  42. 제 41 항에 있어서, 적어도 상기 제 1 데이터 프로세싱 프로그램을 사용하여 적어도 하나의 데이터 유닛들의 스트림을 프로세싱하는 것은 상기 제 1 데이터 프로세싱 프로그램 내의 프로세싱의 종료가 완료되었는지를 결정한 이후에, 상기 데이터 유닛들의 제 1 스트림과 연관된 스트림 상태 정보를 지속성 있게 저장하는 단계를 더 포함하는 장치.
  43. 제 35 항에 있어서, 적어도 상기 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은 상기 제 1 데이터 프로세싱 프로그램내의 프로세싱의 종료가 완료되었는지를 결정한 이후에, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계를 더 포함하는 장치.
  44. 제 43 항에 있어서, 적어도 상기 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은 상기 제 1 데이터 프로세싱 프로그램내의 프로세싱을 재시작한 이후에, 상기 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계를 더 포함하는 장치.
  45. 제 35 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 지속성 있게 저장된 변경들은 상기 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 지속성 있게 저장된 변경들로부터 구별되는 장치.
  46. 제 45 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대한 적어도 일부 변경들은 상기 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱함으로써 야기된 상기 공유된 데이터에 대한 적어도 일부 변경들이 시작된 이후에 지속성 있게 저장되고, 상기 연속된 데이터 유닛들의 제 1 서브세트는 상기 데이터 유닛들의 제 1 스트림내의 상기 연속된 데이터 유닛들의 제 2 서브세트 전에 있는 장치.
  47. 제 35 항에 있어서, 적어도 상기 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은 상기 연속된 데이터 유닛들의 복수의 서브세트들 각각에 대해 출력을 생성하는 단계를 더 포함하고, 상기 변경들이 완료된 이후 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 제 1 출력을 지속성 있게 저장된 장치.
  48. 제 47 항에 있어서, 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 상기 제 1 출력은 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 모든 변경들이 지속성 있게 저장된 이후에 상기 제 1 데이터 프로세싱 프로그램으로부터 릴리즈 되는 장치.
  49. 제 35 항에 있어서, 상기 제 1 데이터 프로세싱 프로그램은 상기 데이터 유닛들의 제 1 스트림을 주기적으로 프로세싱 하는 것을 종료하고, 상기 컴퓨팅 시스템은 상기 제 1 데이터 프로세싱 프로그램이 종료되는 동안 데이터 유닛들을 프로세싱함으로써 야기된 상기 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계를 시작하는 장치.
  50. 제 35 항에 있어서, 상기 제 1 데이터 프로세싱 프로그램 내의 프로세싱의 종료를 개시하는 단계는 상기 연속된 데이터 유닛들의 제 1 서브세트와 상기 연속된 데이터 유닛들의 제 2 서브세트 사이에 스트림-엔딩 지시자를 삽입하는 단계와, 상기 제 1 데이터 프로세싱 프로그램에 의해 특정된 태스크들을 수행하는 모든 프로세스들이 스트림-엔딩 지시자에 대한 응답으로 정상적으로 엑시트(exit)된 이후 상기 제 1 데이터 프로세싱 프로그램 내의 프로세싱의 종료가 완료되는 장치.
  51. 제 35 항에 있어서, 상기 공유된 데이터는 복수의 데이터 프로세싱 프로그램들 모두에 의해 엑세스 가능한 장치.
  52. 적어도 하나의 노드들을 포함하는 컴퓨팅 시스템상에서, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하는 단계; 및
    상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 상에서, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장하는 단계를 포함하되;
    상기 적어도 하나의 데이터 프로세싱 프로그램들의 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은:
    데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 복수의 서브세트들의 각각에 대한 출력을 생성하기 위한 데이터 유닛들의 제 1 스트림을 프로세싱 하는 단계;
    연속된(contiguous) 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램 내에서의 프로세싱의 종료를 개시하는 단계;
    상기 제 1 데이터 프로세싱 프로그램 내의 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계;
    상기 변경들이 지속성 있게 저장된 이후 상기 제 1 데이터 프로세싱 프로그램 내에서 프로세싱을 재시작하는 단계; 및
    상기 변경들이 지속성 있게 저장된 이후에 상기 연속된 데이터 유닛들의 제 1 서브세트에 대해 생성된 제 1 출력을, 상기 제 1 데이터 프로세싱 프로그램으로부터, 릴리즈하는 단계를 포함하는 방법.
  53. 컴퓨터-판독 가능한 매체 상에서 비-일시적 형태로 저장되는 소프트웨어로서, 상기 소프트웨어는 컴퓨팅 시스템으로 하여금:
    데이터 유닛들의 적어도 하나의 스트림을 각각 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하고; 그리고
    상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2 개에 의해 액세스 가능한 공유된 데이터를 저장하도록 하는 인스트럭션들을 포함하며;
    상기 적어도 하나의 데이터 프로세싱 프로그램의 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은:
    상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 복수의 서브세트들의 각각에 대해 출력을 생성하기 위해 데이터 유닛들의 제 1 스트림을 프로세싱하고;
    연속된(contiguous) 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램 내에서의 프로세싱의 종료를 개시하고;
    상기 제 1 데이터 프로세싱 프로그램 내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하고;
    상기 변경들이 지속성 있게 저장된 이후에 상기 제 1 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하고; 그리고
    상기 변경들이 지속성 있게 저장된 이후에 상기 연속된 데이터 유닛들의 상기 제 1 서브세트에 대해 생성된 제 1 출력을, 상기 제 1 데이터 프로세싱 프로그램으로부터, 릴리즈하는 소프트웨어.
  54. 적어도 하나의 노드들을 포함하는 컴퓨팅 시스템상에서, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램을 실행하는 단계; 및
    상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 상에서, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장하는 단계를 포함하되;
    상기 복수의 데이터 프로세싱 프로그램 중 다수의 데이터 프로세싱 프로그램들의 적어도 제 1 그룹을 사용하여 적어도 2개의 데이터 유닛들의 스트림들을 프로세싱하는 것은:
    연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 개별적인 스트림을, 상기 제 1 그룹내의 각각의 데이터 프로세싱 프로그램들에 대하여, 프로세싱하는 단계;
    연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 개별적인 스트림내의 연속된 데이터 유닛들의 상기 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 프로세싱의 종료를 개시하는 단계;
    상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및
    상기 변경들이 지속성 있게 저장된 이후 상기 제 1 그룹내의 각각의 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하는 단계를 포함하는 방법.
  55. 컴퓨터-판독 가능한 매체 상에 비-일시적 형태로 저장된 소프트웨어로서, 상기 소프트웨어는 컴퓨팅 시스템으로 하여금:
    데이터 유닛들의 적어도 하나의 스트림을 각각 프로세싱하는 복수의 데이터 프로세싱 프로그램을 실행하고; 및
    상기 복수의 데이터 프로세싱 프로그램들의 적어도 2개에 의해 엑세스가능한 공유된 데이터를 저장하도록 하는 인스트럭션들을 포함하며;
    상기 복수의 데이터 프로세싱 프로그램들의 다수의 데이터 프로세싱 프로그램들의 적어도 제 1 그룹을 사용하여 데이터 유닛들의 적어도 2개의 스트림들을 프로세싱하는 것은:
    연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 개별적인 스트림을, 상기 제 1 그룹내의 각각의 데이터 프로세싱 프로그램들에 대하여, 프로세싱하는 단계;
    연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 개별적인 스트림내의 연속된 데이터 유닛들의 상기 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 프로세싱의 종료를 개시하는 단계;
    상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내의 프로세싱의 종료가 완료되었는지 결정한 이후에 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및
    상기 변경들이 지속성 있게 저장된 이후에 상기 제 1 그룹에서 각각의 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하는 단계를 포함하는 소프트웨어.
  56. 적어도 하나의 노드들을 포함하는 컴퓨팅 시스템상에서, 각각이 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하는 단계; 및
    상기 적어도 하나의 노드들 중 적어도 하나에 액세스 가능한 적어도 하나의 데이터 저장 시스템 상에, 상기 복수의 데이터 프로세싱 프로그램들 중 적어도 2개에 의해 액세스 가능한 공유된 데이터를 저장하는 단계를 포함하되;
    상기 복수의 데이터 프로세싱 프로그램들 중 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은:
    연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 제 1 스트림을 프로세싱하는 단계;
    연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램내에서의 프로세싱 종료를 개시하는 단계;
    상기 제 1 데이터 프로세싱 프로그램내의 상기 프로세싱의 종료가 완료되었는지를 결정한 이후 상기 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및
    모든 상기 변경들이 지속성 있게 저장되기 이전에 상기 제 1 데이터 프로세싱 프로그램내에서 프로세싱을 재시작하는 단계를 포함하는 방법.
  57. 컴퓨터 판독-가능 매체 상에 비-일시적 형태로 저장된 소프트웨어로서, 상기 소프트웨어는 컴퓨팅 시스템으로 하여금:
    각각이 데이터 유닛들의 적어도 하나의 스트림을 각각 프로세싱하는 복수의 데이터 프로세싱 프로그램들을 실행하고; 및
    상기 복수의 데이터 프로세싱 프로그램들의 적어도 2개에 의해 엑세스 가능한 공유된 데이터를 저장하도록 하는 인스트럭션들을 포함하며;
    상기 복수의 데이터 프로세싱 프로그램들의 적어도 제 1 데이터 프로세싱 프로그램을 사용하여 데이터 유닛들의 적어도 하나의 스트림을 프로세싱하는 것은:
    연속된(contiguous) 데이터 유닛들의 복수의 서브세트들을 포함하는 데이터 유닛들의 제 1 스트림을 프로세싱하는 단계;
    연속된 데이터 유닛들의 제 1 서브세트를 프로세싱하는 단계와 상기 데이터 유닛들의 제 1 스트림내의 연속된 데이터 유닛들의 제 1 서브세트에 근접한 연속된 데이터 유닛들의 제 2 서브세트를 프로세싱하는 단계 사이에서, 상기 제 1 데이터 프로세싱 프로그램내에서의 프로세싱의 종료를 개시하는 단계;
    상기 제 1 데이터 프로세싱 프로그램내의 상기 프로세싱의 종료가 완료되었는지 결정한 이후 연속된 데이터 유닛들의 제 1 서브세트를 프로세싱함으로써 야기된 공유된 데이터에 적어도 일부 변경들을 지속성 있게 저장하는 단계; 및
    모든 상기 변경들이 지속성 있게 저장되기 전에 상기 제 1 데이터 프로세싱 프로그램 내에서 프로세싱을 재시작하는 단계를 포함하는 소프트웨어.
KR1020187023523A 2016-01-14 2017-01-13 복구 가능한 스트림 프로세싱 KR102121139B1 (ko)

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
KR20180101547A KR20180101547A (ko) 2018-09-12
KR102121139B1 true KR102121139B1 (ko) 2020-06-17

Family

ID=58016792

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187023523A KR102121139B1 (ko) 2016-01-14 2017-01-13 복구 가능한 스트림 프로세싱

Country Status (9)

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

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

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080253283A1 (en) 2007-04-10 2008-10-16 International Business Machines Corporation Methods and Apparatus for Effective On-Line Backup Selection for Failure Recovery in Distributed Stream Processing Systems
JP2009080705A (ja) * 2007-09-26 2009-04-16 Toshiba Corp 仮想計算機システム及び同システムにおける仮想計算機復元方法
US20130305087A1 (en) 2012-05-09 2013-11-14 Imec Method and system for real-time error mitigation

Family Cites Families (24)

* 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 中国科学院计算技术研究所 一种基于数据流分析的访存合并优化方法
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
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
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080253283A1 (en) 2007-04-10 2008-10-16 International Business Machines Corporation Methods and Apparatus for Effective On-Line Backup Selection for Failure Recovery in Distributed Stream Processing Systems
JP2009080705A (ja) * 2007-09-26 2009-04-16 Toshiba Corp 仮想計算機システム及び同システムにおける仮想計算機復元方法
US20130305087A1 (en) 2012-05-09 2013-11-14 Imec Method and system for real-time error mitigation

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
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
JP2019505916A (ja) 2019-02-28
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
KR102121139B1 (ko) 복구 가능한 스트림 프로세싱
Carbone et al. Apache flink: Stream and batch processing in a single engine
US6625751B1 (en) Software fault tolerant computer system
EP2156307B1 (en) Distributed, fault-tolerant and highly available computing system
Wang et al. Lineage stash: fault tolerance off the critical path
Burckhardt et al. Serverless workflows with durable functions and netherite
Margara et al. A model and survey of distributed data-intensive systems
EP3210119B1 (en) Recovery and fault-tolerance under computational indeterminism
Khaund et al. RD-FCA: A resilient distributed framework for formal concept analysis
Tardieu et al. Reliable actors with retry orchestration
Li et al. Darq matter binds everything: Performant and composable cloud programming via resilient steps
Jeong Fault-tolerant parallel processing combining Linda, checkpointing, and transactions
Kelly et al. Output-valid rollback-recovery
US20240152429A1 (en) Recoverable Processes
Sultana Toward a Transparent, Checkpointable Fault-Tolerant Message Passing Interface for HPC Systems
Silvestre Clonos: Consistent High-Availability for Distributed Stream Processing through Causal Logging
Liu Distributed optimistic simulation of DEVS and CELL-DEVS models with PCD++
Salem Comparative Analysis of Big Data Stream Processing Systems
Carvalho Generic replication of software transactional memory
Dichev et al. Dependency-Aware Rollback and Checkpoint-Restart for Distributed Task-Based Runtimes
Sanz-Marco Fault Tolerance for Stream Programs on Parallel Platforms
Tripathi et al. Distributed C2 System Recovery Mechanisms
Taftaf et al. On the correct application of AD checkpointing to adjoint MPI-parallel programs
Wood et al. Distributed C2 System Recovery Mechanisms
as Bartha Rollback recovery in distributed systems

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant