分布式存储环境中的同步复制的制作方法

xiaoxiao2020-7-22  16

分布式存储环境中的同步复制的制作方法
【专利摘要】本发明的各实施例涉及在分布式计算环境中对数据进行同步复制。为实现同步复制,构想了最终一致性方法和强一致性方法两者。可将接收到的数据写入主要数据存储的日志供最终提交。随后可使用促进在次要数据存储处重放数据的诸如唯一标识符等记录来注释数据。在接收到次要数据存储已将数据写入日志的确认后,主要数据存储可提交数据并且将成功确认传送回客户机。在强一致性方法中,主要数据存储可等待直到主要数据存储接收到次要数据存储不仅写入了数据而且提交了数据的确认时才向客户机发送成功确认。
【专利说明】分布式存储环境中的同步复制
【背景技术】
[0001]分布式计算环境依赖于在地理上分开的组件(这些组件可通过网络被连接)来执行数据存储和操纵。分布式计算环境的用户可能希望将他们帐户中的一个或多个帐户的数据维护在特定地理位置。例如,出于政治原因,某些顾客可能不希望将他们的数据存储在位于特定国家的机构处。类似地,顾客可能希望将他们的数据存储在彼此分开的多个地理位置,以降低围绕自然灾害的潜在可用性问题。结果,顾客可能在帐户的基础上决定使数据在各个地理位置被维护和/或复制。提供一种在分开的位置处维护数据同时提供对该数据的成功写入的确认的方法在下文中提供。
[0002]概述
[0003]本发明的各实施例涉及用于在分布式计算环境中同步复制数据的各系统、方法以及计算机存储介质。为实现同步复制,构想了最终一致性方法和强一致性方法。在主要数据存储处接收来自客户机的数据。随后可将数据写入主要数据存储的日志供最终提交。随后使用促进在次要数据存储处重放数据的诸如唯一标识符等记录来注释数据。经注释的数据从主要数据存储被传送至次要数据存储,以写入次要数据存储的日志中。在接收到次要数据存储已将数据写入日志的确认后,主要数据存储可提交数据并且将成功确认传送回客户机。在强一致性方法中,主要数据存储可等待直到主要数据存储已接收到次要数据存储不仅写入数据而且提交数据的确认时才向客户机发送成功确认。
[0004]提供本概述以便以简化形式介绍将在以下【具体实施方式】中进一步描述的一些概念。本概述不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
【专利附图】

【附图说明】
[0005]以下将参考所附附图详细描述本发明的各说明性实施例,附图通过引用结合于此,并且其中:
[0006]图1描绘了适于实现本发明各实施例的示例性计算设备;
[0007]图2描绘了示出根据本发明各实施例的分布式计算环境内的示例性地理区域的框图;
[0008]图3描绘了根据本发明各实施例的示例性存储戳的框图;
[0009]图4描绘了根据本发明各实施例的对数据进行地理复制的示例性系统的框图;
[0010]图5描绘了根据本发明各实施例的提交标识(提交ID)的框图;
[0011]图6描绘了根据本发明各方面的用于确定如何处理与提交ID相关的特定消息的方法;
[0012]图7描绘了根据本发明各实施例的用于将数据从主要数据存储传递至次要数据存储的示例性系统的框图;
[0013]图8描绘了示出根据本发明各方面的示例性异步地理复制的时间流程的框图;
[0014]图9描绘了示出根据本发明各方面的使用最终一致性方法进行示例性同步复制的时间流程的框图;
[0015]图10描绘了示出根据本发明各方面的使用强一致性方法进行示例性同步复制的时间流程的框图;
[0016]图11描绘了根据本发明各实施例的从主要数据存储的角度来看具有最终一致性的同步复制方法;以及
[0017]图12描绘了根据本发明各实施例的从主要数据存储的角度来看具有强一致性的同步复制方法;以及
[0018]图13描绘了根据本发明各实施例的从具有主要数据存储和次要数据存储两者的分布式计算系统的角度来看的同步复制方法。
[0019]详细描述
[0020]本文中用细节来描述本发明各实施例的主题以满足法定要求。然而,该描述本身并非旨在限制本专利的范围。相反,发明人已设想所要求保护的主题还可结合其它当前或未来技术以其它方式来实施,以包括不同的步骤或类似于本文中所描述的步骤的步骤组
口 ο
[0021]本发明的各实施例涉及用于在分布式计算环境中同步复制数据的各系统、方法以及计算机存储介质。为实现同步复制,构想了具有关于故障转移有强一致性的最终一致性方法以及强一致性方法两者。在主要数据存储处接收来自客户机的数据。随后可将数据写入主要数据存储的日志供最终提交。随后使用促进在次要数据存储处重放数据的诸如唯一标识符等记录来注释数据。经注释的数据从主要数据存储被传送至次要数据存储,以写入次要数据存储的日志中。在接收到次要数据存储已将数据写入日志的确认后,主要数据存储可提交数据并且将成功确认传送回客户机。在强一致性方法中,主要数据存储可等待直到主要数据存储已接收到次要数据存储不仅写入数据而且提交数据的确认时才向客户机发送成功确认。
[0022]相应地,在一个方面中,本发明提供了一种在分布式计算环境中的利用处理器和存储器来在该分布式计算环境中对数据进行同步地理复制的计算机实现的方法。该方法包括在主要数据存储处接收来自客户机的数据。该方法还包括将该数据写入主要数据存储的日志。此外,该方法包括用记录来注释被写入日志的该数据,该记录允许在次要数据存储处重放所述数据。另外,该方法包括从次要数据存储接收数据已被写入次要数据存储处的日志的确认。此外,在从次要数据存储接收到确认后,该方法包括向主要数据存储提交数据。该方法还包括向客户机传送对于在主要数据存储处提交数据的确认。另外,该方法包括将提交ID从主要数据存储传送至次要数据存储。
[0023]在另一方面,本发明提供了其上具有计算机可执行指令的计算机存储介质,这些计算机可执行指令在由具有处理器和存储器的计算系统执行时,使得该计算系统执行一种在分布式计算环境中对数据进行同步地理复制的方法。该方法包括在主要数据存储处接收来自客户机的数据。另外,该方法包括在主要数据存储处锁定与数据相关联的对象。此外,该方法还包括将数据与记录一起从主要数据存储传送至次要数据存储。另外,该方法包括从次要数据存储接收数据已被写入次要数据存储处的日志中的第一确认。在从次要数据存储接收到第一确认后,该方法叙述了向主要数据存储提交数据。另外,该方法包括将提交数据的指令从主要数据存储传送至次要数据存储。该方法还包括从次要数据存储接收第二确认。第二确认对数据在次要数据存储处被提交进行确认。在主要数据存储处接收到第二确认后,该方法叙述了对与数据相关联的对象解锁。另外,该方法叙述了向客户机传送对于在主要数据存储处提交数据的确认。
[0024]本发明的第三方面提供了其上具有计算机可执行指令的计算机存储介质,这些计算机可执行指令在由具有处理器和存储器的计算系统执行时,使得该计算系统执行一种在分布式计算环境中对数据进行同步地理复制的方法。该方法包括在主要数据存储处接收来自客户机的数据。该方法还包括传送数据以及在分布式计算环境内所生成的数据的标识符,以促进将数据同步提交至次要数据存储。主要数据存储与次要数据存储位于不同的地理区域。该方法还叙述了在次要数据存储处接收数据。另外,该方法包括将数据写入次要数据存储处的日志中。此外,该方法包括将把数据写入日志的确认从次要数据存储传送至主要数据存储。确认包括标识符的至少一部分。响应于接收到把数据写入日志的确认,该方法叙述了在主要数据存储处提交数据。此外,该方法叙述了传送在次要数据存储处提交数据的指令。指令至少部分地包括标识符的一部分。该方法还叙述了在次要数据存储处提交数据。
[0025]在简要描述了本发明的各实施例的概览后,以下描述适于实现本发明的各实施例的示例性操作环境。
[0026]大体上参考附图,并且首先具体参考图1,示出了适用于实现本发明的各实施例的示例性操作环境,并将其概括指定为计算设备100。计算设备100只是合适的计算环境的一个示例,并且不旨在对本发明的使用范围或功能提出任何限制。也不应将计算设备100解释为对所示出的任一模块/组件或其组合有任何依赖性或要求。
[0027]各实施例可以在计算机代码或机器可使用指令的一般上下文中描述,包括由计算机或诸如个人数据助理或其他手持式设备等其他机器执行的诸如程序模块等的计算机可执行指令。一般而言,包括例程、程序、对象、模块、数据结构等的程序模块指的是执行特定任务或实现特定抽象数据类型的代码。各实施例可以在各种系统配置中实施,包括手持式设备、消费电子产品、通用计算机、专用计算设备、服务器、路由设备、分布式计算设备等。各实施例还能在其中任务由通过通信网络链接的远程处理设备来执行的分布式计算环境中实现。
[0028]继续参考图1,计算设备100包括直接或间接耦合以下设备的总线110:存储器112、一个或多个处理器114、一个或多个呈现模块116、输入/输出(I/O)端口 118、I/O模块120、和说明性电源122。总线110表示可以是一条或多条总线(诸如地址总线、数据总线、或其组合)。尽管为了清楚起见图1的各框用线条示出,但是在实际上各模块的轮廓并不是那样清楚。例如,可以将诸如显示设备等的呈现模块认为是I/O模块。而且,处理器具有存储器。本发明人认识到,这是本领域的特性,并且重申,图1的图示只是例示可结合一个或多个实施例来使用的示例性计算设备。诸如“工作站”、“服务器”、“膝上型计算机”、“手持式设备”、“服务器”、“数据存储”等分类之间没有区别,因为它们全部都被认为是在图1的范围之内的并且被称为“计算机”或“计算设备”。
[0029]计算设备100通常包括各种计算机可读介质。作为示例而非限制,计算机可读介质可以包括以下非瞬态计算机存储介质:随机存取存储器(RAM);只读存储器(ROM);电可擦除可编程只读存储器(EEPROM);闪存或其他存储器技术;CDR0M、数字多功能盘(DVD)或其他光或全息介质;磁带盒、磁带、磁盘存储或其他磁存储设备;或可用于对所需信息进行编码并且可由计算设备100访问的任何其他介质。在示例性实施例中,计算机可读介质是非瞬态介质。
[0030]存储器112包括易失性和/或非易失性存储器形式的计算机存储介质。存储器可以是可移动的,不可移动的,或两者的组合。示例性硬件设备包括固态存储器、硬盘驱动器、光盘驱动器等。计算设备100包括从诸如存储器112或I/O模块120等各种实体读取数据的一个或多个处理器。呈现模块116向用户或其他设备呈现数据指示。示例性呈现模块包括显示设备、扬声器、打印模块、振动模块等等。I/O端口 118允许计算设备100在逻辑上耦合至包括I/O模块120的其他设备,其中某些设备可以是内置的。说明性模块包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、打印机、无线设备等等。可以理解,计算设备100可以用各种形式来表现。例如,计算设备100的一些部分在物理上可以位于第一地理位置,而其他部分在物理上可以位于不同的地理位置。因而,构想了各种设备、服务、应用以及层可以跨各种位置分布,而仍然实现传统上适用于计算设备100的所需结果。
[0031]参考图2,提供了示出根据本发明一实施例的示例性地理区域(geographicalregion, “geo region”)200的框图。一般而言,地理区域是通过政治和/或政府边界被分组在一起的地理位置集合。例如,一地理区域可以包括美国,第二地理区域可以包括欧洲,以及第三地理区域可以包括亚太区域。
[0032]如下文将更详细地讨论的,客户机可能希望在特定地理区域内、但在该地理区域内的不同地理位置处复制数据。例如,客户机可能希望在美国国内维护他们的全部数据(而不是在不同地理区域中复制数据)以服从管控美国的法律。但是由于业务连续性计划(灾难恢复计划),客户机可能要求要在美国国内的不同地理位置(geographical location, “geolocation”)(下文中将讨论)中复制数据。结果,数据可以通过地理位置A202来访问,地理位置A202可以位于第一地理位置。随后也可以在第二地理位置B204中复制数据,第二地理位置B204在地理上不同于地理位置A206。
[0033]地理位置是持有一个或多个存储戳(下文中将讨论)的地理位置。地理位置的示例包括作为第一地理位置的基于美国华盛顿州西雅图的存储戳分组,以及作为第二地理位置的基于美国爱荷华州得梅因的存储戳分组。由于西雅图与得梅因之间的物理距离相当远,要是自然灾害或其他业务干扰活动发生在西雅图,则得梅因可以从该活动的影响中隔离。
[0034]存储戳(此处也被称为“数据存储”)是可被耦合至一个或多个处理器的物理驱动器或其他计算机可读存储器的集合。例如,存储戳可以包括维护2至20千万亿字节(PB)存储的10-20个存储机架的群集。构想了存储戳具有更大或更小的存储容量。与公共地理位置相关联的各存储戳可以在地理上非常接近(例如,在公共数据中心内)。作为彼此相对非常接近的结果,公共地理位置的各存储戳之间一般存在高级别的连接。然而,由于在公共地理位置中各存储戳一般彼此非常接近,因此导致一个存储戳丢失连接的事故(例如,自然灾害)有可能影响同一地理位置内的另一存储戳。
[0035]因此,本发明的一个方面是允许在地理上可彼此分开的两个或更多存储戳之间对数据进行复制。因而,构想了将在第一地理位置中的第一存储戳中所维护的数据复制到第二地理位置中的第二存储戳,使得第二地理位置与第一地理位置在地理上分开足够距离(例如,100英里、1,000英里、10,000英里、12,500英里等)。构想了第二存储戳与第一存储戳在同一地理区域内。相反,还构想了第二存储戳与第一存储戳在不同地理位置。
[0036]返回图2,(在该非限制性示例中)地理位置A202和地理位置B204位于公共地理区域200内。地理位置A202包括存储戳206和存储戳208。类似地,第二地理位置B204包括存储戳C210和存储戳D212。如上所述,构想了地理位置可以具有任何数量的任何大小的存储戳。
[0037]本发明的各实施例构想了具有主要地理位置和次要地理位置,在那里存储给定帐户的、或帐户的各部分的数据。在示例性实施例中,与帐户相关联的顾客可以选择主要地理位置(例如,地理位置A202)。此外,构想了基于多个准则(或是由顾客提供的,或是基于可靠性、冗余性、和/或可用性度量)为顾客选择次要地理位置(例如,地理位置B204)。然而,还构想了或是由顾客选择或是为顾客选择主要地理位置和/或次要地理位置。
[0038]转向图3,图3示出根据本发明各实施例的示例性存储戳300的框图。在示例性实施例中,存储戳300可以位于先前所讨论的图2中的地理位置A202内。存储戳可以包括多个分区。分区是给定存储戳的存储容量子集。因此,被存储至存储戳的数据可以至少部分地基于存储该数据的分区的分区标识符来标识。在示例性实施例中,各分区可被用来利用存储戳管理一个或多个帐户。然而,构想了帐户可利用一个或多个分区(如下文将讨论的)。
[0039]存储戳300被描绘成具有分区A302、分区B304以及分区C306。在这一示例中,分区A302维护与帐户A306及帐户B308相关联的数据。分区B304维护与帐户C310相关联的数据。分区C305还包括帐户A306。在示例性实施例中,帐户A306跨多个分区,诸如分区A302和分区C305分布。可以理解,在以上示例中可以提供任何数量的帐户及任何数量的分区,并且该说明是出于解释目的而提供的。
[0040]对数据的地理复制被构想成发生在分布式计算环境内的多个不同层级处。例如,构想了将存储在给定存储戳上的数据地理复制到另一存储戳。类似地,构想了对与特定帐户相关联的数据进行地理复制。此外,构想了对特定分区中所维护的数据进行地理复制。因此,地理复制被构想成能够以任何粒度级在系统内被执行。
[0041]在示例性实施例中,构想了地理复制发生在帐户层级,使得帐户将具有分配给该帐户的主要地理位置以及一个或多个次要地理位置。对于允许针对想要从一个地理位置迁移至另一地理位置的特定存储帐户的地理故障转移而言,在帐户层级处进行地理复制可能是重要的。另外,在帐户层级处进行地理复制可允许顾客打开或关闭对特定帐户的地理复制以节省资源(例如,空间、金钱)。此外,构想了可以针对与帐户相关联的数据的一部分打开或关闭复制(例如,地理复制)。
[0042]转向图4,图4示出根据本发明各实施例的对数据进行地理复制的示例性系统400的框图。系统400包括主要数据存储402和次要数据存储404。主要存储戳包括多个分区,诸如分区服务器A408和分区服务器B410。在这一示例中,分区服务器A408包括存储器表412和日志414。
[0043]在示例性实施例中,分区服务器可以包括多个存储器表和/或多个日志。例如,分区可以包括更新日志、块日志、页日志、和/或地理消息日志。在示例性实施例中,日志位于分布式计算环境的流层内,使得该日志是仅被附加的离散数据流。
[0044]可以依赖于日志流来在存储戳的一部分(例如,存储节点)出故障之后重新建立存储戳的数据。例如,可以将数据提交至特定分区处的存储戳,但在该分区出故障之后,至少部分地通过重放与该分区相关联的一个或多个日志来重新创建该分区的状态。可以直到数据被重放(例如,写入特定存储戳的一个或多个日志)时才将该数据“提交”至该存储戳。在示例性实施例中,仅被存储至或写入数据戳的数据与被提交至该数据戳的数据之间存在区另IJ。例如,数据可被写入存储戳的日志,但直到数据被提交至存储戳时客户机才能访问该数据。在示例性实施例中,提交来自日志的数据可以通过按次序(可以不是严格顺序的,而是仅按次序)播放(或重放)来自日志的数据而发生。
[0045]如下文将更详细地讨论的,可以按非顺序方式接收数据。然而,可能希望按顺序方式提交数据。在示例性实施例中,可能希望在日志中维护非顺序地接收到的数据,直到可按顺序方式将该数据的一部分提交至存储戳。
[0046]返回图4,系统400包括网络406。系统400的各个组件可以经由网络406彼此通信,网络406可包括但不限于一个或多个局域网(LAN)和/或广域网(WAN)。这样的联网环境常见于办公室、企业范围计算机网络、内联网和因特网中。例如,在分布式计算环境中,允许不同的组件通过网络进行通信是常见的。由此,此处不对网络406进行更详细的讨论。
[0047]次要数据存储404包括XFE424 (也被称为前端)、分区服务器C420、以及分区服务器D422。在这一示例中,分区服务器C420包括GML428(也被称为地理消息日志)、存储器表432、以及日志434。如先前参考分区服务器A408所讨论的,构想了在给定分区中可利用一个或多个存储器表和/或一个或多个日志。
[0048]XFE424是给定戳的前端服务。除XFE被配置成处理的其他功能之外,XFE处理传入地理消息(即,出于地理复制目的从一个存储戳传递至另一存储戳的消息)以确保XFE接收到的数据旨在被提交至相关联的存储戳。XFE还可检查地理消息中存在的各事务以便在存储戳内标识特定分区,数据将被提交至该特定分区。XFE还可以负责将地理消息转发至适当分区和/或日志,接收对存储/提交数据的确认,和/或向数据的一个或多个发送者提供关于数据状态的确认。
[0049]GML428是地理消息日志。在示例性实施例中,在次要数据戳处接收到地理消息后,该地理消息就几乎立即被写入GML。对地理消息进行这种接近立即的写入可以允许次要数据存储将关于该数据在次要数据存储处已被持久写入(但可能尚未被提交)的确认提供回给作出供应的主要数据存储。在这一示例中,主要数据存储并不需要等待在次要数据存储上重新执行地理事务中的一些(例如,地理消息中的部分)以供返回成功。因而,地理消息被写入GML,并且然后在稍后时间被重放。
[0050]这一利用GML的过程可以将主要数据存储与次要数据存储解耦,因为如果在次要数据存储上重放地理消息时有延迟,则主要数据存储将不会使发送其地理消息被阻塞。在示例性实施例中,这可能是重要的,因为如果主要数据存储被阻塞,则它可能开始备份。然而,当次要数据存储正在跟上主要数据存储时,地理消息可直接从存储器中重放,而无需使用GML或至少无需从GML中读回。
[0051 ] 构想了在示例性实施例中GML可被完全绕过。作为替代,可将传入地理消息直接写入分区的直接支持将数据提交至该分区(或检查点过程)的一个或多个日志。
[0052]图4示出要被地理复制的数据的示例性流程。例如,在主要数据存储402处接收数据416。在这一示例中,数据416可以来自客户机(例如,应用、服务、程序等)。取决于数据416是否与帐户相关联,即在这一示例中,取决于该数据需要异步、用最终一致性方法进行同步、还是用强一致性方法进行同步,该流程可被更改。然而,出于一般讨论的目的,图4示出异步方法。可以理解,可以针对其他类型或配置的地理复制来更改数据的流程。
[0053]帐户控制单元(“A⑶”)可被配置成标识旨在对什么帐户和帐户内的什么信息进行地理复制以及旨在如何进行地理复制。例如,A⑶可以在主要数据存储402处检查数据416,以确定数据416与(例如)希望异步地理复制的帐户相关联。每一数据戳可具有用于在该戳处控制各帐户的A⑶。例如,主要数据存储402具有A⑶P409,而次要数据存储具有A⑶S421。
[0054]在示例性实施例中,A⑶是每一戳处运行的服务。A⑶可以负责在每一存储戳处执行一系列操作以执行各复制过程。例如,ACU可以负责为相关联的存储戳处的帐户打开和关闭复制。如下文将讨论的,位置服务403可以与ACU进行通信以发出对各个复制过程的高级指示。例如,ACU可以与表主机进行通信以执行各种操作,诸如分区的拆分、合并以及复制。ACU还可以从位置服务接收其他命令,诸如迁移初始化命令、弓I导命令、或其他面向复制的命令。ACU还可以跟踪对帐户所执行的每一命令的进度。位置服务随后可以从ACU检索或接收与根据它们的命令各个戳正如何进展有关的更新。
[0055]如上所述,位置服务403可以负责控制复制的高级功能。例如,位置服务可以维护复制和迁移分配(例如,对于给定帐户,什么戳是主要的而什么戳是次要的)。位置服务还可以用作控制帐户复制的最高权威。位置服务(可以是计算设备或计算环境中运行的一组进程)可以负责为各个戳之间正进行复制/迁移的存储帐户添加复制和迁移状态。
[0056]在示例性实施例中,位置服务403为作为给定帐户的主要和/或次要数据存储的全部存储戳执行全部的存储帐户创建、删除以及更新事务。在该示例中,位置服务403能够跨存储帐户的不同戳来维护存储帐户的信息一致性,这可包括创建/删除帐户、改变帐户许可、以及更新帐户密钥以改变帐户的域名。此外,位置服务可以与一戳处的前端(例如,XFE424)和/或A⑶(例如,A⑶S421)进行通信以控制和监视该戳处的针对复制过程的操作。因此,位置服务403可以负责管理复制的总体过程,而每一戳处的A⑶可以负责与位置服务进行通信并且监视所需操作在特定戳处的性能。
[0057]如下文将讨论的,数据416可以用一个或多个记录来注释以促进在次要数据戳处重放该数据(见稍后对经地理消息注释的记录的讨论)。在该示例中,经注释的数据是数据418,数据418通过网络406从主要数据存储402被传送至次要数据存储404。次要数据存储404的XFE424接收数据418,数据418可以是地理消息形式。XFE424随后可以标识应被写入分区服务器C420中的GML428的事务(例如,数据418内的一部分)。例如,可以将与数据418相关联的帐户提交至分区服务器C420。
[0058]数据中从XFE424传送至GML428的部分是数据426数据426随后可以被(例如持久地)写入GML428以供稍后向分区服务器C420提交。在该示例性异步地理复制模型中,从GML处重放的、要提交至分区服务器C420的数据是数据430。数据430可以是数据426的一部分,或者它可以是多个先前接收到的数据的组合,这些先前接收到的数据按有序(例如,顺序)方式被重放以供通过数据430在存储器表432和/或日志434中的条目来提交至分区服务器C420。此外,构想了当被无序重放的各事务(例如,数据)不依赖于彼此时,可以无序重放这些事务。该无序重放允许以较快速率进行重放。然而,还构想了在示例性实施例中批量事务需要重放整批事务或者不重放该批的任何事务。[0059]返回GML428。可以将确认436从GML428 (或者由服务或控制单元代表GML428)传送至XFE424,从而指示数据426已被写至GML428。结果,XFE424 (或者由服务或控制单元代表XFE424)将对该数据416 (或数据418、或数据430)的持久性的确认438传送至次要数据存储404。如下文将讨论的,作为接收到确认438的结果,可以从主要数据戳中更新、生成、和/或传送提交ID。
[0060]在示例性实施例中,从主要数据存储402传送至次要数据存储404的数据是批处理的地理消息形式。批处理的地理消息包括目的地可以是不同分区的多个事务。在该示例中,XFE424可以在批处理的地理消息内标识各个事务,并且将适当事务转发至适当分区。继续该示例,一旦XFE424从来自地理消息的事务被发往的所有分区接收到成功,XFE424就可以向主要数据存储402 (或作为地理消息的源的特定主要数据存储)发送确认438。在该示例中的此时,次要数据存储404处的数据可能尚未从GML428重放到一个或多个其他日志(例如,更新日志、团块(blob)日志),这可在稍后异步地发生。主要数据存储402 (或主要数据存储402的源分区)可以维护对于一组时期号和/或序列号(下文将讨论)的确认已被收回。基于那些接收到的确认,主要数据存储402确定提交ID是否能前移以供与将来的地理消息包含在一起。
[0061]提供上述示例来引出下文中将更详细地讨论的概念。
[0062]应当理解,图4中示出的安排以及本文描述的其他安排仅作为示例来阐明。除了所示的安排和元素之外,或作为其替代,可使用其他安排和元素(例如,机器、接口、功能、次序、以及功能组等),并且可完全省略某些元素。此外,此处所描述的许多元素是可以实现为分立或分布式组件或结合其他组件的、以及以任何合适的组合和在任何合适的位置的功能实体。此处被描述为由一个或多个实体执行的各种功能可由硬件、固件和/或软件来执行。例如,各种功能可由执行存储在存储器中的指令的处理器来执行。
[0063]图4中所示的组件中的每一个都可以是任何类型的计算设备,诸如例如参考图1描述的计算设备100。应理解,可在本发明范围内的系统400内采用任何数量的数据存储、分区服务器、前端、日志、网络、和/或存储器表。另外,在系统400内还可包括其他未示出的组件。
[0064]因此,可以采用任何数量的组件来实现本发明的各实施例的范围内的所需功能。尽管为了清楚起见图4的各个组件用线条示出,但是在实际上各个组件的轮廓并不是那样清楚。此外,虽然图4的某些组件被描述成各单独的框,但是该描绘在性质上和数量上是示例性的,且不应该解释为限制。
[0065]转向图5,图5示出根据本发明各实施例的提交标识(“提交ID”)500的框图。提交ID是用于确保在复制期间顺序提交数据的标识。由于本发明各实施例不需要顺序传送数据(或顺序接收数据),因此提交ID用于确保顺序提交存储戳中的该数据。提交ID可指定对于该存储戳和分区范围而言目的地分区可将地理消息/事务(数据)提交得多远。提交ID可以包括(如图5中所示)戳ID502、分区号(#) 503、分区范围504、时期号(#) 506、和/或序列号(#)508。应当理解,提交ID可以包含信息的更多或更少部分。然而,在示例性实施例中,提交ID包含至少一个时期号和序列号。
[0066]对于在具有最终一致性的同步复制方法中的提交ID,提交ID可被不同地结构化。例如,在具有最终一致性的同步复制模型中发往次要数据存储的提交ID可包括要在次要数据存储处提交的时期号和序列号的列表。结果,当主要数据存储接收到提交ID已被记录到次要数据存储处的GML中的确认时,主要数据存储处的提交ID可前移至已被写入次要数据存储处的日志中的时期号和序列号。换言之,传送至次要数据存储的提交ID还可包括一个或多个时期号和序列号,该一个或多个时期号和序列号标识次要数据存储应当自先前提交ID以后提交至哪一点。
[0067]当加载分区时,最后一个提交ID可被标识并且尚未提交的所有事务时期号和序列号也被标识。如上文讨论的,那些标识出的时期号和序列号在提交ID前移时被提交。
[0068]然而,构想了在具有最终一致性的同步复制模型中主要数据存储处所存储的提交ID在结构上可类似于异步模型中所使用的提交ID。例如,提交ID可表示上至被写入次要数据存储的日志(例如GML)中的时期号和序列号。
[0069]戳ID502是源戳的标识符。例如,戳ID可以唯一地标识向次要数据戳供应数据的主要存储戳。在示例性实施例中,分区范围504表示源键范围,该提交的前移要被应用于该源键范围。然而,如果分区正在父区域中提交事务而从其区域中发送事务,则分区范围可与源分区的键范围不同或者与消息ID中的分区范围不同。
[0070]时期号和序列号是增加的顺序值。例如,时期号在概念上可被认为是章节号,而序列号可被认为是在每一新章节重新开始的章节的页码。结果,可以利用时期号和序列号来标识特定事务或特定分区。时期号506表示该提交所来自的(或与其相关联的)分区的实例。
[0071]序列号508 (序列#)表示要提交的最后顺序的事务。这告诉次要存储戳多达该时期号和序列号的所有事务可在次要存储戳上被提交。每次存在对该分区的拆分或合并或分区重新加载时,该时期号变化。为允许无序及平行地将地理消息(例如,数据)发送至相同的次要数据戳,当从次要数据戳接收到对带有给定事务(事务X)的地理消息的确认并且从次要数据戳接收回对带有先于事务X的各事务的所有其他地理消息的确认之后,该给定事务(事务X)的提交ID将从主要数据戳被发送至次要数据戳。
[0072]提交ID可伴有从主要数据戳发送至次要数据戳的数据。例如,从主要(数据戳/存储)发送至次要(数据戳/存储)的每一地理消息可以包括来自主要(数据戳/存储)的提交ID。因此,主要(数据戳/存储)可在给定通信上承载一标识符,该标识符授权在次要(数据戳/存储)处要提交上至给定提交ID的数据。在示例性实施例中,提交ID指示在次要(数据戳/存储)处已写入GML的最大连续事务,主要(数据戳/存储)已接收回关于把这些事务写入GML的确认。由于已从次要(数据戳/存储)接收回确认,因此主要(数据戳/存储)能够确保至少上至该提交ID的数据被持久保存到至少次要(数据戳/存储)的GML (如果尚未在次要(数据戳/存储)处被提交的话)。
[0073]然而,还构想了以定义的间隔或在定义的提交ID通信中的不活动时间段传送提交ID,以允许次要(数据戳/存储)在提交数据中有进展。这确保对于主要(数据戳/存储)的源分区的最后一个提交ID被发送至给定次要(数据戳/存储)上的所有分区,这些分区可包括一部分该源分区的数据。因而,目的地的各分区可在提交等待要从GML重放的待决事务中有进展。次要(数据戳/存储)可如何利用提交ID来顺序提交数据的示例在图6的示例性框图中示出,图6表示根据本发明各方面的确定要如何处理与提交ID相关的特定事务的方法600。在该示例中,假定地理消息被写入次要(数据戳/存储)的GML并且提交ID被接收,该提交ID随后被评估以确定哪些地理消息要从GML提交至次要(数据戳/存储)。
[0074]在框602,确定地理消息的分区号是否超过当前提交ID。例如,地理消息可以包括消息ID,该消息ID包含标识地理消息的源的分区号。类似地,地理消息内的事务可具有与其相关联的时期号和序列号。如果地理消息的分区号超过提交ID的分区号,则如框604处指示的,地理消息可被忽略。如此处使用的,“忽略”地理消息可能仅仅意味着地理消息不在要被提交的状态(缺少先前顺序的地理消息)。在示例性实施例中,分区号在分区被重新加载时用于允许次要数据存储忽略用于重放的重复事务。当分区被重新加载到主要数据存储上时,该分区使其分区号递增,并且该分区再次开始从最后的提交ID起发送消息。在该示例中,每一地理消息具有与其一起发送的分区号。提交ID也具有分区号,该分区号是发送该提交ID时的当前分区号。
[0075]在示例性实施例中,提交ID告诉次要重放引擎,即与次要数据存储相关联的重放数据的引擎,至少做以下事项:(I)对于具有较低分区号的任何地理消息,仅重放直到该提交ID的时期号和序列号的事务,(2)如果自该较低分区号的所有其他事务具有较高时期号/序列号,则忽略它们,因为那些事务是副本并且将从主要分区被重发。
[0076]然而,如果框602中的确定导致地理消息的分区号不大于当前提交ID,则分析移至框606。在框606处,确定地理消息中每一事务的时期号是否大于当前提交ID。如果该事务的时期号大于当前提交ID,则如框608处指示的,那些事务可被忽略。
[0077]然而,如果在框606确定该事务的时期号没有大于提交ID,则在框610执行对该事务的时期号是否等于提交ID的确定。由于时期号可随分区的拆分或合并而改变,因此较低时期号指示较大时期号之前的所有地理消息事务被持久存储在次要数据存储的日志(例如,GML)中。因而,如框614处指示的,被持久存储在次要数据存储处的其时期号早于提交ID的时期号的任何地理消息事务被提交至次要数据存储。
[0078]然而,如果地理消息的时期号等于提交ID的时期号,则如框612处指示的,执行对每一事务的序列号是否大于当前提交ID的序列号的确定。如果序列号大于提交ID,则地理消息可被忽略。但是,如果地理消息中事务的序列号没有大于当前提交ID,则同样如框612处指示的,事务可被提交。如框614处指示的,直到提交ID当前时期号的最大序列号的所有事务被提交至次要数据存储。
[0079]尽管上述方法本质上是示例性的,但针对具有最终一致性方法的同步复制构想了另一方法。以下示例性过程本质上比图6中讨论的更简单。该简单性部分是由于把次要数据存储处所提交的事务限于提交ID列表中所指示的那些事务的结果。例如,在该示例性方法中,只有那些具有如提交ID中所指示的时期号和序列号的事务被提交至次要数据存储的 GML。
[0080]附加示例性场景包括就事务仍然处于GML中而言对于“突然故障转移(abruptfailover)”要做什么。在异步方法中,在因灾难导致从主要数据存储至次要数据存储的突然故障时,如果地理消息是并行发送的,则并非它们的全部都在次要数据存储处被接收,并且可能存在空洞(非连续编号)。如果全部地理消息都是从给定桶范围按次序接收的,则那些在当前提交ID之后的地理消息可被提交直至给定键范围的地理消息ID中的空洞,同时在故障转移期间转储清除次要数据存储处的GML。这在从给定主要分区并行发送地理消息时适用。顾客可能想在地理消息中的空洞处停止,以具有跨不同对象的事务性排序一致性。注意,在示例性实施例中,对于单个对象,在GML中数据中从不存在空洞,因为对单个对象的更新是串行化的并且是从主要数据存储批处理至次要数据存储的。即便如此,某些顾客可能不关心这一跨对象的事务性排序,并且可能只想在突然故障转移时从GML重放所有东西,以尽可能避免丢失因灾难导致的增量更新。
[0081]在示例性实施例中,现在对于具有最终一致性方法的同步复制,直到更新已被写入GML中才将事务提交回给顾客。这意味着在突然故障转移时,提交可在最后一个提交ID处开始,并且提交在次要数据存储上的GML中且位于该提交ID之后的全部事务。这允许该方法在次要数据存储因灾难导致的故障转移而成为新的主要数据存储的情况下提供强一致性。
[0082]如上文讨论的,消息ID和提交ID可包括时期号和序列号。源分区(诸如来自主要数据存储的分区)可以与时期号值和序列号值具有以下交互。在示例性实施例中,分区每次被加载、拆分或合并时,用于该所得分区的时期号被设置成大于父分区的在先时期号。然而,构想了分区的时期号在该分区仍被加载时将不会改变。在该示例中,每当时期号被改变(例如,增加)时,序列号就被重置成初始值(例如,O)。此外,在示例性实施例中,被写入主要数据存储的更新日志、块日志、和/或团块日志的每一事务将包含时期号和序列号。这些与事务相关联的相同的号随后在目的地分区处用于允许按次序进行重放。主要数据存储只需跟踪被传送至次要数据存储的最后一个提交ID ;这可在元数据流/日志中或在更新/提交日志中被维护。通过只需维护所传送的最后一个提交ID以及被传送至次要数据存储的经注释的数据,该过程避免必须向次要数据存储发送第二提交消息。另外,如果主要数据存储发生故障,则主要数据存储可通过发送自最后一个提交ID起的地理事务来开始,该最后一个提交ID被维护在主要数据存储处。分区号允许次要数据存储忽略重复的事务,因为同一提交ID可与新分区号一起发送,该新分区号指示次要数据存储要提交直到该提交ID的所有东西,除了带有较大时期号的事务以及带有相等时期号但具有较大序列号的事务。在该示例中,这些事务可被忽略,因为它们将被重发。
[0083]尽管上述讨论聚焦于主要数据存储如何处理时期号和序列号,但以下聚焦于示例性次要数据存储可如何处理时期号和序列号。
[0084]在示例性实施例中,每一次要分区维护表示目的地分区范围内每一戳ID的各提交ID的桶列表(例如,被维护在更新日志、块日志、页日志、和/或元数据流中)。在该示例中,这组桶表示对于每一主要戳ID,所提交的分区范围的最新近列表、最新近的提交ID的时期号和序列号。因此,这些桶允许每一分区维护该分区的时期号和序列号,因为每一目的地分区可以接收来自多个源分区的请求(如下文将参考图7讨论的)。可与地理消息一起传递的分区号可用于忽略地理消息中(例如,由于源分区发生故障)可能已从源分区重发的部分(或整个地理消息)。次要数据存储对分区号、时期号和序列号的附加使用将在下文中参考图8来讨论。
[0085]转向图7,图7示出根据本发明的各实施例的用于将数据从主要数据存储702传递至次要数据存储704的示例性系统700的框图。如图7中所描绘的,次要数据存储704的分区可接收来自单个分区或来自多个分区的数据。
[0086]主要数据存储702包括分区1706和分区2708。分区1706包括跨越从键范围A至M的数据。分区2708包括跨越键范围N至Z的数据。然而,次要数据存储704包括旨在维护键范围A至Z的数据的三个分区;因此,在该示例中主要数据存储702与次要数据存储704之间将产生不平行关系。次要数据存储包括分区3710、分区4712以及分区5714。
[0087]分区3710旨在维护来自键范围A至C的数据。分区4712旨在维护键范围D至P中的数据。分区5714旨在维护键范围Q至Z中的数据。为完成提交来自多个源的数据的任务,桶范围可被维护。换言之,次要数据存储可维护范围桶(range bucket),这些范围桶跟踪来自不同源分区的不同提交ID。这些范围桶随后可由次要数据存储在从次要数据存储的日志(例如,GML)重放数据时用于顺序地提交该数据。
[0088]对范围装桶(range bucketing)的利用可被用作对降低一个帐户所利用的分区数量的优化。例如,如果帐户正利用主要数据存储上的五个分区,但该数据可被提交至两个分区,则次要数据存储可在复制期间将该帐户的数据提交到次要数据存储处的两个分区中。此外,范围装桶的概念可在次要数据存储处的GML无法跟上源的情形中实现。在该情形中,次要数据存储处的目的地分区可改为拆分两个或更多分区之间的数据,从而依赖于范围装桶来促进稍后在每一次要数据存储处的重放。在该示例中,所使用的次要分区中的每一个可具有它自己的GML,这降低了单个GML上的负担。
[0089]例如,如果次要数据存储具有太多的负载,则可以作出拆分该分区的确定。该确定可以利用从主要数据存储接收到的范围作为关于适当拆分位置的指示符。
[0090]转向图8,图8描绘根据本发明各方面的异步地理复制的过程流800的框图。在该示例中,过程流800在客户机802、主要数据戳(“主要”)804以及次要数据戳(“次要”)806之间发生。可以理解,可将附加实体、机器、组件、应用、服务等并入一过程流以实现异步地理复制。
[0091]客户机802将数据808传送至主要数据戳804。如先前讨论的,客户机802可与一帐户相关联,该帐户已被分配或已选择利用主要数据戳804作为用于提交数据的主要地理位置。主要数据戳804可依赖于XFE来验证数据808旨在用于主要数据戳804。在接收到数据808后,主要数据戳810可将数据808写入日志(或流)。另选地(或另外地),主要数据戳804可将数据808提交至主要数据戳804。对数据808的提交可包括将数据808持久存储至主要数据戳804的存储器表810和日志812 (按任何次序)。
[0092]在示例性实施例中,一旦数据已被写入主要数据戳804的日志或其他数据流,就可向客户机802返回对成功的确认814。在附加示例性实施例中,一旦数据808被提交至主要数据戳804,就向客户机802提供确认814。
[0093]通过在将数据实际提交至次要地理位置之前向客户机802提供成功确认,可以减少传送来自客户机的数据与接收成功确认之间经过的时间。然而,如下文将更详细地讨论的,也可实现同步地理复制方法,一旦数据至少已被写入(相对于完全提交)到主要和次要数据戳两者,该同步地理复制方法就将成功确认提供回给客户机。同步地理复制可能在传送来自客户机的数据与从主要数据戳(或次要数据戳)接收成功确认之间需要更多的等待时间。
[0094]返回图8,在提供成功确认814之后,主要数据戳804将地理消息816传送至次要数据戳806。在示例性实施例中,地理消息是已经用记录(诸如经地理注释的记录(“GAR”))注释的数据808。在另一示例性实施例中,地理消息是事务集(所传送的数据分组集),这些事务已被批处理以形成特定地理位置、戳和/或分区的地理消息。地理消息可以包括唯一地标识地理消息的消息ID (例如,时期号和序列号)。此外,地理消息还可进一步被注释以包括来自主要数据戳804的提交ID。
[0095]在示例性实施例中,GAR是与事务日志一起存储的、将用于在次要戳的分区上重放/执行该日志的附加信息。可以有为每一事务存储的一个GAR。可以有许多日志条目构成一事务,以及针对该事务的最后提交日志条目。在该情况下,该事务的GAR可与最后提交日志条目一起存储。该信息可指示(a)原始事务是什么(例如,放置块、放置块列表等),它用于确定如何正确地重放该事务以及如何在目的地处将东西勾连起来;以及(b)包括用于在目的地处重新执行该事务的附加信息(例如,最后修改时间,对于放置块列表,指示这些块是来自已提交列表还是未提交列表的最后块列表)。以其最基本的形式,GAR可包括要在主要数据戳上执行的完整传入事务,但应当有足够信息被包括以便完全且确定性地在次要数据戳上重放该事务,这取决于事务类型而导致为GAR存储更多信息。例如,这可包括在事务执行期间所计算的结果,诸如时间戳和ETag。另外,GAR可包含事务键记录,该事务键记录被写入主要日志并与每一地理事务一起被发送至次要数据戳。该记录可包括事务的键和地理事务id (例如,来自主要数据戳的时期号和序列号)。
[0096]分区服务器上所执行的各事务具有被写入三个示例日志流(例如,更新日志、块日志、以及页日志)之一的一个或多个记录。如果分区由于负载平衡或节点故障而被重新加载到另一节点(例如,数据存储)上,则日志可用于重放这些事务以重新生成存储器表。结果,地理复制可能在分区处不需要附加日志流来允许该分区成为地理复制的源。这部分是因为地理事务可从更新/块/页日志中被封装起来以供实况地理复制(以及从文件表中被封装起来以供引导地理复制)。
[0097]使用地理复制,可将GAR添加到现有日志流中的事务中。该GAR连同已被写入日志的东西可包含为地理复制而在次要存储戳上重新执行/重放该事务所需的附加信息。然而,GAR对于重放主要存储戳处的日志可能没有意义。相反,GAR在那里使得这些GAR可被传递至次要存储戳以指定如何在次要戳处重新执行/重放该事务。另外,GAR的一部分还可从日志中已有的信息中动态地生成,而不是将其存储到日志中。在该情况下,GAR随必要条件和特殊值生成,并且在将其发送到次要存储戳之前GAR被添加至地理消息。
[0098]在示例性实施例中,地理消息可包括I)消息格式版本;2)字段,用于表明该消息是经压缩的还是未经压缩的;3)消息帐户部分——这可以是地理消息表示的存储帐户名的列表。这些帐户名可由XFE来验证,以确保那些帐户在该消息到达的戳处被标记成次要。地理消息还可包括:4)表名称;5)表版本一该表的模式版本;6)日志记录版本一消息中事务日志记录的版本号;7)字段,表明该消息是否旨在扇出,其中扇出意味着将该消息发送到对源分区所表示的分区范围而言的次要存储戳上的所有目标分区。如果扇出未被指定,则将地理消息仅发送到次要存储戳上的目标分区而存储帐户在地理消息中被指定是可接受的。
[0099]地理消息还可包括8)消息ID—这表示从该分区去往给定存储戳的地理事务群组。消息ID可包括a)戳ID——源戳;b)分区号——这用于标识从分区的给定运行实例所发出的所有消息。这尤其用于处理分区重新加载的问题以及以下事实:最近的地理事务可被不同地重新封装并且被重发至次要分区,以及分区号用于在次要存储戳处确定这可能何时发生。消息ID还可包括c)分区范围一对于消息中这些事务的分区键范围。[0100]地理消息还可包括9)提交ID—如先前所讨论的,这可包括以下信息,该信息表示对于在次要存储戳处的提交可考虑从源分区直到什么时期号和序列号。
[0101]地理消息还可包括10)每一不同分区键的各批。这可表示作为该地理消息的一部分的一批事务集。如果地理事务集需要在一起被执行,则它们可在同一批中。如果不是所有的批(基于范围)都需要被发送至地理消息的目的地表服务器中的每一者,则XFE在批层级处可跨多个不同的表服务器来拆分地理消息。每一批可包含a)各分区键;b)该分区键的记录缓冲区中的记录偏移和大小;以及c)用于重放该事务以及用于指示它们何时可在次要存储戳上被提交的地理事务ID及其键信息的列表:1.分区范围——对于该批的分区范围;2.时期号——该批中所有地理事务必需具有同一时期号;3.序列号——对于该批中每一地理事务存在一个序列号。此外,地理消息还可包括11)该消息中这些事务的数据日志记录。
[0102]返回图8,将地理消息816传送至次要数据戳806。次要数据戳806的目的地分区可以看到地理消息按无序序列(非顺序地)传入。然而,当地理事务在次要数据戳806的GML以外被重放时,在目的地分区处可以实施有序提交。消息ID中为地理事务提供的时期号和序列号用于提供有序提交。另外,目的地分区可接收带有空洞的序列号并且需要知道何时提交。这些空洞可在源分区可将各事务发送至N个不同目的地分区时发生,因此不是每一目的地分区都接收到来自给定源的所有事务。与提交ID包括在一起的戳ID/分区范围/时期号/序列号指定对于次要数据戳和分区范围而言目的地分区可将地理消息/事务提交得多远。
[0103]次要数据戳806随后可将地理消息816的数据写入日志818。在示例性实施例中,该日志是次要存储戳806的一分区的GML。所有传入到一分区的地理消息被存储至该分区的地理消息日志。在该示例中,一旦新的地理消息到达次要数据戳806,就将该地理消息存储至GML并且向次要数据戳806的XFE返回成功。该地理消息可包含指示对地理事务的提交是否可前进的提交ID。可以提交其序列号比提交ID中的序列号更早的地理消息,并且可以使用先前讨论的注释信息来在次要数据戳806上重放那些消息。在该示例中,在次要数据戳806上重放期间,可以用需被更新的任何值将对应的日志记录存储至更新日志、块日志和/或页日志中的任一者。
[0104]继续该示例,当从GML中重放事务时,该事务被重放至对应的更新/块/页日志,而字段被正确地更新(例如,TBL和CBL指针)。以单独的GML开始(相对于使用现有日志)的优势是所有地理消息信息都被严格地包含在GML中。随后,在目的地分区处执行对数据的地理重放之后,使该事务存在的所有东西都在更新/块/页日志和存储器表中,并且无需修改逻辑来处理那些日志或对该信息的重放。这使得对来自GML的地理消息的重放与来自其日志的分区重放日志逻辑保持分开,尤其是因为分区重放日志可保持很小以便在次要位置上重新加载分区时具有快速分区加载时间。
[0105]在该示例中,在更新被生成以使GML的“已消耗”记录前移之前,从GML重放至更新/块/页日志和存储器表会将数据提交到分区的实况状态。结果,当在次要数据戳806上重新加载该分区时(例如,在发生故障的情况下),应确定开始从GML重放的点。通过将“已消耗ID”与存储在更新/块/页日志中的地理事务存储在一起来确定该点。该已消耗ID可包括从GML重放的最后一个地理事务的戳/分区键范围/时期号/序列号。然而,构想了可以不存储分区键范围,因为事务记录可标识适当的键。另外,可针对分区键范围的给定部分维护最大的已消耗ID,该最大的已消耗ID在每次检查点被执行时可能存储在GML中。指向检查点记录的指针可存储在元数据流中。从GML中最后一点进行的重新生成可以通过从存储在检查点中的那些以及当从更新/块/页日志中重放时找出的那些中取得最大的已消耗ID来实现。
[0106]返回图8,在将数据写入日志818之后,次要数据戳806可以(例如,通过XFE)向主要数据戳804传送该数据已被写入(或提交)的确认820。确认820可包括与地理消息816相关联的消息ID以标识什么时期号和序列号已被写入次要数据戳806。主要数据戳随后可更新提交ID822。最终,作为后续地理消息的一部分或者作为扇出型消息的结果,可将已更新的提交ID822传送至次要数据戳806,以允许GML中所维护的更大量的数据在次要数据戳806处被提交。
[0107]转向图9,图9解说示出根据本发明各方面的使用最终一致性方法进行同步复制的时间流程的框图900。类似于参考图8所讨论的那些组件,框图900包括客户机902、主要数据戳904以及次要数据戳906。
[0108]与参考图8所描述的示例性异步方法形成对比,一旦数据至少已被写入次要数据戳906和主要数据戳,同步地理复制就仅将确认提供回给客户机904。这将进一步与在图10的示例性方法中将讨论的用强一致性进行的同步复制形成对比,图10的示例性方法在数据已被提交至次要数据戳之后向客户机提供确认。
[0109]客户机902将数据908传送至主要数据戳904。在接收到数据908后,主要数据戳904可将数据写入一个或多个日志供稍后提交(未示出)。另外,如先前讨论的,主要数据戳904可以用一个或多个记录、信息和/或标识符来注释数据908。例如,数据908可包括消息ID、提交ID、GAR、和/或可用于地理复制过程(例如,在次要数据戳906处重放)的附加信息。
[0110]主要数据戳904将地理消息910传送至次要数据戳906。地理消息可包括数据908。地理消息还可包括数据的一个或多个附加部分,诸如离散事务。另外,构想了地理消息910还包括与地理消息910相关联的消息ID、标识时期号和序列号的提交ID,通过该提交ID允许次要数据戳906进行提交。
[0111]在接收到地理消息910之后,次要数据戳906将地理消息910的关联数据写入适当的日志912。例如,次要数据戳906的XFE可在次要数据戳906内标识地理消息的数据要被写入的特定分区。在确定次要数据戳906的特定分区后,地理消息的数据相关部分随后可被写入次要数据戳906中该标识出的分区的GML。
[0112]另外,次要数据戳906可检查(未示出)与地理消息910—起接收到的提交ID。在该示例中,提交ID将不包括专用于地理消息910的时期号和序列号,因为主要数据戳尚未接收到地理消息910已被写入次要数据戳906处的日志的确认。因此,可与地理消息910一起接收的提交ID会具有小于同地理消息910相关联的相应值的时期号和/或序列号。
[0113]返回示出的示例性方法,次要数据戳906将关于对地理消息910的数据进行成功写入的确认914传送至次要数据戳906的一个或多个日志。在示例性实施例中,次要数据戳906的GML向XFE提供对数据的成功写入的指示。次要数据戳906的XFE随后负责向主要数据戳904提供确认(类似于先前参考图4所讨论的示例性方法)。[0114]作为接收到确认914的结果,主要数据戳904在主要数据戳处提交916数据。如先前讨论的,提交数据可包括将数据写入主要数据戳904的日志,以及允许用相关条目填充存储器表,这允许发出请求的客户机访问数据。在示例性实施例中,与发出请求的客户机可直接访问的已被提交的数据不同,被写入日志的数据不可由发出请求的客户机直接访问。
[0115]在确认数据在主要数据戳904处已被提交之后,主要数据戳904将对成功的确认918传送回客户机902。在该示例中,确认918指示数据908已被提交至主要数据戳904,并且最起码数据908已被写入次要数据戳906的日志。确认918可显式地或隐式地指示这样的信息。
[0116]主要数据戳可在传送确认918的同时、之前或之后将提交ID920传送至次要数据戳906。提交ID920可以是作为从次要数据戳接收到确认914而被更新的已更新的提交ID。如先前讨论的,可结合地理消息将提交ID (诸如提交ID920)传送至次要数据戳,或者提交ID可以作为扇出型消息的结果(例如,预定义的持续时间期满)。
[0117]次要数据戳906提交日志(诸如GML)中所维护的数据,这些数据具有上至该提交ID的连续消息ID。如先前讨论的,次要数据戳可基于相关联的消息ID按顺序提交数据。因此,如果日志中所维护的上至该提交ID的各消息ID之间存在间隙,则仅提交那些与连续消息ID中直到该间隙的各消息ID相关联的数据。
[0118]以下是具有最终一致性方法的同步复制的示例性实施例。该方法允许主要数据存储提供强一致性。随后,如果次要数据存储仅用于灾难恢复,这意味着只要主要数据存储存活次要数据存储就不被读取,则该方法可用于在灾难恢复故障转移之后提供强一致性。在该示例中,当故障转移至次要数据存储时,可在允许对次要数据存储读取时确保强一致性。在该示例性实施例中,这通过以下方式来完成:在故障转移之后直到在次要数据存储上发生最终转储清除才允许访问次要数据存储上的数据。另一示例性实施例可允许次要数据存储在主要数据存储仍然活动时被读取。在主要数据存储活动时被允许读取次要数据存储的应用知道当它们访问次要数据存储时它们将获得最终一致性。但是,主要数据存储总是以强一致性来访问。在故障转移之后,旧的次要数据存储变成新的主要数据存储,其中自转储清除以来强一致性被维护,该转储清除是对来自GML的发生在次要数据存储上的剩余事务进行的,以使其与旧的次要数据存储强一致。
[0119]转向图10,图10示出根据本发明各方面的使用强一致性方法进行示例性同步复制的框图1000。同样,框图1000包括客户机1002、主要数据戳1004以及次要数据戳1006。
[0120]客户机1002将数据1008传送至主要数据戳1004。主要数据戳1004分析数据以确定与数据相关联的被维护在主要数据戳1004内的对象。在确定哪一或哪些对象与数据1008相关联之后,主要数据戳1004在主要数据戳1004内锁定相关联的对象1010。锁定对象1010可包括阻止客户机访问该对象,阻止写入该对象(除了稍后数据1008要被写入以外),阻止读取该对象等等。另选地,锁定一对象仅仅标识了事务随对象待决。
[0121]在锁定对象1010之后,主要数据戳1004将地理消息1012传送至次要数据戳1006。地理消息1012可包括数据1008以及其他信息。如先前讨论的,地理消息1012可包括数据1008、消息ID、提交ID、GAR以及促进地理复制的其他信息。
[0122]次要数据戳1006阻塞对与数据1008相关联的对象进行的读取和写入。次要数据戳可独立地标识哪一或哪些对象与数据1008相关联(类似于主要数据戳1004所实现的过程),或者次要数据戳可从主要数据戳1004接收作为地理消息1012的一部分的关于哪一或哪些对象与数据1008相关联的指示。在阻塞对该对象1014的读取之后,次要数据戳1006将确认1016传送至主要数据戳1004。确认1016可包括对成功将数据1008写入日志、成功阻塞对该对象1014的读取/写入的指示,和/或地理消息1012的消息ID。
[0123]如下文将讨论的,在该示例性方法中,在次要数据戳提交数据的类似部分之前,主要数据戳提交数据的给定部分。然而,可以理解,次要数据戳可在主要数据戳之前提交数据,这可降低或至少更改主要数据戳与次要数据戳之间所传送的一个或多个确认。在示例性实施例中,由于主要数据戳是应客户机请求的第一数据源,因此在次要数据戳处提交数据之前在主要数据戳处提交数据是有利的,因而当关联对象可被锁定(或被阻塞)时,使得数据首先在主要数据戳处被提交可确保最新近的信息及时地在主要数据戳处可用。本文构想了附加基本原理。
[0124]返回图10,在接收到确认1016之后,主要数据戳阻塞1018对与数据1008相关联的对象的读取。在阻塞对该对象的读取之后,主要数据戳1004将数据1008提交1020至主要数据戳1004。在提交1020数据1008之后,主要数据戳1004传送对次要数据戳1006提交与地理消息1012相关联的数据的指令1022。指令1022可包括先前与地理消息1012相关联的消息ID。在该示例性方法中,由于数据是以强一致性来提交的,因此提交ID可不被利用,这意味着直到接收到先前事务成功才执行对一对象的后续更新。
[0125]在接收到提交数据的指令1022之后,次要数据戳1006提交1024数据。次要数据戳1006随后移除该阻塞,并且允许1026发出请求的客户机读取对象。一旦对象已被解除阻塞,次要数据戳1006就向主要数据戳1004传送指示对象为可读(并且因而对象已被提交)的确认1028。在接收到确认1028后,主要数据戳1004还对该对象解除阻塞,从而将对象置于允许1030发出请求的客户机读取该对象的状态。一旦主要数据戳1004和次要数据戳1006允许与数据1008相关联的对象被读取,主要数据戳1004就向客户机1002传送指示数据1008已经(以强一致性)被提交并被地理复制的确认1032。
[0126]既然已经介绍了用于异步复制和同步复制的示例性实施例的概览,提供以下讨论。在示例性实施例中,异步复制认为数据一旦被修改就在主要数据存储处“被提交”,这允许向客户机发送确认。随后可在背景中将主要数据存储处所修改的这一数据懒惰地复制到存储帐户的次要地理位置。在该示例中,复制发生在主要写入的关键路径以外,以降低环境内的等待时间。然而,如果发生灾难并且主要数据存储丢失,则在主要数据存储处对存储帐户的最新近的更新也可能丢失。为提供更高级的置信度,同步复制确保在向客户机提供确认之前数据被写入主要和次要数据存储。因此,即使灾难影响主要数据存储,数据仍是可访问的,只是作为同步复制的成本具有更多的等待时间。
[0127]主要数据戳904将地理消息910传送至次要数据戳906。地理消息可包括数据908。地理消息还可包括数据的一个或多个附加部分,诸如离散事务。另外,构想了地理消息910还包括与地理消息910相关联的消息ID,标识时期号和序列号的提交ID (通过它允许次要数据戳906提交),以及自提交ID最后变化以来要提交的事务时期号和序列号的准确列表。
[0128]在接收到地理消息910之后,次要数据戳906将地理消息910的关联数据写入适当的日志912。例如,次要数据戳906的XFE可在次要数据戳906内标识地理消息的数据要被写入的特定分区。在确定次要数据戳906的特定分区后,地理消息的数据相关部分随后可被写入次要数据戳906中该标识出的分区的GML。
[0129]另外,次要数据戳906可检查(未示出)与地理消息910 —起接收到的提交ID。在该示例中,提交ID将不包括专用于地理消息910的时期号和序列号,因为主要数据戳尚未接收到地理消息910已被写入次要数据戳906处的日志的确认。因此,可与地理消息910一起接收的提交ID会具有小于同地理消息910相关联的相应值的时期号和/或序列号。
[0130]返回示出的示例性方法,次要数据戳906将关于对地理消息910的数据进行成功写入的确认914传送至次要数据戳906的一个或多个日志。在示例性实施例中,次要数据戳906的GML向XFE提供对数据的成功写入的指示。次要数据戳906的XFE随后负责向主要数据戳904提供确认(类似于先前参考图4所讨论的示例性方法)。
[0131]作为接收到确认914的结果,主要数据戳904在主要数据戳处提交916数据。如先前讨论的,提交数据可包括将数据写入主要数据戳904的一个或多个附加日志,以及允许用相关条目填充存储器表,这允许发出请求的客户机访问数据。在示例性实施例中,与发出请求的客户机可直接访问的已被提交的数据不同,被写入日志的数据不可由发出请求的客户机直接访问。
[0132]在确认数据在主要数据戳904处已被提交之后,主要数据戳904将对成功的确认918传送回客户机902。在该示例中,确认918指示数据908已被提交至主要数据戳904,并且最起码数据908已被写入次要数据戳906的日志。确认918可显式地或隐式地指示这样的信息。
[0133]主要数据戳可在传送确认918的同时、之前或之后将提交ID920传送至次要数据戳906。提交ID920可以是作为从次要数据戳接收到确认914而被更新的已更新的提交ID。如先前讨论的,可结合地理消息将提交ID (诸如提交ID920)传送至次要数据戳,或者提交ID可以作为扇出型消息的结果(例如,预定义的持续时间期满)。
[0134]次要数据戳906提交在日志(诸如GML)中所维护的数据。从主要数据戳发出的提交ID可包括要从GML提交的自最后提交ID变化以来的事务列表。如上所述,它包括提交ID的上限阈值时期号和序列号,并且它还包含对于要提交的每一事务的时期号和序列号。这允许从GML中进行的重放准确地知道要重放/提交哪些事务以及要忽略哪些事务。因为对于参考图9讨论的方法,在主要数据戳上提交事务之前,这些事务首先被写入次要GML,所以这是重要的。这意味着次要GML可具有这样的事务:这些事务作为它的地理消息的一部分被写入,且因主要分区上的故障而在主要数据戳已向次要数据戳发送该地理消息之后在主要数据戳上从未被提交。这就是为什么提交ID中的每一前移还向次要分区传送自最后一个提交ID以来要提交的确切事务。
[0135]转向图10,图10示出根据本发明各方面的使用强一致性方法进行示例性同步复制的框图1000。同样,框图1000包括客户机1002、主要数据戳1004以及次要数据戳1006。
[0136]客户机1002将数据1008传送至主要数据戳1004。主要数据戳1004分析数据以确定与数据相关联的被维护在主要数据戳1004内的对象。在确定哪一或哪些对象与数据1008相关联之后,主要数据戳1004在主要数据戳1004内锁定相关联的对象1010。锁定对象1010可包括阻止客户机访问该对象,阻止写入该对象(除了稍后数据1008要被写入以外),阻止读取该对象等等。另选地,锁定一对象仅仅标识了事务随对象待决。[0137]在锁定对象1010之后,主要数据戳1004将地理消息1012传送至次要数据戳1006。地理消息1012可包括数据1008以及其他信息。如先前讨论的,地理消息1012可包括数据1008、消息ID、GAR以及促进地理复制的其他信息。
[0138]次要数据戳1006阻塞对与数据1008相关联的对象的读取(因为在该示例性实施例中,次要数据戳1006是只读数据存储)。次要数据戳可独立地标识哪一或哪些对象与数据1008相关联(类似于主要数据戳1004所实现的过程),或者次要数据戳可从主要数据戳1004接收作为地理消息1012的一部分的关于哪一或哪些对象与数据1008相关联的指示。在阻塞对该对象1014的读取/写入之后,次要数据戳1006将确认1016传送至主要数据戳1004。确认1016可包括对成功将数据1008写入日志、成功阻塞对该对象1014的读取/写入的指示,和/或地理消息1012的消息ID。
[0139]如下文将讨论的,在该示例性方法中,在次要数据戳提交数据的类似部分之前,主要数据戳提交数据的给定部分。然而,可以理解,次要数据戳可在主要数据戳之前提交数据,这可降低或至少更改主要数据戳与次要数据戳之间所传送的一个或多个确认。在示例性实施例中,由于主要数据戳是应客户机请求的第一数据源,因此在次要数据戳处提交数据之前在主要数据戳处提交数据是有利的,因而当关联对象可被锁定(或被阻塞)时,使得数据首先在主要数据戳处被提交可确保最新近的信息及时地在主要数据戳处可用。本文构想了附加基本原理。
[0140]返回图10,在接收到确认1016之后,主要数据戳阻塞1018对与数据1008相关联的对象的读取。在阻塞对该对象的读取之后,主要数据戳1004将数据1008提交1020至主要数据戳1004。在提交1020数据1008之后,主要数据戳1004传送对次要数据戳1006提交与地理消息1012相关联的数据的指令1022。指令1022可包括先前与地理消息1012相关联的消息ID。在该示例性方法中,由于数据是以强一致性来提交的,因此提交ID可不被利用,这意味着直到接收到先前事务成功才执行对一对象的后续更新。
[0141]在接收到提交数据的指令1022之后,次要数据戳1006提交1024数据。次要数据戳1006随后移除该阻塞,并且允许1026发出请求的客户机读取对象。一旦对象已被解除阻塞,次要数据戳1006就向主要数据戳1004传送指示对象为可读(并且因而对象已被提交)的确认1028。在接收到确认1028后,主要数据戳1004还对该对象解除阻塞,从而将对象置于允许1030发出请求的客户机读取/写入该对象的状态。一旦主要数据戳1004和次要数据戳1006允许与数据1008相关联的对象被读取/写入,主要数据戳1004就向客户机1002传送指示数据1008已经(以强一致性)被提交并被地理复制的确认1032。
[0142]既然已经介绍了用于异步复制和同步复制的示例性实施例的概览,提供以下讨论。在示例性实施例中,异步复制认为数据一旦被修改就在主要数据存储处“被提交”,这允许向客户机发送确认。随后可在背景中将主要数据存储处所修改的这一数据懒惰地复制到存储帐户的次要地理位置。在该示例中,复制发生在主要写入的关键路径以外,以降低环境内的等待时间。然而,如果发生灾难并且主要数据存储丢失,则在主要数据存储处对存储帐户的最新近的更新也可能丢失。为提供更高级的置信度,同步复制确保在向客户机提供确认之前数据被写入主要和次要数据存储。因此,即使灾难影响主要数据存储,数据仍是可访问的,只是作为同步复制的成本具有更多的等待时间。
[0143]转向图11,图11描绘了根据本发明各实施例的从主要数据存储的角度来看的具有最终一致性的同步复制方法1100。在框1102,主要数据存储(例如,存储戳)从客户机接收数据。在该示例性实施例中,数据可用于更新客户机所利用的对象以提供一个或多个服务。
[0144]在框1104,将接收到的数据写入主要数据存储的日志。例如,XFE可检查传入数据以确定主要数据存储是用于维护传入数据的适当数据存储。在该示例中,XFE还可标识用于维护数据的适当分区。适当分区可包括当前维护与接收到的数据相关联的对象的分区。或者,构想了根据分布式计算系统的进程,将数据写入主要数据存储的一个或多个日志(例如,更新、块、和/或页)以供提交数据。在示例性实施例中,写入主要数据存储的日志中的数据直到被提交至主要数据存储的一个或多个日志和/或存储器表才能由客户机(或其他发出请求的实体)访问。
[0145]在框1106,用记录来注释接收到的数据。在示例性实施例中,记录是GAR (先前讨论的)。还构想了用于注释的记录包括消息ID或者是消息ID等等。例如,被注释给数据的记录可允许在次要数据存储处重放数据以供在次要数据存储处进行提交。
[0146]在本申请的示例性实施例中,尽管图11中未示出,但主要数据存储将数据(或经注释的数据)传送至次要数据存储。在接收到数据后,次要数据存储将数据写入日志,诸如GML。如先前讨论的,前端服务(诸如XFE)可向主要数据存储提供将数据成功写入日志的确认。框1104可与向次要数据存储发送数据以及在框1108中取回该确认并行完成。
[0147]在框1108,主要数据存储接收数据已被写入次要数据存储的确认。在示例性实施例中,该确认包括先前与写入次要数据存储处的日志中的数据相关联的消息ID。
[0148]此外,构想了可按不同次序或者甚至连续地执行一个或多个步骤。例如,框1104可与框1108并行地发生。或者,在附加示例中,框1104可以仅仅在存储器中被缓冲,因此直到框1110在主要数据存储上进行提交才存在对日志的写入。
[0149]在示例性实施例中,框1108不会等待框1104以完成执行框1108。这可能因为框1108是最长等待时间的操作,并且在框1108中事务被写入GML中且它从未被记录在主要数据存储中(例如,主要数据存储崩溃)的情况是可以的。在该情形中,当主要数据存储重新加载分区时,主要数据存储将得到新时期号,并且主要数据存储不知道的、命中次要数据存储上的GML的事务或是(a)在主要数据存储保持存活并前移越过它的提交ID的情况下不会被提交,或是(b)在主要数据存储因灾难而永久丢失的情况下,在故障转移期间提交该事务是可以的,因为原始请求的客户机可能已经超时并且不知道该事务是否已被提交。
[0150]在框1110,主要数据存储在主要数据存储处提交数据。在示例性实施例中,如次要数据存储所确认的,直到相同数据(或经注释的相似数据)至少被写入次要数据存储的日志中才向主要数据存储提交数据。在示例性实施例中,更新提交ID以反映在主要数据存储处最近提交的数据。在该示例中,提交ID可与先前示例略微不同。在该示例中,提交ID传送确切事务,提交ID授权要通过这些确切事务提交。这部分是由于次要数据存储可能已接收未向主要数据存储提交的数据并将该数据写入GML的结果。这允许次要数据存储忽略使之进入次要数据存储但从不被提交至主要数据存储的事务。注意,次要数据存储可以用两种方式来使用。如果允许顾客客户机在执行读/写主要数据存储时从次要数据存储中读取,则该客户机将看到来自次要数据存储的最终一致的数据,同时该客户机看到来自主要数据存储的强一致性数据。当存在灾难并且系统作出从主要数据存储至次要数据存储的突然故障转移时,次要数据存储现在变成新的主要数据存储。对于因灾难导致的突然故障转移,次要数据存储将提交/重放其GML中的在被发送的最后一个提交ID之后的全部剩余事务。这允许次要数据存储在故障转移之后完全跟上主要数据存储并与主要数据存储强一致。这允许具有最终一致性复制方法的同步复制在因灾难恢复发生故障转移时提供强一致性。在一实施例中,这允许被认为是数据的主要数据存储即使在故障转移之后也总是提供关于数据的强一致的视图。
[0151]在框1112,主要数据存储向客户机传送在框1102接收到的数据在次要数据存储处以最终一致性被提交至主要数据存储的确认。
[0152]有利地,在示例性实施例中,如果次要数据存储超时或主要数据存储上时间到期,则主要数据存储将不提交数据(例如,由于缺少来自次要数据存储的确认)。当主要数据存储无法提交数据时,客户机从未接收到对该数据的确认并且可因此尝试再次发送信息。结果,客户机不知道它的更新是否位于该存储中。这在故障转移时使次要数据存储不必与客户机进行通信以报告数据何时已被提交或甚至已被写入。另外,如果在主要数据存储正取得读/写通信量时允许从次要数据存储中读取对象,则即使数据可能被传送至主要数据存储,旧的值也将被返回直到次要数据存储提交数据。
[0153]转向图12,图12描绘了根据本发明各实施例的、从同时从主要数据存储和次要数据存储读取的角度来看具有强一致性的同步复制方法1200。在框1102,主要数据存储从客户机接收数据。在该示例性实施例中,数据可用于更新客户机所利用的对象以提供一个或多个服务。
[0154]在框1204,锁定与接收到的数据相关联的对象。在示例性实施例中,锁定该对象并不阻止对数据的读取,而是相反标识事务正为该对象开始并且阻止写入。还构想了在主要数据存储处或在分布式组件处作出关于哪个或那些对象与数据相关联的确定。可基于与数据、命名结构以及表查找等包括在一起的信息来完成该确定。此外,构想了一旦对象被标识成与数据相关联,则该关联用数据来注释以供次要数据存储使用。
[0155]在框1206,将接收到的数据从主要数据存储传送至次要数据存储。所传送的数据包括记录。如先前讨论的,该记录可包括消息ID、GAR等等。该数据可在次要数据存储处被接收,并且随后由前端服务检查以确定次要数据存储是否适当以及哪一分区应接收数据。
[0156]在框1208,主要数据存储从次要数据存储接收第一确认。在示例性实施例中,第一确认包括写入次要数据存储的日志中的数据的消息ID。第一确认可指示次要数据存储已将数据写入日志,但尚未提交数据。
[0157]在框1210,主要数据存储提交数据,并且阻止对该对象的读取访问。在示例性实施例中,主要数据存储仅提交在接收到的关于将数据成功写入日志的确认中已标识出的数据。因此,构想了直到数据已被写入次要数据存储的日志中,主要数据存储才提交该数据。此外,在示例性实施例中,直到数据已被写入次要数据存储的日志中且次要数据存储已阻塞对该数据(例如对象)的访问时,主要数据存储才提交该数据。
[0158]在框1212,主要数据存储传送在次要数据存储处提交数据的指令。提交数据的指令可包括消息ID,次要数据存储可使用该消息ID从日志(诸如GML)中取回并且提交适当的数据。
[0159]在框1214,主要数据存储从次要数据存储接收该数据被提交至次要数据存储的第二确认。如框1216所描绘的,响应于接收到第二确认,主要数据存储可将与数据相关联的对象解锁(或对读和写解除阻塞)。结果,客户机可使用由所提交的数据提供的新值来访问对象。在该示例中,由于利用强一致性方法,因此即使发生需要在次要数据存储处访问数据的故障转移,客户机也可接收针对该对象的经更新的数据值。该方法即使当主要和次要数据存储两者都活动时也允许从主要或次要数据存储的读取导致公共数据。然而,强一致性确实在客户机事务的关键路径上利用两阶段提交。
[0160]在框1218,主要数据存储向客户机传送指示数据已在主要和次要数据存储处被复制的确认。该指示可以是显式的或隐式的。
[0161]转向图13,图13描绘了根据本发明各实施例的从具有主要数据存储和次要数据存储两者的分布式计算系统的角度来看的同步复制方法1300。在框1302,主要数据存储从客户机接收数据。在该示例性实施例中,数据可用于更新客户机所利用的对象以提供一个或多个服务。
[0162]在框1304,主要数据存储将数据以及数据的标识符传送至次要数据存储。例如,数据可以用附加信息来注释,附加信息诸如基于其中数据在主要数据存储处(或者将)被存储在何处的位置或其他拓扑结构来唯一标识该数据的消息ID。此外,唯一标识符可仅提供用于维护消息/数据的顺序计数器的装置,这些消息/数据是从主要数据存储传送至特定次要数据存储或甚至传送至次要数据存储的特定分区的。
[0163]在框1306,次要数据存储从主要数据存储接收传入数据和标识符。在示例性实施例中,次要数据存储可检查传入数据以确保标识符指示接收到的数据大于次要数据存储的已消耗ID (所提交的部分)。另外,构想了次要数据存储可确认接收到的数据旨在用于次要数据存储和/或接收方数据存储是合适的数据接收者。
[0164]在框1308,次要数据存储将数据写入日志。该日志可以是用于启用复制的特定日志,诸如GML日志。另外,构想了该日志是传统上在分布式计算环境中所实现的多个日志之一,诸如块、页或更新日志。一旦数据被写入该日志,则该日志(或相关联的过程)可将确认提供回前端服务。
[0165]在框1310,次要数据存储将把数据写入日志的确认传送回主要数据存储,数据之前是从主要数据存储传送来的。在示例性实施例中,从数据被写入的日志接收到确认的前端服务可向主要数据存储提供确认。此外,构想了该确认可包括数据的标识符,诸如先前与数据被封装在其中的地理消息相关联的消息ID。
[0166]在框1312,主要数据存储提交数据。在利用最终一致性方法的示例性实施例中,在主要数据存储处进行提交后,就可向客户机发送提交数据的确认。这部分是因为次要数据存储(在该示例中次要数据存储尚未提交数据)可重放数据被写入的日志以便最终提交数据。在附加示例性实施例中,直到主要和次要数据存储两者都已提交该数据时,确认才从主要数据存储传送至客户机,这提供强一致性方法。
[0167]在框1314,主要数据存储传送用于使次要数据存储提交数据的指令。取决于所实现的一致性方法,该指令可仅包括包含要提交的数据的提交ID。另选地,这些指令可具体地标识与数据相关联的一个或多个事务,以使这些指令指示要提交特定事务。
[0168]在框1316,次要数据存储提交数据。在示例性实施例中,将对于提交数据的确认从次要数据存储传送回主要数据存储。此外,构想了次要数据存储更新已消耗ID,以指示已从日志提交至次要数据存储的数据范围。该已消耗ID可用于跟踪分区故障,该分区故障需要数据从检查点到存储器表的重新加载以及日志重放。
[0169]在不背离本发明的精神和范围的情况下,所描绘的各组件的许多不同安排以及未示出的组件都是可能的。已带着说明性而非限制性的意图描述了本发明的各实施例。不背离其范围的各替换实施例对本领域的技术人员将是显而易见的。技术人员可以开发实现上述改进的各替换手段而不背离本发明的范围。尽管某些方法已按特定顺序来描述,但构想了那些活动可按各种次序和顺序来执行。
[0170]可以理解,特定的特征和子组合是有用的,并且可以使用而无需参考其他特征和子组合并且被认为是在权利要求书的范围之内的。并非需要以所描述的特定次序来执行在各附图中所列出的所有步骤。
【权利要求】
1.一种分布式存储环境中的利用处理器和存储器来在该分布式存储环境中对数据进行同步地理复制的计算机实现方法,所述方法包括: 在主要数据存储处接收来自客户机的数据; 将所述数据写入所述主要数据存储的日志; 用记录来注释被写入日志的所述数据,所述记录允许在次要数据存储处重放所述数据; 从所述次要数据存储接收所述数据已被写入所述次要数据存储处的日志的确认; 在从所述次要数据存储接收到确认后,向所述主要数据存储提交所述数据; 向所述客户机传送对于在所述主要数据存储处提交所述数据的确认;以及 将提交ID从所述主要数据存储传送至所述次要数据存储。
2.如权利要求1所述的方法,其特征在于,将所述数据写入所述主要数据存储的日志与将所述数据发送至所述次要数据存储并行发生,并且不允许客户机从所述主要数据存储访问所述数据。
3.如权利要求1所述的方法,其特征在于,仅在接收到对于数据被写入所述次要数据存储处的日志中的确认之后,所述数据在所述主要数据存储处被提交。
4.如权利要求1所述的方法,其特征在于,所述提交ID包括从次要数据存储接收到的最大连续消息ID的时期号和序列号。
5.如权利要求1所述的方法,其特征在于,所述提交ID标识在主要数据存储处所提交的并且也已被写入所述次要数据存储的日志中的最大连续消息ID。
6.一种或多种其上包括计算机可执行指令的计算机存储介质,所述计算机可执行指令在由具有处理器和存储器的计算系统执行时,使得所述计算系统执行一种用于在分布式存储环境中对数据进行同步地理复制的方法,所述方法包括: 在主要数据存储处接收来自客户机的数据; 在所述主要数据存储处锁定与所述数据相关联的对象; 将所述数据与记录一起从所述主要数据存储传送至次要数据存储; 从所述次要数据存储接收所述数据已被写入所述次要数据存储处的日志的第一确认; 在从所述次要数据存储接收到第一确认后,向所述主要数据存储提交所述数据; 将提交所述数据的指令从所述主要数据存储传送至所述次要数据存储; 从所述次要数据存储接收第二确认,第二确认对所述数据已在所述次要数据存储处被提交进行确认; 在主要数据存储处接收到第二确认后,对与所述数据相关联的对象解锁;以及 向所述客户机传送对于在所述主要数据存储处提交所述数据的确认。
7.如权利要求6所述的介质,其特征在于,锁定所述对象阻止了写入与所述对象相关联的数据。
8.如权利要求6所述的介质,其特征在于,所述第一确认是作为次要数据存储阻塞读取并且阻塞写入与所述数据相关联的对象的结果而被接收的。
9.如权利要求6所述的介质,其特征在于,对提交的确认是数据在所述主要数据存储和所述次要数据存储两者处被提交之后向客户机传送的。
10.一种或多种其上包括计算机可执行指令的计算机存储介质,所述计算机可执行指令在由具有处理器和存储器的计算系统执行时,使得所述计算系统执行一种用于在分布式存储环境中对数据进行同步地理复制的方法,所述方法包括: 在主要数据存储处接收来自客户机的数据; 传送所述数据以及分布式计算环境内所生成的所述数据的标识符,以促进向次要数据存储同步提交数据,所述主要数据存储与所述次要数据存储位于不同的地理区域; 在所述次要数据存储处接收所述数据; 将所述数据写入所述次要数据存储处的日志; 将把所述数据写入日志的确认从所述次要数据存储传送至所述主要数据存储,其中该确认包括所述标识符的至少一部分; 响应于接收到把所述数据写入日志的确认,在所述主要数据存储处提交所述数据;传送在所述次要数据存储处提交所述数据的指令,其中该指令至少部分地包括所述标识符的一部分;以及 在所述次要数据存储处提交所述数据。
【文档编号】G06F12/00GK103548010SQ201280024902
【公开日】2014年1月29日 申请日期:2012年5月18日 优先权日:2011年5月23日
【发明者】B·G·卡尔德, N·尼拉康特恩, S·斯里瓦斯塔夫, J·吴, A·R·阿巴斯, S·麦纳里, P·C·乌达拉具 申请人:微软公司

最新回复(0)