一种状态机复制方法.pdf

上传人:54 文档编号:1497795 上传时间:2018-06-18 格式:PDF 页数:14 大小:5.51MB
返回 下载 相关 举报
摘要
申请专利号:

CN201210426104.X

申请日:

2012.10.30

公开号:

CN102981928A

公开日:

2013.03.20

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 11/14申请日:20121030|||公开

IPC分类号:

G06F11/14; H04L29/06

主分类号:

G06F11/14

申请人:

清华大学

发明人:

张勇; 唐家勇; 邢春晓

地址:

100084 北京市海淀区清华园北京市100084-82信箱

优先权:

专利代理机构:

北京路浩知识产权代理有限公司 11002

代理人:

王莹

PDF下载: PDF下载
内容摘要

本发明公开了一种状态机复制方法,该方法包括步骤:主结点接收客户端发送的更新请求,验证是否已更新;如果否,则由主结点向从结点发送提案消息;从结点接收提案消息后进行验证,如果验证成功则向其它结点发送批准消息;结点收到所述批准消息后,判断该结点收到的批准消息是否超过总结点数一半,如果是,该结点执行更新请求,否则,该结点不执行更新请求,主结点更新请求执行完成后向客户端发送执行结果。通过该方法消除了数据状态的同步持久化,实现了分布式场景下数据的可靠复制,大大降低了延迟;保证了系统的正常进展和结点的正确恢复,提高了灾难后数据的恢复完整性。

权利要求书

权利要求书一种状态机复制方法,其特征在于,该方法包括步骤:
S1主结点接收客户端发送的更新请求,验证是否已更新;
S2如果否,则由主结点向从结点发送提案消息;
S3从结点接收提案消息后进行验证,如果验证成功则向其它结点发送批准消息;
S4结点收到所述批准消息后,判断该结点收到的批准消息是否超过总结点数一半,如果是,该结点执行更新请求,否则,该结点不执行更新请求,主结点更新请求执行完成后向客户端发送执行结果。
如权利要求1所述的一种状态机复制方法,其特征在于,所述提案消息包含向量时钟、视图编号、实例编号和更新请求,所述批准消息包含视图编号、向量时钟和实例编号。
如权利要求2所述的一种状态机复制方法,其特征在于,所述步骤S3的验证方法为与提案消息中的向量时钟和视图编号比较,如果一致则验证成功。
如权利要求1所述的一种状态机复制方法,其特征在于,该方法包括步骤:
S5主结点和从结点周期性的向其他结点广播心跳消息,各结点收到心跳消息后将其中的进展信息与本地进展信息进行比对,如果本地结点相对于广播信息落后,向广播心跳消息的结点发送请求,进行追赶。
如权利要求4所述的一种状态机复制方法,其特征在于,当结点收到的心跳消息超时时,对超时结点进行故障检测。
如权利要求5所述的一种状态机复制方法,其特征在于,该方法还包括:在主结点崩溃的情况下,在从结点中选举出新的主结点,进行步骤S1‑S4。
如权利要求6所述的一种状态机复制方法,其特征在于,在从结点中选举出新的主结点具体包括:
S1’从结点检测到主结点心跳消息超时,发送选举准备信息给其他结点;
S2’其他结点接收到选举准备信息后启动选举定时器,进行主结点选举;
S3’主结点选举成功后被选举的结点进入主结点状态,其他结点进入从结点状态;
S4’当选举定时器超时而选举没有完成时,重复S1’‑S3’步,直到新的主结点产生。
如权利要求1所述的一种状态机复制方法,其特征在于,该方法还包括步骤:当结点崩溃时对结点进行恢复。
如权利要求8所述的一种状态机复制方法,其特征在于,所述对结点进行恢复具体包括:
S1”待恢复结点进入恢复状态;
S2”待恢复结点根据本地磁盘上已持久化的更新请求序列进行恢复;
S3”待恢复结点向当前系统中所有正确结点发送恢复请求;
S4”其他结点接收到恢复请求后根据回复请求中的信息判断是否发送恢复响应;
S5”待恢复结点接收到恢复响应后,将恢复响应中的信息与本地信息比较并更新本地信息,待恢复结点收到超过总结点数一半的恢复响应时将待恢复结点转换为结点状态。
如权利要求1所述的一种状态机复制方法,其特征在于,该方法包括步骤:使用循环页表并以页为单位对数据存储空间进行顺序分配、持久化和释放。

说明书

说明书一种状态机复制方法
技术领域
本发明涉及计算机数据处理领域,特别涉及一种状态机复制方法。
背景技术
互联网的普及和电子商务的兴起,使得在线电子交易的需求日益增加,交易系统的重要性也与日俱增。交易系统在实时交易时段内是一个典型的联机事务处理系统,在数据访问方式上具有写操作密集的特点。由于交易数据的特殊性,对于交易系统提出了高性能、高可用性等突出要求。以证券交易系统为例,近年来全球各主要交易所纷纷对其交易系统进行技术改造,追求订单处理的低延迟和高性能。目前,纳斯达克等宣称其交易系统的订单处理延迟已降至百微秒量级。
实现交易系统的高可用性的通用方法是主备机复制。根据结点间通信所依赖媒介的不同,可以采用两类方法进行复制备份,一类基于共享存储,另一类则基于消息传递。
基于共享存储的技术,拥有模型简单、易于实现等特点。然而在该技术中,日志持久化操作成为高延迟的重要原因。日志持久化的延迟受限于用作共享存储的非易失性存储设备的性能,再加上共享存储设备中需对数据进行冗余备份和事务保护以确保数据可靠性,因而使得降低订单处理延迟变得困难。日志的同步持久化成为系统运行的瓶颈。
万兆以太网、InfiniBand、RDMA等高速网络技术的出现与成熟,使得基于消息传递的状态机复制方法为降低延迟提供了可能。该方法通过发送消息来实现多结点间的数据复制。其复杂性在于如何避免因网络或结点问题造成的结点之间数据的不一致。该问题可以通过容错共识算法来解决。
Paxos算法是一种经典的容错共识算法,可以解决上述分布式复制中的一致性的问题。其扩展后所得到的容错复制算法Multi‑Paxos已被广泛地应用于Google Chubby等分布式系统中。然而,普通的Multi‑Paxos算法由于以下一些问题不能直接应用于对性能要求极高的联机事务处理系统中:一是现有的算法基本针对的是磁盘数据复制,而缺乏针对内存驻留数据容错访问的通用模型;二是系统运行过程中,需对结点的数据状态进行同步持久化,以保证算法正确性,但该操作大大增加了延迟;三是对于算法涉及的主结点选举、保证系统进展等实现问题,未给出明确的解决方法。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:
系统运行过程中需要对结点的数据状态进行同步持久化,延迟时间长、性能低,缺乏针对内存驻留数据容错访问的通用方法,在主结点出现问题时无法选举新的主结点,无法保证系统进展的一致性。
(二)技术方案
为解决上述技术问题,本发明提供了一种状态机复制方法,该方法包括步骤:
S1主结点接收客户端发送的更新请求,验证是否已更新;
S2如果否,则由主结点向从结点发送提案消息;
S3从结点接收提案消息后进行验证,如果验证成功则向其它结点发送批准消息;
S4结点收到所述批准消息后,判断该结点收到的批准消息是否超过总结点数一半,如果是,该结点执行更新请求,否则,该结点不执行更新请求,主结点更新请求执行完成后向客户端发送执行结果。
所述提案消息包含向量时钟、试图编码、实力编码和更新请求,所述批准消息包含视图编码、向量时钟和实例编码。
所述步骤S3的验证方法为比较提案消息中的视图编码与本地的视图编码,如果一致则验证成功。
该方法包括步骤:
S5主结点和从结点周期性的向其他结点广播心跳消息,各结点收到心跳消息后将其中的进展信息与本地进展信息进行比对,如果本地结点相对于广播信息落后,向广播心跳消息的结点发送请求,进行追赶。
当结点收到的心跳消息超时时,对超时结点进行故障检测。
该方法还包括:在主结点崩溃的情况下,在从结点中选举出新的主结点,进行步骤S1‑S4。
在从结点中选举出新的主结点具体包括:
S1’从结点检测到主结点心跳消息超时,发送选举准备信息给其他结点;
S2’其他结点接收到选举准备信息后启动选举定时器,进行主结点选举;
S3’主结点选举成功后被选举的结点进入主结点状态,其他结点进入从结点状态;
S4’当选举定时器超时而选举没有完成时,重复S1’‑S3’步,直到新的主结点产生。
该方法还包括步骤:当结点崩溃时对结点进行恢复。
所述对结点进行恢复具体包括:
S1”待恢复结点进入恢复状态;
S2”待恢复结点根据本地磁盘上已持久化的更新请求序列进行恢复;
S3”待恢复结点向当前系统中所有正确结点发送恢复请求;
S4”结点接收到恢复请求后根据回复请求中的信息判断是否发送恢复响应;
S5”待恢复结点接收到恢复响应后,将恢复响应中的信息与本地信息比较并更新本地信息,然后将待恢复结点转换为结点状态。
该方法包括步骤:使用循环页表并以页为单位对更新数据进行顺序分配、持久化和释放。
(三)有益效果
消除了数据状态的同步持久化,实现了分布式场景下数据的可靠复制,大大降低了延迟;保证了系统的正常进展和结点的正确恢复,提高了灾难后数据的恢复完整性。
附图说明
图1为本发明一种状态机复制方法在联机事务处理场景中的部署应用简图。
图2为本发明主结点稳定情况下主结点的更新请求处理流程。
图3为本发明主结点稳定情况下的从结点的更新请求处理流程。
图4为本发明所述主结点稳定情况下的状态机复制方法的消息流程图。
图5为本发明状态机复制方法中结点的状态转移图。
图6为本发明主结点选举方法的消息流程图。
图7为本发明所述异步持久化方法中使用的循环页表的示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
如图1所示,本发明提出的模型可以部署应用于联机事务处理系统。本发明提出的无数据持久化的状态机复制方法可以视为图中“更新定序”部分的核心。
如图1所示,在主结点稳定情况下,将系统结点的角色划分为两种:主结点态和从结点态。除此之外,结点还可能处于两种状态:选举态和恢复态。四种状态的相互转换如图5所示。
在稳定情况下,系统有一个主结点和多个从结点。图1所示的系统由一个主结点和两个从结点构成。主结点负责与客户端进行通信,包括:(1)接收更新请求,并通过本发明提出的状态机复制方法将该请求复制到各从结点,由各从结点分别对数据副本进行操作;(2)对于主结点,还要向客户端返回执行结果。
下表为本发明提出的状态机复制方法实施例中涉及相关内容的定义,其中:
表1为相关术语定义;
表2为变量定义;
表3为消息定义。
表1相关术语定义

表2变量定义


表3消息定义

表2中的变量前常常加上Local前缀,表示本地所保存的变量。例如,Local_V表示本地的视图编号;还可以加上一些明显含义的前缀,表示一定的属性。如Local_Executed_S表示本地已成功执行的最大实例编号。
表2中引入的向量时钟VC是一种用来检测消息是否过期的方法。VC是一个整型向量(或数组),每一维的值表示一个结点的重启次数,该维度由对应结点维护。对于两个n维的向量时钟A和B,A=(a1,a2,...,an),B=(b1,b2,...,bn),与之相关的操作定义如下:
向量时钟的合并:A∪B=(max({a1,b1}),max({a2,b2}),…,max({an,bn}))。
向量时钟的比较:如果A的每一维ai(i=1,2,...,n),都大于(小于或等于)B的每一维bi,则称A大于(小于或等于)B;否则称两者不可比。
向量时钟的取值遵守规则如下:
规则1:系统初始化时,各结点将其本地向量时钟设置为零向量。
规则2:在结点崩溃并重启后,需将本地向量时钟设置为零向量,然后将自身对应的维度的值设为与崩溃前该维度上的值相比更大的值。
规则3:每个结点在自身发送的消息中包含本地向量时钟,且在接收到其它结点发送的消息并进行处理后,要将消息中所包含的向量时20钟与本地向量时钟进行合并后,作为新的本地向量时钟。
表2中的视图编号V表示结点所处的上下文环境,用于指示当前的主结点。将结点从1到n编号,那么主结点被确定为第(V mod n+1)号。
结点的初始化状态为从结点态。本地向量时钟Local_VC初始化为零向量;本地视图编号Local_V为0,本地期望的视图编号Local_Attempted_V为0;本地已成功执行的最大实例编号Local_Executed_S为0。
(1)主结点稳定情况下的复制方法
在以下过程中,每条消息都带有发送者的向量时钟,接收者收到消息后,都会将该消息的向量时钟与本地的向量时钟进行比较、合并,只有消息的向量时钟较大时才会进行进一步处理。以下过程默认都包含这个步骤。
如图4所示,主结点稳定情况下的复制方法如下。
a)主结点接收到客户端发送的新的更新请求U;
b)主结点将S赋为Local_Executed_S+1,然后向各结点发送一个Proposal消息。Proposal消息中需包含本地向量时钟Local_VC、本地视图编号Local_V、S以及U;
c)各个结点在收到有效的Proposal消息后,首先检查V、VC,若V等于自己的Local‑V、Local_VC则向所有结点发送Accept消息,在Accept消息中包含自己的Local_VC、Local_V与S;
d)各个结点在收到超过半数的包含相同S的Accept消息后,知道更新请求的全局定序已完成。更新本地已成功复制的实例编号Local_S为S。各个结点在本地数据副本上对更新请求进行执行。更新本地已成功执行的实例编号Local_Executed_S为S。主结点在执行完成后还要向客户端发送执行结果。
如图2所示,为主结点稳定状态下主结点的更新请求处理流程;如图3所示,为主结点稳定状态下从结点的更新请求处理流程。如果从结点接收到Client端的更新请求,这时需向Client发送主结点的信息,要求Client将订单重新发送到主结点。
(2)主结点的重新选举
从结点依靠心跳消息方法(下面会具体说明)来判定主结点是否已崩溃,如果主结点已崩溃,从结点需要进入选举态,选举出新的主结点。由于初始化时没有主结点,并且各结点都处于从结点态,所以自然会在心跳消息超时后进行选举。
在以下过程中,每条消息都带有发送者的向量时钟,接收者收到消息后,都会将该消息的向量时钟与本地的向量时钟进行比较、合并,只有消息的向量时钟较大时才会进行进一步处理。以下过程默认都包含这个步骤。
如图6所示,主结点选举的具体方法如下。
a)从结点检测到主结点心跳超时;
b)将Local_Attempted_V增大1,同时发送带有Local_Attempted_V的View_Change消息给其他结点;
c)当一个结点收到一个多数派的包含相同Local_Attempted_V的View_Change消息之后,启动选举定时器;同时,如果结点是Local_Attempted_V所指定的新主结点L,则其向其他结点发送带有Local_Attempted_V的Pre_Leader_Election消息;
d)其他结点收到L发送的Pre_Leader_Election消息后,检查消息中的Attempted_V(即发送者的Local_Attempted_V)与本地的Local_Attempted_V是否相同:如果相同,则进入从结点态:将自己的Local_V更新为Local_Attempted_V,并向新主机发送Post_Leader_Eletion消息,其中包含已知的最近的一些Proposal;否则不予处理;
e)新主结点收到多数派的包含相同Local_Attempted_V的Post_Leader_Eleciton之后,取出这些消息中的Proposal,用于将自己的数据更新到最新状态,并进入主结点态。
选举完成,系统进入稳定状态,开始正常处理更新请求。
在c步中,结点启动了一个选举定时器,是为了保证选举失败时系统仍然能正常进展下去。当选举定时器超时而选举没有完成时,将重复a‑e步,直到新的主结点产生。
当结点崩溃时,假设待恢复结点编号为i,进行如下步骤:
a)待恢复结点将本地的结点状态设为恢复态。
b)待恢复结点从本地磁盘中读出重启次数RT,将RT自增1,并写回磁盘。
c)待恢复结点将本地向量时钟初始化为零向量但是第i维的值设为RT。
d)待恢复结点根据本地磁盘上已持久化了的更新请求序列进行恢复,并得到其已经执行了的最高实例编号。
e)待恢复结点向当前系统中所有正确结点发送一条Recovery请求,并等待来自超过半数结点的Recovery响应。Recovery请求包含以下信息:本地向量时钟Local_VC、本地已经成功执行的最高实例编号Local_Executed_S。
f)主结点或从结点在接收到的Recovery请求后,检查消息中向量时钟的第i维的值:若该值大于等于本地时钟中第i维的值,则将其合并到本地向量时钟,并向待恢复结点发送一个Recovery响应;否则,忽略该Recovery请求。Recovery响应中需包含以下信息:本地向量时钟Local_VC、本地响应过的最高视图编号Local_Attempted_V、本地已成功复制的最高实例编号Local_S;
g)待恢复结点收到了超过半数的Recovery响应后,将所有响应中的向量时钟进行合并作为本地向量时钟;选取响应中的最大视图编号,作为本地视图编号Local_V;选取响应中最高实例编号,作为本地期望追赶的实例编号Local_Attempted_S。
h)通过其它结点发送的心跳消息来观察其它结点的进展,并通过下面要介绍的故障检测与进度追赶方法进行进度追赶。当本地已成功复制的实例编号Local_S追赶到Local_Attempted_S时,追赶完成,结点状态转换为从结点态。
心跳消息是每个结点周期性地向其他结点广播的消息,包含结点的进展信息,如本地向量时钟、结点状态、已成功复制的最高实例编号、已执行的最高实例编号、本地已确定的视图编号。
各从结点都有一个主结点心跳定时器。在每次收到主结点心跳消息后,该定时器都被重置。当主结点崩溃后,该定时器最终会超时,从而促使该结点进入选举态,按照前面所述的主结点选举方法进行选举。
各结点收到心跳消息后,将其中的进展信息与本地进展信息进行比对,若发现本结点落后较多,则向某结点发送专门的Catch‑Up请求。该请求包含本地已成功复制的最高实例编号Local_S。收到Catch‑Up请求的结点会向落后结点发送Catch‑Up响应,在响应中包含编号大于消息中Local_S的、已成功复制的更新请求。由于单个Catch‑Up响应中所能包含的更新请求数目有限,若结点落后过多,则可同时向多个结点进行分段请求。由于进度追赶机制获取更新请求的速度要大于同一段时间内新更新请求完成复制的速度,因此在足够长的时间后,落后结点的进度最终能够追赶上。
如图7所示,循环页表以页为单位进行顺序分配、持久化、释放,每一页包含若干条更新请求。以页为单位进行持久化,能有效降低单条持久化的平均延迟。
循环页表的使用方法如下:(1)添加操作:当有新的更新请求复制成功时,按编号顺序将其添加至页表末尾,中间不可跳过其他编号;(2)持久化操作:不断地对页表的首页进行持久化,完成后标记为空闲以释放其空间。当页表容量足够大、两种操作不涉及同一页表时,两种操作可以并发进行。
以页为单位进行持久化,平摊了多条更新请求进行持久化的开销。页表中单个数据页的大小,需要根据更新请求复制的吞吐量以及数据页持久化的吞吐量来确定。在两者吞吐量相匹配的情况下,循环页表能无阻塞地循环使用。若循环页表已满,则添加操作会被阻塞,直至持久化操作释放出空闲页面。
该循环页表中对于数据持久性的保证是:结点崩溃后,所丢失的更新请求数目至多等于整个循环页表所能容纳的更新请求数目。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。

一种状态机复制方法.pdf_第1页
第1页 / 共14页
一种状态机复制方法.pdf_第2页
第2页 / 共14页
一种状态机复制方法.pdf_第3页
第3页 / 共14页
点击查看更多>>
资源描述

《一种状态机复制方法.pdf》由会员分享,可在线阅读,更多相关《一种状态机复制方法.pdf(14页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 102981928 A(43)申请公布日 2013.03.20CN102981928A*CN102981928A*(21)申请号 201210426104.X(22)申请日 2012.10.30G06F 11/14(2006.01)H04L 29/06(2006.01)(71)申请人清华大学地址 100084 北京市海淀区清华园北京市100084-82信箱(72)发明人张勇 唐家勇 邢春晓(74)专利代理机构北京路浩知识产权代理有限公司 11002代理人王莹(54) 发明名称一种状态机复制方法(57) 摘要本发明公开了一种状态机复制方法,该方法包括步骤:主结点接收客户。

2、端发送的更新请求,验证是否已更新;如果否,则由主结点向从结点发送提案消息;从结点接收提案消息后进行验证,如果验证成功则向其它结点发送批准消息;结点收到所述批准消息后,判断该结点收到的批准消息是否超过总结点数一半,如果是,该结点执行更新请求,否则,该结点不执行更新请求,主结点更新请求执行完成后向客户端发送执行结果。通过该方法消除了数据状态的同步持久化,实现了分布式场景下数据的可靠复制,大大降低了延迟;保证了系统的正常进展和结点的正确恢复,提高了灾难后数据的恢复完整性。(51)Int.Cl.权利要求书1页 说明书7页 附图5页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书 1 。

3、页 说明书 7 页 附图 5 页1/1页21.一种状态机复制方法,其特征在于,该方法包括步骤:S1主结点接收客户端发送的更新请求,验证是否已更新;S2如果否,则由主结点向从结点发送提案消息;S3从结点接收提案消息后进行验证,如果验证成功则向其它结点发送批准消息;S4结点收到所述批准消息后,判断该结点收到的批准消息是否超过总结点数一半,如果是,该结点执行更新请求,否则,该结点不执行更新请求,主结点更新请求执行完成后向客户端发送执行结果。2.如权利要求1所述的一种状态机复制方法,其特征在于,所述提案消息包含向量时钟、视图编号、实例编号和更新请求,所述批准消息包含视图编号、向量时钟和实例编号。3.如。

4、权利要求2所述的一种状态机复制方法,其特征在于,所述步骤S3的验证方法为与提案消息中的向量时钟和视图编号比较,如果一致则验证成功。4.如权利要求1所述的一种状态机复制方法,其特征在于,该方法包括步骤:S5主结点和从结点周期性的向其他结点广播心跳消息,各结点收到心跳消息后将其中的进展信息与本地进展信息进行比对,如果本地结点相对于广播信息落后,向广播心跳消息的结点发送请求,进行追赶。5.如权利要求4所述的一种状态机复制方法,其特征在于,当结点收到的心跳消息超时时,对超时结点进行故障检测。6.如权利要求5所述的一种状态机复制方法,其特征在于,该方法还包括:在主结点崩溃的情况下,在从结点中选举出新的主。

5、结点,进行步骤S1-S4。7.如权利要求6所述的一种状态机复制方法,其特征在于,在从结点中选举出新的主结点具体包括:S1从结点检测到主结点心跳消息超时,发送选举准备信息给其他结点;S2其他结点接收到选举准备信息后启动选举定时器,进行主结点选举;S3主结点选举成功后被选举的结点进入主结点状态,其他结点进入从结点状态;S4当选举定时器超时而选举没有完成时,重复S1-S3步,直到新的主结点产生。8.如权利要求1所述的一种状态机复制方法,其特征在于,该方法还包括步骤:当结点崩溃时对结点进行恢复。9.如权利要求8所述的一种状态机复制方法,其特征在于,所述对结点进行恢复具体包括:S1”待恢复结点进入恢复状。

6、态;S2”待恢复结点根据本地磁盘上已持久化的更新请求序列进行恢复;S3”待恢复结点向当前系统中所有正确结点发送恢复请求;S4”其他结点接收到恢复请求后根据回复请求中的信息判断是否发送恢复响应;S5”待恢复结点接收到恢复响应后,将恢复响应中的信息与本地信息比较并更新本地信息,待恢复结点收到超过总结点数一半的恢复响应时将待恢复结点转换为结点状态。10.如权利要求1所述的一种状态机复制方法,其特征在于,该方法包括步骤:使用循环页表并以页为单位对数据存储空间进行顺序分配、持久化和释放。权 利 要 求 书CN 102981928 A1/7页3一种状态机复制方法技术领域0001 本发明涉及计算机数据处理领。

7、域,特别涉及一种状态机复制方法。背景技术0002 互联网的普及和电子商务的兴起,使得在线电子交易的需求日益增加,交易系统的重要性也与日俱增。交易系统在实时交易时段内是一个典型的联机事务处理系统,在数据访问方式上具有写操作密集的特点。由于交易数据的特殊性,对于交易系统提出了高性能、高可用性等突出要求。以证券交易系统为例,近年来全球各主要交易所纷纷对其交易系统进行技术改造,追求订单处理的低延迟和高性能。目前,纳斯达克等宣称其交易系统的订单处理延迟已降至百微秒量级。0003 实现交易系统的高可用性的通用方法是主备机复制。根据结点间通信所依赖媒介的不同,可以采用两类方法进行复制备份,一类基于共享存储,。

8、另一类则基于消息传递。0004 基于共享存储的技术,拥有模型简单、易于实现等特点。然而在该技术中,日志持久化操作成为高延迟的重要原因。日志持久化的延迟受限于用作共享存储的非易失性存储设备的性能,再加上共享存储设备中需对数据进行冗余备份和事务保护以确保数据可靠性,因而使得降低订单处理延迟变得困难。日志的同步持久化成为系统运行的瓶颈。0005 万兆以太网、InfiniBand、RDMA等高速网络技术的出现与成熟,使得基于消息传递的状态机复制方法为降低延迟提供了可能。该方法通过发送消息来实现多结点间的数据复制。其复杂性在于如何避免因网络或结点问题造成的结点之间数据的不一致。该问题可以通过容错共识算法。

9、来解决。0006 Paxos算法是一种经典的容错共识算法,可以解决上述分布式复制中的一致性的问题。其扩展后所得到的容错复制算法Multi-Paxos已被广泛地应用于Google Chubby等分布式系统中。然而,普通的Multi-Paxos算法由于以下一些问题不能直接应用于对性能要求极高的联机事务处理系统中:一是现有的算法基本针对的是磁盘数据复制,而缺乏针对内存驻留数据容错访问的通用模型;二是系统运行过程中,需对结点的数据状态进行同步持久化,以保证算法正确性,但该操作大大增加了延迟;三是对于算法涉及的主结点选举、保证系统进展等实现问题,未给出明确的解决方法。发明内容0007 (一)要解决的技术。

10、问题0008 本发明要解决的技术问题是:0009 系统运行过程中需要对结点的数据状态进行同步持久化,延迟时间长、性能低,缺乏针对内存驻留数据容错访问的通用方法,在主结点出现问题时无法选举新的主结点,无法保证系统进展的一致性。0010 (二)技术方案0011 为解决上述技术问题,本发明提供了一种状态机复制方法,该方法包括步骤:说 明 书CN 102981928 A2/7页40012 S1主结点接收客户端发送的更新请求,验证是否已更新;0013 S2如果否,则由主结点向从结点发送提案消息;0014 S3从结点接收提案消息后进行验证,如果验证成功则向其它结点发送批准消息;0015 S4结点收到所述批。

11、准消息后,判断该结点收到的批准消息是否超过总结点数一半,如果是,该结点执行更新请求,否则,该结点不执行更新请求,主结点更新请求执行完成后向客户端发送执行结果。0016 所述提案消息包含向量时钟、试图编码、实力编码和更新请求,所述批准消息包含视图编码、向量时钟和实例编码。0017 所述步骤S3的验证方法为比较提案消息中的视图编码与本地的视图编码,如果一致则验证成功。0018 该方法包括步骤:0019 S5主结点和从结点周期性的向其他结点广播心跳消息,各结点收到心跳消息后将其中的进展信息与本地进展信息进行比对,如果本地结点相对于广播信息落后,向广播心跳消息的结点发送请求,进行追赶。0020 当结点。

12、收到的心跳消息超时时,对超时结点进行故障检测。0021 该方法还包括:在主结点崩溃的情况下,在从结点中选举出新的主结点,进行步骤S1-S4。0022 在从结点中选举出新的主结点具体包括:0023 S1从结点检测到主结点心跳消息超时,发送选举准备信息给其他结点;0024 S2其他结点接收到选举准备信息后启动选举定时器,进行主结点选举;0025 S3主结点选举成功后被选举的结点进入主结点状态,其他结点进入从结点状态;0026 S4当选举定时器超时而选举没有完成时,重复S1-S3步,直到新的主结点产生。0027 该方法还包括步骤:当结点崩溃时对结点进行恢复。0028 所述对结点进行恢复具体包括:00。

13、29 S1”待恢复结点进入恢复状态;0030 S2”待恢复结点根据本地磁盘上已持久化的更新请求序列进行恢复;0031 S3”待恢复结点向当前系统中所有正确结点发送恢复请求;0032 S4”结点接收到恢复请求后根据回复请求中的信息判断是否发送恢复响应;0033 S5”待恢复结点接收到恢复响应后,将恢复响应中的信息与本地信息比较并更新本地信息,然后将待恢复结点转换为结点状态。0034 该方法包括步骤:使用循环页表并以页为单位对更新数据进行顺序分配、持久化和释放。0035 (三)有益效果0036 消除了数据状态的同步持久化,实现了分布式场景下数据的可靠复制,大大降低了延迟;保证了系统的正常进展和结点。

14、的正确恢复,提高了灾难后数据的恢复完整性。附图说明0037 图1为本发明一种状态机复制方法在联机事务处理场景中的部署应用简图。说 明 书CN 102981928 A3/7页50038 图2为本发明主结点稳定情况下主结点的更新请求处理流程。0039 图3为本发明主结点稳定情况下的从结点的更新请求处理流程。0040 图4为本发明所述主结点稳定情况下的状态机复制方法的消息流程图。0041 图5为本发明状态机复制方法中结点的状态转移图。0042 图6为本发明主结点选举方法的消息流程图。0043 图7为本发明所述异步持久化方法中使用的循环页表的示意图。具体实施方式0044 下面结合附图和实施例,对本发明。

15、的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。0045 如图1所示,本发明提出的模型可以部署应用于联机事务处理系统。本发明提出的无数据持久化的状态机复制方法可以视为图中“更新定序”部分的核心。0046 如图1所示,在主结点稳定情况下,将系统结点的角色划分为两种:主结点态和从结点态。除此之外,结点还可能处于两种状态:选举态和恢复态。四种状态的相互转换如图5所示。0047 在稳定情况下,系统有一个主结点和多个从结点。图1所示的系统由一个主结点和两个从结点构成。主结点负责与客户端进行通信,包括:(1)接收更新请求,并通过本发明提出的状态机复制方法将该请求复制到各。

16、从结点,由各从结点分别对数据副本进行操作;(2)对于主结点,还要向客户端返回执行结果。0048 下表为本发明提出的状态机复制方法实施例中涉及相关内容的定义,其中:0049 表1为相关术语定义;0050 表2为变量定义;0051 表3为消息定义。0052 表1相关术语定义0053 0054 表2变量定义0055 说 明 书CN 102981928 A4/7页60056 0057 表3消息定义0058 0059 表2中的变量前常常加上Local前缀,表示本地所保存的变量。例如,Local_V表示本地的视图编号;还可以加上一些明显含义的前缀,表示一定的属性。如Local_Executed_S表示本地。

17、已成功执行的最大实例编号。说 明 书CN 102981928 A5/7页70060 表2中引入的向量时钟VC是一种用来检测消息是否过期的方法。VC是一个整型向量(或数组),每一维的值表示一个结点的重启次数,该维度由对应结点维护。对于两个n维的向量时钟A和B,A=(a1,a2,.,an),B=(b1,b2,.,bn),与之相关的操作定义如下:0061 向量时钟的合并:AB=(max(a1,b1),max(a2,b2),max(an,bn)。0062 向量时钟的比较:如果A的每一维ai(i=1,2,.,n),都大于(小于或等于)B的每一维bi,则称A大于(小于或等于)B;否则称两者不可比。0063。

18、 向量时钟的取值遵守规则如下:0064 规则1:系统初始化时,各结点将其本地向量时钟设置为零向量。0065 规则2:在结点崩溃并重启后,需将本地向量时钟设置为零向量,然后将自身对应的维度的值设为与崩溃前该维度上的值相比更大的值。0066 规则3:每个结点在自身发送的消息中包含本地向量时钟,且在接收到其它结点发送的消息并进行处理后,要将消息中所包含的向量时20钟与本地向量时钟进行合并后,作为新的本地向量时钟。0067 表2中的视图编号V表示结点所处的上下文环境,用于指示当前的主结点。将结点从1到n编号,那么主结点被确定为第(V mod n+1)号。0068 结点的初始化状态为从结点态。本地向量时。

19、钟Local_VC初始化为零向量;本地视图编号Local_V为0,本地期望的视图编号Local_Attempted_V为0;本地已成功执行的最大实例编号Local_Executed_S为0。0069 (1)主结点稳定情况下的复制方法0070 在以下过程中,每条消息都带有发送者的向量时钟,接收者收到消息后,都会将该消息的向量时钟与本地的向量时钟进行比较、合并,只有消息的向量时钟较大时才会进行进一步处理。以下过程默认都包含这个步骤。0071 如图4所示,主结点稳定情况下的复制方法如下。0072 a)主结点接收到客户端发送的新的更新请求U;0073 b)主结点将S赋为Local_Executed_S。

20、+1,然后向各结点发送一个Proposal消息。Proposal消息中需包含本地向量时钟Local_VC、本地视图编号Local_V、S以及U;0074 c)各个结点在收到有效的Proposal消息后,首先检查V、VC,若V等于自己的Local-V、Local_VC则向所有结点发送Accept消息,在Accept消息中包含自己的Local_VC、Local_V与S;0075 d)各个结点在收到超过半数的包含相同S的Accept消息后,知道更新请求的全局定序已完成。更新本地已成功复制的实例编号Local_S为S。各个结点在本地数据副本上对更新请求进行执行。更新本地已成功执行的实例编号Local_。

21、Executed_S为S。主结点在执行完成后还要向客户端发送执行结果。0076 如图2所示,为主结点稳定状态下主结点的更新请求处理流程;如图3所示,为主结点稳定状态下从结点的更新请求处理流程。如果从结点接收到Client端的更新请求,这时需向Client发送主结点的信息,要求Client将订单重新发送到主结点。0077 (2)主结点的重新选举0078 从结点依靠心跳消息方法(下面会具体说明)来判定主结点是否已崩溃,如果主结点已崩溃,从结点需要进入选举态,选举出新的主结点。由于初始化时没有主结点,并且说 明 书CN 102981928 A6/7页8各结点都处于从结点态,所以自然会在心跳消息超时后。

22、进行选举。0079 在以下过程中,每条消息都带有发送者的向量时钟,接收者收到消息后,都会将该消息的向量时钟与本地的向量时钟进行比较、合并,只有消息的向量时钟较大时才会进行进一步处理。以下过程默认都包含这个步骤。0080 如图6所示,主结点选举的具体方法如下。0081 a)从结点检测到主结点心跳超时;0082 b)将Local_Attempted_V增大1,同时发送带有Local_Attempted_V的View_Change消息给其他结点;0083 c)当一个结点收到一个多数派的包含相同Local_Attempted_V的View_Change消息之后,启动选举定时器;同时,如果结点是Loca。

23、l_Attempted_V所指定的新主结点L,则其向其他结点发送带有Local_Attempted_V的Pre_Leader_Election消息;0084 d)其他结点收到L发送的Pre_Leader_Election消息后,检查消息中的Attempted_V(即发送者的Local_Attempted_V)与本地的Local_Attempted_V是否相同:如果相同,则进入从结点态:将自己的Local_V更新为Local_Attempted_V,并向新主机发送Post_Leader_Eletion消息,其中包含已知的最近的一些Proposal;否则不予处理;0085 e)新主结点收到多数派的。

24、包含相同Local_Attempted_V的Post_Leader_Eleciton之后,取出这些消息中的Proposal,用于将自己的数据更新到最新状态,并进入主结点态。0086 选举完成,系统进入稳定状态,开始正常处理更新请求。0087 在c步中,结点启动了一个选举定时器,是为了保证选举失败时系统仍然能正常进展下去。当选举定时器超时而选举没有完成时,将重复a-e步,直到新的主结点产生。0088 当结点崩溃时,假设待恢复结点编号为i,进行如下步骤:0089 a)待恢复结点将本地的结点状态设为恢复态。0090 b)待恢复结点从本地磁盘中读出重启次数RT,将RT自增1,并写回磁盘。0091 c)。

25、待恢复结点将本地向量时钟初始化为零向量但是第i维的值设为RT。0092 d)待恢复结点根据本地磁盘上已持久化了的更新请求序列进行恢复,并得到其已经执行了的最高实例编号。0093 e)待恢复结点向当前系统中所有正确结点发送一条Recovery请求,并等待来自超过半数结点的Recovery响应。Recovery请求包含以下信息:本地向量时钟Local_VC、本地已经成功执行的最高实例编号Local_Executed_S。0094 f)主结点或从结点在接收到的Recovery请求后,检查消息中向量时钟的第i维的值:若该值大于等于本地时钟中第i维的值,则将其合并到本地向量时钟,并向待恢复结点发送一个R。

26、ecovery响应;否则,忽略该Recovery请求。Recovery响应中需包含以下信息:本地向量时钟Local_VC、本地响应过的最高视图编号Local_Attempted_V、本地已成功复制的最高实例编号Local_S;0095 g)待恢复结点收到了超过半数的Recovery响应后,将所有响应中的向量时钟进行合并作为本地向量时钟;选取响应中的最大视图编号,作为本地视图编号Local_V;选取响应中最高实例编号,作为本地期望追赶的实例编号Local_Attempted_S。0096 h)通过其它结点发送的心跳消息来观察其它结点的进展,并通过下面要介绍的说 明 书CN 102981928 A。

27、7/7页9故障检测与进度追赶方法进行进度追赶。当本地已成功复制的实例编号Local_S追赶到Local_Attempted_S时,追赶完成,结点状态转换为从结点态。0097 心跳消息是每个结点周期性地向其他结点广播的消息,包含结点的进展信息,如本地向量时钟、结点状态、已成功复制的最高实例编号、已执行的最高实例编号、本地已确定的视图编号。0098 各从结点都有一个主结点心跳定时器。在每次收到主结点心跳消息后,该定时器都被重置。当主结点崩溃后,该定时器最终会超时,从而促使该结点进入选举态,按照前面所述的主结点选举方法进行选举。0099 各结点收到心跳消息后,将其中的进展信息与本地进展信息进行比对,。

28、若发现本结点落后较多,则向某结点发送专门的Catch-Up请求。该请求包含本地已成功复制的最高实例编号Local_S。收到Catch-Up请求的结点会向落后结点发送Catch-Up响应,在响应中包含编号大于消息中Local_S的、已成功复制的更新请求。由于单个Catch-Up响应中所能包含的更新请求数目有限,若结点落后过多,则可同时向多个结点进行分段请求。由于进度追赶机制获取更新请求的速度要大于同一段时间内新更新请求完成复制的速度,因此在足够长的时间后,落后结点的进度最终能够追赶上。0100 如图7所示,循环页表以页为单位进行顺序分配、持久化、释放,每一页包含若干条更新请求。以页为单位进行持久。

29、化,能有效降低单条持久化的平均延迟。0101 循环页表的使用方法如下:(1)添加操作:当有新的更新请求复制成功时,按编号顺序将其添加至页表末尾,中间不可跳过其他编号;(2)持久化操作:不断地对页表的首页进行持久化,完成后标记为空闲以释放其空间。当页表容量足够大、两种操作不涉及同一页表时,两种操作可以并发进行。0102 以页为单位进行持久化,平摊了多条更新请求进行持久化的开销。页表中单个数据页的大小,需要根据更新请求复制的吞吐量以及数据页持久化的吞吐量来确定。在两者吞吐量相匹配的情况下,循环页表能无阻塞地循环使用。若循环页表已满,则添加操作会被阻塞,直至持久化操作释放出空闲页面。0103 该循环页表中对于数据持久性的保证是:结点崩溃后,所丢失的更新请求数目至多等于整个循环页表所能容纳的更新请求数目。0104 以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。说 明 书CN 102981928 A1/5页10图1说 明 书 附 图CN 102981928 A10。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1