基于分布式一致性协议实现的数据读写方法及装置转让专利

申请号 : CN201711485934.9

文献号 : CN108234641B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈宗志

申请人 : 北京奇元科技有限公司

摘要 :

本发明公开了一种基于分布式一致性协议实现的数据读写方法、装置、计算设备及计算机存储介质。其中所述方法包括:当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给第一客户端;当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对,根据比对结果响应数据读取请求,从而克服了现有技术中基于分布式一致性协议读取数据时,需要超过半数的服务节点达成一致而导致的读数据的开销大的问题。

权利要求 :

1.一种基于分布式一致性协议实现的数据读写方法,所述方法应用于包含多个服务节点的分布式系统中,所述方法包括:当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给所述第一客户端;

当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对;

若比对结果表明第一数据版本号高于第二数据版本号,对响应进行阻塞处理;

触发数据同步操作,从其它服务节点同步数据以及数据版本号;

将同步操作得到的数据返回给所述第二客户端,并根据同步操作得到的数据版本号更新所述第二数据版本号。

2.根据权利要求1所述的方法,其中,在对所述响应进行阻塞处理之前,所述方法还包括:判断所述数据读取请求是否为强一致性的数据读取请求;若否,则将服务节点存储的数据返回给所述第二客户端;

所述对响应进行阻塞处理具体为:若所述数据读取请求为强一致性的数据读取请求,则对所述响应进行阻塞处理。

3.根据权利要求1或2所述的方法,其中,所述触发数据同步操作,从其它服务节点同步数据以及数据版本号进一步包括:向其它服务节点分别发送数据版本号的同步请求;

从其它服务节点响应同步请求而返回的多个数据版本号中确定出最新的数据版本号;

从该最新的数据版本号对应的服务节点同步数据。

4.根据权利要求3所述的方法,其中,所述从该最新的数据版本号对应的服务节点同步数据进一步包括:将从该最新的数据版本号对应的服务节点获取的数据缓存至服务节点的缓存器中,而后将数据由缓存器落盘至服务节点的本地存储器;

所述将同步操作得到的数据返回给所述第二客户端进一步包括:将所述缓存器中的数据返回给所述第二客户端。

5.根据权利要求1或2所述的方法,其中,所述方法还包括:若比对结果表明第一数据版本号低于第二数据版本号,则将服务节点存储的数据以及第二数据版本号返回给所述第二客户端,以供所述第二客户端将记录的数据版本号更新为第二数据版本号。

6.根据权利要求1或2所述的方法,其中,在根据同步操作得到的数据版本号更新所述第二数据版本号之后,所述方法还包括:若更新后的第二数据版本号高于第一数据版本号,则将更新后的第二数据版本号返回至所述第二客户端,以供所述第二客户端对记录的数据版本号进行更新。

7.一种基于分布式一致性协议实现的数据读写装置,所述装置应用于包含多个服务节点的分布式系统中,所述装置包括:写入处理模块,适于当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给所述第一客户端;

比对模块,适于当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对;

响应模块进一步包括:响应单元,适于若比对结果表明第一数据版本号高于第二数据版本号,对响应进行阻塞处理;

同步单元,适于触发数据同步操作,从其它服务节点同步数据以及数据版本号;

返回单元,适于将同步操作得到的数据返回给所述第二客户端;

更新单元,适于根据同步操作得到的数据版本号更新所述第二数据版本号。

8.根据权利要求7所述的装置,其中,所述装置还包括:判断模块,适于判断所述数据读取请求是否为强一致性的数据读取请求;

所述返回单元进一步适于:若判断出所述数据读取请求不是强一致性的数据读取请求,则将服务节点存储的数据返回给所述第二客户端;

所述响应单元具体适于:若所述数据读取请求为强一致性的数据读取请求,则对所述响应进行阻塞处理。

9.根据权利要求7或8所述的装置,其中,所述同步单元进一步适于:向其它服务节点分别发送数据版本号的同步请求;

从其它服务节点响应同步请求而返回的多个数据版本号中确定出最新的数据版本号;

从该最新的数据版本号对应的服务节点同步数据。

10.根据权利要求9所述的装置,其中,所述同步单元进一步适于:将从该最新的数据版本号对应的服务节点获取的数据缓存至服务节点的缓存器中,而后将数据由缓存器落盘至服务节点的本地存储器;

所述返回单元进一步适于:将所述缓存器中的数据返回给所述第二客户端。

11.根据权利要求7或8所述的装置,其中,所述响应模块进一步适于:若比对结果表明第一数据版本号低于第二数据版本号,则将服务节点存储的数据以及第二数据版本号返回给所述第二客户端,以供所述第二客户端将记录的数据版本号更新为第二数据版本号。

12.根据权利要求7或8所述的装置,其中,所述返回单元进一步适于:若更新后的第二数据版本号高于第一数据版本号,则将更新后的第二数据版本号返回至所述第二客户端,以供所述第二客户端对记录的数据版本号进行更新。

13.一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-6中任一项所述的基于分布式一致性协议实现的数据读写方法对应的操作。

14.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-6中任一项所述的基于分布式一致性协议实现的数据读写方法对应的操作。

说明书 :

基于分布式一致性协议实现的数据读写方法及装置

技术领域

[0001] 本发明涉及数据处理技术领域,具体涉及一种基于分布式一致性协议实现的数据读写方法、装置、计算设备及计算机存储介质。

背景技术

[0002] 一个完整的分布式系统是由很多处在不同位置的服务节点通过网络连接在一起形成的,海量的数据分布在整个网络系统的不同服务节点中。连接到该分布式系统的所有客户端都可以访问任意一个服务节点中的数据。
[0003] 现有的基于分布式一致协议的数据读取方法,要求每一次读取数据的操作都要遵循分布式一致协议(Raft协议),即,接收到数据读取请求的服务节点通过网络方式将请求发送给分布式系统的其它服务节点,分布式系统中的超半数的服务节点确认了数据读取请求对应的数据之后,才会将数据返回给客户端,而且还需要记录到服务节点日志,从而导致读取数据开销太大,影响读取性能。

发明内容

[0004] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的基于分布式一致性协议实现的数据读写方法、装置、计算设备及计算机存储介质。
[0005] 根据本发明的一个方面,提供了一种基于分布式一致性协议实现的数据读写方法,方法应用于包含多个服务节点的分布式系统中,方法包括:
[0006] 当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给第一客户端;
[0007] 当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对,根据比对结果响应数据读取请求。
[0008] 根据本发明的另一方面,提供了一种基于分布式一致性协议实现的数据读写装置,装置应用于包含多个服务节点的分布式系统中,装置包括:
[0009] 写入处理模块,适于当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给第一客户端;
[0010] 比对模块,适于当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对;
[0011] 响应模块,适于根据比对结果响应数据读取请求。
[0012] 根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;
[0013] 存储器用于存放至少一可执行指令,可执行指令使处理器执行上述基于分布式一致性协议实现的数据读写方法对应的操作。
[0014] 根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述基于分布式一致性协议实现的数据读写方法对应的操作。
[0015] 根据本发明提供的方案,当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给第一客户端;当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对,根据比对结果响应数据读取请求。基于本发明实施例提供的方案,根据数据版本号向第二客户端返回数据,克服了现有技术中基于分布式一致性协议读取数据时,需要超过半数的服务节点达成一致而导致的读数据的开销大的问题。
[0016] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

[0017] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0018] 图1示出了根据本发明一个实施例的基于分布式一致性协议实现的数据读写方法的流程示意图;
[0019] 图2示出了根据本发明另一个实施例的基于分布式一致性协议实现的数据读写方法的流程示意图;
[0020] 图3示出了根据本发明一个实施例的基于分布式一致性协议实现的数据读写装置的结构示意图;
[0021] 图4示出了根据本发明另一个实施例的基于分布式一致性协议实现的数据读写装置的结构示意图;
[0022] 图5示出了根据本发明一个实施例的一种计算设备的结构示意图。

具体实施方式

[0023] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0024] 图1示出了根据本发明一个实施例的基于分布式一致性协议实现的数据读写方法的流程示意图。该方法应用于包含多个服务节点的分布式系统中,如图1所示,该方法包括以下步骤:
[0025] 步骤S100,当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给第一客户端。
[0026] 第一客户端可以将数据写入至分布式系统中的任一服务节点,当任一服务节点接收到第一客户端发送的数据写入请求时,服务节点将执行数据写入操作,将数据写入请求中的数据写入至服务节点本地存储器,为了避免服务节点宕机导致数据丢失无法恢复的问题,一般情况下,待写入的数据还需要同步给分布式系统中的其它服务节点,基于分布式一致性协议,需要分布式系统中超过半数的服务节点都写入相应的数据,才能认为数据达到了写一致,例如,分布式系统中包括5个服务节点,则至少3个服务节点均写入了同一数据,才能认为写一致,这里仅是举例说明,不具有任何限定作用。
[0027] 数据版本号用于表明数据当前更新情况,数据版本号越高,表明数据越新。每一次执行数据写入操作,都需要对数据版本号进行更新,以方便在读取数据时根据数据版本号确定客户端所获知的数据与服务节点所存储的数据哪个更新。
[0028] 而且,在本发明实施例中,不论写入数据的数据量的大小,只要执行数据写入操作就需要更新服务节点记录的数据版本号,也就是说,即便仅写入一条数据,在本次数据写入操作执行结束后或执行数据写入操作前,都需要更新数据版本号。
[0029] 步骤S101,当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对,根据比对结果响应数据读取请求。
[0030] 第二客户端可以向服务节点发送数据读取请求,该数据读取请求中携带有第一数据版本号,其中,第一数据版本号是第二客户端所获知的最新数据对应的数据版本号。
[0031] 在获取到第一数据版本号后,需要将第一数据版本号与服务节点记录的第二数据版本号进行比对,通过比较数据版本号可以确定出第二客户端所获知的数据与服务节点存储的数据相比哪个更新,从而根据比对结果响应数据读取请求。
[0032] 根据本发明上述实施例提供的方法,当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给第一客户端;当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对,根据比对结果响应数据读取请求。基于本发明实施例提供的方案,根据数据版本号向第二客户端返回数据,提升了读取性能,克服了现有技术中基于分布式一致性协议读取数据时,需要超过半数的服务节点达成一致而导致的读数据的开销大的问题。
[0033] 图2示出了根据本发明另一个实施例的基于分布式一致性协议实现的数据读写方法的流程示意图。该方法应用于包含多个服务节点的分布式系统中,如图2所示,该方法包括以下步骤:
[0034] 步骤S200,当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给第一客户端。
[0035] 本发明实施例中的服务节点执行数据写入操作与现有技术中分布式系统中的服务节点执行数据写入操作的不同之处在于,需要根据数据写入操作不断地更新服务节点记录的数据版本号,以及将数据版本号返回给第一客户端。
[0036] 步骤S201,当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对。
[0037] 第二客户端可以向服务节点发送数据读取请求,该数据读取请求中携带有第一数据版本号,其中,第一数据版本号是第二客户端所获知的当前最新的数据版本号,该第一数据版本号是服务节点(该服务节点可能是现在与第二客户端建立有连接关系的服务节点,也可能是分布式系统中的其它服务节点)返回给第二客户端的。
[0038] 在获取到第一数据版本号后,需要将第一数据版本号与服务节点记录的第二数据版本号进行比对,通过比较数据版本号可以确定出第二客户端所获知的数据与服务节点存储的数据相比哪个更新,从而根据比对结果响应数据读取请求。
[0039] 步骤S202,若比对结果表明第一数据版本号高于第二数据版本号,则判断数据读取请求是否为强一致性的数据读取请求,若否,则执行步骤S203;若是,则执行步骤S204。
[0040] 若比对结果表明第一数据版本号高于第二数据版本号,则说明第二客户端所获知的数据较服务节点存储的数据更新,从而能够确定该服务节点所存储的数据并不是最新数据。
[0041] 因此,在向第二客户端返回数据之前,就需要确定第二客户端是否要求读取到最新的数据,即,需要判断数据读取请求是否为强一致性的数据读取请求,若数据读取请求不是强一致性的数据读取请求,则表明第二客户端并未要求一定读取到最新数据,则可以将服务节点本地存储器存储的数据返回给第二客户端;若数据读取请求是强一致性的数据读取请求,则表明第二客户端要求一定读取到最新数据,但此时服务节点并未存储最新数据,就需要对响应进行阻塞处理,即暂时不响应数据读取请求,对该数据读取请求不做数据返回处理操作。
[0042] 步骤S203,将服务节点存储的数据返回给第二客户端。
[0043] 在判断出数据读取请求不是强一致性的数据读取请求的情况下,可以认为第二客户端并未要求一定读取到最新的数据,因此,可以将服务节点本地存储的数据返回给第二客户端。
[0044] 步骤S204,对响应进行阻塞处理。
[0045] 在判断出数据读取请求是强一致性的数据读取请求的情况下,则可以认定第二客户端要求读取到最新数据,由于服务节点本身并未存储有最新的数据,暂时无法向第二客户端返回数据,需要从分布式系统中的其它服务节点同步数据之后再返回给第二客户端,因此,可以对响应进行阻塞处理。
[0046] 步骤S205,触发数据同步操作,从其它服务节点同步数据以及数据版本号。
[0047] 对响应进行阻塞处理之后,就需要触发数据同步操作,从其它服务节点同步数据以及数据版本号,以满足第二客户端读取最新数据的需求,具体地,可以向其它服务节点分别发送数据版本号的同步请求,其它服务节点响应该请求将各自记录的数据版本号返回给该服务节点,服务节点从其它服务节点响应同步请求而返回的多个数据版本号中确定出最新的数据版本号,例如,可以通过比较多个数据版本号的方式确定出最新的数据版本号,也可以是将返回的数量最多的数据版本号作为最新的数据版本号,然后,从该最新的数据版本号对应的服务节点同步数据。
[0048] 其中,可以通过sync同步方式从该最新的数据版本号对应的服务节点同步数据,具体地,可以先将从该最新的数据版本号对应的服务节点获取的数据缓存至服务节点的缓存器中,而后将数据由缓存器落盘至服务节点的本地存储器,这样在将同步操作得到的数据返回给第二客户端时,可以先将缓存器中的数据返回给第二客户端,提高了数据读取效率。
[0049] 步骤S206,将同步操作得到的数据返回给第二客户端,并根据同步操作得到的数据版本号更新第二数据版本号。
[0050] 在同步完数据后,可以将同步操作得到的数据返回给第二客户端,完成数据读取,此外,由于服务节点从其它服务节点同步了数据以及数据版本号,该服务节点存储的数据进行了更新,因此,需要对该服务节点记录的第二数据版本号进行更新,这里主要是依据同步操作得到的数据版本号来对第二数据版本号进行更新,这样,当第二客户端再次读取数据时,可以利用更新后的第二数据版本号与数据读取请求中携带的第一数据版本号进行比对,避免由于未对第二数据版本号进行更新,而用服务节点原来记录的第二数据版本号与第一数据版本号进行比对,导致比对结果一直都是第一数据版本号高于第二数据版本号,而对于强一致性的数据读取请求,就需要不断的同步数据,造成资源浪费,而且延长了数据读取时间。
[0051] 步骤S207,将第一数据版本号与更新后的第二数据版本号进行比对。
[0052] 在根据同步操作得到的数据版本号更新第二数据版本号之后,可以将第一数据版本号与更新后的第二数据版本号进行比对,以根据比对结果确定是否向第二客户端返回更新后的第二数据版本号,若更新后的第二数据版本号高于第一数据版本号,则可以将更新后的第二数据版本号返回至第二客户端;若更新后的第二数据版本号等于第一数据版本号,则无需将更新后的第二数据版本号返回至第二客户端。
[0053] 步骤S208,若更新后的第二数据版本号高于第一数据版本号,则将更新后的第二数据版本号返回至第二客户端,以供第二客户端对记录的数据版本号进行更新。
[0054] 若比对结果表明更新后的第二数据版本号高于第一数据版本号,则表明同步操作后服务节点存储的数据较第二客户端所获知的数据新,为了便于第二客户端后续读取数据,可以将更新后的第二数据版本号返回给第二客户端,供第二客户端对其所记录的数据版本号进行更新。
[0055] 步骤S209,若比对结果表明第一数据版本号低于第二数据版本号,则将服务节点存储的数据以及第二数据版本号返回给第二客户端,以供第二客户端将记录的数据版本号更新为第二数据版本号。
[0056] 若比对结果表明第一数据版本号低于第二数据版本号,则表明服务节点存储的数据较第二客户端所获知的数据新,而客户端可能一直未更新数据版本号,服务节点本地存储器所存储的能够满足第二客户端读取数据的需求,从而可以将服务节点存储的数据以及第二数据版本号返回给第二客户端,第二客户端在接收到服务节点返回的第二数据版本号之后,可以将记录的数据版本号更新为第二数据版本号,方便第二客户端后续读取数据。
[0057] 本发明实施例提供的基于分布式一致性协议实现的数据读取方法可以应用于如下场景:与第二客户端建立有连接关系的主服务节点突然宕机,分布式一致性协议(Raft协议)规定,在任意时间内有且只有一个主服务节点,且主服务节点存储有全部的数据,当主服务节点宕机后,就需要从其它服务节点中选取一个服务节点作为主服务节点,第二客户端连接至新的主服务节点,但可能存在新的主服务节点并没有存储最新的数据的情况,当第二客户端读取数据时,通过比对第一数据版本号和服务节点记录的第二数据版本号,根据比对结果响应数据读取请求。
[0058] 根据本发明上述实施例提供的方法,在写入数据时记录数据版本号,使得在读取数据时,通过将第一数据版本号与服务节点记录的第二数据版本号进行比对,以及确定数据读取请求是否为强一致性的数据读取请求,若第一数据版本号高于第二数据版本号,且确定数据读取请求为强一致性的数据读取请求,则通过从其它服务节点同步数据来获取最新数据;若确定数据读取请求不是为强一致性的数据读取请求,可以直接将服务节点的数据返回给第二客户端,减少了读数据开销,例如,减少了服务节点需要与分布式系统中的其它服务节点通信而造成的网络开销,以及需要将操作写入服务节点日志的开销,克服了现有技术中基于分布式一致性协议读取数据时,需要超过半数的服务节点达成一致而导致的读数据的开销大的问题。
[0059] 图3示出了根据本发明一个实施例的基于分布式一致性协议实现的数据读写装置的结构示意图。该装置应用于包含多个服务节点的分布式系统中,如图3所示,该装置包括:写入处理模块300、比对模块310、响应模块320。
[0060] 写入处理模块300,适于当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给第一客户端。
[0061] 比对模块310,适于当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对;
[0062] 响应模块320,适于根据比对结果响应数据读取请求。
[0063] 根据本发明上述实施例提供的装置,当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给第一客户端;当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对,根据比对结果响应数据读取请求。基于本发明实施例提供的方案,根据数据版本号向第二客户端返回数据,克服了现有技术中基于分布式一致性协议读取数据时,需要超过半数的服务节点达成一致而导致的读数据的开销大的问题。
[0064] 图4示出了根据本发明另一个实施例的基于分布式一致性协议实现的数据读写装置的结构示意图。该装置应用于包含多个服务节点的分布式系统中,如图4所示,该装置400包括:写入处理模块400、比对模块410、判断模块420、响应模块430。
[0065] 写入处理模块400,适于当任一服务节点接收到第一客户端发送的数据写入请求时,执行数据写入操作并更新服务节点记录的数据版本号,将待写入的数据同步给其它服务节点,并将数据版本号返回给第一客户端;
[0066] 比对模块410,适于当任一服务节点接收到第二客户端发送的携带第一数据版本号的数据读取请求时,将第一数据版本号与服务节点记录的第二数据版本号进行比对。
[0067] 判断模块420,适于若比对结果表明第一数据版本号高于第二数据版本号,则判断数据读取请求是否为强一致性的数据读取请求。
[0068] 响应模块430进一步包括:响应单元431,适于若数据读取请求为强一致性的数据读取请求,则对响应进行阻塞处理。
[0069] 同步单元432,适于触发数据同步操作,从其它服务节点同步数据以及数据版本号。
[0070] 返回单元433,适于将同步操作得到的数据返回给第二客户端;
[0071] 更新单元434,适于根据同步操作得到的数据版本号更新第二数据版本号。
[0072] 返回单元433进一步适于:若更新后的第二数据版本号高于第一数据版本号,则将更新后的第二数据版本号返回至第二客户端,以供第二客户端对记录的数据版本号进行更新。
[0073] 返回单元433进一步适于:若判断出数据读取请求不是强一致性的数据读取请求,则将服务节点存储的数据返回给第二客户端。
[0074] 在本发明一种可选实施方式中,同步单元432进一步适于:向其它服务节点分别发送数据版本号的同步请求;从其它服务节点响应同步请求而返回的多个数据版本号中确定出最新的数据版本号;从该最新的数据版本号对应的服务节点同步数据。
[0075] 其中,同步单元432进一步适于:将从该最新的数据版本号对应的服务节点获取的数据缓存至服务节点的缓存器中,而后将数据由缓存器落盘至服务节点的本地存储器;
[0076] 返回单元433进一步适于:将缓存器中的数据返回给第二客户端。
[0077] 此外,响应模块430进一步适于:若比对结果表明第一数据版本号低于第二数据版本号,则将服务节点存储的数据以及第二数据版本号返回给第二客户端,以供第二客户端将记录的数据版本号更新为第二数据版本号。
[0078] 根据本发明上述实施例提供的装置,在写入数据时记录数据版本号,使得在读取数据时,通过将第一数据版本号与服务节点记录的第二数据版本号进行比对,以及确定数据读取请求是否为强一致性的数据读取请求,若第一数据版本号高于第二数据版本号,且确定数据读取请求为强一致性的数据读取请求,则通过从其它服务节点同步数据来获取最新数据;若确定数据读取请求不是为强一致性的数据读取请求,可以直接将服务节点的数据返回给第二客户端,减少了读数据开销,例如,减少了服务节点需要与分布式系统中的其它服务节点通信而造成的网络开销,以及需要将操作写入服务节点日志的开销,克服了现有技术中基于分布式一致性协议读取数据时,需要超过半数的服务节点达成一致而导致的读数据的开销大的问题。
[0079] 本申请还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的基于分布式一致性协议实现的数据读写方法。
[0080] 图5示出了根据本发明一个实施例的一种计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
[0081] 如图5所示,该计算设备可以包括:处理器(processor)502、通信接口(Communications Interface)504、存储器(memory)506、以及通信总线508。
[0082] 其中:
[0083] 处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。
[0084] 通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。
[0085] 处理器502,用于执行程序510,具体可以执行上述基于分布式一致性协议实现的数据读写方法实施例中的相关步骤。
[0086] 具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
[0087] 处理器502可能是中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
[0088] 存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
[0089] 程序510具体可以用于使得处理器502执行上述任意方法实施例中的基于分布式一致性协议实现的数据读写方法。程序510中各步骤的具体实现可以参见上述基于分布式一致性协议实现的数据读写实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
[0090] 在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0091] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0092] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0093] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0094] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0095] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的基于分布式一致性协议实现的数据读写设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0096] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。