实现数据一致性的方法和装置、服务器和终端
技术领域
本申请涉及计算机领域,尤其涉及实现数据一致性的方法和装置、终端、服务器和计算机程序产品。
背景技术
分布式存储系统中,通常使用多个副本来提升分布式存储系统的可用性。当1个副本所在的存储节点掉线的时候,其它副本所在的节点替代提供副本数据,但前提是:保证这多个副本数据是一致的。
分布式存储系统中,常用的分布式一致性协议有Raft协议、Paxos协议、两阶段提交协议(two-phase commit protocol,2PC)和三阶段提交协议(three-phase commitprotocol,3PC)。其中,Raft协议被公认为最容易理解的协议,从而被分布式存储系统(例如分布式数据库)广泛使用。
Raft协议采用日志(log)的方式来记录客户端(client)对数据的操作(例如读操作或者写操作)。Raft协议的日志复制(log replication)如下:第一步,领导节点(leader)从客户端接收日志条目(log entry),该日志条目携带有客户端的操作(包括该操作所针对的数据);第二步,领导节点将该日志条目复制到其他跟随节点(follower);第三步,超过半数的跟随节点向领导节点发送已成功执行该日志条目所携带的操作;第四步,领导节点向客户端反馈已完成该操作。
发明内容
有鉴于此,本申请提供了一种实现数据一致性的方法和装置、服务器、终端和计算机程序产品,可以提高基于Raft协议实现操作(读操作/写操作)的效率。
第一方面,本申请提供一种实现数据一致性的方法。在该方法中,Raft协议定义的客户端生成对数据的操作,并将所述操作记录为日志条目。所述客户端向所述Raft协议定义的领导节点和所述Raft协议定义的多个跟随节点发送所述日志条目。领导节点和所有跟随节点,分别接收该日志条目,分别执行该日志条目记录的该操作,分别在成功执行该操作之后向该客户端发送已成功执行该操作的响应消息。该客户端在预设时间段内接收多条响应消息,所述响应消息描述所述操作被执行成功;该多条响应消息中的不同的响应消息来自不同的节点,例如所述多条消息响应消息全部来自所述多个跟随节点,例如所述多条响应消息中的一条响应消息来自所述领导节点、其他响应消息来自所述多个跟随节点。当所述客户端在所述预设时间段内接收到的多条响应消息的总数大于节点数的一半时,确定所述操作执行成功,所述节点数为所述领导节点的个数和所述多个跟随节点的个数之和。
相对于背景技术,本申请提供的方法省去了领导节点负责下发操作以及判断该操作是否被执行等动作。由客户端直接下发操作以及判断该操作是否被成功执行,可以提升操作的完成效率。
第一方面的一种可能设计,领导节点向客户端发送所述领导节点的任期号,该客户端接收所述领导节点发送的任期号。这样,客户端可以通过最大的任期号,识别当前的领导节点(即最新的领导节点)。
第一方面的一种可能设计,所述客户端将当前领导节点的任期号添加入所述日志条目。这样,当前领导节点和所有跟随节点识别出属于在当前领导节点的任期中生成的日志条目,从而终止执行在旧领导节点的的任期中生成的日志条目中的操作。
第一方面的一种可能设计,跟随节点定期检测该跟随节点与领导节点的通信连接,在该跟随节点与该领导节点的通信连接断开时暂停执行携带所述领导节点的任期号的日志条目中所记录的操作。这样可以避免执行该日志条目记录的操作导致数据非一致性问题。
第一方面的一种可能设计,跟随节点定期检测所述跟随节点与所述领导节点的通信连接,在所述跟随节点与所述领导节点的通信连接断开时所述跟随节点成为候选节点。所述候选节点向其他跟随节点和所述领导节点发起选举;在所述候选节点被选举为新领导节点时,所述新领导节点向所述客户端发送所述新领导节点的新任期号。
这样,客户端可以获取新领导节点的新任期号,并将该新任期号添加至在该新领导节点的任期中生成的日志条目中。
第一方面的一种可能设计,当客户端接收到新领导节点发送的新任期号,并且所述新任期号大于旧领导节点的旧任期号,则客户端获取未执行完的携带该旧任期号的日志条目。所述客户端更新获取的日志条目中的该旧任期号为该新任期号。所述客户端向该旧领导节点、该新领导节点和所有跟随节点中除了所述新领导节点以外的跟从节点发送携带该新任期号的日志条目。
这样,对于在旧领导节点的任期中生成的日志条目(携带旧任期号),如果在领导节点更新时客户端确定一个或多个日志条目还未被成功执行,则客户端更新确定的一个或多个日志条目中的旧任期号为新任期号。从而,在旧领导节点的任期未被成功执行的日志条目中的操作,可以在新领导节点的任期中被继续执行,保证了数据更新的连续性和正确性。
第二方面,本申请提供一种实现数据一致性的装置,该装置包括的功能模块用于实现第一方面或第一方面的任意可能设计提供的方法中由客户端执行的步骤。
本申请提供另一种实现数据一致性的装置,该装置包括的功能模块用于实现第一方面或第一方面的任意可能设计提供的方法中由节点(领导节点或者跟随节点或者候选节点)执行的步骤。
第三方面,本申请提供一种终端,该终端包括显示器、处理器和存储器。该存储器存储计算机指令;该处理器执行该存储器存储的计算机指令,使得该终端执行上述第一方面或者第一方面的各种可能设计提供的方法中由客户端实现的步骤。
本申请提供一种服务器,该服务器包括处理器和存储器。该存储器存储计算机指令;该处理器执行该存储器存储的计算机指令,使得该服务器执行上述第一方面或者第一方面的各种可能设计提供的方法中由节点(领导节点或者跟随节点或者候选节点)实现的步骤。
第四方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当终端的处理器执行该计算机指令时,该终端执行上述第一方面或者第一方面的各种可能设计提供的方法中由客户端实现的步骤。
本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当服务器的处理器执行该计算机指令时,该服务器执行上述第一方面或者第一方面的各种可能设计提供的方法中由节点(领导节点或者跟随节点或者候选节点)实现的步骤。
本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。终端的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该终端执行上述第一方面或者第一方面的各种可能设计提供的方法中由该客户端实现的步骤。
本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。服务器的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该服务器执行上述第一方面或者第一方面的各种可能设计提供的方法中由节点(领导节点或者跟随节点或者候选节点)实现的步骤。
附图说明
图1为本申请适用的应用场景中的一种示意图;
图2为本申请提供的实现数据一致性的方法的一种流程示意图;
图3为本申请提供的实现数据一致性的方法的一种流程示意图;
图4为本申请提供的实现数据一致性的装置400的一种逻辑结构示意图;
图5为本申请提供的实现数据一致性的装置500的一种逻辑结构示意图;
图6为本申请提供的终端10的一种结构示意图;
图7为本申请提供的服务器700的一种结构示意图。
具体实施方式
下面将结合本申请中的附图,对本申请提供的技术方案进行描述。
Raft协议是一种一致性算法协议,可以替换Paxos协议。Raft定义的节点可以处于如下状态中的任一种状态:领导节点(leader)、跟随节点(follower)和候选节点(candidate)。
参见图1,终端10部署Raft协议定义的客户端101。服务器11、服务器12和服务器13分别部署Raft协议定义的节点111、节点121和节点131。在节点111当选为当前的领导节点(leader)时,节点121和节点131分别为当前的跟随节点(follower)。图1仅是一种示意图,Raft协议还支持在多个终端分别部署客户端,还支持在多个服务器分别部署一个或多个节点。多个终端分别部署的客户端的工作原理类似。
客户端101分别与领导节点111、跟随节点121和跟随节点131通信。这样,客户端101可以直接向领导节点111、跟随节点121和跟随节点131分别发送待处理的日志条目。该日志条目记录操作和该操作所针对的数据,例如该日志条目记录客户端对新数据的写操作,例如该日志条目记录客户端对旧数据的读操作。
应知,如果存在除了跟随节点121和跟随节点131以外的其他跟随节点,客户端101可以直接向该其他跟随节点发送待处理的操作。
可选地,如果适用在支持Raft协议的分布式存储系统,则客户端101是该分布式存储系统的客户端,领导节点111、跟随节点121和跟随节点131分别为分布式存储系统的存储节点。例如该客户端为数据库应用。
可选地,如果适用在支持Raft协议的分布式数据库,则客户端101是该分布式数据库向应用提供的接口,领导节点111、跟随节点121和跟随节点131分别为分布式数据库的数据库节点。
本申请提供一种基于Raft协议实现数据一致性的方法,该方法节省了领导节点111发送操作和判断该操作是否被成功执行等动作,相对于背景技术减少了领导节点111负担。
结合图1,图2示意了本方法的基础流程,该流程包括步骤S21到步骤S25。应知,跟随节点可以是一个或多个,图1和图2示意了两个跟随节点的场景,在一个或多个跟随节点的场景应用本方法与在图2所示两个跟随节点的场景应用本方法的实现原理类似。
步骤S21,客户端101生成对数据的操作,将该操作记录为日志条目(log entry)。
用户可以操作终端10上的客户端101,生成对数据的操作,该操作可以是读该数据的读操作,或者该操作可以是写该数据的写操作。
应用(例如文本编辑应用)可以触发终端10上的客户端101生成对数据的操作,该操作可以是读该数据的读操作,或者该操作可以是写该数据的写操作。
客户端101在日志中将该对数据的操作记录为日志条目。例如,客户端101生成的一个操作,在该日志中记录为一条日志条目。
可选地,客户端101在日志条目中记录对数据的操作时,还可以在该日志条目中记录当前的任期号(termid),该当前的任期号为该领导节点111的任期号,该当前的任期号为最大的任期号。
在将当前的任期号记录到日志条目之前,客户端101存储有当前的任期号。客户端101获取当前的任期号的方式如下:
在该节点111当选为当前任期的领导节点(即最新的领导节点)时,领导节点111会向客户端101发送当前的任期号;相应地,客户端接收领导节点111发送的任期号。应知,在Raft协议中,当前的任期号是最大的任期号,即在当前任期的领导节点111记录的任期号大于其他节点(例如跟随节点121和跟随节点131)记录的任期号,当前的任期号为最新的任期号。
步骤S22,客户端101分别向领导节点111和所有跟随节点(例如跟随节点121和跟随节点131)发送携带该操作的日志条目。
可选地,客户端101可以同时分别向领导节点111和所有跟随节点(例如跟随节点121和跟随节点131)发送该日志条目。
可选地,客户端101可以依次分别向领导节点111和所有跟随节点(例如跟随节点121和跟随节点131)发送该日志条目。应知,完成向领导节点111和所有跟随节点(例如跟随节点121和跟随节点131)发送该日志条目的时间间隔应限制在指定时间段内,该指定时间段应该尽量小,例如该指定时间段为几秒以内。
步骤S23,领导节点111和所有跟随节点(例如跟随节点121和跟随节点131)分别接收该日志条目,分别执行该日志条目记录的该操作,分别在成功执行该操作之后向客户端101发送已成功执行该操作的响应消息。
领导节点111和所有跟随节点(例如跟随节点121和跟随节点131)在接收到该日志条目之后,分别执行该日志条目记录的操作。例如,领导节点111按照该日志条目记录的写操作,向领导节点111管理的存储区域(该存储区域从服务器11分配得到)中写入该写操作携带的数据。例如,跟随节点121按照该日志条目记录的写操作,向跟随节点121管理的存储区域(该存储区域从服务器12分配得到)中写入该写操作携带的数据。
领导节点111成功执行完该日志条目记录的操作之后,向客户端101发送成功执行该操作的响应消息。可选地,如果领导节点111未成功执行该日志条目记录的操作,则不向客户端101发送成功执行该操作的响应消息,或者向客户端101发送执行该操作失败的响应消息。
跟随节点(例如跟随节点121或者跟随节点131)成功执行完该日志条目记录的操作之后,向客户端101发送成功执行该操作的响应消息。可选地,如果跟随节点未成功执行该日志条目记录的操作,则不向客户端101发送成功执行该操作的响应消息,或者向客户端101发送执行该操作失败的响应消息。
步骤S24,客户端101在预设时间段内接收已成功执行该操作的响应消息。
即该响应消息描述该操作被执行成功。
如果领导节点111成功执行该操作,客户端101会接收到领导节点111发送的成功执行该操作的响应消息。正常情况下,客户端101会在该预设时间段内接收到领导节点111发送的成功执行该操作的响应消息。
如果跟随节点成功执行该操作,客户端101会接收到该个跟随节点发送的成功执行该操作的响应消息。例如,跟随节点121成功执行该操作,客户端101会接收到跟随节点121发送的成功执行该操作的响应消息;另外,跟随节点131成功执行该操作,客户端101会接收到跟随节点131发送的成功执行该操作的响应消息。正常情况下,客户端101会在该预设时间段内接收到跟随节点发送的成功执行该操作的响应消息。
步骤S25,客户端101在该预设时间段内接收到的响应消息的总数大于节点数的一半时,确定该操作执行成功。
具体地,如果客户端101在预设时间段内收到所有节点(领导节点111和所有跟随节点)中超过一半的节点的响应消息(成功执行该操作的响应消息),则客户端101认为该操作执行成功。可选地,如果客户端101在预设时间段内没有收到所有节点(领导节点111和所有跟随节点)中超过一半的节点的响应消息(成功执行该操作的响应消息),则客户端101认为该操作执行失败。
举例说明,在图1和图2的场景中,客户端101在预设时间段内收到三个节点(领导节点111、跟随节点121和跟随节点131)中至少两个节点的响应消息(成功执行该操作的响应消息),则客户端101认为该操作执行成功。相反,客户端101在预设时间段内收到三个节点(领导节点111、跟随节点121和跟随节点131)中少于两个节点的响应消息(成功执行该操作的响应消息),则客户端101认为该操作执行失败。
图2示意的流程为正常情况下的执行操作的流程。在图2正常执行操作的基础上,本申请进一步结合图1和图3示意了异常情况下的处理流程,图3所示的处理流程包括步骤S31到步骤S38。为便于理解,在图3所示的处理流程中的步骤S31到步骤S35是从跟随节点121角度举例说明的,应知,该步骤S31到步骤S35也适用于其他跟随节点(例如跟随节点131),在每个跟随节点适用的实现原理相同。
步骤S31,跟随节点121定期检测跟随节点121与领导节点111的通信连接。
跟随节点121每间隔预定时间检测一次跟随节点121与领导节点111的通信连接。该预定时间可以人为设定或者根据历史经验设定,或者可以遵从Raft协议设定。
可选地,跟随节点121通过心跳机制来检测跟随节点121与领导节点111的通信连接。具体地,领导节点111会定期向跟随节点121发送心跳数据包,如果跟随节点121超时未收到该心跳数据包,则跟随节点121确定跟随节点121与领导节点111的通信连接断开。
另外,如果领导节点111发生故障,则跟随节点121检测到跟随节点121与领导节点111的通信连接断开。
步骤S32,跟随节点121在跟随节点121与领导节点111的通信连接断开时,跟随节点121暂停执行携带领导节点111的任期号的日志条目中所记录的操作。
日志条目会携带客户端101对数据的操作。另外,在节点111作为领导节点的期间,该日志条目还会携带领导节点111的任期号。
在跟随节点121与领导节点111的通信连接断开时,对于未处理的操作(该操作是携带在包含有领导节点111的任期号的日志条目中),跟随节点121暂停处理该操作。作为暂停处理的一种可能实现,跟随节点121丢弃该操作。作为暂停处理的一种可能实现,跟随节点121暂停执行该操作的进程/线程,但不丢弃该操作,例如不丢弃携带该操作的日志条目。
步骤S33,跟随节点121成为候选节点(candidate),并向其他跟随节点(包括跟随节点131)和领导节点111发起选举。
具体地,在跟随节点121与领导节点111的通信连接断开时,节点121从跟随节点切换为候选节点。
节点121以候选节点的身份向领导节点111和其他跟随节点(包括跟随节点131)发起选举。举例说明,候选节点121向自己投一票,同时分别向领导节点111和其他跟随节点发出投票请求,该投票请求用于请求向候选节点121投票。由于节点121与领导节点111的通信连接是断开的,因此候选节点121不会收到领导节点111的投票。其他跟随节点中与候选节点121通信连接的每个跟随节点(例如跟随节点131),可以分别向候选节点121投一票。向候选节点121投的每一票,都是代表赞成候选节点121成为新领导节点。
步骤S34,得到超过半数的节点的投票,候选节点121被选举为新领导节点。
举例说明,如图1和图3所示的场景中,总共具有三个节点,分别是候选节点121、旧领导节点111和跟随节点131。候选节点121向旧领导节点111和跟随节点131发出投票请求后,旧领导节点111不会向候选节点121投票,跟随节点131向候选节点121投一票。候选节点121会投自己一票。因此候选节点121总共得到两票,候选节点121称为新领导节点121,即节点121从候选节点变成了新领导节点。
新领导节点121会设置一个新任期号,该新任期号大于旧领导节点111的任期号。举例说明,在旧领导节点111的任期号的基础上,加一所得的数字作为新领导节点121的新任期号。
步骤S35,新领导节点121向客户端101发送新领导节点121的新任期号。
相应地,客户端101会存储新领导节点121的新任期号。可选地,客户端101使用新领导节点121的新任期号更新本地存储的旧领导节点111的任期号。
在节点121作为领导节点的期间,对于客户端101对数据的操作,客户端101会在记录该操作的日志条目中记录该新领导节点121的新任期号,以及向节点111、新领导节点121以及其他跟随节点发送携带该新领导节点121的新任期号的日志条目。
步骤S36,客户端101获取未执行完的携带旧领导节点111的旧任期号的日志条目。
在节点111作为领导节点的期间,对于客户端101还未确定为已成功执行的操作,该操作为未执行完的操作;相应地,携带该操作的日志条目为未执行完的日志条目。该未执行完的日志条目携带旧领导节点111的旧任期号;在步骤S36中,客户端101获取该未执行完的操作条目。
步骤S37,客户端101更新获取的日志条目中的该旧任期号为该新任期号。
对于步骤S36获取的日志条目(即客户端101确定为未执行完的携带旧领导节点111的旧任期号的日志条目),步骤S37将该日志条目中的该旧任期号更改为新领导节点121的新任期号。
步骤S38,客户端101分别向旧领导节点111、新领导节点121和所有跟随节点发送携带新领导节点121的新任期号的日志条目。
对于步骤S37更新任期号所得的日志条目,客户端101会向旧领导节点111、新领导节点121和所有跟随节点发送。
对于客户端101新生成的日志条目(包括客户端101对数据的新操作和新领导节点121的新任期号),客户端101会向旧领导节点111、新领导节点121和所有跟随节点发送。
可选地,在步骤S38中,客户端101优先发送步骤S37更新任期号所得的日志条目,然后再发送客户端101新生成的日志条目。
可选地,旧领导节点111接收客户端101发送的携带新领导节点121的新任期号的日志条目。旧领导节点111在确定新领导节点121的新任期号大于旧领导节点111的旧任期号时,节点111从领导节点的状态改变为跟随节点的状态。
日志条目携带任期号的目的,是可以让领导节点和跟随节点识别出最新任期内的日志条目,以及让领导节点和跟随节点停止执行历史任期的日志条目所记录的操作。举例说明,对于客户端101在步骤S38中向旧领导节点111和跟随节点131发送的属于步骤S37更新的日志条目,旧领导节点111在确定该日志条目携带的新任期号大于旧领导节点111的旧任期号时,会停止执行携带该旧任期号的日志条目,转而执行携带新任期号的日志条目;同理,跟随节点131在确定该日志条目携带的新任期号大于旧领导节点111的旧任期号时,会停止执行携带该旧任期号的日志条目,转而执行携带新任期号的日志条目。
本申请还提供一种实现数据一致性的装置,该装置部署在本申请的终端10中的客户端101中。该装置包括用于该终端10的客户端101实现上述实现数据一致性的方法的功能单元;本申请对在该装置中如何划分功能单元不做限定,下面实例性地提供一种功能单元的划分,如图4所示。
如图4所示的实现数据一致性的装置400,装置400包括:
处理单元401,用于生成对数据的操作,并将所述操作记录为日志条目;
发送单元403,用于向所述Raft协议定义的领导节点和所述Raft协议定义的多个跟随节点发送所述日志条目;
接收单元402,用于在预设时间段内接收多条响应消息,所述响应消息描述所述操作被执行成功,不同的响应消息来自不同的节点,其中:所述多条消息响应消息全部来自所述多个跟随节点,或者,所述多条响应消息中的一条响应消息来自所述领导节点、其他响应消息来自所述多个跟随节点;
所述处理单元401,用于当所述客户端在所述预设时间段内接收到的多条响应消息的总数大于节点数的一半时,确定所述操作执行成功,所述节点数为所述领导节点的个数和所述多个跟随节点的个数之和
可选地,所述处理单元401,用于在所述客户端向所述领导节点和所述多个跟随节点发送所述日志条目之前,将所述领导节点的任期号添加入所述日志条目。
可选地,所述接收单元402,用于接收所述领导节点发送的任期号。
可选地,所述处理单元401,用于当所述客户端接收到新领导节点发送的新任期号,并且所述新任期号大于所述领导节点的所述任期号,则获取未执行完的携带所述任期号的日志条目,所述新领导节点来自所述多个跟随节点中的一个节点;
所述处理单元401,用于更新获取的日志条目中的所述任期号为所述新任期号;
所述发送单元403,用于向所述领导节点、所述新领导节点和所述多个跟随节点中除了所述新领导节点以外的跟从节点发送携带该新任期号的日志条目。
本申请提供一种实现数据一致性的装置,该装置部署在本申请的服务器的节点中。该装置包括用于该服务器的节点实现上述实现数据一致性的方法的功能单元;本申请对在该装置中如何划分功能单元不做限定,下面实例性地提供一种功能单元的划分,如图5所示。
如图5所示的实现数据一致性的装置500,装置500包括:
接收单元502,用于接收所述Raft协议定义的客户端发送的日志条目,所述日志条目记录所述客户端对数据的操作;
处理单元501,用于执行所述日志条目记录的所述操作,并在成功执行所述操作之后向所述客户端发送已成功执行所述操作的响应消息。
此处,装置500可以是部署在领导节点或者跟随节点中。
可选地,所述领导节点包括发送单元503,该发送单元503用于向所述客户端发送所述领导节点的任期号。
可选地,所述跟随节点中的处理单元501,用于定期检测所述跟随节点与所述领导节点的通信连接,在所述跟随节点与所述领导节点的通信连接断开时暂停执行携带所述领导节点的任期号的日志条目中所记录的操作。
可选地,所述跟随节点中的处理单元501,用于定期检测所述跟随节点与所述领导节点的通信连接,在所述跟随节点与所述领导节点的通信连接断开时所述跟随节点成为候选节点;
所述候选节点中的处理单元501,用于向其他跟随节点和所述领导节点发起选举;
所述新领导节点中的处理单元501,用于在所述候选节点被选举为新领导节点时,向所述客户端发送所述新领导节点的新任期号。
在本申请中,终端10可以为瘦客户机(thin client,TC)、智能手机、平板电脑、可穿戴设备或车载电脑等移动终端。可选地,该终端10可以为服务器。
可选地,图6示意性地提供终端10的一种可能的基本硬件架构。
参见图6,终端10包括处理器601、存储器602、通信接口603和总线604。
终端10中,处理器601的数量可以是一个或多个,图1仅示意了其中一个处理器601。可选地,处理器601,可以是中央处理器(central processing unit,CPU)。如果终端10具有多个处理器601,多个处理器601的类型可以不同,或者可以相同。可选地,终端10的多个处理器601还可以集成为多核处理器。
存储器602存储计算机指令和数据;存储器602存储的计算机指令和数据,用于实现由客户端101执行的步骤,和/或用于实现装置400。存储器602可以是以下存储介质的任一种或任一种组合:非易失性存储器(例如只读存储器(ROM)、固态硬盘(SSD)、硬盘(HDD)、光盘),易失性存储器。
通信接口603可以是以下器件的任一种或任一种组合:网络接口(例如以太网接口)、无线网卡等具有网络接入功能的器件。
通信接口603用于终端10与其它设备(例如服务器12和服务器13)进行数据通信。
图1用一条粗线表示总线604。总线604可以将处理器601与存储器602和通信接口603连接。这样,通过总线604,处理器601可以访问存储器602,还可以利用通信接口603与其它设备(例如终端)进行数据交互。
在本申请中,终端10执行存储器602中的计算机指令,使得终端10的客户端101执行本申请提供的实现数据一致性的方法中由客户端101实现的步骤,或者使得客户端101实施装置400。
可选地,图7示意性地提供本申请所述服务器的一种可能的基本硬件架构。例如,图7所示服务器700可以用于实现服务器12和服务器13。
参见图1,服务器700包括处理器701、存储器702、通信接口703和总线704。
服务器700中,处理器701的数量可以是一个或多个,图1仅示意了其中一个处理器701。可选地,处理器701,可以是中央处理器(central processing unit,CPU)。如果服务器700具有多个处理器701,多个处理器701的类型可以不同,或者可以相同。可选地,服务器700的多个处理器701还可以集成为多核处理器。
存储器702存储计算机指令和数据;存储器702存储的计算机指令和数据,用于实现节点(领导节点或者跟随节点或者候选节点)实现的步骤,和/或用于实现装置500。存储器702可以是以下存储介质的任一种或任一种组合:非易失性存储器(例如只读存储器(ROM)、固态硬盘(SSD)、硬盘(HDD)、光盘),易失性存储器。
通信接口703可以是以下器件的任一种或任一种组合:网络接口(例如以太网接口)、无线网卡等具有网络接入功能的器件。
通信接口703用于服务器700与其它设备(例如终端10)进行数据通信。
图1用一条粗线表示总线704。总线704可以将处理器701与存储器702和通信接口703连接。这样,通过总线704,处理器701可以访问存储器702,还可以利用通信接口703与其它设备(例如终端10)进行数据交互。
在本申请中,服务器700执行存储器702中的计算机指令,使得服务器700执行本申请提供的实现数据一致性的方法中由节点(领导节点或者跟随节点或者候选节点)实现的步骤,或者使得节点(领导节点或者跟随节点或者候选节点)实施装置500。
本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当终端10的处理器601执行该计算机指令时,该终端10实现上实现数据一致性的方法中由客户端101执行的步骤。
本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当服务器700的处理器701执行该计算机指令时,该服务器700实现上述实现数据一致性的方法中由节点(例如领导节点或者跟从节点或者候选节点)执行的步骤。
本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。终端10的处理器601可以从计算机可读存储介质读取该计算机指令,处理器601执行该计算机指令,使得该终端10实现上述实现数据一致性的方法中由该客户端101执行的步骤。
本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。服务器700的处理器701可以从计算机可读存储介质读取该计算机指令,处理器701执行该计算机指令,使得该服务器700实现上述实现数据一致性的方法中由节点(例如领导节点或者跟从节点或者候选节点)执行的步骤。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改;而这些修改,并不使相应技术方案脱离权利要求的保护范围。