强一致性分布式数据存储方法、装置及系统的制作方法

文档序号:7816300阅读:273来源:国知局
强一致性分布式数据存储方法、装置及系统的制作方法
【专利摘要】本发明实施例提供一种强一致性分布式数据存储方法、装置及系统,方法包括:缓存服务器接收客户端发送的数据写请求,数据写请求中包括数据键值以及数据操作命令;缓存服务器由zookeeper服务器集群中获取与数据键值对应的自增序列号;缓存服务器计算自增序列号与缓存数据序列号之间的差值,判断差值是否大于预定阈值,如果否,则根据数据操作命令直接对与缓存数据进行处理,如果是,则向zookeeper服务器集群获取与数据键值对应的最新有效数据,并将缓存数据更新为最新有效数据,根据数据操作命令对最新有效数据进行处理;以及缓存服务器将处理后的数据写入zookeeper服务器集群。本发明能够在不影响Zookeeper写操作性能的情况下,提供强一致性缓存,保证数据写入的正确性。
【专利说明】强一致性分布式数据存储方法、装置及系统

【技术领域】
[0001]本发明涉及计算机互联网技术,尤其涉及一种强一致性分布式数据存储方法、装置及系统。

【背景技术】
[0002]Zookeeper是一种分布式的协调服务,为分布式应用程序提供各种服务,包括配置维护、名字服务(Name Service)、分布式同步、组服务等。
[0003]如图1所示,Zookeeper是一个由众多服务器节点组成的集群。在Zookeeper中,每一个节点都被称为Znode。Znode维护着节点用户数据、父节点和子节点集合以及本节点状态等。这些节点又分为主节点(leader节点)和从节点(follower节点)。Zookeeper会保证客户端(client)对Znode的操作是顺序一致性的。
[0004]在Zookeeper中,对数据的写操作,会由follower节点转给leader节点,然后由leader节点将请求广播给所有的follower节点,leader节点收到一半以上follower节点的确认(Ack)后,就会认为写操作成功了,leader节点会向所有follower节点发送commit信令,并通知客户端写操作成功。但是,在对数据进行读操作时,可以从任意一个节点读取,基于上述的写操作过程,可以看出,在Zookeeper中,并不能保证从每个follower节点读取的数据都是最新的有效数据,因此,Zookeeper对于读操作只提供最终一致性服务。
[0005]在基于Zookeeper的名字服务中,往往会涉及到append写操作,典型的append写操作可以由以下步骤组成:1.从存储里读取数据到本地,2.在本地对数据做append操作,3.将进行append操作后的数据从本地写回到存储中。在非强一致性分布式存储系统里,如果第I步中读取到数据不是最新的有效数据,则基于此结果进行append操作,很有可能导致写回到存储的数据是错误的,也就是说无法提供强一致性服务(强一致性,指的是任何时刻任何请求都可以从系统中获取到最近一次成功更新的数据或者读不到有效数据)。
[0006]对于强一致性的解决方案,业界都有一些存储系统可以提供。目前业界提供的强一致性系统,都是针对特定场景额外提供的存储系统,但是额外提供强一致性存储服务会导致系统架构很冗余。


【发明内容】

[0007]有鉴于此,本发明实施例提供一种基于Zook^per的强一致性分布式数据存储方法、装置及系统,可以保证写入数据的准确性。
[0008]本发明第一实施例提出一种强一致性分布式数据存储方法,包括:缓存服务器接收客户端发送的数据写请求,所述数据写请求中包括数据键值以及数据操作命令,所述缓存服务器中包括与所述数据键值对应的缓存数据以及对应的缓存数据序列号c_Seq ;所述缓存服务器由Zookeeper服务器集群中获取与所述数据键值对应的自增序列号new_Seq,所述自增序列号new_Seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号;所述缓存服务器计算所述自增序列号new_Seq与所述缓存数据序列号c_seq之间的差值new_seq_c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,则根据所述数据操作命令直接对与所述缓存数据进行处理,如果是,则向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理;以及所述缓存服务器将处理后的数据写入所述Zookeeper服务器集群。
[0009]本发明第二实施例还提出一种强一致性分布式数据存储方法,包括:客户端向缓存服务器发送数据写请求,所述数据写请求中包括数据键值以及数据操作命令;缓存服务器根据所述数据写请求向Zookeeper服务器集群发送第一获取请求,用于获取与所述数据键值对应的自增序列号new_Seq,所述缓存服务器中存储有与所述数据键值对应的缓存数据以及缓存数据序列号c_Seq ;所述Zookeeper服务器集群根据所述第一获取请求,向所述缓存服务器返回与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号;所述缓存服务器计算所述自增序列号new_seq与所述缓存数据序列号c_seq之间的差值new_seq-c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,则所述缓存服务器根据所述数据操作命令直接对与所述缓存数据进行处理,如果是,则所述缓存服务器向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理;以及所述缓存服务器将处理后的数据写入所述Zookeeper服务器集群。
[0010]本发明第三实施例提出一种强一致性分布式数据存储装置,运行于缓存服务器,所述装置包括:请求接收模块,用于接收客户端发送的数据写请求,所述数据写请求中包括数据键值以及数据操作命令;数据缓存模块,用于存储与所述数据键值对应的缓存数据以及对应的缓存数据序列号c_seq ;数据获取模块,用于由Zookeeper服务器集群中获取与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号;数据处理模块,用于计算所述自增序列号new_seq与所述缓存数据序列号c_seq之间的差值new_seq_c_seq,判断所述差值neW_Seq-C_Seq是否大于预定阈值,如果否,则根据所述数据操作命令直接对与所述缓存数据进行处理;所述数据获取模块还用于,如果所述差值neW_Seq-C_Seq大于预定阈值,向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据;所述数据处理模块还用于将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理;以及数据写入模块,用于将处理后的数据写入所述Zooke^er服务器集群。
[0011]本发明第四实施例提出一种强一致性分布式数据存储系统,所述系统可以包括客户端、缓存服务器以及Zookeeper服务器集群,所述客户端用于向所述缓存服务器发送数据写请求,所述数据写请求中包括数据键值以及数据操作命令;所述缓存服务器中存储有与所述数据键值对应的缓存数据以及缓存数据序列号c_Seq,所述缓存服务器用于,根据所述数据写请求向Zookeeper服务器集群发送第一获取请求,用于获取与所述数据键值对应的自增序列号new_seq ;所述Zookeeper服务器集群用于,根据所述第一获取请求,向所述缓存服务器返回与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号;所述缓存服务器还用于,计算所述自增序列号new_Seq与所述缓存数据序列号C_seq之间的差值new_seq_c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,则所述缓存服务器根据所述数据操作命令直接对与所述缓存数据进行处理,如果是,则所述缓存服务器向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理,并将处理后的数据写入所述Zookeeper服务器集群。强一致性分布式数据存储装置强一致性分布式数据存储装置
[0012]相对于现有技术,本发明各实施例提出的强一致性分布式数据存储方法、装置及系统,利用Zookeeper中与数据键值对应的序列号来判断缓存服务器中所缓存的数据是否为最新的数据,如果是,则可以直接对其进行处理,如果不是,则向Zookeeper服务器集群读取、更新数据,然后对更新后的数据进行处理后再写入Zooke^er服务器集群,借此,在保持Zookeeper写操作性能不变的情况下,利用序列号,提供强一致性缓存,保证数据写入的正确性。
[0013]为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。

【专利附图】

【附图说明】
[0014]图1为现有的Zookeeper的应用环境不意图。
[0015]图2为本发明实施例提供的强一致性分布式数据存储方法的应用环境图。
[0016]图3为本发明第一实施例提供的强一致性分布式数据存储方法的流程图。
[0017]图4为图3中部分流程的具体流程图。
[0018]图5为本发明第二实施例提供的强一致性分布式数据存储方法的流程图。
[0019]图6为图5中部分流程的具体流程图。
[0020]图7为本发明第二实施例中一个具体示例的时序图。
[0021]图8为本发明第三实施例提供的强一致性分布式数据存储装置的结构框图。
[0022]图9为本发明第四实施例提供的强一致性分布式数据存储装置的结构框图。

【具体实施方式】
[0023]为更进一步阐述本发明为实现预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明的【具体实施方式】、结构、特征及其功效,详细说明如后。
[0024]图2所示为本发明实施例提供的强一致性分布式数据存储方法的应用环境图,请参照图2,本发明提供的系统10可以包括客户端101、缓存服务器102、ZOOkeeper服务器集群 103。
[0025]Zookeeper服务器集群103在本系统10里为服务器配置信息提供存储服务。本系统10在Zookeeper服务器集群103的前端引入缓存服务器(cache svr) 102。缓存服务器102会监听客户端101向服务器端发出的请求,并保存服务器端的回应,例如数据、结果等。
[0026]客户端101写入数据时,缓存服务器102会接收客户端的数据写请求,每次进行数据写入前,缓存服务器102都会与Zook^per服务器集群103进行数据交互,从Zook^per服务器集群103读取、更新数据,结合客户端101的请求,更新本地缓存数据、处理数据,再将处理后的数据写回到Zookeeper服务器集群103。客户端101与缓存服务器102以及Zooke印er服务器集群103之间的网络通信是基于TCP协议,TCP保证了 Client/Server之间传输包的顺序,另外,Zookeeper服务器集群103执行客户端请求也是严格按照FIFO (first in first out)顺序的。
[0027]Zooke印er服务器集群103中,为了保证数据写入的顺序性,可以在每次写入数据前,针对每个数据键值(key-value),生成对应的序列号(seq N0.),该数据键值对应的数据每写入一次,序列号就会自增一次,生成自增序列号,由于生成序列号是写操作,写操作必须经过Zookeeper的leader节点,因此自增序列号必然是最新的。于本发明的实施例中,在数据还未写入时,先生成自增序列号new_seq,即先自增,生成的这个自增序列号new_seq对应于待写入的数据,这个自增序列号new_Seq之前的序列号对应于之前已写入的最新数据。
[0028]本发明的主要思路是利用Zookeeper中与数据键值对应的序列号来判断缓存服务器102中所缓存的数据是否为最新的数据,如果是,则可以直接对其进行处理,如果不是,则向Zookeeper服务器集群103读取、更新数据,然后对更新后的数据进行处理后再写入Zookeeper服务器集群103,借此,在保持Zookeeper写操作性能不变的情况下,利用序列号,提供强一致性缓存,保证数据写入的正确性。另外,本方案直接在Zooke印er服务器集群的前端引入缓存服务器,不需要额外提供存储系统,系统架构简单。
[0029]第一实施例
[0030]请参见图3,为本发明第一实施例提供的强一致性分布式数据存储方法的流程图;本实施例为缓存服务器所执行的强一致性分布式数据存储方法,包括以下步骤:
[0031]步骤S11,缓存服务器接收客户端发送的数据写请求,所述数据写请求中包括数据键值以及数据操作命令,所述缓存服务器中包括与所述数据键值对应的缓存数据以及对应的缓存数据序列号c_Seq。
[0032]步骤S12,所述缓存服务器由Zookeeper服务器集群中获取与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号。
[0033]步骤S13,所述缓存服务器计算所述自增序列号new_Seq与所述缓存数据序列号c_seq之间的差值new_seq_c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,则根据所述数据操作命令直接对与所述缓存数据进行处理,如果是,则向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理。
[0034]请参照图4,进一步的,所述向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理的步骤可以包括:
[0035]步骤S131,所述缓存服务器向所述Zookeeper服务器集群获取与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号z_seq ;
[0036]步骤S132,所述缓存服务器计算所述自增序列号new_Seq与所述最新数据序列号z_seq 之间的差值 new_seq-z_seq ;
[0037]步骤S133,判断所述差值new_seq_z_seq是否大于所述预定阈值,
[0038]步骤S134,如果否,则确定所述最新数据zk_data为最新有效数据,将所述缓存数据更新为所述最新数据zk_data,根据所述数据操作命令对所述最新数据zk_data进行处理;
[0039]步骤S135,如果是,则所述缓存服务器向所述Zooke印er服务器集群发送数据同步指令,以使所述Zookeeper服务器集群将与所述数据键值对应的数据同步为最新有效数据,所述缓存服务器向所述Zookeeper服务器集群获取同步后的最新有效数据,所述缓存服务器将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理。
[0040]步骤S14,所述缓存服务器将处理后的数据写入所述Zook^per服务器集群。
[0041]进一步的,Zooke印er服务器集群还可以向缓存服务器返回写入结果,缓存服务器可以向客户端返回操作结果。
[0042]本实施例提供的强一致性分布式数据存储方法,利用Zookeeper中与数据键值对应的序列号来判断缓存服务器中所缓存的数据是否为最新的数据,如果是,则可以直接对其进行处理,如果不是,则向Zookeeper服务器集群读取、更新数据,然后对更新后的数据进行处理后再写入Zooke^er服务器集群,借此,在保持Zooke^er写操作性能不变的情况下,利用序列号,提供强一致性缓存,保证数据写入的正确性。
[0043]第二实施例
[0044]图5为本发明第二实施例提供的强一致性分布式数据存储方法的流程图;本实施例为系统所执行的强一致性分布式数据存储方法,包括以下步骤:
[0045]步骤S21,客户端向缓存服务器发送数据写请求,所述数据写请求中包括数据键值以及数据操作命令。
[0046]步骤S22,缓存服务器根据所述数据写请求向Zook^per服务器集群发送第一获取请求,用于获取与所述数据键值对应的自增序列号new_Seq,所述缓存服务器中存储有与所述数据键值对应的缓存数据以及缓存数据序列号c_Seq。
[0047]步骤S23,所述Zookeeper服务器集群根据所述第一获取请求,向所述缓存服务器返回与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号。
[0048]步骤S24,所述缓存服务器计算所述自增序列号new_Seq与所述缓存数据序列号c_seq之间的差值new_seq_c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,则所述缓存服务器根据所述数据操作命令直接对与所述缓存数据进行处理,如果是,则所述缓存服务器向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理。
[0049]请参照图6,进一步的,所述缓存服务器向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理的步骤可以包括:
[0050]步骤S241,所述缓存服务器向所述Zooke印er服务器集群发送第二获取请求,用于获取与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号Z_seq ;
[0051]步骤S242,所述Zookeeper服务器集群返回与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号z_seq ;
[0052]步骤S243,所述缓存服务器计算所述自增序列号new_Seq与所述最新数据序列号z_seq 之间的差值 new_seq-z_seq ;
[0053]步骤S244,判断所述差值new_seq_z_seq是否大于所述预定阈值,
[0054]步骤S245,如果否,则所述缓存服务器确定所述最新数据zk_data为最新有效数据,将所述缓存数据更新为所述最新数据zk_data,根据所述数据操作命令对所述最新数据zk_data进行处理,
[0055]步骤S246,如果是,则所述缓存服务器向所述Zookeeper服务器集群发送数据同步指令,所述Zookeeper服务器集群根据所述数据同步信号将与所述数据键值对应的数据同步为最新有效数据,所述缓存服务器向所述Zook^per服务器集群发送第三获取请求,用于获取同步后的最新有效数据,所述Zookeeper服务器集群向所述缓存服务器返回所述最新有效数据,所述缓存服务器将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理。
[0056]步骤S25,所述缓存服务器将处理后的数据写入所述Zook^per服务器集群。
[0057]下面将结合图7,以客户端向缓存服务器发送数据Append写操作请求为例,对本发明进行更详细的说明。
[0058]请参照图7,当客户端向Cache服务器发送append写请求(append writerequest)时,缓存服务器会向Zookeeper服务器集群发送第一获取请求,第一获取请求中携带有append写请求中的数据键值key,第一获取请求向Zookeeper服务器集群获取与该数据键值key对应的自增序列号new_seq。当Cache服务器接收到Zookeeper服务器返回的自增序列号new_seq,会计算自增序列号new_seq与本地所存储的序列号c_seq之间的差值new_seq_c_seq,由于自增序列号new_seq对于每次操作都会在自增一次,因此,因此,new_seq-c_seq的结果可能是I或大于1,根据new_seq_c_seq的结果,可能会出现以下几种场景。
[0059]场景一:如果new_seq_c_seq = = I,说明cache服务器中所存储的对应于该数据键值key的数据c_data已经是最新有效数据,此时,cache服务器只要将本地序列号c_seq更新为new_seq,对本地缓存的数据c_data进行append操作,并将本地数据c_data更新为append操作后的数据,然后将append操作后得到的数据写回Zookeeper服务器集群即可。
[0060]场景二:如果new_seq_c_seq>l,说明cache服务器中所存储的对应于该数据键值key的数据c_data并不是最新有效数据,此时,cache服务器会向Zookeeper发送第二获取请求,获取与该数据键值key对应的最新数据zk_data以及对应的最新数据序列号z_seq0由于在Zookeeper中,并不能保证从每个节点读取的数据都是最新的有效数据,因此,当cache服务器接收到zk_data及z_seq时,还要进一步判断zk_data是否是最新的有效数据。也就是要判断new_seq_z_seq是否等于I。根据new_seq_z_seq的结果,可能会出现以下几种场景。
[0061]场景三:new_seq_c_seq>l,且new_seq_z_seq = = I,则说明从 Zookeeper 服务器集群读到的是最新有效数据,可以直接使用zk_data进行数据更新,将本地序列号c_Seq更新为new_seq,对Zookeeper服务器集群返回的数据zk_data进行append操作,并将本地数据c_data更新为对zk_data进行append操作后的数据,然后将append操作后得到的数据写回Zookeeper服务器集群。
[0062]场景四:如果new_seq_c_seq>l,且 new_seq_z_seq>l,则说明从 Zookeeper 服务器集群读到的并不是最新有效数据,此时需要使用sync接口让Zooke^er服务器集群中的follower节点从集群里更新到最新有效数据,再向Zookeeper服务器集群发送第三获取请求,获取同步后的最新有效数据zk_data’以及对应的序列号z_seq’。sync接口是zookeeper提供的java版本的接口。Cache服务器获取到最新的数据zk_data’后,为了代码级别的可靠性,还是会判断neW_Seq-Z_Seq’的差值是否为1,一般此时一定是I的。如果不为1,Cache服务器会记录异常并上报,同时返回客户端写入失败,且更新Z_Seq、c_Seq为new_seq的值。如果new_seq_z_seq’的差值为I, Cache服务器对Zookeeper服务器集群返回的数据zk_data’进行append操作,并将本地数据c_data更新为对zk_data’进行append操作后的数据,然后将append操作后得到的数据写回Zookeeper服务器集群。
[0063]由于从Zooke印er服务器集群读取到不一致数据并不是常态,只有少量场景需要强制sync数据,因此本发明实施例提出的技术方案在性能上与普通的基于Zookeeper做append写操作的性能相当,但是可以提供强一致性服务,保证关键数据的写入正确性。
[0064]本发明实施例还提供了一种计算机存储介质,所述计算机存储介质存储有程序,该程序执行包括图2至图7任一实施例所示方法的全部或部分步骤。
[0065]第三实施例
[0066]请参见图8,为本发明第三实施例提供的强一致性分布式数据存储装置的结构示意图;本实施例提供的装置可运行于缓存服务器,所述强一致性分布式数据存储装置30可以包括:请求接收模块31、数据缓存模块32、数据获取模块33、数据处理模块34、数据写入模块35、数据同步模块36。
[0067]其中,请求接收模块31,用于接收客户端发送的数据写请求,所述数据写请求中包括数据键值以及数据操作命令;
[0068]数据缓存模块32,用于存储与所述数据键值对应的缓存数据以及对应的缓存数据序列号c_seq ;
[0069]数据获取模块33,用于由Zookeeper服务器集群中获取与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号;
[0070]数据处理模块34,用于计算所述自增序列号new_Seq与所述缓存数据序列号c_seq之间的差值new_seq_c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,则根据所述数据操作命令直接对与所述缓存数据进行处理;
[0071]所述数据获取模块33还用于,如果所述差值new_seq_c_seq大于预定阈值,向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据;
[0072]所述数据处理模块34还用于将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理;以及
[0073]数据写入模块35,用于将处理后的数据写入所述Zooke^er服务器集群。
[0074]如果所述差值new_seq_c_seq大于预定阈值,所述数据获取模块33还用于向所述Zookeeper服务器集群获取与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号Z_seq ;所述数据处理模块34还用于计算所述自增序列号new_Seq与所述最新数据序列号z_seq之间的差值new_seq-z_seq,判断所述差值new_seq-z_seq是否大于所述预定阈值。
[0075]如果否,则确定所述最新数据zk_data为最新有效数据,将所述缓存数据更新为所述最新数据zk_data,根据所述数据操作命令对所述最新数据zk_data进行处理,数据同步模块36向所述Zookeeper服务器集群发送数据同步指令,以使所述Zookeeper服务器集群将与所述数据键值对应的数据同步为最新有效数据,所述数据获取模块33还用于向所述Zookeeper服务器集群获取同步后的最新有效数据,所述数据处理模块34还用于将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理。
[0076]优选的,所述预定阈值为I。
[0077]所述数据操作命令例如可以为append写操作命令,如果数据操作命令为append写操作命令,所述数据处理模块34还用于对所述最新有效数据进行append操作。
[0078]以上各模块可以是由软件代码实现,此时,上述的各模块可存储于缓存服务器的存储器内。以上各模块同样可以由硬件例如集成电路芯片实现。
[0079]本实施例对强一致性分布式数据存储装置30的各功能模块实现各自功能的具体过程,请参见上述图2至图7所示实施例中描述的具体内容,此处不再赘述。
[0080]本实施例提供的强一致性分布式数据存储装置,利用Zookeeper中与数据键值对应的序列号来判断本地所缓存的数据是否为最新的数据,如果是,则可以直接对其进行处理,如果不是,则向Zookeeper服务器集群读取、更新数据,然后对更新后的数据进行处理后再写入Zooke^er服务器集群,借此,在保持Zooke^er写操作性能不变的情况下,利用序列号,提供强一致性缓存,保证数据写入的正确性。
[0081]第四实施例
[0082]请参见图9,为本发明第四实施例提供的强一致性分布式数据存储系统的结构示意图;本实施例提供的系统40可以包括:客户端41、缓存服务器42以及Zooke印er服务器集群43。其中,
[0083]所述客户端41用于向所述缓存服务器42发送数据写请求,所述数据写请求中包括数据键值以及数据操作命令;
[0084]所述缓存服务器42中存储有与所述数据键值对应的缓存数据以及缓存数据序列号^叫,所述缓存服务器用于,根据所述数据写请求向Zooke印er服务器集群43发送第一获取请求,用于获取与所述数据键值对应的自增序列号new_Seq ;
[0085]所述Zookeeper服务器集群43用于,根据所述第一获取请求,向所述缓存服务器42返回与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群43针对所述数据写请求为所述数据键值创建的最新序列号;
[0086]所述缓存服务器42还用于,计算所述自增序列号new_Seq与所述缓存数据序列号c_seq之间的差值new_seq_c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,则所述缓存服务器42根据所述数据操作命令直接对与所述缓存数据进行处理,如果是,则所述缓存服务器42向所述Zookeeper服务器集群43获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理,并将处理后的数据写入所述Zookeeper服务器集群43。
[0087]进一步的,如果所述差值neW_Seq-C_Seq大于预定阈值,所述缓存服务器42还用于向所述Zookeeper服务器集群43发送第二获取请求,用于获取与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号z_seq ;所述Zookeeper服务器集群42还用于返回与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号Z_seq ;所述缓存服务器42还用于计算所述自增序列号new_Seq与所述最新数据序列号Z_seq之间的差值new_seq_z_seq,判断所述差值new_seq_z_seq是否大于所述预定阈值,如果否,贝Ij所述缓存服务器42确定所述最新数据zk_data为最新有效数据,将所述缓存数据更新为所述最新数据zk_data,根据所述数据操作命令对所述最新数据zk_data进行处理,如果是,则所述缓存服务器42还用于向所述Zookeeper服务器集群43发送数据同步指令,所述Zookeeper服务器集群42还根据所述数据同步信号将与所述数据键值对应的数据同步为最新有效数据,所述缓存服务器42还用于向所述Zookeeper服务器集群43发送第三获取请求,用于获取同步后的最新有效数据,所述Zookeeper服务器集群43还向所述缓存服务器42返回所述最新有效数据,所述缓存服务器42将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理。
[0088]优选的,所述预定阈值为I。
[0089]所述数据操作命令可以为append写操作命令,如果所述数据操作命令为append写操作命令,所述缓存服务器42还用于对所述最新有效数据进行append操作。
[0090]本实施例对强一致性分布式数据存储装置40的各功能模块实现各自功能的具体过程,请参见上述图2至图7所示实施例中描述的具体内容,此处不再赘述。
[0091]本实施例提供的强一致性分布式数据存储系统,利用Zookeeper中与数据键值对应的序列号来判断缓存服务器中所缓存的数据是否为最新的数据,如果是,则可以直接对其进行处理,如果不是,则向Zookeeper服务器集群读取、更新数据,然后对更新后的数据进行处理后再写入Zookeeper服务器集群,借此,在保持Zookeeper写操作性能不变的情况下,利用序列号,提供强一致性缓存,保证数据写入的正确性。另外,本方案直接在Zookeeper服务器集群的前端引入缓存服务器,不需要额外提供存储系统,系统架构简单。
[0092]需要说明的是,本发明实施例的系统中各设备的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,在此不赘述。
[0093]需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0094]需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0095]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0096] 以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
【权利要求】
1.一种强一致性分布式数据存储方法,其特征在于,包括: 缓存服务器接收客户端发送的数据写请求,所述数据写请求中包括数据键值以及数据操作命令,所述缓存服务器中包括与所述数据键值对应的缓存数据以及对应的缓存数据序列号c_seq ; 所述缓存服务器由Zookeeper服务器集群中获取与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号; 所述缓存服务器计算所述自增序列号new_Seq与所述缓存数据序列号C_seq之间的差值new_seq_c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,则根据所述数据操作命令直接对与所述缓存数据进行处理,如果是,则向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理;以及 所述缓存服务器将处理后的数据写入所述Zookeeper服务器集群。
2.如权利要求1所述的方法,其特征在于,所述向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理的步骤包括: 所述缓存服务器向所述Zookeeper服务器集群获取与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号z_seq ; 所述缓存服务器计算所述自增序列号new_Seq与所述最新数据序列号Z_seq之间的差值new_seq_z_seq,判断所述差值new_seq_z_seq是否大于所述预定阈值, 如果否,则确定所述最新数据zk_data为最新有效数据,将所述缓存数据更新为所述最新数据zk_data,根据所述数据操作命令对所述最新数据zk_data进行处理, 如果是,则所述缓存服务器向所述Zookeeper服务器集群发送数据同步指令,以使所述Zookeeper服务器集群将与所述数据键值对应的数据同步为最新有效数据,所述缓存服务器向所述Zookeeper服务器集群获取同步后的最新有效数据,所述缓存服务器将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理。
3.如权利要求1所述的方法,其特征在于,所述预定阈值为1。
4.如权利要求1或2所述的方法,其特征在于,所述数据操作命令为append写操作命令,所述对所述最新有效数据进行处理的步骤包括:对所述最新有效数据进行append操作。
5.一种强一致性分布式数据存储方法,其特征在于,包括: 客户端向缓存服务器发送数据写请求,所述数据写请求中包括数据键值以及数据操作命令; 缓存服务器根据所述数据写请求向Zookeeper服务器集群发送第一获取请求,用于获取与所述数据键值对应的自增序列号new_Seq,所述缓存服务器中存储有与所述数据键值对应的缓存数据以及缓存数据序列号c_Seq ; 所述Zookeeper服务器集群根据所述第一获取请求,向所述缓存服务器返回与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号; 所述缓存服务器计算所述自增序列号new_Seq与所述缓存数据序列号C_seq之间的差值new_seq_c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,则所述缓存服务器根据所述数据操作命令直接对与所述缓存数据进行处理,如果是,则所述缓存服务器向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理;以及 所述缓存服务器将处理后的数据写入所述Zookeeper服务器集群。
6.如权利要求5所述的方法,其特征在于,所述向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理的步骤包括: 所述缓存服务器向所述Zookeeper服务器集群发送第二获取请求,用于获取与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号z_seq ; 所述Zookeeper服务器集群返回与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号z_seq ; 所述缓存服务器计算所述自增序列号new_Seq与所述最新数据序列号Z_seq之间的差值new_seq_z_seq,判断所述差值new_seq_z_seq是否大于所述预定阈值, 如果否,则所述缓存服务器确定所述最新数据zk_data为最新有效数据,将所述缓存数据更新为所述最新数据zk_data,根据所述数据操作命令对所述最新数据zk_data进行处理, 如果是,则所述缓存服务器向所述Zookeeper服务器集群发送数据同步指令,所述Zookeeper服务器集群根据所述数据同步信号将与所述数据键值对应的数据同步为最新有效数据,所述缓存服务器向所述Zooke印er服务器集群发送第三获取请求,用于获取同步后的最新有效数据,所述Zookeeper服务器集群向所述缓存服务器返回所述最新有效数据,所述缓存服务器将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理。
7.如权利要求5所述的方法,其特征在于,所述预定阈值为1。
8.如权利要求5或6所述的方法,其特征在于,所述数据操作命令为append写操作命令,所述对所述最新有效数据进行处理的步骤,包括对所述最新有效数据进行append操作。
9.一种强一致性分布式数据存储装置,运行于缓存服务器,其特征在于,包括: 请求接收模块,用于接收客户端发送的数据写请求,所述数据写请求中包括数据键值以及数据操作命令; 数据缓存模块,用于存储与所述数据键值对应的缓存数据以及对应的缓存数据序列号c—seq ; 数据获取模块,用于由Zookeeper服务器集群中获取与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号; 数据处理模块,用于计算所述自增序列号new_Seq与所述缓存数据序列号C_seq之间的差值new_seq_c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,则根据所述数据操作命令直接对与所述缓存数据进行处理; 所述数据获取模块还用于,如果所述差值neW_seq-C_seq大于预定阈值,向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据; 所述数据处理模块还用于将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理;以及 数据写入模块,用于将处理后的数据写入所述Zookeeper服务器集群。
10.如权利要求9所述的装置,其特征在于,所述装置还包括数据同步模块,如果所述差值new_seq_c_seq大于预定阈值, 所述数据获取模块还用于,向所述Zookeeper服务器集群获取与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号z_seq ; 所述数据处理模块还用于,计算所述自增序列号new_Seq与所述最新数据序列号z_seq之间的差值new_seq_z_seq,判断所述差值new_seq_z_seq是否大于所述预定阈值,如果否,则确定所述最新数据zk_data为最新有效数据,将所述缓存数据更新为所述最新数据zk_data,根据所述数据操作命令对所述最新数据zk_data进行处理, 所述数据同步模块向所述Zookeeper服务器集群发送数据同步指令,以使所述Zookeeper服务器集群将与所述数据键值对应的数据同步为最新有效数据,所述数据获取模块还用于向所述Zooke印er服务器集群获取同步后的最新有效数据,所述数据处理模块还用于将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理。
11.一种强一致性分布式数据存储系统,其特征在于,所述系统包括客户端、缓存服务器以及Zookeeper服务器集群, 所述客户端用于向所述缓存服务器发送数据写请求,所述数据写请求中包括数据键值以及数据操作命令; 所述缓存服务器中存储有与所述数据键值对应的缓存数据以及缓存数据序列号(:_seq,所述缓存服务器用于,根据所述数据写请求向Zookeeper服务器集群发送第一获取请求,用于获取与所述数据键值对应的自增序列号new_Seq ; 所述Zookeeper服务器集群用于,根据所述第一获取请求,向所述缓存服务器返回与所述数据键值对应的自增序列号new_seq,所述自增序列号new_seq为所述Zookeeper服务器集群针对所述数据写请求为所述数据键值创建的最新序列号; 所述缓存服务器还用于,计算所述自增序列号new_Seq与所述缓存数据序列号C_seq之间的差值new_seq_c_seq,判断所述差值new_seq_c_seq是否大于预定阈值,如果否,贝1J所述缓存服务器根据所述数据操作命令直接对与所述缓存数据进行处理,如果是,则所述缓存服务器向所述Zookeeper服务器集群获取与所述数据键值对应的最新有效数据,并将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理,并将处理后的数据写入所述Zooke印er服务器集群。
12.如权利要求11所述的系统,其特征在于,如果所述差值new_seq_c_seq大于预定阈值, 所述缓存服务器还用于向所述Zookeeper服务器集群发送第二获取请求,用于获取与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号Z_seq ; 所述Zooke印er服务器集群还用于返回与所述数据键值对应的最新数据zk_data以及对应的最新数据序列号z_seq ; 所述缓存服务器还用于计算所述自增序列号new_Seq与所述最新数据序列号Z_seq之间的差值new_seq_z_seq,判断所述差值new_seq_z_seq是否大于所述预定阈值, 如果否,则所述缓存服务器确定所述最新数据zk_data为最新有效数据,将所述缓存数据更新为所述最新数据zk_data,根据所述数据操作命令对所述最新数据zk_data进行处理, 如果是,则所述缓存服务器还用于向所述Zookeeper服务器集群发送数据同步指令,所述Zookeeper服务器集群还根据所述数据同步信号将与所述数据键值对应的数据同步为最新有效数据,所述缓存服务器还用于向所述Zooke印er服务器集群发送第三获取请求,用于获取同步后的最新有效数据,所述Zookeeper服务器集群还向所述缓存服务器返回所述最新有效数据,所述缓存服务器将所述缓存数据更新为所述最新有效数据,根据所述数据操作命令对所述最新有效数据进行处理。
【文档编号】H04L29/08GK104283956SQ201410525002
【公开日】2015年1月14日 申请日期:2014年9月30日 优先权日:2014年9月30日
【发明者】张 浩, 佘晓彬 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1