本发明涉及数据处理技术领域,特别是涉及一种数据并发写入方法及分布式数据并发写入系统。
背景技术:
分布式文件存储系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。分布式文件存储系统把大量数据分散到不同的节点上存储,大大减小了数据丢失的风险。
现有客户端执行一次数据写入的方法为:客户端向控制节点发送针对目标数据的写入请求;控制节点接收并校验写入请求,当校验成功时,向客户端返回待写入数据对应的存储节点的地址信息;客户端接收地址信息,向待写入数据对应的存储节点发送包含待写入数据的数据写入请求;存储节点接收并执行数据写入请求对应的写操作,之后向客户端返回包含写入成功或写入失败的写入结果信息;客户端接收存储节点返回的写入结果信息,并将写入结果信息发送给控制节点;控制节点判断写入结果为写入成功时,更新目标数据对应的元数据信息。
实际应用中,为保证数据的可靠性,一般文件数据会保存多个副本。然而,使用上述数据写入方法对数据进行写入,当存在多个客户端对同一目标数据执行写操作时,由于网络延时及各副本所在的存储节点实际业务情况的不同,可能会导致目标数据对应的多个副本中的数据不一致的情况,例如,客户端a和客户端b同时对同一目标数据执行写操作,针对目标数据的副本1客户端a先执行写操作,客户端b后执行写操作,针对目标数据的副本2客户端b先执行写操作,客户端a后执行写操作,导致同一目标数据的副本1和副本2中的数据不一致,进而影响数据的可靠性,使得分布式文件存储系统中,针对同一文件只容许串行写,不容许并发写。
技术实现要素:
本发明实施例的目的在于提供一种数据并发写入方法及分布式数据并发写入系统,用以解决多个客户端对同一文件执行写入操作时导致的数据不一致,影响数据可靠性的问题。具体技术方案如下:
第一方面,本发明实施例提供了一种数据并发写入方法,应用于分布式文件存储系统中的控制节点,所述分布式文件存储系统包括:控制节点和存储节点,所述方法包括:
对客户端发送的针对目标数据的第一写入请求进行校验,并生成所述第一写入请求对应的版本号,得到第一版本号,所述第一版本号随所述目标数据数据写入次数的增加而增加,所述第一写入请求对应相应的待写入数据;
当对所述第一写入请求校验成功时,为所述待写入数据选取预设数量个存储节点,得到预设数量个存储节点对应的地址信息;
将所述预设数量个存储节点对应的地址信息以及所述第一版本号,发送给所述客户端,以使所述客户端将第二写入请求发送给所述预设数量个存储节点,所述预设数量个存储节点分别根据所述第二写入请求执行对应的写操作,并将写入结果信息返回给所述客户端;其中,所述第二写入请求中包含所述待写入数据以及所述第一版本号;
基于所述客户端返回的所述写入结果信息,对所述目标数据对应的元数据信息进行更新;其中,所述目标数据对应的元数据信息包括所述目标数据的大小,所述目标数据所写入的存储节点的信息。
可选的,所述生成所述第一写入请求对应的版本号,得到第一版本号的步骤,包括:
生成高于历史最近一次针对所述目标数据的第一写入请求对应版本号的第一版本号。
可选的,所述为所述待写入数据选取预设数量个存储节点的步骤,包括:
根据所述第一写入请求对应相应的待写入数据的大小,以及各存储节点的剩余空间大小,为所述待写入数据选取预设数量个存储节点。
可选的,所述方法还包括:
接收存储节点发送的自身状态信息,所述存储节点的自身状态信息包括:所述存储节点的节点状态,以及所述存储节点的剩余空间大小。
第二方面,本发明实施例提供了一种数据并发写入方法,应用于分布式文件存储系统中的存储节点,所述分布式文件存储系统包括:控制节点和存储节点,所述方法包括:
接收客户端发送的第二写入请求,所述第二写入请求中包含针对目标数据的第一写入请求对应的第一版本号,其中,所述第一版本号随目标数据数据写入次数的增加而增加;
判断所述第一版本号是否高于所述目标数据的本地版本号,所述目标数据的本地版本号为所述目标数据在本地最后一次数据写入时对应第二写入请求中携带的版本号;
如果所述第一版本号高于所述目标数据的本地版本号,则执行所述第二写入请求对应的写操作,并将表示写成功的写入结果信息返回给所述客户端,以使所述客户端将所述写入结果信息发送给控制节点,所述控制节点对所述目标数据对应的元数据信息进行更新。
可选的,所述方法还包括:
如果所述第一版本号不高于所述目标数据的本地版本号,则拒绝所述第二写入请求对应的写操作,并将表示写失败的写入结果信息返回给所述客户端,以使所述客户端将所述写入结果信息发送给控制节点。
可选的,所述第二写入请求中还包含针对目标数据的第一写入请求对应的待写入数据;所述执行所述第二写入请求对应的写操作的步骤,包括:
使用所述待写入数据,更新所述目标数据的本地数据;
使用所述第一版本号,更新所述目标数据的本地版本号。
可选的,所述方法还包括:
向所述控制节点发送自身的状态信息,所述自身的状态信息包括:所述节点状态以及剩余空间大小。
第三方面,本发明实施例提供了一种分布式数据并发写入系统,所述分布式数据并发写入系统包括:控制节点和存储节点;
所述控制节点,用于对客户端发送的针对目标数据的第一写入请求进行校验,并生成所述第一写入请求对应的第一版本号,所述第一写入请求对应相应的待写入数据,当对所述第一写入请求校验成功时,为所述待写入数据选取预设数量个存储节点,得到预设数量个存储节点对应的地址信息,将所述预设数量个存储节点对应的地址信息以及所述第一版本号,发送给所述客户端,并基于所述客户端返回的写入结果信息,对所述目标数据对应的元数据信息进行更新;其中,所述第一版本号随目标数据数据写入次数的增加而增加,所述目标数据对应的元数据信息包括所述目标数据的大小,所述目标数据所写入的存储节点的信息;
所述存储节点,用于接收客户端发送的第二写入请求,判断所述第二写入请求中包含的第一版本号是否高于所述目标数据的本地版本号,在判断出所述第一版本号高于所述目标数据的本地版本号时,执行所述第二写入请求对应的写操作,并将表示写成功的写入结果信息返回给所述客户端;其中,所述第二写入请求中包含针对目标数据的第一写入请求对应的第一版本号以及待写入数据,所述目标数据的本地版本号为所述目标数据在本地最后一次数据写入时对应第二写入请求中携带的版本号。
可选的,所述系统还包括客户端;
所述客户端,用于向所述控制节点发送针对目标数据的第一写入请求,并接收所述控制节点返回的预设数量个存储节点对应的地址信息,和所述第一版本号;以及将第二写入请求发送给预设数量个存储节点,接收所述预设数量个存储节点返回的写入结果信息,并将所述写入结果信息发送给所述控制节点。
可选的,所述控制节点,具体用于:
生成高于历史最近一次针对所述目标数据的第一写入请求对应版本号的第一版本号。
可选的,所述存储节点,还用于:
在判断出所述第一版本号不高于所述目标数据的本地版本号时,拒绝所述第二写入请求对应的写操作,并将表示写失败的写入结果信息返回给所述客户端。
可选的,所述存储节点,具体用于:
使用所述待写入数据,更新所述目标数据的本地数据;
使用所述第一版本号,更新所述目标数据的本地版本号。
可选的,所述存储节点,还用于:
向所述控制节点发送自身的状态信息,所述自身的状态信息包括:所述节点状态以及剩余空间大小。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的一种数据并发写入方法的方法步骤。
第五方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第二方面所述的一种数据并发写入方法的方法步骤。
本发明实施例有益效果:
本发明实施例提供的一种数据并发写入方法及分布式数据并发写入系统,由于控制节点能够为客户端发送的针对目标数据的第一写入请求生成对应的第一版本号,该第一版本号随目标数据数据写入次数的增加而增加,即针对同一目标数据版本号是唯一且递增的,使得存储节点在接收到第二写入请求时,可以根据第一版本号确定是否执行本次数据写入操作,保证了多个客户端对同一目标数据并发写时,多个副本文件数据的一致性,解决了多个客户端对同一目标数据并发写时,导致的多个副本文件数据不一致问题,提高了数据的可靠性。进一步,实现了在分布式文件存储系统中,能够容许多个客户端对同一目标数据并发写。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
图1为本发明实施例提供的一种数据并发写入方法的流程示意图;
图2为本发明实施例提供的另一种数据并发写入方法的流程示意图;
图3为本发明实施例提供的再一种数据并发写入方法的流程示意图;
图4为本发明实施例提供的一种数据写入实施方式流程示意图;
图5为本发明实施例提供的一种数据并发写入方法的交互示意图;
图6为本发明实施例提供的一种数据并发写入系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
分布式文件存储系统具有冗余性,部分节点的故障并不影响整体的正常运行,而且即使出现故障的计算机存储的数据已经损坏,也可以由其它节点将损坏的数据恢复出来。典型的分布式文件存储系统,一般由控制节点(或称元数据服务器)与存储节点(或称数据服务器)组成。控制节点的作用主要有:管理目录树,管理客户端(或称用户)上传的文件的元数据信息(例如文件目录、文件名、文件的上传时间、文件的大小、文件数据分布在哪些存储节点上等),管理分布式文件存储系统中所有的存储节点。存储节点的作用主要有:存储客户端上传的文件数据。
为了解决现有当存在多个客户端对同一目标数据执行写操作时,可能会导致目标数据对应的多个副本中的数据不一致的问题,本发明实施例提供了一种数据并发写入方法,应用于分布式文件存储系统中的控制节点,该分布式文件存储系统包括:控制节点和存储节点,该方法可以包括:
对客户端发送的针对目标数据的第一写入请求进行校验,并生成所述第一写入请求对应的版本号,得到第一版本号,所述第一版本号随所述目标数据数据写入次数的增加而增加,所述第一写入请求对应相应的待写入数据;
当对所述第一写入请求校验成功时,为所述待写入数据选取预设数量个存储节点,得到预设数量个存储节点对应的地址信息;
将所述预设数量个存储节点对应的地址信息以及所述第一版本号,发送给所述客户端,以使所述客户端将第二写入请求发送给所述预设数量个存储节点,所述预设数量个存储节点分别根据所述第二写入请求执行对应的写操作,并将写入结果信息返回给所述客户端;其中,所述第二写入请求中包含所述待写入数据以及所述第一版本号;
基于所述客户端返回的所述写入结果信息,对所述目标数据对应的元数据信息进行更新;其中,所述目标数据对应的元数据信息包括所述目标数据的大小,所述目标数据所写入的存储节点的信息。
本发明实施例提供的一种数据并发写入方法,由于控制节点能够为客户端发送的针对目标数据的第一写入请求生成对应的第一版本号,该第一版本号随目标数据数据写入次数的增加而增加,即针对同一目标数据版本号是唯一且递增的,使得存储节点在接收到第二写入请求时,可以根据第一版本号确定是否执行本次数据写入操作,保证了多个客户端对同一目标数据并发写时,多个副本文件数据的一致性,解决了多个客户端对同一目标数据并发写时,导致的多个副本文件数据不一致问题,提高了数据的可靠性。进一步,实现了在分布式文件存储系统中,能够容许多个客户端对同一目标数据并发写。
下面对本发明实施例提供的一种数据并发写入方法进行详细介绍:
本发明实施例中,数据并发写入方法应用于分布式文件存储系统,在该分布式文件存储系统中可以包含控制节点和多个存储节点。示例性的,控制节点和多个存储节点可以是分别布置于不同服务器上的数据存储模块等。
如图1所示,本发明实施例提供了一种数据并发写入方法,应用于分布式文件存储系统中的控制节点,该方法可以包括以下步骤:
s101,对客户端发送的针对目标数据的第一写入请求进行校验,并生成第一写入请求对应的版本号,得到第一版本号。
第一写入请求可以为任一客户端发送的针对目标数据的写入请求,本发明实施例中,可以存在多个客户端同时针对目标数据进行并发写入操作;控制节点可以对接收到的一个或多个客户端发送的针对同一目标数据的写入请求进行校验,同时为写入请求生成对应的版本号,得到第一写入请求对应的第一版本号。
其中,第一版本号随目标数据数据写入次数的增加而增加,第一写入请求对应有相应的待写入数据。示例性的,当控制节点接收到对目标数据的第三次写入请求时,生成对应的版本号可以表示为v3,当控制节点接收到对目标数据的第五次写入请求时,生成对应的版本号可以表示为v5等等。
本发明实施例中,对于同一目标数据,数据写入对应的版本号是唯一的,并严格递增,使得每次针对同一目标数据进行写操作时,该目标数据对应的版本号随着增加,避免了多个客户端对同一目标数据并发写时,目标数据发生数据错乱的问题。
作为本发明实施例一种可选的实施方式,客户端发送的针对目标数据的第一写入请求中可以包含:客户端的标识,针对目标数据的第一写入请求对应相应的待写入数据数据量的大小等信息,进而,控制节点对客户端发送的针对目标数据的第一写入请求进行校验,可以是对客户端的权限进行校验。例如,当接收到客户端发送的针对目标数据的第一写入请求时,可以判断该客户端是否有权限执行针对目标数据的写操作等。控制节点对客户端发送的针对目标数据的第一写入请求进行校验,还可以是对第一写入请求对应相应的待写入数据的数据量进行校验等。
作为本发明实施例一种可选的实施方式,生成第一写入请求对应的版本号,得到第一版本号的步骤,可以包括:
生成高于历史最近一次针对目标数据的第一写入请求对应版本号的第一版本号。
本发明实施例中,控制节点接收客户端发送的针对目标数据的第一写入请求,可以为该第一写入请求生成高于历史最近一次针对目标数据的第一写入请求对应版本号的第一版本号,使得对于同一目标数据,数据写入对应的版本号是唯一的,并严格递增。
s102,当对第一写入请求校验成功时,为待写入数据选取预设数量个存储节点,得到预设数量个存储节点对应的地址信息。
本发明实施例,控制节点中可以存储有不同文件的管理目录树,文件的元数据信息以及存储节点信息等,该元数据信息可以包含:文件目录、文件名、文件的上传时间、文件的大小、文件数据分布在哪些存储节点上等,存储节点信息可以包含存储节点的剩余空间大小,或存储节点的剩余空间可利用率等。
在控制节点对第一写入请求校验成功时,可以为针对目标数据的待写入数据选取预设数量个存储节点,得到预设数量个存储节点对应的地址信息。该预设数量本领域技术人员可以根据实际需求进行设置,示例性的,为保证数据的可靠性,可以设置预设数量为3个,那么,在客户端需要对目标数据进行写操作时,可以为待写入数据选取3个存储节点。
作为本发明实施例一种可选的实施方式,为待写入数据选取预设数量个存储节点的步骤,可以包括:
根据第一写入请求对应相应的待写入数据的大小,以及各存储节点的剩余空间大小,为待写入数据选取预设数量个存储节点。
本发明实施例,控制节点可以根据第一写入请求对应相应的待写入数据数据量的大小,以及各存储节点的剩余空间大小,对能够存储待写入数据的存储节点进行排序,得到存储节点序列,进而从该存储节点序列中选择预设数量个存储节点。
s103,将预设数量个存储节点对应的地址信息以及第一版本号,发送给客户端,以使客户端将第二写入请求发送给预设数量个存储节点,预设数量个存储节点分别根据第二写入请求执行对应的写操作,并将写入结果信息返回给客户端。
控制节点将预设数量个存储节点对应的地址信息以及第一版本号,发送给客户端,以使客户端将包含待写入数据以及第一版本号的第二写入请求发送给预设数量个存储节点,进而预设数量个存储节点分别根据第二写入请求执行对应的写操作,并将写入结果信息返回给客户端,客户端再将该写入结果信息转发给控制节点。
s104,基于客户端返回的写入结果信息,对目标数据对应的元数据信息进行更新。
控制节点接收到客户端返回的写入结果信息,判断该写入结果信息表示写入成功还是写入失败,如果该写入结果信息表示写入成功,则对目标数据对应的元数据信息进行更新,其中,目标数据对应的元数据信息包括目标数据的大小,以及目标数据所写入的存储节点的信息。如果该写入结果信息表示写入失败,则不对目标数据对应的元数据信息进行更新。
本发明实施例提供的一种数据并发写入方法,由于控制节点能够为客户端发送的针对目标数据的第一写入请求生成对应的第一版本号,该第一版本号随目标数据数据写入次数的增加而增加,即针对同一目标数据版本号是唯一且递增的,使得存储节点在接收到第二写入请求时,可以根据第一版本号确定是否执行本次数据写入操作,保证了多个客户端对同一目标数据并发写时,多个副本文件数据的一致性,解决了多个客户端对同一目标数据并发写时,导致的多个副本文件数据不一致问题,提高了数据的可靠性。进一步,实现了在分布式文件存储系统中,能够容许多个客户端对同一目标数据并发写。
作为本发明实施例一种可选的实施方式,控制节点还可以接收存储节点发送的自身状态信息,其中,存储节点的自身状态信息可以包括:存储节点的节点状态,以及存储节点的剩余空间大小。示例性的,存储节点的状态可以包含存储节点是否正常工作,数据写入的正常速度等信息,存储节点的剩余空间大小为存储节点当前还能够利用的空间的大小。
本发明实施例中,控制节点可以接收存储节点发送的自身状态信息,进而更新控制节点中所存储的存储节点的状态信息,以便于更准确的为待写入数据选取所要写入的存储节点。
如图2所示,本发明实施例提供了另一种数据并发写入方法,应用于分布式文件存储系统中的存储节点,该存储节点可以为控制节点为待写入数据选择的预设数量个存储节点中的一个,该方法可以包括以下步骤:
s201,接收客户端发送的第二写入请求。
其中,第二写入请求中可以包含针对目标数据的第一写入请求对应的第一版本号,该第一版本号随目标数据数据写入次数的增加而增加。
s202,判断第一版本号是否高于目标数据的本地版本号。
存储节点接收客户端发送的包含针对目标数据的第一写入请求对应的第一版本号的第二写入请求,进而判断第一版本号与目标数据的本地版本号之间的关系,目标数据的本地版本号可以为:目标数据在本地最后一次数据写入时对应第二写入请求中携带的版本号。如果判断出第一版本号高于目标数据的本地版本号,说明针对目标数据的第二写入请求为目标数据对应的最新一次数据写入请求,故而执行s203的步骤。
s203,如果第一版本号高于目标数据的本地版本号,则执行第二写入请求对应的写操作,并将表示写成功的写入结果信息返回给客户端,以使客户端将写入结果信息发送给控制节点,控制节点对目标数据对应的元数据信息进行更新。
如果判断出第一版本号高于目标数据的本地版本号,则执行第二写入请求对应的写操作,对本地目标数据进行更新,并将表示写成功的写入结果信息返回给客户端,以使客户端将写入结果信息发送给控制节点,控制节点对目标数据对应的元数据信息进行更新。
本发明实施例提供的一种数据并发写入方法,由于控制节点能够为客户端发送的针对目标数据的第一写入请求生成对应的第一版本号,该第一版本号随目标数据数据写入次数的增加而增加,即针对同一目标数据版本号是唯一且递增的,使得存储节点在接收到第二写入请求时,可以根据第一版本号确定是否执行本次数据写入操作,保证了多个客户端对同一目标数据并发写时,多个副本文件数据的一致性,解决了多个客户端对同一目标数据并发写时,导致的多个副本文件数据不一致问题,提高了数据的可靠性。进一步,实现了在分布式文件存储系统中,能够容许多个客户端对同一目标数据并发写。
在图2所示实施例的基础上,如图3所示,本发明实施例提供了再一种数据并发写入方法,应用于分布式文件存储系统中的存储节点,该方法可以包括以下步骤:
s301,接收客户端发送的第二写入请求。
其中,第二写入请求中可以包含针对目标数据的第一写入请求对应的第一版本号,该第一版本号随目标数据数据写入次数的增加而增加。
s302,判断第一版本号是否高于目标数据的本地版本号。
其中,目标数据的本地版本号可以为:目标数据在本地最后一次数据写入时对应第二写入请求中携带的版本号。
s303,如果第一版本号高于目标数据的本地版本号,则执行第二写入请求对应的写操作,并将表示写成功的写入结果信息返回给客户端,以使客户端将写入结果信息发送给控制节点,控制节点对目标数据对应的元数据信息进行更新。
其中,步骤s301-s303的实现过程可与步骤s201-s203相同,本发明实施例在此不再赘述。
s304,如果第一版本号不高于目标数据的本地版本号,则拒绝第二写入请求对应的写操作,并将表示写失败的写入结果信息返回给客户端,以使客户端将写入结果信息发送给控制节点。
如果判断出第一版本号不高于目标数据的本地版本号,说明本地存储的目标数据已是最新文件,则拒绝对该目标数据进行更新,进而拒绝第二写入请求对应的写操作,并将表示写失败的写入结果信息返回给客户端,以使客户端将写入结果信息发送给控制节点。
本发明实施例中,在判断出第一版本号不高于目标数据的本地版本号时,拒绝第二写入请求对应的写操作,保证了多个客户端对同一目标数据并发写时,多个副本文件数据的一致性,解决了多个客户端对同一目标数据并发写时,导致的多个副本文件数据不一致问题,提高了数据的可靠性。
作为本发明实施例一种可选的实施方式,如图4所示,存储节点接收的第二写入请求中还可以包含针对目标数据的第一写入请求对应的待写入数据,相应的,在判断出第一版本号高于目标数据的本地版本号时,执行第二写入请求对应的写操作的步骤,可以包括:
s3031,使用待写入数据,更新目标数据的本地数据。
s3032,使用第一版本号,更新目标数据的本地版本号。
存储节点在判断出第一版本号高于目标数据的本地版本号时,使用接收到的第二写入请求中包含的待写入数据,更新目标数据的本地数据,以及使用接收到的第二写入请求中包含的第一版本号,更新目标数据的本地版本号。即使用客户端针对目标数据的第一写入请求对应相应的待写入数据,以及控制节点为第一写入请求生成的第一版本号,覆盖本地存储的目标数据对应的本地数据以及本地版本号,对目标数据进行更新,完成第二写入请求对应的写操作。
作为本发明实施例一种可选的实施方式,存储节点还可以向控制节点发送自身的状态信息,其中,存储节点的自身状态信息可以包括:节点状态以及剩余空间大小。示例性的,节点的状态可以包含存储节点是否正常工作,数据写入的正常速度等信息,剩余空间大小为存储节点当前还能够利用的空间的大小。
本发明实施例中,存储节点可以定时或周期性的向控制节点发送自身的状态信息,以便于控制节点更新所存储的存储节点的状态信息,更准确的为待写入数据选取所要写入的存储节点。
示例性的,当存在两个客户端a和b同时针对目标数据进行并发写入操作时,控制节点接收到客户端a和客户端b发送的针对同一目标数据的第一写入请求,可以分别对客户端a和客户端b发送的写入请求进行校验,同时为客户端a的写入请求生成对应的版本号表示为v1,为客户端b的写入请求生成对应的版本号表示为v2,v2高于v1。当控制节点对客户端a和客户端b发送的写入请求均校验成功时,分别为客户端a和客户端b的写入请求对应的待写入数据选取3个存储节点c、d和e,并将存储节点c、d和e对应的地址信息以及版本号v1发送给客户端a,将存储节点c、d和e对应的地址信息以及版本号v2发送给客户端b。
客户端a接收控制节点返回的存储节点c、d和e对应的地址信息以及版本号v1,并分别向存储节点c、d和e发送第二写入请求,该第二写入请求中携带版本号v1以及对应的待写入数据。
客户端b接收控制节点返回的存储节点c、d和e对应的地址信息以及版本号v2,并分别向存储节点c、d和e发送第二写入请求,该第二写入请求中携带版本号v2以及对应的待写入数据。
以存储节点为c,目标数据的本地版本号为v0进行说明,存储节点c先接收到客户端a发送的第二写入请求,此时,判断第二写入请求携带的版本号v1高于本地版本号v0,将本地数据更新为客户端a发送的第二写入请求对应的待写入数据,将本地版本号v0更新为v1。存储节点c再接收到客户端b发送的第二写入请求,此时,判断第二写入请求携带的版本号v2高于本地版本号v1,将本地数据更新为客户端b发送的第二写入请求对应的待写入数据,将本地版本号v1更新为v2。
或者,存储节点c先接收到客户端b发送的第二写入请求,此时,判断第二写入请求携带的版本号v2高于本地版本号v0,将本地数据更新为客户端b发送的第二写入请求对应的待写入数据,将本地版本号v0更新为v2。存储节点c再接收到客户端a发送的第二写入请求,此时,判断第二写入请求携带的版本号v1不高于本地版本号v2,则不对本地数据进行更新,同时保持本地数据的本地版本号为v2。
存储节点d和e执行同样的操作,使得无论存储节点c、d和e是先接收到客户端a发送的第二写入请求,还是先接收到客户端b发送的第二写入请求,存储节点c、d和e中最终保存的数据对应的版本号都是v2,保证了多个客户端对同一目标数据并发写时,多个副本文件数据的一致性,解决了多个客户端对同一目标数据并发写时,导致的多个副本文件数据不一致问题,提高了数据的可靠性。
如图5所示,图5为本发明实施例提供的一种数据并发写入方法的交互示意图。
客户端向控制节点发送针对目标数据的第一写入请求。
控制节点对客户端发送的针对目标数据的第一写入请求进行校验,并生成第一写入请求对应的第一版本号,第一写入请求对应相应的待写入数据,当对第一写入请求校验成功时,为待写入数据选取预设数量个存储节点,得到预设数量个存储节点对应的地址信息,并将预设数量个存储节点对应的地址信息以及第一版本号,发送给客户端。
客户端接收控制节点发送的预设数量个存储节点对应的地址信息和第一版本号,以及将第二写入请求发送给预设数量个存储节点。
存储节点接收客户端发送的第二写入请求,判断第二写入请求中包含的第一版本号是否高于目标数据的本地版本号,并响应第二写入请求对应的写操作,向客户端返回写入结果信息。
客户端接收存储节点返回的写入结果信息,并将写入结果信息返回给控制节点。
控制节点基于客户端返回的写入结果信息,对目标数据对应的元数据信息进行更新。
相应于上述方法实施例,本发明实施例还提供了相应的系统实施例。
如图6所示,本发明实施例提供了一种分布式数据并发写入系统,分布式数据并发写入系统包括:控制节点和存储节点;
控制节点401,用于对客户端402发送的针对目标数据的第一写入请求进行校验,并生成第一写入请求对应的第一版本号,第一写入请求对应相应的待写入数据,当对第一写入请求校验成功时,为待写入数据选取预设数量个存储节点403,得到预设数量个存储节点对应的地址信息,将预设数量个存储节点对应的地址信息以及第一版本号,发送给客户端402,并基于客户端402返回的写入结果信息,对目标数据对应的元数据信息进行更新;其中,第一版本号随目标数据数据写入次数的增加而增加,目标数据对应的元数据信息包括目标数据的大小,目标数据所写入的存储节点的信息。
存储节点403,用于接收客户端402发送的第二写入请求,判断第二写入请求中包含的第一版本号是否高于目标数据的本地版本号,在判断出第一版本号高于目标数据的本地版本号时,执行第二写入请求对应的写操作,并将表示写成功的写入结果信息返回给客户端402;其中,第二写入请求中包含针对目标数据的第一写入请求对应的第一版本号以及待写入数据,目标数据的本地版本号为目标数据在本地最后一次数据写入时对应第二写入请求中携带的版本号。
本发明实施例提供的一种分布式数据并发写入系统,由于控制节点能够为客户端发送的针对目标数据的第一写入请求生成对应的第一版本号,该第一版本号随目标数据数据写入次数的增加而增加,即针对同一目标数据版本号是唯一且递增的,使得存储节点在接收到第二写入请求时,可以根据第一版本号确定是否执行本次数据写入操作,保证了多个客户端对同一目标数据并发写时,多个副本文件数据的一致性,解决了多个客户端对同一目标数据并发写时,导致的多个副本文件数据不一致问题,提高了数据的可靠性。进一步,实现了在分布式文件存储系统中,能够容许多个客户端对同一目标数据并发写。
可选的,系统还包括客户端402:
客户端402,用于向控制节点401发送针对目标数据的第一写入请求,并接收控制节点401返回的预设数量个存储节点对应的地址信息,和第一版本号;以及将第二写入请求发送给预设数量个存储节点403,接收预设数量个存储节点返回的写入结果信息,并将写入结果信息发送给控制节点401。
可选的,控制节点401,具体用于:
生成高于历史最近一次针对目标数据的第一写入请求对应版本号的第一版本号。
可选的,存储节点403,还用于:
在判断出第一版本号不高于目标数据的本地版本号时,拒绝第二写入请求对应的写操作,并将表示写失败的写入结果信息返回给客户端402。
可选的,存储节点403,具体用于:
使用待写入数据,更新目标数据的本地数据;
使用第一版本号,更新目标数据的本地版本号。
可选的,存储节点403,还用于:
向控制节点401发送自身的状态信息,自身的状态信息包括:节点状态以及剩余空间大小。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一一种数据并发写入方法的步骤,以达到相同的效果。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
1.一种数据并发写入方法,其特征在于,应用于分布式文件存储系统中的控制节点,所述分布式文件存储系统包括:控制节点和存储节点,所述方法包括:
对客户端发送的针对目标数据的第一写入请求进行校验,并生成所述第一写入请求对应的版本号,得到第一版本号,所述第一版本号随所述目标数据数据写入次数的增加而增加,所述第一写入请求对应相应的待写入数据;
当对所述第一写入请求校验成功时,为所述待写入数据选取预设数量个存储节点,得到预设数量个存储节点对应的地址信息;
将所述预设数量个存储节点对应的地址信息以及所述第一版本号,发送给所述客户端,以使所述客户端将第二写入请求发送给所述预设数量个存储节点,所述预设数量个存储节点分别根据所述第二写入请求执行对应的写操作,并将写入结果信息返回给所述客户端;其中,所述第二写入请求中包含所述待写入数据以及所述第一版本号;
基于所述客户端返回的所述写入结果信息,对所述目标数据对应的元数据信息进行更新;其中,所述目标数据对应的元数据信息包括所述目标数据的大小,所述目标数据所写入的存储节点的信息。
2.根据权利要求1所述的方法,其特征在于,所述生成所述第一写入请求对应的版本号,得到第一版本号的步骤,包括:
生成高于历史最近一次针对所述目标数据的第一写入请求对应版本号的第一版本号。
3.根据权利要求1或2任一所述的方法,其特征在于,所述为所述待写入数据选取预设数量个存储节点的步骤,包括:
根据所述第一写入请求对应相应的待写入数据的大小,以及各存储节点的剩余空间大小,为所述待写入数据选取预设数量个存储节点。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收存储节点发送的自身状态信息,所述存储节点的自身状态信息包括:所述存储节点的节点状态,以及所述存储节点的剩余空间大小。
5.一种数据并发写入方法,其特征在于,应用于分布式文件存储系统中的存储节点,所述分布式文件存储系统包括:控制节点和存储节点,所述方法包括:
接收客户端发送的第二写入请求,所述第二写入请求中包含针对目标数据的第一写入请求对应的第一版本号,其中,所述第一版本号随目标数据数据写入次数的增加而增加;
判断所述第一版本号是否高于所述目标数据的本地版本号,所述目标数据的本地版本号为所述目标数据在本地最后一次数据写入时对应第二写入请求中携带的版本号;
如果所述第一版本号高于所述目标数据的本地版本号,则执行所述第二写入请求对应的写操作,并将表示写成功的写入结果信息返回给所述客户端,以使所述客户端将所述写入结果信息发送给控制节点,所述控制节点对所述目标数据对应的元数据信息进行更新。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
如果所述第一版本号不高于所述目标数据的本地版本号,则拒绝所述第二写入请求对应的写操作,并将表示写失败的写入结果信息返回给所述客户端,以使所述客户端将所述写入结果信息发送给控制节点。
7.根据权利要求5或6任一所述的方法,其特征在于,所述第二写入请求中还包含针对目标数据的第一写入请求对应的待写入数据;所述执行所述第二写入请求对应的写操作的步骤,包括:
使用所述待写入数据,更新所述目标数据的本地数据;
使用所述第一版本号,更新所述目标数据的本地版本号。
8.根据权利要求5所述的方法,其特征在于,所述方法还包括:
向所述控制节点发送自身的状态信息,所述自身的状态信息包括:所述节点状态以及剩余空间大小。
9.一种分布式数据并发写入系统,其特征在于,所述分布式数据并发写入系统包括:控制节点和存储节点;
所述控制节点,用于对客户端发送的针对目标数据的第一写入请求进行校验,并生成所述第一写入请求对应的第一版本号,所述第一写入请求对应相应的待写入数据,当对所述第一写入请求校验成功时,为所述待写入数据选取预设数量个存储节点,得到预设数量个存储节点对应的地址信息,将所述预设数量个存储节点对应的地址信息以及所述第一版本号,发送给所述客户端,并基于所述客户端返回的写入结果信息,对所述目标数据对应的元数据信息进行更新;其中,所述第一版本号随目标数据数据写入次数的增加而增加,所述目标数据对应的元数据信息包括所述目标数据的大小,所述目标数据所写入的存储节点的信息;
所述存储节点,用于接收客户端发送的第二写入请求,判断所述第二写入请求中包含的第一版本号是否高于所述目标数据的本地版本号,在判断出所述第一版本号高于所述目标数据的本地版本号时,执行所述第二写入请求对应的写操作,并将表示写成功的写入结果信息返回给所述客户端;其中,所述第二写入请求中包含针对目标数据的第一写入请求对应的第一版本号以及待写入数据,所述目标数据的本地版本号为所述目标数据在本地最后一次数据写入时对应第二写入请求中携带的版本号。
10.根据权利要求9所述的系统,其特征在于,所述系统还包括客户端;
所述客户端,用于向所述控制节点发送针对目标数据的第一写入请求,并接收所述控制节点返回的预设数量个存储节点对应的地址信息,和所述第一版本号;以及将第二写入请求发送给预设数量个存储节点,接收所述预设数量个存储节点返回的写入结果信息,并将所述写入结果信息发送给所述控制节点。
11.根据权利要求9或10任一所述的系统,其特征在于,所述控制节点,具体用于:
生成高于历史最近一次针对所述目标数据的第一写入请求对应版本号的第一版本号。
12.根据权利要求9或10任一所述的系统,其特征在于,所述存储节点,还用于:
在判断出所述第一版本号不高于所述目标数据的本地版本号时,拒绝所述第二写入请求对应的写操作,并将表示写失败的写入结果信息返回给所述客户端。
13.根据权利要求9或10任一所述的系统,其特征在于,所述存储节点,具体用于:
使用所述待写入数据,更新所述目标数据的本地数据;
使用所述第一版本号,更新所述目标数据的本地版本号。
14.根据权利要求9或10任一所述的系统,其特征在于,所述存储节点,还用于:
向所述控制节点发送自身的状态信息,所述自身的状态信息包括:所述节点状态以及剩余空间大小。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-4任一所述的方法步骤。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求5-8任一所述的方法步骤。
技术总结