CN105323297A - 零数据丢失传输协议 - Google Patents

零数据丢失传输协议 Download PDF

Info

Publication number
CN105323297A
CN105323297A CN201410769030.9A CN201410769030A CN105323297A CN 105323297 A CN105323297 A CN 105323297A CN 201410769030 A CN201410769030 A CN 201410769030A CN 105323297 A CN105323297 A CN 105323297A
Authority
CN
China
Prior art keywords
data
producer
data update
consumer
consumer system
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410769030.9A
Other languages
English (en)
Other versions
CN105323297B (zh
Inventor
H.尚
M-C.洛
E.洛拉-加勒多
X.戴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sybase Inc
Original Assignee
Sybase Inc
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 Sybase Inc filed Critical Sybase Inc
Publication of CN105323297A publication Critical patent/CN105323297A/zh
Application granted granted Critical
Publication of CN105323297B publication Critical patent/CN105323297B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • 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/1474Saving, restoring, recovering or retrying in transactions
    • 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/1629Error detection by comparing the output of redundant processing systems
    • G06F11/165Error detection by comparing the output of redundant processing systems with continued operation after detection of the error
    • 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/2002Error 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 interconnections or communication control functionality are redundant
    • G06F11/2012Error 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 interconnections or communication control functionality are redundant and using different communication protocols
    • 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/2056Error 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 by mirroring
    • G06F11/2082Data synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1865Transactional file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • 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
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/80Database-specific techniques
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/85Active fault masking without idle spares

Landscapes

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

Abstract

公开了一种用于网络内的可靠数据同步的方法。生产者***在持久数据存储装置中存储数据,并产生一个或多个数据更新。生产者***将数据更新传送到消费者***并同时在生产者***处启动对数据更新的存储。当在生产者***处对数据更新的存储完成时,生产者***把第一确认传送到消费者***。生产者***确定是否已经从消费者***接收到第二确认,其中,第二确认指示消费者***已经在消费者***处成功地存储数据更新。根据对已经从消费者***接收到第二确认的确定,生产者***把存储在生产者***处的数据更新的临时状态改变为永久状态。

Description

零数据丢失传输协议
优先权声明
本专利申请要求2014年6月26日递交的第14290186.7号欧洲申请(EPO)的递交日期的优先权,其整个内容通过引用被包含于此。
技术领域
所公开的示例实施例一般地涉及网络数据存储领域,并具体涉及网络内可靠的数据同步的领域。
背景技术
计算机时代的崛起已经使得增加了对在线个性化服务的访问。随着电子设备和网络的成本下降,很多先前被面对面提供的服务现在被通过互联网远程提供。例如,银行服务现在可以完全通过联网***来提供,因为用户可以指令***完成存取款以及其它交易,并接收到这些交易已被完成的通知。
随着越来越多的服务被在线提供,大量数据被持续地生成。这种数据中的很多需要被保存供以后使用。例如,银行交易、消息、搜索历史、浏览历史、数据的统计分析一般全都需要被保存以备将来有用。随着如此多数据需要被保存,存储***需要能够可靠地容纳大量数据。但是,这样的***一般不能保证所有的存储组件都将会完全无错误并且无故障地操作。这样,大的存储***经常通过网络操作,以在多个位置处存储重要数据的多个拷贝。这提高了存储***的可靠性和有用性。这种数据必须被无数据丢失或数据损坏地传输到备份位置。
大的数据存储装置也通过存储给定数据库的事务日志(transactionlog)来在出现崩溃时便利数据恢复。因此,每当数据库中的数据被改变时,所述改变被记录在事务日志中。这允许所有改变被以相对紧凑的形式存储。然后,如果数据库崩溃,则事务日志可被用来重建正确的且最近版本的数据库。这可以通过按正确的顺序将所有改变重新施加于原始数据集来实现。
其它的主要考虑是数据可以被可靠地存储的速度。为了提高存储***工作的速度,识别过程中的瓶颈很重要。一旦瓶颈(例如,***的使整个过程延迟的特定部分)被识别,就可将其去除或者改善。在传统的联网存储***中,一个这样的瓶颈是在开始分发所述数据之前在产生数据的***处记录和存储所述数据所需的时间。
发明内容
根据本发明的一个方面,提供一种方法,其包含:在生产者***的持久数据存储装置中存储数据;在所述生产者***处使用一个或多个处理器产生一个或多个数据更新;将所述数据更新传送到消费者***并同时在所述生产者***处启动对所述数据更新的存储,其中,所述数据更新起初被以临时状态存储;当在所述生产者***处对所述数据更新的存储完成时,把第一确认传送到所述消费者***,所述第一确认指示所述数据更新已经被成功地存储在与所述生产者***相关联的所述持久数据存储装置中;确定是否已经从所述消费者***接收到第二确认,其中,所述第二确认指示所述消费者***已经在所述消费者***处成功地存储所述数据更新;以及根据对已经从所述消费者***接收到所述第二确认的确定,把存储在所述生产者***处的所述数据更新的临时状态改变为永久状态。
根据本发明的另一个方面,提供一种***,其包含:一个或多个处理器;存储器;和存储在所述存储器中的一个或多个程序,所述一个或多个程序包含指令,用于:在生产者***的持久数据存储装置中存储数据;在所述生产者***处的一个或多个处理器处产生一个或多个数据更新;将所述数据更新传送到消费者***并同时在与所述生产者***相关联的改变日志中启动对所述数据更新的存储;当与所述生产者***相关联的所述改变日志中的对所述数据更新的存储完成时,把第一确认传送到消费者***;确定是否已经从所述消费者***接收到第二确认,其中,所述第二确认指示所述消费者***已经在与所述消费者***相关联的改变日志中成功地存储所述数据更新;根据对已经从所述消费者***接收到所述第二确认的确定,把所述数据更新永久地存储在所述持久数据存储装置中。
根据本发明的另一个方面,提供一种非瞬态计算机可读存储介质,其存储由一个或多个处理器执行的一个或多个程序,所述一个或多个程序包含指令,用于:把一个或多个数据项存储在生产者***的持久数据存储装置中;在所述生产者***处的一个或多个处理器处产生一个或多个数据更新;将所述数据更新的日志传送到消费者***并同时在与所述生产者***相关联的所述持久数据存储装置中启动对所述数据更新的存储;当与所述生产者***相关联的所述持久数据存储装置中的对所述数据更新的存储完成时,把第一确认传送到所述消费者***;确定是否已经从所述消费者***接收到第二确认,其中,所述第二确认指示所述消费者***已经在与所述消费者***相关联的改变日志中成功地存储所述数据更新的日志;以及根据对已经从所述消费者***接收到所述第二确认的确定,把所述数据更新永久地存储在所述持久数据存储装置中。
附图说明
在附图的图中通过示例而非限制图示了某些示例实施例,在附图中:
图1是根据示例实施例的绘出了生产者-消费者***的网络图,其包括数据存储***的各种功能组件。
图2是图示根据某些示例实施例的消费者***的框图。
图3是图示根据某些示例实施例的生产者***的框图。
图4绘出了根据示例实施例图示根据某些示例实施例的无数据丢失风险地传输存储数据的方法的流程图。
图5A和图5B是根据示例实施例图示根据某些示例实施例的零数据丢失地传输和存储数据的方法的流程图。
图6是根据某些示例实施例图示机器的组件的框图。
同样的参考标记贯穿附图指代相同或者类似的部分。
具体实施方式
本公开描述了用于在联网的数据存储***内零数据丢失地传输数据的方法、***和计算机程序产品。在下面的描述中,为了说明的目的,阐述了许多具体细节,以提供对不同示例实施例的各个方面的透彻理解。但是本领域技术人员将会清楚,无需全部具体细节和/或利用这里描述的各种特征和元件的变化、排列和组合,可以实践任何具体示例实施例。
当计算机***生成数据更新时,那些数据更新应该被存储。在某些示例实施例中,存储装置被利用数据存储装置的生产者/消费者模型实现。在这种情况下,当生产者***已经生成数据更新时,其开始在与生产者***相关联的持久数据存储装置处存储新产生的数据更新,并且同时传送数据,供在一个或多个消费者***处存储。存储数据更新包括更新数据存储装置以包括新的数据更新,并把数据改变存储在生产者***上的事务日志中。事务日志可以保存对存储在与生产者***相关联的数据存储装置中的数据所做的改变的序时记录。事务日志也可以被称为改变日志、日志文件、或者数据改变日志。在本文档中,这些术语可被互换使用。
常规存储***在将数据改变记录到数据日志时遭遇性能瓶颈。例如,单个事务可以包括多个个体改变,每一个改变应该被写到改变日志(有时候是顺次地)。结果,甚至在数据改变被发送到远程存储***(例如,消费者***)之前,就可能存在大的延迟。
通过同时记录(和存储)数据更新并传送数据更新供在消费者***处记录,生产者***避免了否则将在等待数据更新完成被存储在与生产者***相关联的持久数据存储装置处时出现的瓶颈。例如,如果许多数据项要被记录或者存储在持久数据存储装置中,则在新数据A被完全存储之前有可能花费相当大量的时间。如果生产者***在把新数据A发送到消费者***之前必须等到存储完成,则总时间将大约是:
在生产者***处存储(和/或记录改变)的时间+传送到消费者***的时间+在消费者***处存储(和/或记录)的时间+通知生产者数据被成功存储的时间
相反,如果数据在其被发送到生产者***的持久数据存储装置的同时被传送到消费者***,则等到生产者***完成存储新数据A之时,传送、存储和通知可能已被完成,从而导致与将新数据A存储在生产者持久数据存储装置中相等的运行时间。在大型***中特别重要的是在事务日志中对数据改变的存储。在大型数据***中,***同时接收(或产生)并存储各种数据改变。但是,因为事务日志应该保持特定顺序以便确保它将可靠地把数据返回到其原始状态,所以这些改变不能被同时记录。相反,每一改变被单个地添加到事务日志。因此,把改变存储到事务日志可能比把实际数据更新存储在持久数据存储装置中花费更多时间。通过允许消费者***在数据记录发生的同时开始存储数据更新,能够缓解数据记录的瓶颈效应。
在某些示例实施例中,消费者***通过把数据被接收确认发送回生产者***来对接收到供记录和/或存储的数据改变做出响应,从而使生产者***知道数据改变已被接收,并且消费者将开始记录数据更新。
应该注意,术语“生产者***”包括生成需要被存储的数据的任何***。在某些示例实施例中,生产者***的角色由服务器***执行,并且消费者***的角色由客户端***执行。而且,数据更新包括需要被存储的任何新数据,包括但不限于由生产者***生成的新数据、对生产者***上现有数据的改变、数据改变的列表、或者从外部来源接收到的需要被存储的数据。
在某些示例实施例中,与数据存储和保持相关联的策略确定数据是否应该被存储和其将如何/在何处存储。例如,代表特定银行交易的数据在一个或多个位置处具有一个或多个副本,以确保该数据可广泛地获取并且不被损坏和丢失。在其它示例中,所述策略确定消费者***是存储完整的数据集还是仅存储改变的日志。
在某些示例实施例中,在数据更新被提交到最终版本之前,数据更新起初被以临时形式存储在持久数据存储装置中。此外,数据更新可被存储为日志文件(或事务日志)中的一系列改变,从而如果出现故障,则可以根据日志文件重建所述数据。因此,对于保持数据完整性来说,在每一消费者***处具有完整和准确的日志文件很关键。
在某些示例实施例中,生产者***以其无法被恢复的方式出现故障。在这种情况下,数据集不能在生产者***上被重建。相反,消费者***之一被提升,以起到新的生产者***的作用。如果必要,则在新的生产者***处,使用日志数据重建完整的数据集。
一旦数据更新被存储并且事务日志被更新,生产者***就把生产者确认消息发送到消费者***。生产者确认消息指示新的数据更新已经被成功地存储在与生产者***相关联的持久数据存储装置中,并且改变已经被记录在事务日志中。注意到这个确认被与发生在消费者***处的任何事独立地发送很重要。因此,生产者***将确认消息发送到消费者,而不等待任何额外的信息或者通知。在某些示例实施例中,确认消息被与下一可用数据存储消息一起发送给消费者。如果没有额外的数据记录消息被计划发送,则生产者确认消息可以被独立发送。在其它实施例中,改变一被记录,确认消息就被独立地发送。在某些示例实施例中,在记录改变时发送的确认被完成,与数据更新是否已被存储无关。
在某些示例实施例中,提交改变意味着将改变或者新数据最终化为最终的或者永久性的,并使其可供具有适当许可的任何人访问。在某些示例实施例中,提交数据通过把数据移动到特定数据存储装置或者数据存储装置的特定部分来实现。在其它的示例实施例中,提交意味着把与数据相关联的指示符改变成指示其最终性。例如,每一数据部分具有相关联的“最终”值指示符。虽然数据仍为临时的,但是最终值指示符被设置为0或者假,从而指示该数据还未被最终化。当数据被提交(即最终化)时,该值被设置为1或真,从而指示该数据被视为最终的。
在某些示例实施例中,生产者***和消费者***以同步方式工作,从而在生产者***处的数据直到消费者***向生产者***发送消费者确认消息时才被提交为最终的。因此,消费者***在数据更新被成功地存储在与消费者***相关联的持久数据存储装置处时将消费者确认消息传送到生产者。注意到生产者确认消息和消费者确认消息都被彼此独立地发送很重要。
一旦生产者***接收到消费者确认消息,生产者***就把新更新的数据提交给其永久存储装置。生产者***在等待消费者确认消息的同时,自由处理其它事务并把数据改变发送到任何其它消费者***。以这种方式,生产者***可以同时从任意数量的消费者***发送和接收数据。
一旦两个***已经从另一方接收到确认消息(例如,生产者***已经接收到消费者确认消息,并且消费者***已经接收到生产者确认消息),新更新的数据就只被视为最终提交的。以这种方式,保证被提交的数据在两个***处相同。但是,如果生产者***或者消费者***出现故障或者具有错误,则在发送其相应的确认消息之前,所述过程可以再次开始以确保双方都具有新更新数据的准确拷贝。
在某些示例实施例中,这种故障被基于总体存储***的故障报告机制确定。例如,大型存储***包括周期性地轮询各个组件以确保其正在正确工作的***。当这些测试其中之一失败时,***知道组件已经出现故障并开始恢复过程。在另一示例中,总体数据***(例如,生产者或消费者***)的单个组件包括检测其自身内的故障的能力和把故障报告发送到总体数据存储***的能力。
在其它的示例实施例中,当已经过了预先确定的时间量而未接收到确认消息时,故障被确定。例如,生产者***把新更新的供存储的数据发送到消费者***A,然后一毫秒之后发送生产者确认。在等待十秒钟(注意这是任意选择的预先确定的时间量;存储***可以选择任何满足其需求的时间量)而未接收到消费者确认消息之后,生产者***确定在存储新更新的数据期间在消费者***处已经发生了故障。然后,生产者***确定是否再次开始数据更新过程。以这种方式,新更新的数据直到其既在生产者方也在消费者方被提交为止才可供使用。
在某些示例实施例中,生产者***和消费者***之间的数据传输被以异步方式执行。当数据传输被异步地执行时,数据可以在一个***(生产者或者消费者)上被最终提交而在第二***上不被提交。这可能导致更快的时间,但是如果那些***其中之一在数据更新过程期间有故障,则也可能导致在生产者和消费者处提交的数据之间的差异。
图1是根据某些示例实施例绘出包括生产者***120的各种功能组件的消费者-生产者***100的网络图。消费者-生产者***100包括一个或多个消费者***102-1到102-N和生产者***120。一个或多个通信网络110互连这些组件。通信网络110可以是各种网络类型中的任意一种,包括局域网(LAN)、广域网(WAN)、无线网络、有线网络、互联网、个人区域网(personalareanetworks,PAN)或者这些网络的组合。
在某些示例实施例中,消费者***(例如,102-1到102-N其中之一)是电子设备,诸如个人计算机、膝上型计算机、智能电话、平板计算机、移动电话或者能够通过通信网络110通信的任何其它电子设备。某些消费者***102-1包括一个或多个消费者应用104,其被消费者***102-1执行。在某些实施例中,(一个或多个)消费者应用104包括来自由搜索应用、通信应用、生产率应用、存储应用、字处理应用、或者任何其它有用的应用组成的集合的一个或多个应用。消费者***102-1使用消费者应用104与生产者***120通信,并把数据更新和状态消息传送到生产者***120,并从生产者***120接收数据更新和状态消息。消费者***102-1包括数据存储装置106。数据存储装置106是用于存储作为存储在与生产者***120相关联的数据存储装置130中的至少一些数据的备份的数据的持久数据存储装置。
在某些示例实施例中,数据存储装置106是简单持久队列(simplepersistentqueue,SPQ)。而且,在某些示例实施例中,简单持久队列(例如,数据存储装置)存储数据改变的顺序列表而非整个数据集。通过只存储数据改变,数据存储装置106-1使存储数据改变的日志所需的存储器空间量最小化,同时仍保持基于事务日志重新创建数据的当前版本的能力。
在某些示例实施例中,消费者***102-1从生产者***120接收数据存储请求消息。数据存储请求消息指示生产者***120请求消费者***102-1存储的数据更新。在某些示例实施例中,数据更新被以事务日志的形式传递,事务日志只包括自上次数据更新起所做的改变。响应于接收到数据存储请求消息,消费者***102-1随后把数据更新存储在与消费者***102-1相关联的数据存储装置106中。
一旦消费者***102-1成功地存储了被更新的数据,消费者***102-1就把客户端确认消息传送到生产者***120,从而指示数据更新已经被成功地存储。客户端确认消息独立于在生产者***120处所进行的任何事。因此,尽可能快地发送客户端确认消息。
消费者***102-1也从生产者***120接收服务器确认消息,从而指示生产者***120已经成功地存储了被更新的数据。一旦消费者***102-1和生产者***120两者都已经确认成功存储数据更新或者改变日志,生产者***120就把数据更新提交到数据的当前版本。一旦数据已被提交,其就可被使用和访问。
在某些示例实施例中,存在多个消费者***(102-1到102-N),它们连接到生产者***120并与其交互。这些交互中的每一个可以依赖于生产者***120和各个消费者***102-1到102-N可获得的带宽和处理功率同时发生。
在某些示例实施例中,如通过图1中的示例所示,生产者***120一般是基于三层架构的,由前端层、应用逻辑层和数据层组成。图1中所示的每一模块或者引擎可以代表可执行软件指令和用于执行这些指令的对应硬件(例如,存储器和处理器)的集合。为避免不必要的细节,已经从图1省略了与传达对各种示例实施例的理解无密切关系的各种功能模块和引擎。各种额外的功能模块和引擎可被与诸如图1中所图示的生产者***120一起使用,以便利未在这里具体描述的额外功能。此外,图1中所绘的各种功能模块和引擎可以驻留在单个服务器计算机上,或者可以按各种布置跨越几个服务器计算机分布。再者,虽然在图1中被绘出为三层架构,但是各种示例实施例绝不限于这种架构。
如通过图1中的示例所示,前端由接口模块(例如,服务器)122组成,其从各种消费者***102接收确认,并把数据存储请求消息传递到适当的消费者***102。例如,(一个或多个)用户接口模块122把数据存储请求消息发送到第一消费者***102-1。消费者***102-1接收请求并最终通过把数据接收确认消息发送到(一个或多个)用户接口模块122做出响应。
如通过图1中的示例所示,数据层包括一个或多个构成数据存储装置130的数据库。数据存储装置130是持久数据存储装置并且可以由任何适当的数据存储设备或技术构成。在某些示例实施例中,数据存储装置130包括事务日志132,事务日志132记录生产者***120上发生的每一事务。事务日志132存储对数据集中的数据的改变的顺序列表。事务日志132至少起到备份工具的作用。如果数据存储装置130中的主数据库丢失或者损坏,则生产者***120可以通过从头重放改变的整个列表来再现数据的最近版本。事务日志132也具有尺寸显著小于数据的完全备份的优点。但是,把数据存储到事务日志132显著慢于将其存储在数据存储装置130部分中,因为存储在事务日志132中的数据改变应该被顺次保存,以确保事务日志132的完整性,而数据存储装置130则可以并行地存储多个数据更新。
在某些示例实施例中,应用逻辑层包括各种应用服务器模块,所述模块结合(一个或多个)用户接口模块122,使得数据能够被从数据存储装置130发送和接收。除了各种应用服务器模块以外,应用逻辑层还包括数据传输协议模块126。如图1中所图示的,对于某些示例实施例,数据传输协议模块126被实现为结合各种应用服务器模块操作的服务。例如,任意数量的单个应用服务器模块可以调用数据存储模块124或者数据传输协议模块126的功能,以包括与用于存储及传输数据的应用相关联的应用服务器模块。然而,对于各种可替代的示例实施例,数据传输协议模块126被实现为其自身的应用服务器模块,从而其可以作为独立的应用操作。对于某些示例实施例,数据传输协议模块126包括或者具有相关联的大众可获取的应用编程接口(API),所述应用编程接口使第三方应用能够调用数据传输协议模块126的功能。
一般地,当数据更新被生产者***120生成(或接收)时,数据传输协议模块126负责确保新的数据更新被存储在与生产者***120相关联的数据存储装置130(和事务日志132)中,并被存储在至少一个消费者***102上。数据传输协议模块126选择具体的在其上存储数据更新的消费者***102-1到102-N。某些数据更新被具体地与特定消费者***102相关联。例如,如果数据与特定消费者***102相关联或者被其拥有,则数据传输协议模块126可以只选择该特定消费者***102用于数据存储。在另一示例中,数据传输协议模块126可以选择已经存储了相关数据的消费者***102。在其它的示例中,基于与数据相关联的策略(例如,规定什么区域能够存储特定数据,数据需要存储于何处以提供最佳服务,等等)或者***的限制(例如,具有可用的存储空间的消费者***102)选择消费者***102。
一旦一个或多个消费者***102被确定,数据传输协议模块126就把数据更新发送到数据存储模块124,供存储在与生产者***120相关联的数据存储装置130中。在某些示例实施例中,数据更新是要被存储在消费者***102-1处的事务日志中的数据改变的列表。在其它的示例实施例中,数据更新包括数据更新的列表和数据更新自身这两者。数据传输协议模块126在其将数据更新存储在其自身的数据存储装置130中的同时,通过通信网络110把数据更新发送到被确定的一个或多个消费者***102-1到102-N。
一旦数据更新已经被数据存储装置130成功地存储,数据存储模块124就通知数据传输协议模块126存储完成。响应于所述通知,数据传输协议模块126把服务器确认消息发送到所述一个或多个被确定的消费者***102,以通知它们数据已经被成功地存储在生产者***120处。
数据传输协议模块126也接收消费者确认消息,消费者确认消息指示数据已经被成功地存储在消费者***102处。数据传输协议模块126在等待接收消费者确认消息的同时,继续执行其它过程中的任何其它需要的数据存储功能。这允许多个数据传输过程同时发生,而不必等待其它过程完成。
如果在数据传输期间生产者***120或者消费者***102出现故障或者出错,则将不发送确认。在这种情况下,数据应该被重新发送。在某些示例实施例中,生产者***120或者消费者***102的故障被生产者***120的一个或多个组件自动检测并报告。在其它的示例实施例中,如果在预先确定的时间量之后生产者***120未接收到确认,则生产者***120自动确定消费者***102已经发生错误。例如,数据传输协议模块126等待1秒钟(或任何其它适当的时间量),并且如果没有接收到确认,则确定在消费者***102处已经发生错误。然后,生产者***120可以开始恢复过程,以确定消费者***102是否仍可被用来存储数据更新,以及是否需要选择另一个。
一旦生产者***120和一个或多个消费者***102两者都已经存储了数据更新并发送了适当的确认,数据更新就可以被提交为最终的。一旦被提交,数据就被移动到数据的现场版本,并且可以被具有访问数据的许可的任何用户访问。
图2是根据某些示例实施例图示消费者***102的框图。消费者***102可以包括一个或多个处理单元(CPU)202、一个或多个网络接口210、存储器212、以及用于互连这些组件的一个或多个通信总线214。消费者***102可以包括用户接口204。用户接口204包括显示设备206,并且可选地包括输入装置,诸如键盘、鼠标、触敏显示器、或者其它输入按钮208。此外,某些消费者***使用麦克风和语音识别来补充或者替代键盘。
存储器212包括高速随机访问存储器,诸如DRAM、SRAM、DDRRAM或者其它随机访问固态存储器件,并且可以包括非易失性存储器,诸如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其它的非易失性固态存储设备。存储器212可以可选地包括位于(一个或多个)CPU202远程的一个或多个存储设备。存储器212、或者替换地存储器212内的非易失性存储器件包含非瞬态计算机可读存储介质。
在某些示例实施例中,存储器212或存储器212的计算机可读存储介质存储下列程序、模块和数据结构、或者其子集:
●操作***216,其包括用于处理各种基本***服务和用于执行依赖于硬件的任务的程序;
●网络通信模块218,其被用于经由一个或多个通信网络接口210(有线或者无线地)和一个或多个通信网络将消费者***102连接到其它计算机,所述通信网络诸如互联网、其它广域网、局域网、城域网,等等;
●显示模块220,用于使操作***216和消费者应用104生成的信息能够在显示设备206上被可视地展现;
●一个或多个消费者应用104,用于处理与生产者***(例如,图1的120)交互的各个方面,包括但不限于:
□数据通信模块224,用于从生产者***120接收数据存储请求消息,并把消费者确认消息发送到生产者***120;
□数据存储模块226,用于将数据更新存储在与消费者***102相关联的持久数据存储装置中,并用于报告数据更新的成功存储;和
●消费者数据存储装置106,用于把数据存储在消费者***102处,包括但不限于:
□简单持久队列232,用于存储从生产者***120发送的数据改变的列表;
□临时数据存储装置234,用于将来自生产者***120的在被提交为最终的之前的数据更新存储到简单持久队列232中;和
□数据存储装置236,用于存储从生产者***120接收到的数据。
图3是根据某些示例实施例图示生产者***120的框图。生产者***120可以包括一个或多个处理单元(CPU)302、一个或多个网络接口310、存储器312和用于互连这些组件的一个或多个通信总线308。存储器312包括高速随机访问存储器,诸如DRAM、SRAM、DDRRAM或者其它随机访问固态存储器件,并且可以包括非易失性存储器,诸如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其它的非易失性固态存储设备。存储器312可以可选地包括位于(一个或多个)CPU302远程的一个或多个存储设备。
存储器312、或者替换地存储器312内的(一个或多个)非易失性存储器件包含非瞬态计算机可读存储介质。在某些示例实施例中,存储器312或存储器312的计算机可读存储介质存储下列程序、模块和数据结构、或者其子集:
●操作***314,其包括用于处理各种基本***服务和用于执行依赖于硬件的任务的程序;
●网络通信模块316,其被用于经由一个或多个通信网络接口310(有线或者无线地)和一个或多个通信网络将生产者***120连接到其它计算机,所述通信网络诸如互联网、其它广域网、局域网、城域网,等等;
●一个或多个生产者应用319,用于执行生产者***120所提供的服务,包括但不限于:
□数据存储模块124,用于将数据更新存储在与服务器120相关联的事务日志132和数据存储装置130中;
□数据传输协议模块126,用于确保新生成的数据更新被充分地存储在生产者***120和一个或多个消费者***102上;
□确认模块324,用于在数据更新已经被成功存储在与生产者***120相关联的数据存储装置130中时生成生产者确认消息;和
□提交模块326,用于一旦生产者***120和一个或多个消费者***102两者都已经确认数据已被成功地存储在其相应的数据存储装置中就提交数据;
●生产者数据模块334,其保持与生产者***120相关的数据,包括但不限于:
□事务日志132,其包括对存储在生产者***120上的数据(或任何特定数据集)所做的所有数据改变的列表;
□数据存储装置130,其包括由生产者***120生成的至少一些数据;和
□确认数据340,其包括从消费者***102接收到的消费者确认消息。
图4绘出了根据某些示例实施例图示无数据丢失风险地传输存储数据的方法400的流程图。根据某些示例实施例,生产者数据存储模块124生成(404)数据更新。生成数据更新包括产生新数据、产生对现有数据的改变、以及从生产者***120外部的来源接收新数据或者对现有数据的改变。数据更新也可以包括代表对服务器***120上存储的数据已经做出的一个或多个改变的改变列表。在某些示例实施例中,数据更新包括被更新的数据自身和用于日志的改变的列表两者。
然后,生产者数据存储模块124在生产者***120和消费者***102两者处同时存储(406)数据更新。为了实现这个目标,生产者***120发送要被记录在生产者事务日志132处的数据更新430。在某些情况中,这在被存储(406)在生产者***的数据存储装置(例如,图1的130)之后发生。在其它的示例实施例中,数据更新430被同时存储和记录。
生产者数据存储模块124把数据更新430发送到生产者事务日志132,并同时把数据存储请求消息432发送到消费者***102。以这种方式,消费者***102和生产者***120两者都可以并发地从事存储/记录数据,从而降低了存储数据所需的总体时间。
生产者事务日志132接收数据更新430(例如,数据改变的列表),并开始记录改变的过程。在某些示例实施例中,数据更新既被记录在日志中,也被存储在存储***中。一旦数据更新的记录完成(408),生产者事务日志132就把生产者确认消息发送(412)到消费者***102。
在某些示例实施例中,消费者数据存储模块402从生产者数据存储模块124接收(414)数据存储请求消息432。然后,消费者数据存储模块402在消费者持久数据存储装置106中存储数据(416)。在某些示例实施例中,存储数据涉及更新事务日志(418),以反映对数据的改变。一旦改变被记录,消费者持久数据存储装置106就把消费者确认消息434发送(420)到生产者***120和消费者***102两者。
当生产者***120接收到消费者确认消息434和生产者确认消息436两者时,生产者事务日志132将数据更新提交(410)为最终的。类似地,只有当确认消息(434和436)两者都已被接收到时,消费者持久数据存储装置106才在其自身的持久数据日志440上将数据更新提交(422)为最终的。以这种方式,两***(消费者***102和生产者***12)上的数据一旦被提交就被确保相同。
如果从两个***102、120其中之一未接收到确认消息,或者以其它方式检测到两个***102、120其中之一的故障,则发起恢复方法。如果错误在短时间量内可修复,则数据传输可以从数据存储和传输过程中断的任何地方再次开始。否则,整个过程可能需要再次开始。
图5A是根据某些示例实施例图示了用于零数据丢失地传输和存储数据的方法500的流程图。图5A中所示的每一操作可以对应于存储在计算机存储器或者计算机可读存储介质中的指令。可选的操作由虚线指示(例如,具有虚线边界的方框)。在某些示例实施例中,图5A中所描述的方法由生产者***(例如,图1中的120)执行。
在某些示例实施例中,生产者***(图1,120)在生产者***(图1,120)的持久数据存储装置(例如,数据存储装置130)中存储(502)一个或多个数据项。在某些示例实施例中,生产者***(图1,120)也存储(503)事务日志,其中,事务日志包括对存储在生产者***上的数据所做的改变的列表。例如,每当数据改变时,改变的日志被存储在事务日志中。因此,当15行中的数据被从“Apple”改变到“Orange”时,事务日志只记录复制该改变所需的细节(例如,15行,原始值“Apple”,新值“Orange”)。以这种方式,如果数据丢失或者损坏,则其可以被通过重放数据改变的事务日志来重构。
生产者***(图1,120)在位于生产者***120处的一个或多个处理器处产生(504)一个或多个数据更新。在某些示例实施例中,所述一个或多个数据更新包括生产者***(图1,120)的持久数据存储装置中存储的一个或多个数据项的更新版本。在其它的示例实施例中,数据更新包括作为数据更新的结果所做的改变的列表。
生产者***(图1,120)把数据更新传送(506)到消费者***,并且同时在生产者***处启动对数据更新的存储,其中,数据更新起初被以临时状态存储。在生产者***处存储数据包括确保所产生的数据更新被记录在服务器***处。存在多于一种的在生产者***处存储数据的方法。在某些示例实施例中,生产者***(图1,120)把数据更新存储(508)到与生产者***相关联的数据存储装置。然后,生产者***(图1,120)把与***更新相关联的改变的列表存储(510)到存储于生产者***(图1,120)处的事务日志。
在某些示例实施例中,数据更新被存储到内存数据高速缓存,并且在被提交之前不被要求写到持久数据存储装置。在某些示例实施例中,来自多个来源的数据可被快速地并行存储,但是改变的列表必须被顺次地存储在事务日志中,以确保事务日志的完整性,这样,把数据改变存储到事务日志费时明显更长。
在某些示例实施例中,生产者***可以从消费者接收截断点确认。截断点确认是事务日志可以安全地被生产者截断的消费者确认。截断点是数据改变日志中数据传输应该被重新开始的点。
在某些示例实施例中,向消费者***(图1,102)传送数据更新包括:传送对数据的改变的列表,供存储在与消费者***(图1,102)相关联的事务日志中。例如,被存储在生产者***处的事务日志中的相同改变列表可被发送到消费者***供存储。
图5B是根据某些示例实施例图示了用于零数据丢失地传输并存储数据的方法524的流程图。图5B中所示的每一操作可以对应于存储在计算机存储器或者计算机可读存储介质中的指令。可选的操作由虚线指示(例如,具有虚线边界的方框)。在某些示例实施例中,图5B中所描述的方法由生产者***(图1,120)执行。
在某些示例实施例中,在包括一个或多个处理器以及存储供由所述一个或多个处理器执行的一个或多个程序的存储器的计算机***处执行该方法。
在某些示例实施例中,当在生产者***120处对数据更新的存储完成时,生产者***(图1,120)把第一确认传送(514)到消费者***,所述第一确认指示数据更新已经被成功地存储在与生产者***(图1,120)相关联的持久数据存储装置或者改变日志中。
在某些示例实施例中,生产者***(图1,120)从消费者***接收第三确认(516),其中,第三确认指示接收到数据更新。例如,生产者***把数据更新(实际数据或者数据改变的列表)发送到消费者***。就在接收到数据更新之时,消费者***立刻以确认消息回应,以让生产者***知道所述数据更新已经被成功地接收,并且消费者***将要开始存储所述数据更新。
在某些示例实施例中,生产者***(图1,120)确定(518)是否已经从消费者***102接收到第二确认,其中,第二确认指示消费者***102已经成功地把数据更新存储在与消费者***102相关联的持久数据存储装置中,例如数据存储装置106中。
在某些示例实施例中,根据对已从消费者***102接收到第二确认的确定,生产者***(图1,120)把存储在持久数据存储装置中的数据更新的临时状态改变(520)为永久状态。在某些示例实施例中,生产者***(图1,120)收集多个数据改变,并且一旦所有数据改变已经被成功地存储,就将它们全部提交。在某些示例实施例中,所述多个数据改变被作为单个事务一起接收。
在某些示例实施例中,与生产者***120相关联的持久数据存储装置是案例事务日志。在某些示例实施例中,与消费者***102相关联的持久数据存储装置是简单持久队列。
在某些示例实施例中,如果生产者***120在接收到第二确认之前检测到消费者***102的故障,则生产者***120把数据更新重新传送到消费者***102。在某些示例实施例中,生产者***在重新传送数据更新之前通知消费者***。
在某些示例实施例中,生产者***120与多个消费者***交互,并在等待来自消费者***102的第二确认的同时,继续与多个消费者***交互。
图6是根据某些示例实施例图示机器600的组件的框图,所述机器600能够从机器可读介质622(例如,非瞬态机器可读介质、机器可读存储介质、计算机可读存储介质、或者其任何适当的组合)读取指令624并部分或者全部地执行这里所讨论的方法中的任何一个或多个。具体来说,图6以计算机***(例如,计算机)的示例形式示出了机器600,在该计算机***内,用于使得机器600执行这里所讨论的方法中的任何一个或多个的指令624(例如,软件、程序、应用、小应用、APP或者其它可执行代码)可以被全部或者部分地执行。
在可替换实施例中,机器600作为单独的设备操作,或者可以被连接(例如,联网)到其它机器。在联网部署中,在服务器-客户端网络环境中,机器600可以作为服务器机或者客户端机操作,或者在分布式(例如,对等)网络环境中作为对等机操作。机器600可以是服务器计算机、客户端计算机、个人计算机(PC)、平板计算机、膝上型计算机、上网本、蜂窝电话、智能电话、机顶盒(set-topbox,STB)、个人数字助理(PDA)、环球网设备(webappliance)、网络路由器、网络交换机、网桥、或者能够顺次或者以其它方式执行规定了该机器所要采取的动作的指令624的任何机器。此外,虽然只图示了单个机器,但是术语“机器”也应被当作包括个体地或者联合地执行指令624以执行这里所讨论的方法中的任何一个或多个的全部或者部分的机器的任何集合。
机器600包括处理器602(例如,中央处理单元(CPU))、图形处理单元(GPU)、数字信号处理器(DSP)、专用集成电路(ASIC)、射频集成电路(RFIC)、或者其任何适当的组合)、主存储器604和静态存储器606,它们被配置成经由总线608相互通信。处理器602可以包含可被某些或者所有指令624临时或者永久配置的微电路,从而处理器602可被配置来部分或者全部地执行这里所描述的方法中的任何一个或多个。例如,处理器602的一个或多个微电路的集合可被配置来执行这里所描述的一个或多个模块(例如,软件模块)。
机器600还可以包括图形显示器610(例如,等离子体显示面板(PDP)、发光二极管(LED)显示器、液晶显示器(LCD)、投影仪、阴极射线管(CRT)、或者能够显示图形或者视频的任何其它显示器)。机器600也可以包括字母数字输入设备612(例如,键盘或小键盘)、光标控制设备614(例如,鼠标、触摸板、轨迹球、游戏杆、运动传感器、眼跟踪设备、或者其它指向仪器)、存储单元616、音频生成设备618(例如,声卡、放大器、扬声器、耳机插孔、或者其任何适当的组合)、以及网络接口设备620。
存储单元616包括其上存储了具体实现这里所描述的功能或方法中的任何一个或多个的指令624的机器可读介质622(例如,有形且非瞬态的机器可读存储介质)。指令624在其被机器600执行之前或者执行期间也可以完全或者至少部分地驻留在主存储器604内、处理器602内(例如,在处理器的高速缓存存储器内)、或者在这两者中。因此,主存储器604和处理器602可被视为机器可读介质(例如,有形且非瞬态的机器可读介质)。指令624可经由网络接口设备620通过网络190被传送或者接收。例如,网络接口设备620可以使用任意一个或多个传输协议(例如,超文本传输协议(HTTP))传递指令624。
在某些示例实施例中,机器600可以是便携式计算设备,诸如智能电话或者平板计算机,并具有一个或多个额外的输入组件630(例如,传感器或者仪表)。这样的输入组件630的示例包括图像输入组件(例如,一个或多个相机)、音频输入组件(例如,麦克风)、方向输入组件(例如,罗盘)、位置输入组件(例如,全球定位***(GPS)接收器)、取向组件(例如,陀螺仪)、运动检测组件(例如,一个或多个加速度计)、高度检测组件(例如,高度计),以及气体检测组件(例如,气体传感器)。被这些输入组件中的任何一个或多个获取的输入可被这里所描述的任何一个模块访问并供其使用。
如这里所使用的术语“存储器”是指能够临时或者永久地存储数据的机器可读介质,并且可以被当作包括但不限于随机访问存储器(RAM)、只读存储器(ROM)、缓冲存储器、闪存、以及高速缓存存储器。虽然在示例实施例中机器可读介质622被示为单个介质,但是术语“机器可读介质”应被当作包括能够存储指令的单个介质或者多个介质(例如,集中式或者分布式数据库、或者相关联的高速缓存和服务器)。术语“机器可读介质”也应被当作包括能够存储供机器600执行的指令624的任何介质、或者多个介质的组合,从而指令624在被机器600的一个或多个处理器(例如,处理器602)执行时,使得机器600全部或者部分地执行这里所描述的方法中的任何一个或多个。因此,“机器可读介质”是指单个存储装置或者设备,以及包括多个存储装置或设备的基于云的存储***或者存储网络。因此,术语“机器可读介质”应被当作包括但不限于固态存储器形式、光学介质形式、磁性介质形式或者其任何适当的组合形式的一个或多个有形(例如,非瞬态)数据仓库。
贯穿本说明书,多个实例可以把所描述的组件、操作或者结构实现为单个实例。虽然一个或多个方法的个体操作被图示出并描述为分开的操作,但是所述个体操作中的一个或多个可以被并发地执行,并且不要求操作被以所示的顺序执行。在示例配置中被作为分开的组件展现示的结构和功能可以被实现为组合结构或者组件。类似地,被作为单个组件展现的结构和功能可以被实现为分开的组件。这些以及其它变化、修改、添加和改善落入这里的主题的范围内。
某些实施例在这里被描述为包括逻辑或者许多组件、模块或者机制。模块可以组成软件模块(例如,机器可读介质上或者在传输介质中存储或者以其它方式具体实现的代码)、硬件模块、或者其任何适当的组合。“硬件模块”是能够执行某些操作并且可以被以某种物理方式配置或者布置的有形(例如,非瞬态)单元。在各种示例实施例中,一个或多个计算机***(例如,独立计算机***、客户端计算机***、或者服务器计算机***)、或者计算机***的一个或多个硬件模块(例如,处理器或者一群处理器)可以被软件(例如,应用或者应用部分)配置为硬件模块,所述硬件模块操作以执行这里所描述的某些操作。
在某些实施例中,硬件模块可以被机械地、电子地或者其任何适当组合方式实现。例如,硬件模块可以包括被永久地配置成执行某些操作的专用电路或者逻辑。例如,硬件模块可以是专用处理器,诸如现场可编程门阵列(fieldprogrammablegatearray,FPGA)或者ASIC。硬件模块也可以包括被软件临时配置成执行某些操作的可编程逻辑或者电路。例如,硬件模块可以包括被包含在通用处理器或者其它可编程处理器内的软件。交替理解,机械地、在专用和永久配置电路中或者在临时配置电路(例如,被软件配置)中实现硬件模块的决定可以受成本和时间考虑驱动。
因此,短语“硬件模块”应被理解成包含有形实体,并且这样的有形实体可被物理构建、永久配置(例如,硬连线)、或者临时配置(例如,编程)成以某种方式操作或者执行这里描述的某些操作。如这里所使用的“硬件实现的模块”是指硬件模块。考虑到其中硬件模块被临时配置(例如,编程)的实施例,并非每一硬件模块都需要在任一时间实例被配置或者实例化。例如,在硬件模块包含被软件配置成为专用处理器的通用处理器的情况下,通用处理器可以在不同时间被配置为各自不同的专用处理器(例如,包含不同的硬件模块)。软件(例如,软件模块)因此可以把例如一个或多个处理器配置成在一个时间实例组成特定硬件模块,并在不同的时间实例组成不同的硬件模块。
硬件模块可以把信息提供给其它硬件模块,并从其它硬件模块接收信息。因此,所描述的硬件模块可以被看作通信地耦合的。在多个硬件模块同时期存在的情况下,可以通过两个或更多个硬件模块之间的信号传输(例如,通过适当的电路和总线)来实现通信。在多个硬件模块被在不同时间配置或者实例化的实施例中,这样的硬件模块之间的通信可以例如通过在多个硬件模块可访问的存储器结构中存储和取回信息来实现。例如,一个硬件模块可以执行操作并把该操作的输出存储在其通信地耦合到的存储器设备中。然后,又一硬件模块在较晚时间可以访问该存储器设备以取回并处理存储的输出。硬件模块也可以利用输入或输出设备启动通信,并可以对资源(例如,信息集合)进行操作。
这里描述的示例方法的各种操作可以至少部分地由一个或多个处理器执行,所述处理器被临时配置(例如,通过软件)或者永久配置成执行相关操作。无论临时还是永久配置,这样的处理器都可以组成处理器实现的模块,所述模块操作来执行这里所描述的一个或多个操作或者功能。如这里所使用的“处理器实现的模块”是指使用一个或多个处理器实现的硬件模块。
类似地,这里所描述的方法可以是至少部分地由处理器实现的,处理器是硬件的示例。例如,方法的至少一些操作可以被一个或多个处理器或者处理器实现的模块执行。如这里所使用的“处理器实现的模块”指其中硬件包括一个或多个处理器的硬件模块。而且,所述一个或多个处理器也可以操作以支持相关操作在“云计算”环境中或者作为“软件即服务”(softwareasaservice,SaaS)的执行。例如,至少一些操作可以被一群计算机(作为包括处理器的机器的示例)执行,其中这些操作可经由网络(例如,互联网)并经由一个或多个适当的接口(例如,应用程序接口(API))访问。
某些操作的执行可以被分布在一个或多个处理器中,所述一个或多个处理器不仅驻留在单个机器内,而且跨越许多机器部署。在某些示例实施例中,一个或多个处理器或者处理器实现的模块可以位于单个地理位置中(例如,在家庭环境、办公室环境或者服务器场内)。在其它的示例实施例中,所述一个或多个处理器或者处理器实现的模块可以跨越许多地理位置分布。
这里所讨论的主题的一些部分可以按照算法或者对作为比特或者二进制数字信号存储在机器存储器(例如,计算机存储器)内的数据的操作的符号表示来展现。这样的算法或者符号表示是数据处理技术领域的普通技术人员用来向本领域其它技术人员传达其工作的实质的技术的示例。如这里所使用的“算法”是导致期望结果的操作或者类似处理的自洽序列。在这个上下文中,算法和操作涉及对物理量的物理操纵。通常但并非一定,这样的量可以采取电信号、磁信号或者光信号的形式,其能够被机器存储、访问、转移、组合、比较或者以其它方式操纵。有时候,主要是通常使用的原因,使用诸如“数据”、“内容”、“比特”、“值”、“元件”、“符号”、“字符”、“项”、“数字”、“数值”等词汇来指代这样的信号很方便。然而,这些词汇只是方便的标记,并且要被与适当的物理量相关联。
除非另外具体声明,否则这里使用诸如“处理”、“计算”、“运算”、“确定”、“展现”、“显示”等词汇的讨论可以是指机器(例如,计算机)的动作或过程,其操纵或者变形在一个或多个存储器(例如,易失性存储器、非易失性存储器或者其任何适当的组合)、寄存器或者接收、存储、传送或者显示信息的其它机器组件内被表示为物理(例如,电子、磁性或者光学)量的数据。此外,除非另外具体声明,否则如专利文档中常见的那样,术语“一”在这里被使用为包括一个或多于一个实例。最后,如这里所使用的连词“或者”是指非排他性的“或者”,除非另外具体声明。

Claims (20)

1.一种方法,包含:
在生产者***的持久数据存储装置中存储数据;
在所述生产者***处使用一个或多个处理器产生一个或多个数据更新;
将所述数据更新传送到消费者***并同时在所述生产者***处启动对所述数据更新的存储,其中,所述数据更新起初被以临时状态存储;
当在所述生产者***处对所述数据更新的存储完成时,把第一确认传送到所述消费者***,所述第一确认指示所述数据更新已经被成功地存储在与所述生产者***相关联的所述持久数据存储装置中;
确定是否已经从所述消费者***接收到第二确认,其中,所述第二确认指示所述消费者***已经在所述消费者***处成功地存储所述数据更新;以及
根据对已经从所述消费者***接收到所述第二确认的确定,把存储在所述生产者***处的所述数据更新的临时状态改变为永久状态。
2.如权利要求1所述的方法,其中,在从所述消费者***接收到所述第二确认之前,从所述消费者***接收第三确认,其中,所述第三确认指示接收到所述数据更新。
3.如权利要求1所述的方法,其中,与所述生产者***相关联的所述持久数据存储装置包括案例事务日志。
4.如权利要求1所述的方法,其中,与所述消费者***相关联的持久数据存储装置包括简单持久队列。
5.如权利要求1所述的方法,其中,如果所述生产者***在接收到所述第二确认之前检测到所述消费者***的故障,则所述生产者***把所述数据更新重新传送到所述消费者***。
6.如权利要求1所述的方法,其中,所述生产者***与多个消费者***交互,并在等待来自所述消费者***的所述第二确认的同时,继续与所述多个消费者***交互。
7.如权利要求1所述的方法,其中,所述一个或多个数据更新包括存储在所述生产者***的所述持久数据存储装置中的一个或多个数据项的更新版本。
8.如权利要求1所述的方法,还包括:
在所述生产者***处存储事务日志,其中,所述事务日志包括对存储在所述生产者***上的数据所做的改变的列表。
9.如权利要求8所述的方法,其中,所产生的数据更新包括对存储在所述生产者***上的数据所做的改变的日志。
10.如权利要求9所述的方法,其中,在所述生产者***处存储所述数据更新还包括:
把所述数据更新存储到与所述生产者***相关联的数据存储装置;以及
把与所述数据更新相关联的改变的列表存储到存储于生产者***的事务日志。
11.如权利要求9所述的方法,其中,把所述数据更新传送到消费者***还包括传送对消费者***处数据的改变的列表。
12.一种***,包含:
一个或多个处理器;
存储器;和
存储在所述存储器中的一个或多个程序,所述一个或多个程序包含指令,用于:
在生产者***的持久数据存储装置中存储数据;
在所述生产者***处的一个或多个处理器处产生一个或多个数据更新;
将所述数据更新传送到消费者***并同时在与所述生产者***相关联的改变日志中启动对所述数据更新的存储;
当与所述生产者***相关联的所述改变日志中的对所述数据更新的存储完成时,把第一确认传送到消费者***;
确定是否已经从所述消费者***接收到第二确认,其中,所述第二确认指示所述消费者***已经在与所述消费者***相关联的改变日志中成功地存储所述数据更新;
根据对已经从所述消费者***接收到所述第二确认的确定,把所述数据更新永久地存储在所述持久数据存储装置中。
13.如权利要求12所述的***,其中,在从所述消费者***接收到所述第二确认之前,从所述消费者***接收第三确认,其中,所述第三确认指示接收到所述数据更新。
14.如权利要求12所述的***,其中,与所述生产者***相关联的所述改变包括案例事务日志。
15.如权利要求12所述的***,其中,与所述消费者***相关联的所述改变日志包括简单持久队列。
16.如权利要求12所述的***,其中,如果所述生产者***在接收到所述第二确认之前检测到所述消费者***的故障,则所述生产者***把所述数据更新重新传送到所述消费者***。
17.一种非瞬态计算机可读存储介质,存储由一个或多个处理器执行的一个或多个程序,所述一个或多个程序包含指令,用于:
把一个或多个数据项存储在生产者***的持久数据存储装置中;
在所述生产者***处的一个或多个处理器处产生一个或多个数据更新;
将所述数据更新的日志传送到消费者***并同时在与所述生产者***相关联的所述持久数据存储装置中启动对所述数据更新的存储;
当与所述生产者***相关联的所述持久数据存储装置中的对所述数据更新的存储完成时,把第一确认传送到所述消费者***;
确定是否已经从所述消费者***接收到第二确认,其中,所述第二确认指示所述消费者***已经在与所述消费者***相关联的改变日志中成功地存储所述数据更新的日志;以及
根据对已经从所述消费者***接收到所述第二确认的确定,把所述数据更新永久地存储在所述持久数据存储装置中。
18.如权利要求17所述的非瞬态计算机可读存储介质,其中,在从所述消费者***接收到所述第二确认之前,从所述消费者***接收第三确认,其中,所述第三确认指示接收到所述数据更新的日志。
19.如权利要求17所述的非瞬态计算机可读存储介质,其中,与所述生产者***相关联的所述持久数据存储装置包括案例事务日志。
20.如权利要求17所述的非瞬态计算机可读存储介质,其中,与所述消费者***相关联的所述改变包括简单持久队列。
CN201410769030.9A 2014-06-26 2014-12-12 零数据丢失传输协议、用于数据同步的方法、***和介质 Active CN105323297B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
EP14290186.7 2014-06-26
EP14290186 2014-06-26
US14/446,172 US10423498B2 (en) 2014-06-26 2014-07-29 Zero data loss transfer protocol
US14/446,172 2014-07-29

Publications (2)

Publication Number Publication Date
CN105323297A true CN105323297A (zh) 2016-02-10
CN105323297B CN105323297B (zh) 2020-01-10

Family

ID=51211150

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410769030.9A Active CN105323297B (zh) 2014-06-26 2014-12-12 零数据丢失传输协议、用于数据同步的方法、***和介质

Country Status (2)

Country Link
US (2) US10423498B2 (zh)
CN (1) CN105323297B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108009029A (zh) * 2017-11-30 2018-05-08 中电福富信息科技有限公司 基于Ignite网格缓存数据解耦持久化的方法及***
CN112527884A (zh) * 2020-12-17 2021-03-19 中国航空工业集团公司成都飞机设计研究所 一种分段负责的主数据管理方法

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10423498B2 (en) 2014-06-26 2019-09-24 Sybase, Inc. Zero data loss transfer protocol
US20160217177A1 (en) * 2015-01-27 2016-07-28 Kabushiki Kaisha Toshiba Database system
CN106294357B (zh) * 2015-05-14 2019-07-09 阿里巴巴集团控股有限公司 数据处理方法和流计算***
US11132351B2 (en) * 2015-09-28 2021-09-28 Hewlett Packard Enterprise Development Lp Executing transactions based on success or failure of the transactions
US11334466B2 (en) * 2018-09-25 2022-05-17 International Business Machines Corporation Remedying bad service fixes having subsequent dependent fixes
CN111367628B (zh) * 2020-03-05 2023-05-23 中国银行股份有限公司 分布式事务的处理方法、装置及消息生产方、消费方***

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6510421B1 (en) * 1998-12-29 2003-01-21 Oracle Corporation Performing 2-phase commit with presumed prepare
CN101110706A (zh) * 2007-07-23 2008-01-23 中兴通讯股份有限公司 一种配置数据同步方法
CN101126998A (zh) * 2006-08-15 2008-02-20 英业达股份有限公司 群聚式计算机***高速缓存数据备份处理方法及***
US20080222159A1 (en) * 2007-03-07 2008-09-11 Oracle International Corporation Database system with active standby and nodes
CN101426026A (zh) * 2008-09-17 2009-05-06 北京六维世纪网络技术有限公司 一种多服务器间数据同步的方法及***
CN103858122A (zh) * 2011-08-03 2014-06-11 艾玛迪斯简易股份公司 保持客户端/服务器***内的分布式复制内容的高度一致性的方法和***

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5907848A (en) * 1997-03-14 1999-05-25 Lakeview Technology, Inc. Method and system for defining transactions from a database log
US7188273B2 (en) * 2003-11-24 2007-03-06 Tsx Inc. System and method for failover
WO2015047373A1 (en) * 2013-09-30 2015-04-02 Hewlett-Packard Development Company, L.P. No rollback threshold for audit trail
US10423498B2 (en) 2014-06-26 2019-09-24 Sybase, Inc. Zero data loss transfer protocol

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6510421B1 (en) * 1998-12-29 2003-01-21 Oracle Corporation Performing 2-phase commit with presumed prepare
CN101126998A (zh) * 2006-08-15 2008-02-20 英业达股份有限公司 群聚式计算机***高速缓存数据备份处理方法及***
US20080222159A1 (en) * 2007-03-07 2008-09-11 Oracle International Corporation Database system with active standby and nodes
CN101110706A (zh) * 2007-07-23 2008-01-23 中兴通讯股份有限公司 一种配置数据同步方法
CN101426026A (zh) * 2008-09-17 2009-05-06 北京六维世纪网络技术有限公司 一种多服务器间数据同步的方法及***
CN103858122A (zh) * 2011-08-03 2014-06-11 艾玛迪斯简易股份公司 保持客户端/服务器***内的分布式复制内容的高度一致性的方法和***

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108009029A (zh) * 2017-11-30 2018-05-08 中电福富信息科技有限公司 基于Ignite网格缓存数据解耦持久化的方法及***
CN108009029B (zh) * 2017-11-30 2022-01-04 中电福富信息科技有限公司 基于Ignite网格缓存数据解耦持久化的方法及***
CN112527884A (zh) * 2020-12-17 2021-03-19 中国航空工业集团公司成都飞机设计研究所 一种分段负责的主数据管理方法
CN112527884B (zh) * 2020-12-17 2022-06-28 中国航空工业集团公司成都飞机设计研究所 一种分段负责的主数据管理方法

Also Published As

Publication number Publication date
US20190391885A1 (en) 2019-12-26
US10423498B2 (en) 2019-09-24
US11650889B2 (en) 2023-05-16
CN105323297B (zh) 2020-01-10
US20150378845A1 (en) 2015-12-31

Similar Documents

Publication Publication Date Title
CN105323297A (zh) 零数据丢失传输协议
US9594644B2 (en) Converting a serial transaction schedule to a parallel transaction schedule
CN109074362B (zh) 分布式***中的拆分和移动范围
US9412065B1 (en) Training a model using parameter server shards
US9063908B2 (en) Rapid recovery from loss of storage device cache
US9244994B1 (en) Idempotency of application state data
US10380021B2 (en) Rapid recovery from downtime of mirrored storage device
US10397165B2 (en) Techniques for reliable messaging for an intermediary in a network communication environment
CN109522363B (zh) 基于区块链的云平台同步方法、***、设备及存储介质
US11157195B2 (en) Resumable replica resynchronization
CA3098942C (en) Taking snapshots of blockchain data
CN105320718A (zh) 同步复制环境中的事务完成
JP2013080404A (ja) クライアントでJavaメソッドを呼び出すシステム、コンピュータ、方法及びプログラム
EP3047630A1 (en) Techniques for reliable messaging for an intermediary in a network communication environment
US11308119B2 (en) Replicating large statements with low latency
CN105324795A (zh) 合并图形操作
US10311138B2 (en) Preventing partial change set deployments in content management systems
US11926053B2 (en) Robotic simulation distributed version control system
US11194665B2 (en) Systems and methods for seamless redelivery of missing data
US11513717B2 (en) Online data rehydration
US20240152504A1 (en) Data interaction method, apparatus, and electronic device
US20230075596A1 (en) Batch event delivery with identifiers
US20230134759A1 (en) Heliotropic work from home time zone expedition server coordinates Evolving FileTile (EFT) updates among local computation centers (LCC) by selectively relaying indicia As Soon After Commitment (ASAC) into version control to cause inter-center EFT demands to be queued earlier than local application start
CN116302032A (zh) 组态数据发布的方法、装置、存储介质以及电子设备
JP5544903B2 (ja) サーバ装置およびその制御プログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant