CN108475218A - 可恢复流处理 - Google Patents
可恢复流处理 Download PDFInfo
- Publication number
- CN108475218A CN108475218A CN201780006909.XA CN201780006909A CN108475218A CN 108475218 A CN108475218 A CN 108475218A CN 201780006909 A CN201780006909 A CN 201780006909A CN 108475218 A CN108475218 A CN 108475218A
- Authority
- CN
- China
- Prior art keywords
- data
- subset
- cells
- processing
- data processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/60—Network streaming of media packets
- H04L65/70—Media network packetisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1438—Restarting or rejuvenating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols 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]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error 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/2053—Error 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/2094—Redundant storage or storage space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error 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/2097—Error 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/84—Using 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)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (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)储存所述程序中的至少两个程序能够访问的共享数据。使用第一数据处理程序来处理至少一个流包括:处理包括多个连续数据单元子集的第一数据单元流;在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及继续所述第一数据处理程序内的处理。
Description
相关申请的交叉引用
本申请要求2016年1月14日提交的美国申请序列62/278,528的优先权。
技术领域
本说明书涉及可恢复流处理。
背景技术
一些数据处理程序接收要处理的数据分批(例如,一个或多个文件或数据库表),并且由于处理该数据所需的时间量基于分批中的数据量,因此该时间量是定义明确的。这种类型的处理被称为“批处理”。一些数据处理程序接收一个或多个数据流,其中这一个或多个数据流在可能未知的时间量内进行处理,这是因为这些数据流可能包括未知或任意数量的数据单元或可能连续的数据单元流。这种类型的处理被称为“流处理”或“连续流处理”。与在数据处理系统中提供可恢复性相关的因素可以取决于正使用的处理的类型、以及诸如是否存在多个交互数据处理程序以及处理数据单元的顺序是否确定等的其它特征。
发明内容
在一方面,一般来说,一种设备,包括:计算系统,其包括一个或多个节点,所述计算系统被配置为执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及至少一个数据存储系统,其能够由所述一个或多个节点中的至少一个节点访问,所述数据存储系统在使用时储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,其中,使用一个或多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:处理第一数据单元流以生成针对所述第一数据单元流内的多个连续数据单元子集各自的输出;在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;在所述改变已被持久储存之后,继续所述第一数据处理程序内的处理;以及在所述改变已被持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出。
各方面可以包括以下特征中的一个或多个特征。
所述多个数据处理程序各自处理至少一个数据单元流,而无需通过该流中的多于两个相邻数据单元来保持程序状态信息。
所述数据存储系统包括非易失性存储介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:将所述改变储存在所述非易失性存储介质中。
所述数据存储系统包括连接至所述多个节点的通信介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:通过所述通信介质将所述改变从所述多个节点中的第一节点至少发送至第二节点。
所述数据存储系统还储存与所述多个数据处理程序中的至少一个数据处理程序所处理的一个或多个数据单元流相关联的流状态信息。
使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存与所述第一数据单元流相关联的流状态信息。
从所述第一数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出包括:将所述第一输出释放至未包括在所述计算系统上执行的所述多个数据处理程序中的外部程序。
由于处理所述第一连续数据单元子集而引起的所述共享数据的持久储存的改变与由于处理所述第二连续数据单元子集(例如,实现管线型检查点,如以下更详细所述)而引起的所述共享数据的持久储存的改变不同。
在由于处理所述第二连续数据单元子集而引起的所述共享数据的至少一些改变已经开始之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变,其中在所述第一数据单元流内、所述第一连续数据单元子集在所述第二连续数据单元子集之前。
在由于处理所述第一连续数据单元子集而引起的所有改变已被持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集而生成的第一输出。
在第一改变部分已被持久储存之后、但在第二改变部分已被持久储存之前,在所述第一数据处理程序内继续处理。
所述第一数据处理程序定期地中止所述第一数据单元流的处理,并且所述计算系统在所述第一数据处理程序被中止的同时开始持久储存由于处理数据单元而引起的所述共享数据的至少一些改变。
发起所述第一数据处理程序内的处理的中止包括:将流结束指示插在所述第一连续数据单元子集和所述第二连续数据单元子集之间,并且在用于进行所述第一数据处理程序所指定的任务的全部处理都已响应于所述流结束指示而正常退出之后,所述第一数据处理程序内的处理的中止已经完成。
所述共享数据能够由所述多个数据处理程序的全部数据处理程序访问。
在另一方面,一般来说,一种设备,其包括:计算系统,其包括一个或多个节点,所述计算系统被配置为执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流(使得所述多个数据处理程序中的至少第一组多个数据处理程序处理两个或更多个数据单元流);以及至少一个数据存储系统,其能够由所述一个或多个节点中的至少一个节点访问,所述数据存储系统在使用时储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据。
使用所述多个数据处理程序中的至少第一组多个数据处理程序来处理两个或更多个数据单元流包括:针对所述第一组中的各数据处理程序,处理包括多个连续数据单元子集的各数据单元流;在处理第一连续数据单元子集以及处理在所述各数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一组中的各数据处理程序内的处理的中止;在判断为所述第一组中的各数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及在所述改变已被持久储存之后,继续所述第一组中的各数据处理程序内的处理。
各方面可以包括以下特征中的一个或多个特征。
所述多个数据处理程序各自处理至少一个数据单元流,而无需通过该流中的多于两个相邻数据单元来保持程序状态信息。
所述数据存储系统包括非易失性存储介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:将所述改变储存在所述非易失性存储介质中。
所述数据存储系统包括连接至所述多个节点的通信介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:通过所述通信介质将所述改变从所述多个节点中的第一节点至少发送至第二节点。
所述数据存储系统还储存与所述多个数据处理程序中的至少一个数据处理程序所处理的一个或多个数据单元流相关联的流状态信息。
使用至少所述第一组多个数据处理程序来处理两个或更多个数据单元流还包括:在判断为所述第一组中的各数据处理程序内的处理的中止已经完成之后,持久储存与所述第一组中的任意数据处理程序所处理的各个数据单元流相关联的流状态信息。
使用至少所述第一组多个数据处理程序来处理两个或更多数据单元流还包括:在所述改变已被持久储存之后,从所述第一组多个数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出。
从所述第一组多个数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出包括:将所述第一输出释放至所述计算系统上执行的多个数据处理程序中未包括在所述第一组多个数据处理程序中的一个数据处理程序。
从所述第一组多个数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出包括:将所述第一输出释放至未包括在所述计算系统上执行的所述多个数据处理程序中的外部程序。
所述外部程序发送访问所述第一组中的至少一个数据处理程序能够访问的特定共享数据的请求,并且在所述请求被接收之前发生的所述特定共享数据的所有改变已被持久储存之后,所述请求的结果被释放至所述外部程序。
由于处理所述第一连续数据单元子集而引起的所述共享数据的持久储存的改变与由于处理所述第二连续数据单元子集而引起的所述共享数据的持久储存的改变不同。
在由于处理所述第二连续数据单元子集而引起的所述共享数据的至少一些改变已经开始之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变,其中在所述第一数据单元流内、所述第一连续数据单元子集在所述第二连续数据单元子集之前。
在由于处理所述第一连续数据单元子集而引起的所有改变已被持久储存之后,从所述第一组多个数据处理程序释放针对所述第一连续数据单元子集而生成的第一输出。
处理两个或更多个数据单元流包括:至少使用所述多个数据处理程序中的所述第一组多个数据处理程序和第二组多个数据处理程序来处理四个或更多个数据单元流。
各组多个数据处理程序定期地中止各数据单元流的处理,并且所述计算系统在该组中的所有数据处理程序被中止的同时开始持久储存由于处理数据单元而引起的所述共享数据的至少一些改变。
所述第一组数据处理程序以第一频率中止各数据单元流的处理,并且所述第二组数据处理程序以与所述第一频率不同的第二频率中止各数据单元流的处理。
在第一改变部分已被持久储存之后、但在第二改变部分已被持久储存之前,在所述第一组中的各数据处理程序内继续处理。
所述第一组多个数据处理程序定期地中止处理所述两个或更多个数据单元流,并且所述计算系统在所述第一组中的所有数据处理程序被中止的同时开始持久储存由于处理数据单元而引起的所述共享单元的至少一些改变。
发起所述第一数据处理程序内的处理的中止包括:将流结束指示插在所述第一连续数据单元子集和所述第二连续数据单元子集之间,并且在用于进行所述第一数据处理程序所指定的任务的全部处理都已响应于所述流结束指示而正常退出之后,所述第一数据处理程序内的处理的中止已经完成。
所述共享数据能够由所述多个数据处理程序的全部数据处理程序访问。
在一方面,一般来说,一种设备,包括:计算系统,其包括一个或多个节点,所述计算系统被配置为执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及至少一个数据存储系统,其能够由所述一个或多个节点中的至少一个节点访问,所述数据存储系统在使用时储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,其中,使用所述多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:处理包括多个连续数据单元子集的第一数据单元流;在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及在所有改变已经完成持久储存之前,继续所述第一数据处理程序内的处理。
各方面可以包括以下特征中的一个或多个特征。
所述多个数据处理程序各自处理至少一个数据单元流,而无需通过该流中的多于两个相邻数据单元来保持程序状态信息。
所述数据存储系统包括非易失性存储介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:将所述改变储存在所述非易失性存储介质中。
所述数据存储系统包括连接至所述多个节点的通信介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:通过所述通信介质将所述改变从所述多个节点中的第一节点至少发送至第二节点。
使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:储存所述共享数据的至少一个快照,并且在储存所述快照之后储存由于处理数据单元而引起的所述共享数据的改变的日志。
持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:储存所述快照的至少一部分,并且储存所述改变的日志的至少一部分。
所述数据存储系统还储存与所述多个数据处理程序中的至少一个数据处理程序所处理的一个或多个数据单元流相关联的流状态信息。
使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存与所述第一数据单元流相关联的流状态信息。
使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:在判断为所述第一数据处理程序内的处理的中止已经完成之前,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变。
使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:在继续所述第一数据处理程序内的处理之后,持久储存由于处理所述第二连续数据单元子集而引起的所述共享数据的至少一些改变。
由于处理所述第一连续数据单元子集而引起的所述共享数据的持久储存的改变与由于处理所述第二连续数据单元子集而引起的所述共享数据的持久储存的改变不同。
在由于处理所述第二连续数据单元子集而引起的所述共享数据的至少一些改变已经开始之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变,其中在所述第一数据单元流内、所述第一连续数据单元子集在所述第二连续数据单元子集之前。
使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:针对所述多个连续数据单元子集各自生成输出,以及在所述改变已经完成持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集而生成的第一输出。
在由于处理所述第一连续数据单元子集而引起的所有改变已被持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集而生成的第一输出。
所述第一数据处理程序定期地中止处理所述第一数据单元流,并且所述计算系统在所述第一数据处理程序被中止的同时开始持久储存由于处理数据单元而引起的所述共享数据的至少一些改变。
发起所述第一数据处理程序内的处理的中止包括:将流结束指示插在所述第一连续数据单元子集和所述第二连续数据单元子集之间,并且在用于进行所述第一数据处理程序所指定的任务的全部处理都已响应于所述流结束指示而正常退出之后,所述第一数据处理程序内的处理的中止已经完成。
所述共享数据能够由所述多个数据处理程序的全部数据处理程序访问。
在另一方面,一般来说,一种设备,其包括用于进行以上设备中的任意设备的处理的部件。
在另一方面,一般来说,一种方法,用于进行以上设备中的任意设备的处理。
在另一方面,一般来说,一种软件,其以非暂时形式储存在计算机可读介质上,其中所述软件包括用于使计算系统进行以上设备中的任意设备的处理的指令。
在另一方面,一般来说,一种方法,包括:在包括一个或多个节点的计算系统上执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及在所述一个或多个节点中的至少一个节点能够访问的至少一个数据存储系统上储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,其中,使用一个或多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:处理第一数据单元流以生成针对所述第一数据单元流内的多个连续数据单元子集中的各连续数据单元子集的输出;在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;在所述改变已被持久储存之后,继续所述第一数据处理程序内的处理;以及在所述改变已被持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出。
在另一方面,一般来说,一种软件,其以非暂时形式储存在计算机可读介质上,所述软件包括用于使计算系统执行以下操作的指令:执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,其中,使用一个或多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:处理第一数据单元流以生成针对所述第一数据单元流内的多个连续数据单元子集中的各连续数据单元子集的输出;在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;在所述改变已被持久储存之后,继续所述第一数据处理程序内的处理;以及在所述改变已被持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出。
在另一方面,一般来说,一种方法,包括:在包括一个或多个节点的计算系统上执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及在所述一个或多个节点中的至少一个节点能够访问的至少一个数据存储系统上储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,其中,使用所述多个数据处理程序中的至少第一组多个数据处理程序来处理两个或更多个数据单元流包括:针对所述第一组中的各数据处理程序,处理包括多个连续数据单元子集的各数据单元流;在处理第一连续数据单元子集以及处理在所述各数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一组中的各数据处理程序内的处理的中止;在判断为所述第一组中的各数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及在所述改变已被持久储存之后,继续所述第一组中的各数据处理程序内的处理。
在另一方面,一般来说,一种软件,其以非暂时形式储存在计算机可读介质上,所述软件包括用于使计算系统执行以下操作的指令:执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,其中,使用所述多个数据处理程序中的至少第一组多个数据处理程序来处理两个或更多个数据单元流包括:针对所述第一组中的各数据处理程序,处理包括多个连续数据单元子集的各数据单元流;在处理第一连续数据单元子集以及处理在所述各数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一组中的各数据处理程序内的处理的中止;在判断为所述第一组中的各数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及在所述改变已被持久储存之后,继续所述第一组中的各数据处理程序内的处理。
在另一方面,一般来说,一种方法,包括:在包括一个或多个节点的计算系统上执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及在所述一个或多个节点中的至少一个节点能够访问的至少一个数据存储系统上储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,其中,使用所述多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:处理包括多个连续数据单元子集的第一数据单元流;在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及在所有改变已经完成持久储存之前,继续所述第一数据处理程序内的处理。
在另一方面,一般来说,一种软件,其以非暂时形式储存在计算机可读介质上,所述软件包括用于使计算系统执行以下操作的指令:执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,其中,使用所述多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:处理包括多个连续数据单元子集的第一数据单元流;在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及在所有改变已经完成持久储存之前,继续所述第一数据处理程序内的处理。
各方面可以包括以下优点中的一个或多个优点。
被配置用于实时数据处理的计算系统通常需要处理一个或多个传入数据流中的相对大量数据,并且还需要能够以低延迟对传入请求进行响应。这里所述的技术使得这种系统能够在不妥协响应延迟要求的同时具有可恢复性、容错性和高可用性。这些技术还可适用于多个交互数据处理程序的集合。可恢复性所使用的一种机制是检查点设置。可以实现高频率的检查点设置(例如,以约10ms~100ms的时间段),从而支持响应于请求而以低延迟提供第三方保管(escrow)输出的能力。
根据以下描述和权利要求书,本发明的其它特征和优点将变得明显。
附图说明
图1是基于任务的计算系统的框图。
图2A是示出脉冲摄取计算系统中的第一输入数据脉冲和第二输入数据脉冲的成功处理以及第三输入数据脉冲的故障处理的处理时间线。
图2B是示出将处理状态恢复至与第二输入数据脉冲的成功处理相关联的检查点的恢复操作的图2A的处理时间线。
图2C是示出第三输出数据脉冲的成功再处理的图2A的处理时间线。
图3是一般脉冲摄取检查点设置方法的处理时间线。
图4是图3的一般脉冲摄取检查点设置方法的恢复过程的处理时间线。
图5是图3的一般脉冲摄取检查点设置方法的多图版本的处理时间线。
图6是增量管线型脉冲摄取检查点设置方法的处理时间线。
图7A是实现增量管线型脉冲摄取检查点设置方法的典型计算系统。
图7B是图7A的计算系统处理第一输入数据脉冲并以日志形式记录与第一脉冲的处理相关的状态变化。
图7C示出图7A的计算系统在完成第一输入数据脉冲的处理之后处于挂起状态。
图7D示出图7A的计算系统在持久储存与第一输入数据脉冲相关的状态变化的同时、处理第二输入数据脉冲并以日志形式记录与第二脉冲的处理相关的状态变化。
图7E示出图7A的计算系统在完成持久储存与第一输入数据脉冲相关的状态变化时从第三方保管释放根据该第一输入数据脉冲而生成的输出数据。
图7F示出图7A的计算系统继续将根据第二输入数据脉冲而生成的输出数据保持在第三方保管中、并以日志形式记录与第二输入数据脉冲相关的状态变化。
图7G示出图7A的计算系统从第二输入数据脉冲的处理错误中恢复。
图8是实现分布式增量管线型脉冲摄取检查点设置方法的计算系统。
图9A示出与事务数据存储器进行交互并实现增量管线型脉冲摄取检查点设置方法的多个计算系统。
图9B示出图9A的系统的事务数据存储提交过程。
具体实施方式
1系统概述
参考图1,基于任务的计算系统100使用高级程序规范110来控制计算平台150的计算和存储资源以执行程序规范110所指定的计算。编译器/解释器120接收高级程序规范110,并生成采用可以由基于任务的运行时接口/控制器140执行的形式的基于任务的规范130。编译器/解释器120识别可单独地或者作为一个单元实例化为要应用至多个数据元素中的各数据元素的细粒度任务的一个或多个“组件”的一个或多个“执行集”。如以下更详细所述,编译或解释处理的一部分涉及识别这些执行集并且准备供执行的执行集。应当理解,编译器/解释器120可以使用包括诸如解析高级程序规范110、验证语法、对数据格式进行类型检查、生成任何错误或警报、以及准备基于任务的规范130等的步骤的多种算法中的任一种算法,并且编译器/解释器120可以使用多种技术以例如优化在计算平台150上所进行的计算的效率。编译器/解释器120所生成的目标程序规范本身可以采用中间形式,其中该中间形式要被系统100的其它部分进一步处理(例如,进一步编译、解释等)以产生基于任务的规范130。以下论述概括了这种变换的一个或多个示例,但是例如如编译器设计领域技术人员将会理解的,当然可以进行其它变换方法。
一般地,计算平台150由多个计算节点152(例如,提供分布式计算资源和分布式存储资源两者的单个服务器计算机)构成,从而实现高度并行。如以下进一步详细讨论的,高级程序规范110中所表示的计算作为相对细粒度的任务在计算平台150上执行,进一步实现指定计算的高效并行执行。
2数据处理图
在一些实施例中,高级程序规范110是包括“组件”集的、被称为“数据处理图”的一类基于图的程序规范,其中这些“组件”各自指定要对数据进行的整个数据处理计算的一部分。这些组件例如在编程用户界面中和/或在计算的数据表示中被表示为图中的节点。与一些基于图的程序规范(诸如上述的数据处理图等)不同,该数据处理图可以包括节点之间的、表示数据传送或控制传送中的任一个或两者的链接。一种指示这些链接的特征的方法是在组件上提供不同类型的端口。这些链接是从上游组件的输出端口连接至下游组件的输入端口的有向链接。这些端口具有表示如何从链接而写入和读取数据元素以及/或者如何控制组件来处理数据的特征的指示符。
这些端口可以具有多个不同特征。端口的一个特征是其作为输入端口或输出端口的有向性。有向链接表示正从上游组件的输出端口输送至下游组件的输入端口的数据和/或控制。允许开发者将不同类型的端口链接在一起。数据处理图的一些数据处理特征取决于不同类型的端口如何链接在一起。例如,不同类型的端口之间的链接可能导致提供分层形式的并发的不同“执行集”中的组件的嵌套子集,如以下更详细所述。端口的类型表明某些数据处理特征。组件可以具有的不同类型的端口包括:
●集合输入或输出端口,其意味着组件的实例将分别读取或写入将经由连接至端口的链接而传递的集合的所有数据元素。对于在连接端口之间具有单个链接的一对组件,通常允许下游组件在正被上游组件写入时读取数据元素,从而在上游组件和下游组件之间实现管线并行。如以下更详细所述,可以对数据元素进行再定序,从而实现并行化的效率。在一些图形表示中,例如在编程图形界面中,这些集合端口通常由组件处的正方形连接器符号表示。
●标量输入或输出端口,其意味着组件的实例将相对于连接至端口的链接分别读取或写入至多一个数据元素。对于在标量端口之间具有单个链接的一对组件,使用单个数据元素的传送作为控制传送,来实施上游组件完成执行之后的下游组件的串行执行。在一些图形表示中,例如在编程图形界面中,这些标量端口通常由组件处的三角形连接器符号来表示。
·控制输入或输出端口,其与标量输入或输出类似,但是无需发送数据元素,并且用于通信组件之间的控制传送。对于在控制端口之间具有链接的一对组件,(即使这些组件在集合端口之间也具有链接也)实施上游组件完成执行之后的下游组件的串行执行。在一些图形表示中,例如在编程图形界面中,这些控制端口通常由组件处的圆形连接器符号表示。
这些不同类型的端口实现数据处理图的灵活设计,从而允许利用端口类型的重叠属性进行数据流和控制流的有力组合。特别地,存在用于采用某种形式来输送数据的两种类型的端口(称为“数据端口”),即集合端口和标量端口;以及存在用于实施串行执行的两种类型的端口(称为“串行端口”),即标量端口和控制端口。数据处理图通常将具有作为没有任何连接的输入数据端口的“源组件”的一个或多个组件、以及作为没有任何连接的输出数据端口的“宿组件”的一个或多个组件。一些组件将具有连接的输入数据端口和输出数据端口这两者。在一些实现中,图不被允许具有循环,因此必须是有向非循环图(DAG)。可以使用该特征来利用DAG的某些特征,如以下更详细所述。
数据处理图的组件上的专用控制端口的使用还使得能够实现对计算的不同部分进行灵活控制,而使用某些其它控制流技术是不能实现的。例如,能够在数据处理图之间施加依赖约束的作业控制解决方案不提供利用定义单个数据处理图内的多个组件之间的依赖约束的控制端口而实现的细粒度控制。另外,向顺次运行的不同阶段分配组件的数据处理图不允许对各个组件进行排序的灵活性。例如,可以使用这里所述的控制端口和执行集来定义使用简单阶段不能进行的嵌套控制拓扑。这种更大的灵活性还可以通过在可能的情况下允许更多组件并发运行来提高性能。
通过以不同方式连接不同类型的端口,开发者能够指定数据处理图的组件的端口之间的不同类型的链接配置。例如,一种类型的链接配置可以对应于特定类型的端口连接至相同类型的端口(例如,标量到标量链接),并且另一种类型的链接配置可以对应于特定类型的端口连接至不同类型的端口(例如,集合到标量链接)。这些不同类型的链接配置既用作开发者在视觉上识别与数据处理图的一部分相关联的预期行为的方式,又用作向编译器/解释器120指示实现该行为所需的相应类型的编译处理的方式。虽然这里所述的示例使用不同类型端口的唯一形状来在视觉上表示不同类型的链接配置,但系统的其它实现可以通过提供不同类型的链接并且向各种类型的链接分配唯一的视觉指示(例如,厚度、线型、颜色等)来区别不同类型的链接配置的行为。然而,为了使用链接类型而非端口类型表示可能具有以上列举的三种类型的端口的相同种类的链接配置,将存在不止三种类型的链接(例如,标量到标量、集合到集合、控制到控制、集合到标量、标量到集合、标量到控制等)。其它示例可以包括不同类型的端口,但在数据处理图中不明确地从视觉上指示端口类型。
编译器/解释器120进行用以准备数据处理图以供执行的过程。第一过程是用以识别组件的潜在嵌套执行集的分层的执行集发现预处理过程。第二过程是用以针对各执行集而生成相应控制图的控制图生成过程,其中编译器/解释器120将使用该相应控制图来形成将有效地实现用于控制各执行集内的组件的执行的运行时状态机的控制代码。以下将更详细说明这些过程中的各过程。
具有至少一个输入数据端口的组件指定要对各输入数据元素或集合(或其多个输入端口上的数据元素和/或集合的元组)进行的处理。这种规范的一种形式是作为要对输入数据元素和/或集合中的一个或元组进行的过程。如果组件具有至少一个输出数据端口,则该组件可以产生输出数据元素和/或集合中的相应的一个或元组。这样的过程可以以基于语句的高级语言(例如,使用Java源语句、或者例如如美国专利8,069,129“Editing andCompiling Business Rules”中所使用的针对实例的数据操纵语言(DML))指定,或者可以以某种完全或部分编译的形式(例如,如Java字节代码那样)提供。例如,组件可以具有如下的工作过程,其中该工作过程的参数包括其输入数据元素和/或集合以及其输出数据元素和/或集合,或者更一般地,包括对这些数据元素或集合、或者对用于获取输入并提供输出数据元素或集合的过程或数据对象的引用(这里被称为“句柄(handle)”)。
工作过程可以是各种类型的。在不意图限制可指定的类型的过程的情况下,一种类型的工作过程根据记录格式来指定针对数据元素的离散计算。单个数据元素可以是来自表格(或其它类型的数据集)的记录,并且记录的集合可以是表中的所有记录。例如,针对具有单个标量输入端口和单个标量输出端口的组件的一种类型的工作过程包括接收一个输入记录,对该记录进行计算,并且提供一个输出记录。另一类型的工作过程可以指定如何处理从多个标量输入端口接收到的输入记录的元组以形成在多个标量输出端口发送出的输出记录的元组。
数据处理图所指定的计算的语义定义是固有并行的,因为该语义定义表示针对图所定义的计算的处理的定序和并发的约束和/或缺乏约束。因此,计算的定义不要求结果等同于计算步骤的某一顺序定序。另一方面,计算的定义不提供要求对计算的部分进行排序的某些约束、以及对计算的部分的并行执行的限制。
在数据处理图的论述中,作为运行时系统中的单独“任务”的组件的实例的实现被假定为表示排序和并行化约束的手段。在讨论了基于图的规范本身的特征之后,更充分地讨论将数据处理图实现为基于任务的规范的更具体讨论,其中基于任务的规范与语义定义一致地实现计算。
一般地,在数据处理图的执行期间,该图中的各组件将在计算平台中实例化多次。各组件的实例的数量可以依赖于组件要被分配至多个执行集中的哪个。在对组件的多个实例进行了实例化的情况下,不止一个实例可以并行执行,并且不同实例可以在系统中的不同计算节点中执行。组件的互连(包括端口的类型)确定指定数据处理图所允许的并行处理的性质。
尽管一般来说、组件的不同实例的执行之间不维持状态,但如下所讨论的,系统中提供了对于明确引用可跨组件的多个实例的执行的“永久数据”的特定规定。用以确保这种永久数据将可用于后来的执行、以及/或者在发生某些错误的情况下可恢复的一种方式是将这种永久数据持久地储存在持久存储介质(例如,可以在发生诸如供电中断等的一个或多个预定故障的情况下无丢失地储存信息的介质,诸如非易失性存储介质等)中。
在工作过程指定了如何处理单个记录以产生单个输出记录、并且端口被指示为集合端口的示例中,可以执行组件的单个实例,并且使工作过程迭代以处理连续记录从而生成连续输出记录。在这种情形中,可以在不同迭代之间在组件内维持状态。
在工作过程指定了如何处理单个记录以产生单个输出记录、并且端口被指示为标量端口的示例中,可以执行组件的多个实例,并且在针对不同输入记录执行工作过程之间不维持状态。
另外,在一些实施例中,系统支持不遵循以上介绍的细粒度规范的工作过程。例如,工作过程可以在内部实现迭代,其中该迭代例如通过标量端口来接受单个记录并且通过集合端口来提供多个输出记录。
如上所述,存在用于采用某种形式来输送数据的两种类型的数据端口,即集合端口和标量端口;以及存在用于强制实施串行执行的两种类型的端口,即标量端口和控制端口。在一些情况下,一种类型的端口可以通过链接而连接至另一种类型的端口。以下将说明这些情况中的一些情况。在一些情况下,一种类型的端口将链接至同一类型的端口。两个控制端口之间的链接(称为“控制链接”)在链接组件之间施加串行执行定序,而无需通过链接来发送数据。两个数据端口之间的链接(称为“数据链接”)提供数据流,并且还在标量端口的情况下强制实施串行执行定序约束,并且在集合端口的情况下不需要串行执行定序。典型的组件通常具有包括输入和输出数据端口(集合端口或标量端口)以及输入和输出控制端口的至少两种端口。控制链接将上游组件的控制端口连接至下游组件的控制端口。同样,数据链接将上游组件的数据端口连接至下游组件的数据端口。
3计算平台
参考回图1,在执行数据处理图的上下文中,数据处理图的组件的实例作为任务启动,并且一般在计算平台150的多个计算节点152中执行。如以下更详细所讨论的,接口/控制器140提供这些任务的调度和执行轨迹的监管控制方面,以实现系统的例如与计算负载的分配、通信或输入/输出开销的减少、存储器资源的使用相关的性能目标。
一般地,在编译器/解释器120的转译之后,就计算平台150可以执行的目标语言的过程而言,整个计算被表示为基于任务的规范130。这些过程使用诸如“启动”和“等待”等的原语(primitive),并且可以在这些原语中包括或者调用程序员针对高级(例如,基于图的)程序规范110中的组件所指定的工作过程。
在许多实例中,可以将组件的各实例实现为任务,其中一些任务实现单个组件的单个实例,一些任务实现执行集中的多个组件的单个实例,以及一些任务实现组件的连续实例。来自组件及其实例的特定映射依赖于编译器/解释器的特定设计,使得所得到的执行与计算的语义定义保持一致。
一般来说,运行时环境中的任务分层地排列,例如,一个顶级任务启动多个任务,例如,针对数据处理图中的各顶级组件启动一个任务。同样,执行集的计算可以包括用于处理整个集合的一个任务,其中多个(即,许多)子任务各自用于处理该集合的元素。
在运行时环境中,已经启动的各任务可以处于可能状态集中的一个状态。在首次启动时,任务在被初始执行之前处于启动状态。在执行时,任务处于执行状态。间或地,任务可以处于暂停状态。例如,在特定实现中,当任务超出处理器利用量、正等待资源等时,调度器可以使任务处于暂停状态。在一些实现中,任务的执行不被抢占,并且任务必须放弃控制。存在三种暂停子状态:可运行(Runnable)、被阻止(Blocked)、和已完成(Done)。例如,如果任务在已完成其计算之前放弃了控制,则该任务是可运行的。在任务例如在父任务检索该任务的返回值之前已完成其处理的情况下,该任务是已完成的。如果任务正在等待该任务外部的事件(例如,另一任务的完成)(这例如是因为该任务使用了“等待”原语)、或者数据记录的可用性(例如,阻止in.read()或out.write()函数的一个执行),则该任务是被阻止的。
参考回图1,各计算节点152具有一个或多个处理引擎154。各计算节点152还包括缓冲存储器156(例如,非易失性介质)、数据存储器157(例如,非易失性存储介质)、以及I/O接口158,其中I/O接口158对于计算平台150正消耗和/或产生的数据可以访问源和/或目的地160。一个或多个计算节点152上的缓冲存储器156和/或数据存储器157中的任一者或全部两者可被配置为可由多个计算节点152访问。在至少一些实现中,各处理引擎154与在计算节点152上执行的单个操作系统处理相关联。根据计算节点152的特征,可以高效地在单个计算节点152上执行多个处理引擎154。例如,计算节点152可以是具有多个单独处理器的服务器计算机,或者该服务器计算机可以包括具有多个处理器核的单个处理器,或者可能存在具有多个核的多个处理器的组合。在任何情况下,执行多个处理引擎可以比在计算节点152上仅使用单个处理引擎更高效。
处理引擎的一个示例托管在虚拟机的上下文中。一种类型的虚拟机是Java虚拟机(JVM),其中该Java虚拟机提供了可执行以编译形式指定为Java字节代码的任务的环境。但是可以使用其它形式的处理引擎,这些处理引擎可以使用或者可以不使用虚拟机结构。
4恢复
在一些示例中,上述的计算系统100实现恢复算法以确保:如果发生处理故障(例如,计算节点在处理操作期间发生故障),则可以重启该系统以使得该系统产生在没有发生故障或者已经进入睡眠或者减速一段时间段的情况下可能会产生的结果。
一个简单的恢复算法包括作为原子工作单元的数据处理,使得在发生故障之后,通过数据处理图完成的所有工作都被回退(roll back)。在该批处理方法中,计算系统通过使故障处理期间改变的任何文件恢复至处理开始之前的状态,来实现可恢复性。以这种方式,恢复算法可以确保所有工作都已完成、并且在故障处理期间进行的改变都被丢弃。这类恢复算法在利用以相对少量的时间处理所有数据的单个数据处理图处理数据时是特别有用的。
然而,在处理用于更新永久共享资源的多个图时,或者在处理用于在长(可能不确定)持续时间内处理数据的图时,将数据的处理视为可在发生故障之后全部回退的原子工作单元是不实际且有时不可能的。
4.1纠缠(Entanglement)
例如,在计算系统使用多个数据处理图并发处理一个或多个共享资源(包括更新永久共享数据)的情况下,由于被称为“纠缠”的状况,因此损失了可恢复性。共享数据是能够被至少两个不同数据处理图中的各数据处理图读取和写入(或修改)的数据。共享数据可以例如是其值作为不同数据处理图之间的共享状态和/或共享通信的形式被这些数据处理图读取和写入的变量。
对于纠缠的示例,考虑两个数据处理图正处理单独的共享数据集的情形,其中各数据处理图以原子方式对共享数据进行改变。可能发生两个数据处理图中的第一数据处理图处理数据集、以原子更新的方式进行改变、并且提交其改变以确认已使数据永久(例如,持久储存),此后在执行两个数据处理图中的第二数据处理图时发生故障的情形。如果系统实现用于将在第二数据处理图的故障处理期间改变的任何数据(包括共享数据)还原为其在处理开始之前的状态的恢复过程,则第一数据处理图针对共享数据进行的至少一些改变将不会完成,从而导致不一致。另一方面,如果系统不将在第二数据处理图的故障处理期间改变的任何数据(包括共享数据)还原为其在处理开始之前的状态,则由于在其处理开始时共享数据的状态是不正确的、因此第二数据处理图的输出也可能是不正确的。因此,由于纠缠,因此在故障之后不能单独还原对共享数据进行操作的数据处理图。
在存在纠缠处理的情况下进行恢复的一种方法包括:使多个数据处理图彼此隔离,使得这些图不能看到彼此的改变。然而,通常情况是数据处理图对相同的数据项进行操作,因此不可能进行隔离。此外,在一些示例中,多个数据处理图可能运行相对长的持续时间,这可能导致一个数据处理图等待另一个数据处理图释放锁、或者一个数据处理图由于死锁(使用悲观并发控制)或提交时冲突(使用乐观并发控制)因而被回退。在存在纠缠处理的情况下进行恢复的其它方法包括作为单个原子工作单元的一部分而运行多个数据处理图、或者串行运行多个数据处理图。
4.2长运行图
在一些示例中,计算系统100中执行的数据处理图在没有定义明确的任何结束点的情况下处理连续数据流。这些数据处理图有时被称为“摄取图”。在处理连续数据流时,将所有数据的处理视为单个原子工作单元是不合适的,并且上述的恢复方法不足以从计算系统中的故障中成功恢复。
用于从这种计算系统中的故障中恢复的一种方法包括:将连续数据流分割成一系列较小的输入数据“脉冲”并且单独地处理该系列输入数据脉冲。在完成处理给定输入数据脉冲时,创建图的内部状态的检查点。在发生故障的情况下,计算系统可以使用检查点来恢复图的内部状态并且在连续数据流的处理中的中间点处重新开始处理。在一些示例中,如果计算系统包括纠缠的长运行图,则该计算系统必须协调检查点以确保所有图都共享共通的提交时间。
如这里所使用的,被分割成多个脉冲、也被称为“数据单元流”的输入数据将被认为是例如包括在从外部源接收到之后读取的任何输入数据序列、或者通过访问任何共享变量的存储状态或用作输入数据源的任何内部系统状态来读取的任何数据单元。
例如,参考图2A,计算系统100在时刻t0开始标记为“A”的第一图和标记为“B”的第二图,并且这些图开始处理第一输入数据脉冲。在时刻t1,第一图和第二图这两者完成第一输入数据脉冲的处理,并写入第一检查点。在写入第一检查点的情况下,第一图和第二图开始处理第二输入数据脉冲。在时刻t2,第一图和第二图这两者完成第二输入数据脉冲的处理,并写入第二检查点。在写入第二检查点的情况下,第一图和第二图开始处理第三输入数据脉冲。在时刻t3,第三输入数据脉冲的处理出现故障。
参考图2B,为了从故障中恢复,计算系统使用第二检查点来将第一图和第二图还原成在第二输入数据脉冲的处理完成时它们各自的状态。
参考图2C,在将第一图和第二图还原成第二输入数据脉冲的处理完成时它们各自的状态的情况下,图成功地对第三输入数据脉冲进行再处理并在时刻t4写入第三检查点。
4.3一般检查点设置算法
用以保存检查点数据的一种方法包括:使“检查点主”节点(例如,系统中的计算节点其中之一)通过将新检查点消息广播至计算系统中的所有其它计算节点来首先发起检查点设置。一旦在计算节点处接收到新检查点消息,则该新检查点消息使服务器暂停所有计算活动。然后,计算系统等待传递系统中的计算节点之间运送的所有消息。
一旦所有消息都已被传递,则各计算节点将其任务状态、待处理消息、永久数据和瞬时状态保存至检查点文件。然后,主计算节点写入用于提交检查点的日志条目,并将消息发送至系统中的所有计算节点以继续处理。
虽然上述方法确实得到了能够从处理连续输入数据流的故障中恢复的检查点设置过程,但是存在与该方法相关联的许多缺点。例如,以上方法需要使处理暂停相对长的持续时间,在此期间,计算系统不能够完成有用的处理。此外,保存计算节点的任务状态是计算密集型的,并且将导致计算系统花费过量的时间来保存任务状态而不处理输入数据。最后,计算系统具有大量瞬时状态,诸如事务数据存储提交管理器的状态、对事务数据存储表和索引的动态更新、动态服务呼叫、从一个服务器移动向另一服务器的动态数据移动、从一个服务器向另一服务器的动态处理迁移、以及对共享数据(例如,在计算系统100中执行的两个或更多个任务(与数据处理图的组件相关联)可访问的数据)的动态访问等。在一些示例中,保存该瞬时状态是计算上昂贵且复杂的。
4.4脉冲摄取算法
脉冲摄取算法依赖于计算系统中执行的图的多个属性,以避免与一般检查点设置算法相关联的缺点。计算系统中执行的摄取图的一个属性是,这些摄取图以一次一个记录的方式摄取数据(例如,摄取包括重复读取记录和更新共享永久数据)。计算系统中执行的摄取图的另一属性是,这些摄取图从一个记录到下一个记录是无状态的。也就是说,所有状态都被保持在图可访问的永久数据(例如,共享数据集合和事务数据存储表)中。此外,在一些示例中,计算系统中执行的数据处理图仅包括从一个记录到下一个纪录无状态的组件。
基于计算系统中执行的图的这些属性,在图的单次运行中摄取整个输入数据流与从输入数据流中摄取输入数据脉冲、彻底地关闭该图(即,使得所有处理能够在完成与该数据脉冲相关联的任何处理之后正常退出)、然后重新开始这些图以处理输入数据流的后续脉冲之间不存在差异。由于这些图能够以脉冲摄取方法彻底关闭,因此计算系统无需在检查点设置处理期间保存大量的内部图状态。
4.4.1单图脉冲摄取算法
参考图3,用于处理单个图中的输入数据流的脉冲摄取算法包括在时刻t0开始图。一旦开始,该图就处理来自输入数据流的第一输入数据脉冲以生成输出数据,其中该图将该输出数据储存在第三方保管中(即,不立即将输出提供给下游处理)。在时刻t1,脉冲结束指示(例如,文件结束(EOF)字符)被插入到输入数据流,从而指示第一输入数据脉冲的结束。当图在时刻t1遇到脉冲结束指示时,该图停止从输入数据流摄取新数据。然后从时刻t1到时刻t2,图完成针对该图在时刻t1已进行处理的所有数据的处理(即,允许图“挂起(quiesce)”)。在图3中,时刻t1和t2之间的挂起时间段被示出为处理负荷的斜降370。
在时刻t2,一旦图已经挂起,计算系统就开始写入检查点,包括将所有永久数据、流输入数据的状态(例如,当前位置)、以及输出数据的状态写入持久存储器中。在时刻t3,在完成检查点向持久存储器的写入时,将与第一输入数据脉冲相关联的第三方保管输出数据释放至下游处理。然后,在时刻t4,图重新开始并且(在上述过程之后)开始处理来自输入数据流的第二输入数据脉冲。
一般来说,鉴于图被允许在写入检查点之前挂起,则由于图未运行、因此系统中不存在处理状态、消息和瞬变。在一些示例中,由于每个输入数据脉冲都非常小(例如,每秒存在100个脉冲),因此与关闭和重新开始图相关联的开销非常小。这会导致对于需要足够短的响应延迟的应用而言理想的高频率的检查点设置(例如,10ms的检查点间隔)。例如,某些应用要求重新开始(即,关闭图、等待处理正常退出、以及再次启动)的开销明显小于10ms(例如,小于1ms)。此外,在与检查点间隔(例如,1ms)进行比较的情况下,写入检查点所需的时间也很小。在一些示例中,通过储存某些启动相关处理结果并且针对后续的输入数据脉冲再使用(而非再计算)这些结果以进行更快的启动,来实现重新开始定时要求。在一些示例中,以低频率(例如,每10秒或每分钟)重新计算储存结果。
参考图4,在恢复过程的示例中,计算系统使用(如上所述的)单个图来处理第一输入数据脉冲,并在时刻t3存储第一检查点。在时刻t4,系统开始使用该图来处理第二输入数据脉冲。然后,在时刻t5,第二脉冲的处理出现故障。由于该故障,系统在时刻t6关闭所有计算(例如,停止针对未出现故障的任何计算节点的处理),并且使用第一检查点来将其输入数据和输出数据的状态还原成第一数据脉冲的处理完成时(即,时刻t2)的系统状态。为此,系统使第二输入数据脉冲倒回至其初始状态(即,在时刻t4),并且丢弃第二输入数据脉冲的任何第三方保管输出数据。在时刻t7,使用检查点来使系统的永久数据还原成其在第一数据脉冲处理完成时的状态。
在时刻t8,在系统完全还原为其在第一数据脉冲处理完成时的状态的情况下,图重新开始并且开始对第二输入数据脉冲进行再处理。在图4中,第二输入数据脉冲的再处理成功。
4.4.2多图脉冲摄取算法
参考图5,在一些示例中,在系统包括多个图(例如,多个摄取图)的集合的情况下,该系统被配置为通过图的集合来同步地处理数据脉冲。
特别地,用于处理多个图的集合中的一个或多个输入数据流的脉冲摄取算法包括在时刻t0开始集合中的所有图。一旦开始,每个图就处理来自一个或多个输入数据流的第一输入数据脉冲以生成相应的一个或多个输出数据流,其中这一个或多个输出数据流被储存在第三方保管中(即,不立即将输出数据流提供给下游处理)。在时刻t1,脉冲结束指示被插入到输入数据流,从而指示第一输入数据脉冲的结束。在一些示例中,使用障碍同步操作来确保脉冲结束指示被同步插入到两个或更多个输入数据流中。当图在时刻t1遇到脉冲结束指示时,这些图停止从输入数据流摄取新数据。然后从时刻t1到时刻t2,这些图完成针对图在时刻t1已进行处理的所有数据的处理(即,允许图“挂起”)。在图5中,时刻t1和t2之间的挂起时间段被示出为处理负荷的斜降570。
在一些示例中,使用另一障碍同步来等待所有图退出。一旦图在时刻t2都退出,就写入检查点,其中将所有永久数据、流输入数据的状态(例如,当前位置)、以及输出数据的状态写入持久存储器中。在时刻t3,在完成检查点向持久存储器的写入时,将与第一输入数据脉冲相关联的第三方保管输出数据流释放至下游处理。然后,在时刻t4,图使用另一障碍同步操作来同步重新开始,并(在上述过程之后)开始处理来自输入数据流的第二输入数据脉冲。
4.4.3增量管线型检查点
在一些示例中,针对每个检查点操作保存永久数据的全部内容是不实际的,这是因为这样做可能需要数分钟或者甚至数小时,而系统可能仅需要使摄取数据在几分之一秒的时间内可用。
用以减少针对每个检查点所保存的数据量的一种方法是在处理特定输入数据脉冲时以增量方式将永久数据的改变写入日志。这样做将针对给定检查点所写入的数据量限制为在特定输入数据脉冲的处理中发生改变的数据量。这样做的一个优点是,日志的条目(表示永久数据的改变)至少在系统开始形成并储存检查点之前处于持久储存的过程中。此外,以增量方式将改变写入日志避免了在形成检查点时产生保持改变数据项的“脏列表”并遍历该列表的开销。以增量方式将改变写入日志的另一优点是,可以利用可用于标识不同脉冲的日志条目之间的边界的“检查点标记”来标示日志的条目。在使用检查点标记时,系统可以开始处理第二脉冲,同时仍然持久储存先前的第一脉冲的日志条目。
参考图6,利用增量管线型检查点设置的脉冲摄取算法包括在时刻t0开始图。一旦开始,图就处理来自输入数据流的第一输入数据脉冲以生成储存在第三方保管中的一个或多个输出数据流。此外,在处理第一输入数据脉冲期间发生的永久数据的改变与这些改变的发生异步地储存为日志中的条目。
在时刻t1,脉冲结束指示被插入到输入数据流,从而指示第一输入数据脉冲的结束。当图在时刻t1遇到脉冲结束指示时,这些图停止从输入数据流摄取新数据。然后,从时刻t1到时刻t2,这些图完成针对图在时刻t1已进行处理的所有数据的处理(即,允许图“挂起”)。在图6中,时刻t1和t2之间的挂起时间段被示出为处理负荷的斜降670。
在时刻t3,一旦图已经挂起,就将包括检查点计数器的检查点记录写入日志,并且系统开始持久地储存检查点记录(包括持久地储存所有永久数据、流输入数据的状态(例如,当前位置)、以及输出数据的状态)。在时刻t4、并且在检查点记录被持久储存之前,图重新开始并且开始处理来自输入数据流的第二输入数据脉冲。在时刻t5,系统完成持久储存检查点记录,并且与第一输入数据脉冲相关联的第三方保管输出数据被释放至下游处理。系统继续根据上述的算法处理第二输入数据脉冲。
在一些示例中,上述的算法被修改为允许多个检查点同时进行。为此,持久储存的不同数据集彼此区分开。例如,利用检查点计数器来标示保持在第三方保管中的任何输出数据,并且利用检查点计数器来标示被写入日志的检查点记录。
每当给定检查点的所有检查点记录(n个)变得持久时,提交该给定检查点并且从第三方保管释放利用给定检查点的检查点计数器标示的所有输出数据。注意,在该方法中,该最后步骤与检查点设置算法的迭代异步地进行,而不是在进行检查点设置算法的后续迭代之前进行等待直到来自当前检查点的检查点记录变得持久为止。在来自不同检查点迭代的检查点记录的写入不重叠的情况下,允许持久储存检查点记录的处理重叠。
4.4.3.1增量管线型检查点示例
参考图7A,在增量管线型检查点设置方法的一个示例中,计算系统100从输入流111中接收输入数据流112,处理该输入数据流112,并向输出流131提供输出数据流。计算系统100包括多个计算节点121,其中这多个计算节点121以分布式方式处理输入数据以生成输出数据,例如如以上针对计算节点152更详细所述。
在操作中,计算系统100使用摄取图以一次一个或几个记录的方式从输入数据流摄取数据。使用运行在计算系统102的计算节点121上的一个或多个数据处理图来处理摄取数据。输入数据流112被分割为包括第一输入数据脉冲112A、第二输入数据脉冲112B和第三输入数据脉冲112C的脉冲,其中所有这些输入数据脉冲通过脉冲结束指示分离开。在一些示例中,脉冲结束指示根据输入数据的现有或固有结构(例如,每个记录、每n个记录等)而被插入到输入数据流112中。在一些示例中,系统动态地或任意地确定将脉冲结束指示插入输入数据流112的位置。在一些示例中,系统在该系统暂时挂起时插入脉冲结束指示。各输入数据“脉冲”包括输入数据流112内的连续数据单元子集。如这里所使用的,各“连续”数据单元子集包括在输入数据流112内按某种定序进行排序、并且不与连续数据单元的任何其它子集相重叠的数据单元。
在一些示例中,脉冲的大小(有时称为“检查点间隔”)是基于频繁的检查点设置所引起的吞吐量降低与应用所需的响应延迟(受检查点间隔限制,这是因为在任何给定时刻,可以不提供来自图的响应,直到执行完全检查点为止)之间的折衷而确定的。
参考图7B,随着计算系统100从数据流的第一脉冲112A摄取数据,摄取数据122A(例如,单独的记录)被提供至计算节点121以供根据一个或多个数据处理图进行处理。如果需要恢复操作,则还持久储存来自第一脉冲112A的摄取数据113A的副本以供后续检索用。
计算节点121所生成的输出数据流132A被提供至输出流131,但是被保持在(打开开关135所示的)第三方保管中,使得输出数据132不被提供至下游处理(例如,下游计算系统中所实现的处理(未示出))、直到整个第一脉冲112A已被成功处理为止。在一些示例中,输出数据流与用于将输出数据链接至其关联的输入数据脉冲的唯一标识符相关联。
随着输入数据流112的第一脉冲112A的处理进行,永久数据的状态、流输入的状态、以及流输出的状态发生改变。在一些示例中,计算系统100进行如下的检查点过程,其中在该检查点过程中,这些状态改变在发生时(有时异步地)被记录在易失性临时日志141中。临时日志141将记录的状态改变异步地写入持久日志142中。在一些示例中,临时日志141和持久日志142中所储存的状态改变还与唯一标识符相关联,使得输出数据流和日志状态改变均链接至其关联的输入数据脉冲。在一些示例中,唯一标识符被称为“检查点标识符”。
参考图7C,在摄取整个第一脉冲112A时,计算系统100遇到用于以信号形式通知计算系统100进行检查点过程的脉冲结束指示。在检查点过程中,计算系统停止摄取数据并且允许计算节点121挂起(即,完成计算系统100中存在的第一脉冲112A的任何未处理记录的处理)。在该时间期间,临时日志141连续将记录的状态改变异步地写入持久日志142中。最终,一旦计算节点121挂起,计算系统100就完成与第一脉冲112A相关的状态改变向临时日志141的记录。
通过允许计算系统挂起,确保在系统完成与第一脉冲112A相关的状态改变向临时日志141的记录时,计算系统中不存在处理状态、消息或瞬变,这是因为数据处理图此时并未运行。
参考图7D,在针对第一脉冲112A的检查点被记录在临时日志141中的情况下,计算系统100开始处理第二数据脉冲112B。为此,计算系统100从数据流的第二脉冲112B摄取数据,并且将摄取数据提供至计算节点121以供根据一个或多个数据处理图进行处理。如果需要恢复操作,则还将来自第二脉冲112B的摄取数据113B的副本以永久数据的形式储存以供后续检索用。
随着数据流的第二脉冲112B的处理进行,永久数据的状态、流输入的状态、以及流输出的状态发生改变。进行针对第二脉冲112B的检查点过程,其中在该检查点过程中,状态改变在发生时被记录在临时日志141中。在如图7D所示的时刻,临时日志141尚未完成第一脉冲112A的记录状态改变向持久日志142的异步写入,因此临时日志141包括第一脉冲112A和第二脉冲112B(各自由其唯一的检查点标识符进行标识)的记录状态改变。在一些示例中,通过允许在使与先前的第一输入数据脉冲相关联的日志条目持久之前写入与第二输入数据脉冲相关联的日志条目,计算系统能够使脉冲间隔缩小到小于1次盘旋转(约10ms),这是因为检查点并且因此脉冲可以在已使检查点持久(这可能需要等待约完整的盘旋转)之前重复。
只要临时日志141尚未完成异步写入第一脉冲112A的记录状态改变,第一输出数据流132A就保持在第三方保管状态下。
计算节点121所生成的第二输出数据流132B被提供至输出流131,并且也保持在第三方保管中(在第一输出数据流132A之后),使得第二输出数据流132B不被提供至下游处理,直到第二脉冲112B已成功处理为止。
参考图7E,当临时日志141完成第一脉冲112A的记录状态改变向持久日志142的写入(例如,提交检查点)时,开关135关闭并且第一输出数据流132A被释放至下游处理。持久日志142中所储存的第一脉冲112A的记录状态改变表示在完成第一脉冲112A的处理时的计算系统100的状态,并且被统称为第一检查点。在第一检查点被写入持久存储器的情况下,临时日志141中不再存在与第一脉冲112A相关联的状态改变。
参考图7F,开关135重新打开,使得第二输出数据流132B保持在第三方保管中。计算系统100继续摄取并处理第二数据脉冲112B以添加至第二输出数据流132B。在第一检查点被写入持久日志142的情况下,临时日志141开始将包括第二脉冲112B的记录状态改变的第二检查点异步地写入持久日志142中。
参考图7G,在第二脉冲112B的处理期间的某一点,出现错误并且进行恢复过程。一般来说,错误恢复过程将计算系统的状态还原成其在第一检查点时的状态(即,其在第一脉冲112A的处理完成时的状态)。例如,在恢复过程中,永久数据的状态、流输入的状态、以及流输出的状态被还原。这包括清除第二输出数据流132B并且将第二脉冲112B的摄取数据113B的副本与第二脉冲112B的未处理部分进行组合以重构原始的第二脉冲112B。使用持久日志142中的状态信息,以将计算系统100的状态(即,永久数据的状态、流输入的状态、以及流输出的状态)还原成第一检查点所表示的状态。
在完成恢复过程时,计算系统100像从未发生过错误一样开始处理第二脉冲112B。
4.5分布式日志
在上述的计算系统中,包括状态改变的检查点记录被持久地储存至单个全局日志。在一些示例中,使用单个全局日志会限制系统可扩展性。参考图8,在进一步可扩展的方法中,计算系统100使用分布式日志来储存检查点。例如,计算节点121各自保持其自身的各临时日志141和持久日志142。
在一些示例中,计算节点121所保持的各日志被称为日志片段,其中各日志片段与永久数据的不同片段相对应。例如,计算系统100中的各计算节点121与涵盖同该计算节点121相关联的数据的日志片段相关联。每当计算系统100改变数据项时,该计算系统100就将日志条目写入与该数据项相关联的日志片段(即,写入与用于储存数据项的计算节点121相关联的日志片段)。
4.5.1快照
在一些示例中,一个潜在问题是,所有日志片段的总大小可以无限增长,从而消耗无限的存储量。此外,从故障中恢复的时间于是也将无限增长,这是因为系统将需要完整地重放日志片段。该潜在问题的解决方案包括对与日志片段相对应的数据进行“拍快照”,然后丢弃日志片段中的在拍快照处理开始之前创建的部分。在故障的情况下,计算系统可以通过加载快照、然后对来自快照的数据应用日志来恢复。在一些实现中,快照与数据库检查点共享特定属性。
在用以储存快照的一个方法中,各快照具有关联的开始时刻和关联的结束时刻。已知快照内的任意特定部分的永久数据的状态存在于开始时刻和结束时刻之间的某一时刻。在一些示例中,快照作为快照片段分布,其中各快照片段与给定日志片段相关联。一般来说,系统重复地生成针对各数据片段的快照片段,直到系统关闭为止。为此,针对各数据片段,系统创建快照片段并将其表示为“待处理”。在一些示例中,跨多个服务器复制快照片段。然后,计算系统将快照片段的开始时刻设置为当前处理检查点的唯一检查点标识符(例如,检查点计数器)的当前值。在快照处于待处理状态并且与唯一检查点标识符相关联的情况下,该快照被认为是“已开始”。
然后,扫描与数据片段相关联的永久数据,并且将当前数据值(即,自先前的快照片段以来尚未持久写入日志的数据值)写入与该数据片段相关联的快照片段。在一些示例中,被写入快照的各当前数据值与当前数据值有效的时间戳相关联。系统等待快照片段变得持久、然后等待当前日志片段提交,从而保证快照片段仅包括提交数据。然后,快照片段具有被设置为唯一检查点标识符的当前值的结束时刻,其中该结束时刻被认为是快照片段的“结束”。将快照片段标记为最后,并且清除任何先前的快照片段。在一些示例中,日志被前向截断以确保忽略与该快照片段开始前的唯一检查点标识符相关联的所有日志条目,从而使存储空间得以回收。
在计算系统100发生故障时,该系统可以将与日志片段相关联的持久存储器还原至大于或等于快照的“结束”的任何提交检查点。在一些示例中,系统100通过首先将快照片段的内容加载到持久存储器内来实现这一点。然后,系统100检查快照片段中的数据项及其关联的时间戳,以识别与这些时间戳处有效的数据项的版本相对应的日志片段中的条目。然后,系统100通过重新进行来自快照片段中尚未反映的日志片段的任何更新使来自快照片段的数据项的值前滚,来将持久存储器还原成提交检查点,直到发现期望检查点标记为止(其中前滚从识别的日志片段中的条目开始)。如果与日志片段相关联的持久存储器在故障中幸存,则系统可以通过以相反的顺序扫描日志片段、以快照片段中的值开始、并且撤销所有改变直到遇到持久存储器处于与期望检查点相关联的状态为止,来使日志片段回退至大于或等于快照的“结束”的任何期望检查点。
在一些示例中,针对各检查点,日志片段被形成为不同的文件。系统能够通过移除与旧检查点相关的文件来前向截断日志。在一些示例中,计算系统功能100将多个检查点打包在单个文件中。各文件因此包括检查点的范围。在系统前向截断日志时,该系统删除在截断点之前具有最高检查点的文件。在恢复时间,系统忽略截断点之前的所有日志条目。可以通过在辅助文件中记录给定文件中的各检查点记录的文件偏移来加快该处理。
鉴于以上日志结构,计算系统可以通过首先停止该计算系统中的所有处理来恢复最近提交的检查点。对于各故障计算节点,(可以在不同的物理节点上)开始新的计算节点。对与计算节点相关联的日志片段和快照片段中的至少一个复本进行定位和使用以还原至(如上所述的)提交检查点。所有幸存计算节点使其永存数据回退至提交检查点,并清除第三方保管数据。使计算系统的输入数据回退至先前的脉冲结束指示,并且继续处理。
基于以上恢复过程,在系统继续处理之前,该系统已经将所有永久数据都还原至最近提交的工作单元的状态,然后利用后续的工作单元来重新开始处理。
可恢复处理技术的各种其它示例可以与这里所述的技术组合使用(包括美国专利6,584,581和美国专利9,354,981中所述的技术),上述文献各自通过引用而并入于此。
4.6复制
上述的方法提供了可恢复性,但是未必提供高可用性或容错性。例如,在故障之后,系统需要从快照中再加载与任何故障服务器相关联的永久数据,然后对期望检查点再应用所有改变,该处理可能需要数小时,在此期间,系统是不可用的。
在一些示例中,通过复制永久数据(例如,使用数据库分片(sharding)或分区技术)来实现高可用性和容错性,使得故障不可能破坏所有复本。例如,可以在不同物理节点上复制各个数据,使得单个事故不可能破坏所有复本。这样做通过例如确保复本位于具有不同电源的节点上或者甚至位于不同数据中心来得到更高的弹性程度。在一些情形中,复制方法还消除了对持久储存检查点和快照数据的需要。
在一个方法中,复制永久数据的各数据项(例如,事务数据存储表中的行、共享数据实例),使得存在数据项的主复本以及该数据项的一个或多个备份复本。为了实现该方法,检查点计数器首先初始化为0。然后开始计算系统中运行的所有图。每当永久数据中的数据项发生改变,就将利用检查点计数器进行标示的复制消息异步地发送至其复本。计算系统所生成的所有输出数据被保持在第三方保管中,利用检查点计数器进行标示,并且不是立即可见。
最终,针对所有流输入接收脉冲结束指示,从而使计算系统中运行的所有图彻底关闭。一旦所有图都已退出,就使检查点计数器增加。然后重新开始计算系统中的所有图。
一旦已经接收到给定检查点的所有复制消息,就提交检查点并且从第三方保管释放利用该检查点计数器值进行标示的输出数据。因此,在该方案中,复制恰好完全替换日志记录。
为了在使用上述的复制方案时从故障中恢复,首先停止所有的处理。针对在计算节点的故障中丢失的任何主复本,选择备份复本其中之一以用作主复本。然后,针对各复本,将该复本的状态恢复至其最后提交的检查点。清除任何第三方保管的输出数据,并且将所有输入数据恢复至最后的脉冲结束指示被插入的点。然后使用上述的方法来继续处理。
在一些示例中,通过首先在每个数据项中包括主键来选择主复本,其中主关键字可以被散列以产生服务器的列表,使得集合中的至少一个服务器有可能在故障中幸存。列表中的第一个服务器被选择为主复本。所有其它服务器是从服务器。如果计算节点发生故障,则系统将其标记为不再可操作。如果计算节点已经还原,则系统会再次将其标记为可操作。
在一些示例中,这里所述的复制技术的关键要求是能够在发生故障、且需要恢复操作时使复本回退至提交检查点。满足该要求的一种复制技术根据以下算法进行操作。在系统改变数据项时,系统发送针对数据项的新值的复制消息。在计算节点接收到复制消息时,该计算节点对复制消息进行排队并将复制消息异步地应用至目标复本。在一些示例中,当系统向数据项应用复制消息时,系统创建允许该系统撤销改变的回退条目。回退条目用于故障之后的回退处理。在一些示例中,利用相关联的唯一检查点标识符来标示回退条目。可选地,系统将数据项的多个版本保持在存储器中。
在故障之后,各幸存服务器进行以下过程以恢复至检查点状态。首先,处理在恢复点之后未利用唯一检查点标识符进行标示的所有未处理复制消息。然后,以接收的相反顺序应用利用恢复点之后的检查点生成进行标示的所有回退条目。在应用所有回退条目之后,所有数据都处于与期望恢复点相对应的状态。注意,工作量与需要回退的、在任意生成期间改变的数据量成比例,使得如果系统具有亚秒级摄取脉冲、则系统可以实现亚秒级恢复是完全合理的。
最终,故障服务器还原服务(或者使替换在线)。然后,复制系统将数据复制回到故障服务器上,并且可能还原该服务器上的一些或全部数据的“主”状态。
4.7组合的复制和日志记录
在一些方法中,计算系统中采用了复制和日志记录这两者。例如,复制用于实现高可用性和容错性,但是它受到了如下的灾难性故障模式,其中过多服务器的同时故障(例如,所有这些故障都由于整个数据中心的电力损失或冷却)将会永久地丢失数据而无法恢复。除复制以外,日志记录用于通过将恢复信息储存在诸如盘驱动器等的高度持久存储器上来防范这种故障。在该方法中,日志的使用采用灾难恢复的形式,这可能需要相当长的停机时间。
在一个示例中,以日志记录然后复制过程进行组合的复制和日志记录。例如,计算系统在发生日志记录的点(即,主复本)处以日志形式记录数据项的改变,然后跨多个装置复制日志。这类方法可用于HDFS(Hadoop文件系统),其中该HDFS被配置用于复制写入文件的一切。在一些示例中,该方法的缺点是,每个数据项更新导致两波网络业务:一波是复制数据,一波是复制日志。在另一示例中,以复制然后日志记录过程来进行组合的日志记录和复制。例如,在多个传统文件系统上,计算系统可以在发生改变的点以及远处的复制点以日志形式记录这些改变。在系统复制数据时,该方法仅涉及一波网络业务,这是因为日志与复本位于同一位置。除了网络业务的差异外,上述的两种组合的日志记录和复制示例基本上是等效的。
由于写入盘时所涉及的延迟,因此计算系统以针对给定检查点的两个级别的持久性结束:复制级别持久性和日志记录级别持久性。复制级别持久性不保证防范灾难性多节点故障。这种区别可能影响系统从第三方保管释放数据的点。如果系统在该系统具有复制级别持久性的点处从第三方保管释放传出数据,则该系统减少延迟并且可以增加脉冲频率。这样做的缺点是,在灾难性故障之后,其它应用可能已经“看到”将被回退的数据。鉴于灾难性故障的(有希望的)罕见,这可以是合理的折衷。然而,保守的选择是等待日志记录级别持久性。
4.8与事务数据存储器的交互
参考图9A,在一些示例中,两个或更多个计算系统100既采用上述的日志记录技术,又与事务数据存储器151进行交互。事务数据存储器151独立地保证事务的ACID(原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability))属性。在一些示例中,事务数据存储器151的这种属性有可能破坏检查点机制,这是因为即使事务数据存储事务所属的检查点由于故障而被回退,这种属性也可以使事务数据存储事务持久。
为了解决该问题,事务数据存储器151的提交协议被修改为将“ACI”与“D”分离开。也就是说,当事务数据存储事务提交时,该事务数据存储事务保证原子性、一致性和隔离性,但不保证持久性。在修改后的提交协议中,当检查点提交并且变得持久时,发生持久性。在一些计算系统中,禁止这种分离,但是在这里所述的计算系统中,允许这种分离,这是因为如果检查点不能提交,则在回退期间消除事务数据存储提交的所有证据。特别地,这种分离参与的任何响应将被保持在第三方保管中并在回退期间被丢弃。
在图9A中,与第一数据脉冲112A相关的事务数据存储事务尚未被提交至事务数据存储器151,并且由第一数据脉冲112A生成的输出数据流132A被保持在第三方保管中,这是因为与第一数据脉冲112A相关的检查点尚未持久。参考图9B,一旦与第一数据脉冲112A的检查点持久,就将与第一数据脉冲112A相关的事务数据存储事务提交至事务数据存储器151、并从第三方保管中释放输出数据流132A。
4.9检查点触发
在上述的示例中,检查点的触发基于时间(例如,检查点是定期触发的)。然而,检查点的触发无需基于时间。在一些示例中,基于资源约束来触发检查点。例如,排队系统可以仅允许在提交所接收到的消息之前接收有限数量的记录。因此,在这种情况下,与可能已经指定的任何脉冲间隔无关地,系统必须在到达或紧密接近该限制时触发检查点。
4.10与未设置检查点的应用和数据的交互
并非所有应用都可以或者应该在上述检查点算法下进行操作。例如,一些应用在太粗的时间粒度上进行操作(例如,运行数小时的批图)。其它应用可能在太细的时间粒度上进行操作(例如,具有比检查点间隔短的所需响应时间的服务)。在一些示例中,这里所述的方法使用“检查点组”的概念来与未设置检查点的应用和数据进行交互。
4.10.1检查点组
一般来说,检查点组是永久数据以及在相同脉冲时间表上进行检查点设置的关联图的集合。如果不同的应用具有不同的时间/吞吐量折衷,则系统可以包含多个检查点组。例如,系统可以包括具有为效率起见而需要相对大(例如,100毫秒)的检查点间隔的大量传入数据(例如,服务器集群中的100个核处理的每秒1亿个记录)的一个检查点组、以及具有检查点间隔为10毫秒(为了优化响应时间而选择)的少量传入数据的另一检查点组。针对一些应用,接近1秒的检查点间隔可以不提供足够短的响应延迟。
在一些示例中,可以使用数据处理图中的声明组件来配置检查点组。该组件可被包括在需要参与该组的所有图中。另外,该组件在任意共享数据的声明或需要在该组内进行管理的事务数据存储表中被引用。给定数据集至多可被单个检查点组“拥有”,这是因为该给定数据集是确定其检查点间隔的因素。在一些示例中,检查点组声明包括附加信息,诸如期望复制方案、可保持检查点和日志记录的数据目录、脉冲频率等。
并非所有数据且并非所有图都存在于检查点组内。例如,事务数据存储表可主要由事务服务而非流摄取图所使用。诸如Cassandra和Oracle等的第三方永久存储器中所储存的数据将需要在检查点组外。
4.10.2内部和外部访问
在该上下文中,存在两种任务(内部和外部)和两种数据(内部和外部),其中“内部”意味着由检查点组管理,而“外部”意味着不由检查点管理。如果存在多个检查点组,则这多个检查点组各自将彼此视为“外部”。内部和外部之间的所有访问都被视为“外来”。一般来说,外来访问有四种情况:内部任务读取外部数据,内部任务写入外部数据,外部任务读取内部数据、以及外部任务写入内部数据。这些情况各自具有与正确性相关的关联问题。
4.10.2.1内部任务读取外部数据
检查点组内部的任务可以读取检查点组外部的数据而不对正确性产生任何影响。例如,考虑内部任务从Cassandra读取数据的情形,出现故障并且检查点回退,任务重新开始,任务在重新开始之后从Cassandra读取数据并得到不同的回答。
乍看起来,系统似乎可能会受到不一致,这是因为该系统对于第二次读取得到了不同的回答。但是由于回退消除了第一次读取的所有证据(evidence),因此不存在不一致。这恰好就像应用已经睡眠了一段时间,然后醒来并且从Cassandra得到“第二个”回答。因此,系统满足可恢复性的定义。
4.10.2.2内部任务写入外部数据
如果检查点组内部的任务向检查点组外部写入数据,则系统可能以两种方式其中之一适当地违反可恢复性。首先,写入可能变得持久,但进行更新的任务被回退。这可能导致重复更新,因此是不正确的。这只能通过用心的应用设计来处理。其次,如果写入器不(或者不能)等待更新持久,则写入可能会丢失。因此,例如,内部任务可以更新Casandra然后被回退,并且Casandra更新可以变得持久。将需要用心的应用设计以避免这种可能性。
4.10.2.3外部任务读取内部数据
如果检查点组外部的任务读取内部的数据,则系统冒险对故障之后可能被回退的数据进行“脏读取(dirty read)”。以下是解决该问题的两种方式的示例。首先,系统可以乐观地进行脏读取。例如,针对内存数据运行自组织查询,并且非常值得怀疑的是脏读取的效果是否将具有任何可检测结果。另外,与针对数据库的脏读取相比,检查点组内部的脏读取显著更安全,这是因为数据库事务在正常处理过程中被回退,而检查点组回退仅在重大故障之后发生且在正常处理过程中不会发生。这意味着脏读取几乎没有任何影响。
其次,系统可以将读取推送至检查点组内。在该模式中,系统向检查点组内部运行的服务发送SV应用或事务数据存储事务,并且将回答保持在第三方保管中,直到下一检查点为止。该操作将引起延迟,但是将脏读取转换为干净读取。该操作也可以完全在服务器软件中处理,使得用户将永久不会知道读取推送(read-push)。
注意,第二种方法不能用于允许一个检查点组访问另一检查点组内的数据,这是因为读取器的检查点组不能进行检查点设置,直到数据从第三方保管中释放为止(系统不会进行检查点设置,直到所有任务都已经退出为止)。这可能潜在地导致死锁,其中检查点组A中的任务正在等待返回针对来自检查点组B的读取的回答,因此组A不能进行检查点设置。同时,检查点组B中的任务正在进行同样的事情。这两个组都不可能变得挂起,并且这两个组都不可能进行检查点设置。
4.10.2.4外部任务写入内部数据
如果检查点组外部的任务写入内部的数据,则系统冒险在检查点被回退的情况下丢失写入。再次存在相同的折衷:系统可以以任何方式做到这一点,以希望丢失更新的可能性很小,或者系统可以如上所述将写入推送至检查点组内。然后写入将等待用于指示写入操作的确认的第三方保管回答。这些问题以其它方式与上述的问题相同。
应当注意,这不会影响检查点组内部的应用的正确性。逻辑与内部读取外部情况相同:外部任务写入内部数据,系统具有故障并且进行用于使外部任务所进行的写入回退的回退,系统重新开始,并且从内部,系统无法告知外部任务曾经发生过、因此该系统处于一致状态。外部的实体将具有一致性故障,但是这不影响内部任务的正确性。
总之,外来访问有时(但并非总是)引起不一致的可能性。内部读取外部总是一致的。内部写入外部使写入器暴露于复制和/或写丢失。外部读取内部导致脏读取,但是这可以通过将读取推送至检查点组中来治愈。外部写入内部可能导致写丢失,但是这可以通过将写入推送至检查点组中来治愈。
脏读取和写丢失是仅故障模式错误。除非系统具有服务器故障,否则该系统不进行组级回退,因此这些故障仅在故障之后显示。在正常操作中,外来读取/写入是非常安全的。
系统在不同的检查点组之间不能使用“读取/写入推送”把戏,这是因为两个组之间的交互可能导致死锁。如果必要的话,这可以通过使异步操作停止(firing off)(例如,使消息排队但不等待回答)来治愈。但是系统可以仍读取/写入不同检查点组内部的数据,只要该系统能够接受(非常罕见)脏读取或写丢失即可。
5实现
这里所述的可恢复性技术(包括附录)可以例如使用执行适当软件指令的可编程计算系统来实现,或者可以在诸如现场可编程门阵列(FPGA)等的适当硬件中或者以某种混合形式实现。例如,在编程的方法中,该软件可以包括在一个或多个编程或可编程计算系统(可以具有诸如分布式、客户端/服务器或网格式等的各种架构)上执行的一个或多个计算机程序中的过程,其中该一个或多个编程或可编程计算系统各自包括至少一个处理器、至少一个数据存储系统(包括易失性和/或非易失性存储器和/或存储元件)、至少一个用户接口(用于使用至少一个输入装置或端口来接收输入,并且用于使用至少一个输出装置或端口来提供输出)。该软件可以包括例如提供与数据处理图的设计、配置和执行有关的服务的较大程序的一个或多个模块。可以将程序的模块(例如,数据处理图的元素)实现为符合数据存储库中所存储的数据模型的数据结构或其它有组织数据。
软件能够在一段时间(例如,诸如动态RAM等的动态存储器装置的刷新周期之间的时间)内以非暂时形式(诸如包含在易失性或非易失性存储介质或任何其它非暂时性介质中)、使用介质的物理属性(例如,表面凹区和凸区、磁畴或电荷)存储。在为加载指令所作的准备中,软件可以设置在诸如(利用通用或专用计算系统或装置可读取的)CD-ROM或其它计算机可读介质等的有形、非暂时性介质上,或者可以经由网络的通信介质(例如,以编码在传播信号中的形式)传递至执行该软件的计算系统的有形、非暂时性介质。可以在专用计算机上、或者使用诸如协处理器或现场可编程门阵列(FPGA)或专用特定用途集成电路(ASIC)等的专用硬件来进行一些处理或所有处理。可以以利用不同的计算元件来进行软件所指定的计算的不同部分的分布式方式来实现该处理。优选将每一个这种计算机程序存储在通用或专用可编程计算机可读取的存储装置的计算机可读存储介质(例如,固态存储器或介质、或者磁性或光学介质)上或者下载至该存储介质,以在利用计算机读取存储装置介质以进行这里所述的处理的情况下配置计算机并使该计算机进行工作。本发明的系统还可被视为作为配置有计算机程序的有形、非暂时性介质来实现,其中如此配置成的介质使计算机以特定的预定义方式进行工作,以进行这里所述的处理步骤中的一个或多个。
已经描述了本发明的许多实施例。然而,应当理解,前述描述旨在示出而不是限制本发明的范围,该范围由所附权利要求书的范围限定。因此,其它实施例也在所附权利要求书的范围内。例如,可以在不偏离本发明的范围的情况下作出各种修改。另外,上述步骤中的一些可以是与顺序无关的,因此可以按照与所描述的顺序不同的顺序执行。
Claims (57)
1.一种设备,包括:
计算系统,其包括一个或多个节点,所述计算系统被配置为执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及
至少一个数据存储系统,其能够由所述一个或多个节点中的至少一个节点访问,所述数据存储系统在使用时储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,
其中,使用一个或多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:
处理第一数据单元流以生成针对所述第一数据单元流内的多个连续数据单元子集各自的输出;
在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;
在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;
在所述改变已被持久储存之后,继续所述第一数据处理程序内的处理;以及
在所述改变已被持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出。
2.根据权利要求1所述的设备,其中,所述多个数据处理程序各自处理至少一个数据单元流,而无需通过该流中的多于两个相邻数据单元来保持程序状态信息。
3.根据前述权利要求中任一项所述的设备,其中,所述数据存储系统包括非易失性存储介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:将所述改变储存在所述非易失性存储介质中。
4.根据前述权利要求中任一项所述的设备,其中,所述数据存储系统包括连接至所述多个节点的通信介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:通过所述通信介质将所述改变从所述多个节点中的第一节点至少发送至第二节点。
5.根据前述权利要求中任一项所述的设备,其中,所述数据存储系统还储存与所述多个数据处理程序中的至少一个数据处理程序所处理的一个或多个数据单元流相关联的流状态信息。
6.根据权利要求5所述的设备,其中,使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存与所述第一数据单元流相关联的流状态信息。
7.根据前述权利要求中任一项所述的设备,其中,从所述第一数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出包括:将所述第一输出释放至未包括在所述计算系统上执行的所述多个数据处理程序中的外部程序。
8.根据前述权利要求中任一项所述的设备,其中,由于处理所述第一连续数据单元子集而引起的所述共享数据的持久储存的改变与由于处理所述第二连续数据单元子集而引起的所述共享数据的持久储存的改变不同。
9.根据权利要求8所述的设备,其中,在由于处理所述第二连续数据单元子集而引起的所述共享数据的至少一些改变已经开始之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变,其中在所述第一数据单元流内、所述第一连续数据单元子集在所述第二连续数据单元子集之前。
10.根据权利要求9所述的设备,其中,在由于处理所述第一连续数据单元子集而引起的所有改变已被持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集而生成的第一输出。
11.根据前述权利要求中任一项所述的设备,其中,在第一改变部分已被持久储存之后、但在第二改变部分已被持久储存之前,在所述第一数据处理程序内继续处理。
12.根据前述权利要求中任一项所述的设备,其中,所述第一数据处理程序定期地中止所述第一数据单元流的处理,并且所述计算系统在所述第一数据处理程序被中止的同时开始持久储存由于处理数据单元而引起的所述共享数据的至少一些改变。
13.根据前述权利要求中任一项所述的设备,其中,
发起所述第一数据处理程序内的处理的中止包括:将流结束指示插在所述第一连续数据单元子集和所述第二连续数据单元子集之间,并且
在用于进行所述第一数据处理程序所指定的任务的全部处理都已响应于所述流结束指示而正常退出之后,所述第一数据处理程序内的处理的中止已经完成。
14.根据前述权利要求中任一项所述的设备,其中,所述共享数据能够由所述多个数据处理程序的全部数据处理程序访问。
15.一种设备,包括:
计算系统,其包括一个或多个节点,所述计算系统被配置为执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及
至少一个数据存储系统,其能够由所述一个或多个节点中的至少一个节点访问,所述数据存储系统在使用时储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,
其中,使用所述多个数据处理程序中的至少第一组多个数据处理程序来处理两个或更多个数据单元流包括:
针对所述第一组中的各数据处理程序,处理包括多个连续数据单元子集的各数据单元流;
在处理第一连续数据单元子集以及处理在所述各数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一组中的各数据处理程序内的处理的中止;
在判断为所述第一组中的各数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及
在所述改变已被持久储存之后,继续所述第一组中的各数据处理程序内的处理。
16.根据权利要求15所述的设备,其中,所述多个数据处理程序各自处理至少一个数据单元流,而无需通过该流中的多于两个相邻数据单元来保持程序状态信息。
17.根据权利要求15或16所述的设备,其中,所述数据存储系统包括非易失性存储介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:将所述改变储存在所述非易失性存储介质中。
18.根据权利要求15至17中任一项所述的设备,其中,所述数据存储系统包括连接至所述多个节点的通信介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:通过所述通信介质将所述改变从所述多个节点中的第一节点至少发送至第二节点。
19.根据权利要求15至18中任一项所述的设备,其中,所述数据存储系统还储存与所述多个数据处理程序中的至少一个数据处理程序所处理的一个或多个数据单元流相关联的流状态信息。
20.根据权利要求19所述的设备,其中,使用至少所述第一组多个数据处理程序来处理两个或更多个数据单元流还包括:在判断为所述第一组中的各数据处理程序内的处理的中止已经完成之后,持久储存与所述第一组中的任意数据处理程序所处理的各个数据单元流相关联的流状态信息。
21.根据权利要求15至20中任一项所述的设备,其中,使用至少所述第一组多个数据处理程序来处理两个或更多数据单元流还包括:在所述改变已被持久储存之后,从所述第一组多个数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出。
22.根据权利要求21所述的设备,其中,从所述第一组多个数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出包括:将所述第一输出释放至所述计算系统上执行的多个数据处理程序中未包括在所述第一组多个数据处理程序中的一个数据处理程序。
23.根据权利要求21所述的设备,其中,从所述第一组多个数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出包括:将所述第一输出释放至未包括在所述计算系统上执行的所述多个数据处理程序中的外部程序。
24.根据权利要求23所述的设备,其中,
所述外部程序发送访问所述第一组中的至少一个数据处理程序能够访问的特定共享数据的请求,并且
在所述请求被接收之前发生的所述特定共享数据的所有改变已被持久储存之后,所述请求的结果被释放至所述外部程序。
25.根据权利要求15至24中任一项所述的设备,其中,由于处理所述第一连续数据单元子集而引起的所述共享数据的持久储存的改变与由于处理所述第二连续数据单元子集而引起的所述共享数据的持久储存的改变不同。
26.根据权利要求25所述的设备,其中,在由于处理所述第二连续数据单元子集而引起的所述共享数据的至少一些改变已经开始之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变,其中在所述第一数据单元流内、所述第一连续数据单元子集在所述第二连续数据单元子集之前。
27.根据权利要求26所述的设备,其中,在由于处理所述第一连续数据单元子集而引起的所有改变已被持久储存之后,从所述第一组多个数据处理程序释放针对所述第一连续数据单元子集而生成的第一输出。
28.根据权利要求15至27中任一项所述的设备,其中,处理两个或更多个数据单元流包括:至少使用所述多个数据处理程序中的所述第一组多个数据处理程序和第二组多个数据处理程序来处理四个或更多个数据单元流。
29.根据权利要求28所述的设备,其中,各组多个数据处理程序定期地中止各数据单元流的处理,并且所述计算系统在该组中的所有数据处理程序被中止的同时开始持久储存由于处理数据单元而引起的所述共享数据的至少一些改变。
30.根据权利要求29所述的设备,其中,所述第一组数据处理程序以第一频率中止各数据单元流的处理,并且所述第二组数据处理程序以与所述第一频率不同的第二频率中止各数据单元流的处理。
31.根据权利要求15至30中任一项所述的设备,其中,在第一改变部分已被持久储存之后、但在第二改变部分已被持久储存之前,在所述第一组中的各数据处理程序内继续处理。
32.根据权利要求15至31中任一项所述的设备,其中,所述第一组多个数据处理程序定期地中止处理所述两个或更多个数据单元流,并且所述计算系统在所述第一组中的所有数据处理程序被中止的同时开始持久储存由于处理数据单元而引起的所述共享单元的至少一些改变。
33.根据权利要求15至32中任一项所述的设备,其中,
发起所述第一数据处理程序内的处理的中止包括:将流结束指示插在所述第一连续数据单元子集和所述第二连续数据单元子集之间,并且
在用于进行所述第一数据处理程序所指定的任务的全部处理都已响应于所述流结束指示而正常退出之后,所述第一数据处理程序内的处理的中止已经完成。
34.根据权利要求15至33中任一项所述的设备,其中,所述共享数据能够由所述多个数据处理程序的全部数据处理程序访问。
35.一种设备,包括:
计算系统,其包括一个或多个节点,所述计算系统被配置为执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及
至少一个数据存储系统,其能够由所述一个或多个节点中的至少一个节点访问,所述数据存储系统在使用时储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,
其中,使用所述多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:
处理包括多个连续数据单元子集的第一数据单元流;
在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;
在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及
在所有改变已经完成持久储存之前,继续所述第一数据处理程序内的处理。
36.根据权利要求35所述的设备,其中,所述多个数据处理程序各自处理至少一个数据单元流,而无需通过该流中的多于两个相邻数据单元来保持程序状态信息。
37.根据权利要求35或36所述的设备,其中,所述数据存储系统包括非易失性存储介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:将所述改变储存在所述非易失性存储介质中。
38.根据权利要求35至37中任一项所述的设备,其中,所述数据存储系统包括连接至所述多个节点的通信介质,并且持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:通过所述通信介质将所述改变从所述多个节点中的第一节点至少发送至第二节点。
39.根据权利要求35至38中任一项所述的设备,其中,使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:储存所述共享数据的至少一个快照,并且在储存所述快照之后储存由于处理数据单元而引起的所述共享数据的改变的日志。
40.根据权利要求39所述的设备,其中,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变包括:储存所述快照的至少一部分,并且储存所述改变的日志的至少一部分。
41.根据权利要求35至40中任一项所述的设备,其中,所述数据存储系统还储存与所述多个数据处理程序中的至少一个数据处理程序所处理的一个或多个数据单元流相关联的流状态信息。
42.根据权利要求41所述的设备,其中,使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存与所述第一数据单元流相关联的流状态信息。
43.根据权利要求35至42中任一项所述的设备,其中,使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:在判断为所述第一数据处理程序内的处理的中止已经完成之前,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变。
44.根据权利要求43所述的设备,其中,使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:在继续所述第一数据处理程序内的处理之后,持久储存由于处理所述第二连续数据单元子集而引起的所述共享数据的至少一些改变。
45.根据权利要求35至44中任一项所述的设备,其中,由于处理所述第一连续数据单元子集而引起的所述共享数据的持久储存的改变与由于处理所述第二连续数据单元子集而引起的所述共享数据的持久储存的改变不同。
46.根据权利要求45所述的设备,其中,在由于处理所述第二连续数据单元子集而引起的所述共享数据的至少一些改变已经开始之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变,其中在所述第一数据单元流内、所述第一连续数据单元子集在所述第二连续数据单元子集之前。
47.根据权利要求35至46中任一项所述的设备,其中,
使用至少所述第一数据处理程序来处理至少一个数据单元流还包括:
针对所述多个连续数据单元子集各自生成输出,以及
在所述改变已经完成持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集而生成的第一输出。
48.根据权利要求47所述的设备,其中,在由于处理所述第一连续数据单元子集而引起的所有改变已被持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集而生成的第一输出。
49.根据权利要求35至48中任一项所述的设备,其中,
所述第一数据处理程序定期地中止处理所述第一数据单元流,并且
所述计算系统在所述第一数据处理程序被中止的同时开始持久储存由于处理数据单元而引起的所述共享数据的至少一些改变。
50.根据权利要求35至49中任一项所述的设备,其中,
发起所述第一数据处理程序内的处理的中止包括:将流结束指示插在所述第一连续数据单元子集和所述第二连续数据单元子集之间,并且
在用于进行所述第一数据处理程序所指定的任务的全部处理都已响应于所述流结束指示而正常退出之后,所述第一数据处理程序内的处理的中止已经完成。
51.根据权利要求35至50中任一项所述的设备,其中,所述共享数据能够由所述多个数据处理程序的全部数据处理程序访问。
52.一种方法,包括:
在包括一个或多个节点的计算系统上执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及
在所述一个或多个节点中的至少一个节点能够访问的至少一个数据存储系统上储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,
其中,使用一个或多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:
处理第一数据单元流以生成针对所述第一数据单元流内的多个连续数据单元子集中的各连续数据单元子集的输出;
在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;
在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;
在所述改变已被持久储存之后,继续所述第一数据处理程序内的处理;以及
在所述改变已被持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出。
53.一种软件,其以非暂时形式储存在计算机可读介质上,所述软件包括用于使计算系统执行以下操作的指令:
执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及
储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,
其中,使用一个或多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:
处理第一数据单元流以生成针对所述第一数据单元流内的多个连续数据单元子集中的各连续数据单元子集的输出;
在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;
在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;
在所述改变已被持久储存之后,继续所述第一数据处理程序内的处理;以及
在所述改变已被持久储存之后,从所述第一数据处理程序释放针对所述第一连续数据单元子集所生成的第一输出。
54.一种方法,包括:
在包括一个或多个节点的计算系统上执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及
在所述一个或多个节点中的至少一个节点能够访问的至少一个数据存储系统上储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,
其中,使用所述多个数据处理程序中的至少第一组多个数据处理程序来处理两个或更多个数据单元流包括:
针对所述第一组中的各数据处理程序,处理包括多个连续数据单元子集的各数据单元流;
在处理第一连续数据单元子集以及处理在所述各数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一组中的各数据处理程序内的处理的中止;
在判断为所述第一组中的各数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及
在所述改变已被持久储存之后,继续所述第一组中的各数据处理程序内的处理。
55.一种软件,其以非暂时形式储存在计算机可读介质上,所述软件包括用于使计算系统执行以下操作的指令:
执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及
储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,
其中,使用所述多个数据处理程序中的至少第一组多个数据处理程序来处理两个或更多个数据单元流包括:
针对所述第一组中的各数据处理程序,处理包括多个连续数据单元子集的各数据单元流;
在处理第一连续数据单元子集以及处理在所述各数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一组中的各数据处理程序内的处理的中止;
在判断为所述第一组中的各数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及
在所述改变已被持久储存之后,继续所述第一组中的各数据处理程序内的处理。
56.一种方法,包括:
在包括一个或多个节点的计算系统上执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及
在所述一个或多个节点中的至少一个节点能够访问的至少一个数据存储系统上储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,
其中,使用所述多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:
处理包括多个连续数据单元子集的第一数据单元流;
在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;
在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及
在所有改变已经完成持久储存之前,继续所述第一数据处理程序内的处理。
57.一种软件,其以非暂时形式储存在计算机可读介质上,所述软件包括用于使计算系统执行以下操作的指令:
执行多个数据处理程序,其中所述多个数据处理程序各自处理至少一个数据单元流;以及
储存所述多个数据处理程序中的至少两个数据处理程序能够访问的共享数据,
其中,使用所述多个数据处理程序中的至少第一数据处理程序来处理至少一个数据单元流包括:
处理包括多个连续数据单元子集的第一数据单元流;
在处理第一连续数据单元子集以及处理在所述第一数据单元流内与所述第一连续数据单元子集相邻的第二连续数据单元子集之间,发起所述第一数据处理程序内的处理的中止;
在判断为所述第一数据处理程序内的处理的中止已经完成之后,持久储存由于处理所述第一连续数据单元子集而引起的所述共享数据的至少一些改变;以及
在所有改变已经完成持久储存之前,继续所述第一数据处理程序内的处理。
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 |
---|---|
CN108475218A true CN108475218A (zh) | 2018-08-31 |
CN108475218B CN108475218B (zh) | 2022-03-22 |
Family
ID=58016792
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780006909.XA Active CN108475218B (zh) | 2016-01-14 | 2017-01-13 | 可恢复流处理 |
Country Status (9)
Country | Link |
---|---|
US (1) | US10601890B2 (zh) |
EP (3) | EP3614266B1 (zh) |
JP (1) | JP6764938B2 (zh) |
KR (1) | KR102121139B1 (zh) |
CN (1) | CN108475218B (zh) |
AU (1) | AU2017207404B2 (zh) |
CA (1) | CA3009359C (zh) |
SG (1) | SG11201805201XA (zh) |
WO (1) | WO2017123849A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110018926A (zh) * | 2018-11-22 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 故障恢复方法、装置、电子设备及计算机可读存储介质 |
CN111541747A (zh) * | 2020-04-10 | 2020-08-14 | 深圳前海微众银行股份有限公司 | 一种数据的检查点设置方法及装置 |
Families Citing this family (9)
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 |
AU2018359385B2 (en) * | 2017-10-31 | 2021-06-17 | Ab Initio Technology Llc | Managing a computing cluster based on consistency of state updates |
US10922199B2 (en) * | 2018-07-04 | 2021-02-16 | Vmware, Inc. | Role management of compute nodes in distributed clusters |
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 |
US10664397B2 (en) * | 2018-07-31 | 2020-05-26 | EMC IP Holding Company LLC | Cache recovery method in a distributed storage system |
US10733191B2 (en) | 2018-09-28 | 2020-08-04 | Microsoft Technology Licensing, Llc | Static streaming job startup sequence |
KR102680150B1 (ko) * | 2018-10-23 | 2024-07-02 | 티제로 아이피, 엘엘씨 | 거래 시스템을 구현하는 네트워크 노드들의 서브세트 내의 컨텍스트 기반 필터링 |
JP7331604B2 (ja) * | 2019-10-04 | 2023-08-23 | 富士通株式会社 | 情報処理システム、情報処理方法、および情報処理プログラム |
US20220318099A1 (en) * | 2021-03-31 | 2022-10-06 | Nutanix, Inc. | File analytics systems and methods including retrieving metadata from file system snapshots |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1356831A (zh) * | 2000-09-29 | 2002-07-03 | 扎尔林克半导体V.N.股份有限公司 | 用于支持服务质量保证的缓冲区管理和在数据交换中的数据流控制 |
US20030145055A1 (en) * | 2001-12-12 | 2003-07-31 | Michael Henke | Method for delivering data to, and processing data in, a data processing unit |
JP2004178788A (ja) * | 2002-11-15 | 2004-06-24 | Matsushita Electric Ind Co Ltd | 記録装置および記録方法 |
CN1581166A (zh) * | 2003-08-14 | 2005-02-16 | 国际商业机器公司 | 通过在线和离线组件聚类进化数据流的方法和设备 |
CN1952897A (zh) * | 2005-10-18 | 2007-04-25 | 中国科学院计算技术研究所 | 一种基于数据流分析的访存合并优化方法 |
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 |
JP2011039818A (ja) * | 2009-08-12 | 2011-02-24 | Hitachi Ltd | ストリームデータ処理システム、ストリームデータ処理方法及びストリームデータ処理プログラム |
CN102349056A (zh) * | 2009-05-14 | 2012-02-08 | 国际商业机器公司 | 动态组合数据流处理应用程序 |
CN102473122A (zh) * | 2009-07-14 | 2012-05-23 | 起元技术有限责任公司 | 容错的批量处理 |
US20120216073A1 (en) * | 2011-02-18 | 2012-08-23 | Ab Initio Technology Llc | Restarting Processes |
US20130305087A1 (en) * | 2012-05-09 | 2013-11-14 | Imec | Method and system for real-time error mitigation |
Family Cites Families (16)
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 |
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 |
US8069129B2 (en) | 2007-04-10 | 2011-11-29 | Ab Initio Technology Llc | Editing and compiling business rules |
US7779298B2 (en) | 2007-06-11 | 2010-08-17 | International Business Machines Corporation | Distributed job manager recovery |
JP4560074B2 (ja) | 2007-09-26 | 2010-10-13 | 株式会社東芝 | 仮想計算機システム及び同システムにおける仮想計算機復元方法 |
US8949801B2 (en) * | 2009-05-13 | 2015-02-03 | International Business Machines Corporation | Failure recovery for stream processing applications |
US9116759B2 (en) * | 2011-02-18 | 2015-08-25 | Ab Initio Technology Llc | Restarting data processing systems |
US8843524B2 (en) * | 2012-09-25 | 2014-09-23 | International Business Machines Corporation | Handling out-of-sequence data in a streaming environment |
US9298788B1 (en) * | 2013-03-11 | 2016-03-29 | DataTorrent, Inc. | Checkpointing in distributed streaming platform for real-time applications |
US9354981B2 (en) | 2013-10-21 | 2016-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 |
US9678834B2 (en) | 2014-10-20 | 2017-06-13 | 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 |
-
2017
- 2017-01-13 US US15/405,618 patent/US10601890B2/en active Active
- 2017-01-13 EP EP19195160.7A patent/EP3614266B1/en active Active
- 2017-01-13 SG SG11201805201XA patent/SG11201805201XA/en unknown
- 2017-01-13 CA CA3009359A patent/CA3009359C/en active Active
- 2017-01-13 CN CN201780006909.XA patent/CN108475218B/zh active Active
- 2017-01-13 EP EP17704568.9A patent/EP3403182B1/en active Active
- 2017-01-13 KR KR1020187023523A patent/KR102121139B1/ko active IP Right Grant
- 2017-01-13 WO PCT/US2017/013309 patent/WO2017123849A1/en active Application Filing
- 2017-01-13 AU AU2017207404A patent/AU2017207404B2/en active Active
- 2017-01-13 JP JP2018536162A patent/JP6764938B2/ja active Active
- 2017-01-13 EP EP19195166.4A patent/EP3614267B1/en active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1356831A (zh) * | 2000-09-29 | 2002-07-03 | 扎尔林克半导体V.N.股份有限公司 | 用于支持服务质量保证的缓冲区管理和在数据交换中的数据流控制 |
US20030145055A1 (en) * | 2001-12-12 | 2003-07-31 | Michael Henke | Method for delivering data to, and processing data in, a data processing unit |
JP2004178788A (ja) * | 2002-11-15 | 2004-06-24 | Matsushita Electric Ind Co Ltd | 記録装置および記録方法 |
CN1581166A (zh) * | 2003-08-14 | 2005-02-16 | 国际商业机器公司 | 通过在线和离线组件聚类进化数据流的方法和设备 |
CN1952897A (zh) * | 2005-10-18 | 2007-04-25 | 中国科学院计算技术研究所 | 一种基于数据流分析的访存合并优化方法 |
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 |
CN102349056A (zh) * | 2009-05-14 | 2012-02-08 | 国际商业机器公司 | 动态组合数据流处理应用程序 |
CN102473122A (zh) * | 2009-07-14 | 2012-05-23 | 起元技术有限责任公司 | 容错的批量处理 |
JP2011039818A (ja) * | 2009-08-12 | 2011-02-24 | Hitachi Ltd | ストリームデータ処理システム、ストリームデータ処理方法及びストリームデータ処理プログラム |
US20120216073A1 (en) * | 2011-02-18 | 2012-08-23 | Ab Initio Technology Llc | Restarting Processes |
US20130305087A1 (en) * | 2012-05-09 | 2013-11-14 | Imec | Method and system for real-time error mitigation |
Non-Patent Citations (2)
Title |
---|
MASAYOSHI ARITSUGI等: "Recovery processing for high availability stream processing systems in local area networks", 《IEEE》 * |
崔星灿等: "分布式流处理技术综述", 《计算机研究与发展》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110018926A (zh) * | 2018-11-22 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 故障恢复方法、装置、电子设备及计算机可读存储介质 |
CN111541747A (zh) * | 2020-04-10 | 2020-08-14 | 深圳前海微众银行股份有限公司 | 一种数据的检查点设置方法及装置 |
CN111541747B (zh) * | 2020-04-10 | 2023-05-12 | 深圳前海微众银行股份有限公司 | 一种数据的检查点设置方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
AU2017207404A1 (en) | 2018-07-12 |
CA3009359C (en) | 2020-09-15 |
EP3403182A1 (en) | 2018-11-21 |
EP3614266A2 (en) | 2020-02-26 |
EP3614266B1 (en) | 2022-03-09 |
JP6764938B2 (ja) | 2020-10-07 |
KR20180101547A (ko) | 2018-09-12 |
KR102121139B1 (ko) | 2020-06-17 |
SG11201805201XA (en) | 2018-07-30 |
JP2019505916A (ja) | 2019-02-28 |
WO2017123849A1 (en) | 2017-07-20 |
EP3614267A2 (en) | 2020-02-26 |
EP3614266A3 (en) | 2020-07-29 |
EP3614267A3 (en) | 2020-07-29 |
CN108475218B (zh) | 2022-03-22 |
US10601890B2 (en) | 2020-03-24 |
EP3614267B1 (en) | 2022-03-09 |
US20170208113A1 (en) | 2017-07-20 |
EP3403182B1 (en) | 2019-09-04 |
AU2017207404B2 (en) | 2020-12-10 |
CA3009359A1 (en) | 2017-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108475218A (zh) | 可恢复流处理 | |
Ren et al. | Slog: Serializable, low-latency, geo-replicated transactions | |
CN102037463B (zh) | 使用全局确认的提交进行分布式事务的基于日志的复制 | |
US7962458B2 (en) | Method for replicating explicit locks in a data replication engine | |
US8250029B2 (en) | Method for ensuring replication from a change queue of a source database to a target database when transaction load exceeds data path by spawning a new transaction path between the change queue and the target database | |
CN108459919A (zh) | 一种分布式事务处理方法及装置 | |
CN109783578A (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
CN115562676A (zh) | 一种图计算引擎的触发方法 | |
JP7416768B2 (ja) | 分散コンピューティング環境で分散調整エンジンを非破壊的にアップグレードする方法、装置およびシステム | |
CN116150263B (zh) | 一种分布式图计算引擎 | |
Al-Mahfoudh et al. | Toward rigorous design of domain-specific distributed systems | |
Carvalho | Generic replication of software transactional memory | |
Michael | Techniques for Integrating Erasure Codes and Model Checkers with Distributed Systems | |
Horttanainen | New Production System for Finnish Meteorological Institute | |
Nicolae et al. | Towards Low-Overhead Resilience for Data Parallel Deep Learning | |
Ravindran | Reliable client-server communication in distributed programs | |
Kim et al. | A protocol for consistent checkpointing recovery for time-critical distributed database systems | |
Georgiou et al. | distributed cooperation and adversity: complexity trade-offs | |
Chuang | A programming framework to ease development of tightly-coupled cloud applications | |
Sovran | Building scalable geo-replicated storage backends for web applications. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1259803 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |