本发明涉及分布式云存储领域,特别涉及一种基于cifs协议创建小文件的方法及系统。
背景技术:
在分布式云存储领域,云存储系统服务端一般带有元数据软件用来统一管理文件系统的元数据信息。随着文件数目和客户端的增多,服务端需要管理很多文件的状态、锁等信息,这会导致客户端创建文件时open调用返回慢,时延波动很大。为了解决这种问题,目前已经有了很大方式来解决海量文件的管理问题,比如创建元数据服务端集群等,但是由于分布式文件系统软件、硬件、网络比较复杂,open调用时延高的情况很难避免。
现有技术中,基于cifs协议的软件(例如,samba软件)通过调用lib库与后端的的分布式文件系统通信,并对外提供cifs协议,客户端(例如,windows客户端)通过cifs协议挂载导出的文件系统。由于此类基于cifs协议的软件均是单线程架构,如果后端的open接口时延波动很大,则会造成客户端创建文件很慢或者卡顿。
因此,如何解决创建文件时因为open调用时延较长导致后续的其他请求卡住的问题,提高基于cifs协议创建小文件的性能成为了当前需要解决的问题。
技术实现要素:
有鉴于此,本发明的目的在于提供一种基于cifs协议创建小文件的方法及系统,以解决创建文件时因为open调用时延较长导致后续的其他请求卡住的问题,提高基于cifs协议创建小文件的效率。其具体方案如下:
一种基于cifs协议创建小文件的方法,包括:
间断的逐个发送创建文件请求集中的创建文件请求至主线程;
利用所述主线程将与创建文件请求相应的open事件发送到子线程集中的空闲子线程,以使所述子线程集中接收open事件的子线程完成对open事件的处理,其中,空闲子线程为没有正在处理open事件的子线程。
可选的,所述间断的逐个发送创建文件请求集中的创建文件请求至主线程的过程,包括:
利用所述主线程发送的open处理判断结果,间断的逐个发送创建文件请求集中的创建文件请求至主线程,其中,所述open处理判断结果为所述主线程判断是否在预设时间内接收到子线程发送的open处理结果的判断结果。
可选的,所述利用所述主线程发送的open处理判断结果,间断的逐个发送创建文件请求集中的创建文件请求至主线程的过程,包括:
利用所述主线程发送的open处理判断超时结果,生成创建文件请求失败记录,利用所述创建文件请求失败记录,间断的逐个发送所述创建文件请求失败记录中的创建文件请求至所述主线程。
可选的,所述利用所述创建文件请求失败记录,间断的逐个发送所述创建文件请求失败记录中的创建文件请求至所述主线程的过程,包括:
利用所述创建文件请求失败记录,在所述创建文件请求集中的创建请求均发送过所述主线程后,间断的逐个发送创建文件请求失败记录中的创建文件请求至所述主线程。
可选的,所述利用所述创建文件请求失败记录,间断的逐个发送所述创建文件请求失败记录中的创建文件请求至所述主线程的过程,包括:
利用所述创建文件请求失败记录,在每发送预设阈值未发送过所述主线程的创建文件请求后,发送一个所述创建文件请求失败记录中的创建文件请求至所述主线程。
可选的,所述利用所述主线程将与创建文件请求相应的open事件发送到子线程集中的空闲子线程之前,还包括:
利用所述主线程判断与创建文件请求相应的open事件是否发送到子线程集中的空闲子线程;
如果已发送,则不再利用所述主线程向所述子线程集中的空闲子线程发送open事件。
一种基于cifs协议创建小文件的系统,包括:
创建请求发送模块,用于间断的逐个发送创建文件请求集中的创建文件请求至主线程;
open事件发送模块,用于利用所述主线程将与创建文件请求相应的open事件发送到子线程集中的空闲子线程,以使所述子线程集中接收open事件的子线程完成对open事件的处理,其中,空闲子线程为没有正在处理open事件的子线程。
可选的,所述创建请求发送模块,具体用于利用所述主线程发送的open处理判断结果,间断的逐个发送创建文件请求集中的创建文件请求至主线程,其中,所述open处理判断结果为所述主线程判断是否在预设时间内接收到子线程发送的open处理结果的判断结果。
可选的,所述创建请求发送模块,包括:
失败请求发送单元,用于利用所述主线程发送的open处理判断超时结果,生成创建文件请求失败记录,利用所述创建文件请求失败记录,间断的逐个发送所述创建文件请求失败记录中的创建文件请求至所述主线程。
可选的,还包括:
重复发送判断模块,用于利用所述主线程判断与创建文件请求相应的open事件是否发送到子线程集中的空闲子线程;
事件发送终止模块,用于所述重复发送判断模块判定与创建文件请求相应的open事件已发送到子线程集中的空闲子线程,则不再利用所述主线程向所述子线程集中的空闲子线程发送open事件。
本发明中,基于cifs协议创建小文件的方法,间断的逐个发送创建文件请求集中的创建文件请求至主线程;利用主线程将与创建文件请求相应的open事件发送到子线程集中的空闲子线程,以使子线程集中接收open事件的子线程完成对open事件的处理,其中,空闲子线程为没有正在处理open事件的子线程。
本发明客户端在间断的逐个发送创建文件请求集中的创建文件请求至主线程后,主线程将与创建文件请求相应的open事件发送到子线程集中的空闲子线程,而主线程本身不再进行open事件的处理,由子线程集中的多个空闲子线程分别处理不同创建文件请求相应的open事件,因此即使一个open事件在一个子线程中处理缓慢,也不会影响主线程继续接收客户端发送创建文件请求和其余子线程并行异步处理其他open事件的进度,解决创建文件时因为open调用时延较长导致后续的其他请求卡住的问题,从而提高了基于cifs协议下创建小文件的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例公开的一种基于cifs协议创建小文件的方法流程示意图;
图2为本发明实施例公开的另一种基于cifs协议创建小文件的方法流程示意图;
图3为本发明实施例公开的一种基于cifs协议创建小文件的系统结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种基于cifs协议创建小文件的方法,参见图1所示,该方法包括:
步骤s11:间断的逐个发送创建文件请求集中的创建文件请求至主线程;
具体的,每当主线程处理完一个创建文件请求后,客户端中的基于cifs协议的软件才会再次发送创建文件请求至主线程,形成间断的逐个发送创建文件请求集中的创建文件请求至主线程。
步骤s12:利用主线程将与创建文件请求相应的open事件发送到子线程集中的空闲子线程,以使子线程集中接收open事件的子线程完成对open事件的处理,其中,空闲子线程为没有正在处理open事件的子线程。
具体的,主线程在接收到客户端发送的创建文件请求后,利用创建文件请求将其中的open事件发送到子线程集中的空闲子线程,由多个子线程并行异步处理不同创建文件请求对应的open事件,只有子线程处于空闲状态时才会接受open事件,一旦子线程接收到主线程发送的open事件并进行处理,就不再处于空闲状态,主线程也不会再将open事件发送给不处于空闲状态的空闲子线程,即,一个子线程在处理完一个open事件之前不会接收和处理另一个open事件,但当子线程处理完当前open事件,子线程就会变为空闲子线程,便可以继续接收主线程发送的open事件。
需要说明的是,即使主线程结束与open事件相应的创建文件请求,子线程也将继续处理相应的open事件,直至处理完成。
可见,本发明实施例客户端在间断的逐个发送创建文件请求集中的创建文件请求至主线程后,主线程将与创建文件请求相应的open事件发送到子线程集中的空闲子线程,而主线程本身不再进行open事件的处理,由子线程集中的多个空闲子线程分别处理不同创建文件请求相应的open事件,因此即使一个open事件在一个子线程中处理缓慢,也不会影响主线程继续接收客户端发送创建文件请求和其余子线程并行异步处理其他open事件的进度,解决创建文件时因为open调用时延较长导致后续的其他请求卡住的问题,从而提高了基于cifs协议下创建小文件的效率。
本发明实施例公开了一种具体的基于cifs协议创建小文件的方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。参见图2所示,具体的:
步骤s21:利用主线程发送的open处理判断结果,间断的逐个发送创建文件请求集中的创建文件请求至主线程,其中,open处理判断结果为主线程判断是否在预设时间内接收到子线程发送的open处理结果的判断结果。
具体的,为保证创建小文件的效率,因此,主线程预先设定预设时间,根据子线程是否在预设时间内发送open处理结果,生成open处理判断结果,主线程将open处理判断结果发送至客户端,客户端则在接收到open处理判断结果后中断与open处理判断结果相应的创建文件请求,从而释放客户端与主线程之间的线程,客户端再发送下一个创建文件请求集中的创建文件请求至主线程,以使主线程对请求进行相应的操作,从而形成客户端利用open处理判断结果间断的逐个发送创建文件请求集中的创建文件请求至主线程。
其中,当主线程在预设时间内未接收到子线程发送的open处理结果,则判定子线程处理open事件超时,生成open处理判断超时结果,发送至客户端,客户端接收到open处理判断超时结果,则切断与open处理判断超时结果相应的创建文件请求与主线程的线程,并继续的间断的逐个发送创建文件请求集中的创建文件请求至主线程。
其中,当主线程在预设时间内接收到子线程发送的open处理结果,则判定子线程处理open事件成功,在主线程接收到子线程发送的open处理结果后,生成open处理判断成功结果,发送至客户端,客户端接收到open处理判断成功结果,则切断与open处理判断成功结果相应的创建文件请求与主线程的线程,并继续的间断的逐个发送创建文件请求集中的创建文件请求至主线程。
例如,预设时间为10ms,如主线程在10ms内未接收到子线程发送的open处理结果,则生成open处理判断超时结果,如主线程在10ms内接收到子线程发送的open处理结果,则在主线程接收到子线程发送的open处理结果后,生成open处理判断成功结果。
可以理解的是,open处理判断结果最晚在预设时间到达后发送至客户端,最快则是在主线程接收到子线程发送的open处理结果后发送至客户端,即,open处理判断超时结果的发送时间由预设时间决定,open处理判断成功结果的发送时间由主线程接收到子线程发送的open处理结果的时间决定。
进一步的,当客户端接收到open处理判断超时结果,客户端仍需向主线程发送未完成的创建文件请求,其具体过程可以包括步骤s211;其中,
步骤s211:利用主线程发送的open处理判断超时结果,生成创建文件请求失败记录,利用创建文件请求失败记录,间断的逐个发送创建文件请求失败记录中的创建文件请求至主线程。
具体的,客户端可以利用创建文件请求失败记录,在创建文件请求集中的创建请求均发送过主线程后,间断的逐个发送创建文件请求失败记录中的创建文件请求至主线程;还可以,在客户端每发送预设阈值未发送过主线程的创建文件请求后,发送一个创建文件请求失败记录中的创建文件请求至主线程。
例如,创建文件请求集中包括10个创建文件请求,其中,有3个创建文件请求失败,记录在创建文件请求失败记录,分别是第三创建文件请求、第四创建文件请求和第8创建文件请求,客户端可以利用创建文件请求失败记录,在创建文件请求集中的10个创建文件请求均发送过主线程后,间断的逐个发送创建文件请求失败记录中的创建文件请求;还可以预设阈值为3,客户端每发送3个未发送过主线程的创建文件请求后,发送一个创建文件请求失败记录中的创建文件请求至主线程,如,当客户端发送到第三创建文件请求时,客户端可以发送一个创建文件请求失败记录中的创建文件请求,在第三创建文件请求处理后,第三创建文件请求变为创建文件请求失败记录中的创建文件请求,则客户端第四次再次发送第三创建文件请求至主线程,客户端第五次发送第四创建文件请求,此时计算阈值,记为1,直到客户端发送3个未发送过主线程的创建文件请求后,发送一个创建文件请求失败记录中的创建文件请求至主线程,客户端在发送第六创建文件请求后,发送第四创建文件请求至主线程,客户端在发送第九创建文件请求后,发送第八创建文件请求至主线程。
步骤s22:利用主线程判断与创建文件请求相应的open事件是否发送到子线程集中的空闲子线程。
具体的,因为客户端在接收到open处理判断超时结果后,会重复发送创建文件请求失败过的创建文件请求,因此,主线程判断与创建文件请求相应的open事件是否发送到子线程集中的空闲子线程,以避免重复发送open事件至子线程,占用线程资源。
步骤s23:如果已发送,则不再利用主线程向子线程集中的空闲子线程发送open事件。
步骤s24:如果未发送,则利用主线程将与创建文件请求相应的open事件发送到子线程集中的空闲子线程,以使子线程集中接收open事件的子线程完成对open事件的处理,其中,空闲子线程为没有正在处理open事件的子线程。
相应的,本发明实施例还公开了一种基于cifs协议创建小文件的系统,参见图3所示,该系统包括:
创建请求发送模块11,用于间断的逐个发送创建文件请求集中的创建文件请求至主线程;
open事件发送模块12,用于利用主线程将与创建文件请求相应的open事件发送到子线程集中的空闲子线程,以使子线程集中接收open事件的子线程完成对open事件的处理,其中,空闲子线程为没有正在处理open事件的子线程。
可见,本发明实施例客户端在间断的逐个发送创建文件请求集中的创建文件请求至主线程后,主线程将与创建文件请求相应的open事件发送到子线程集中的空闲子线程,而主线程本身不再进行open事件的处理,由子线程集中的多个空闲子线程分别处理不同创建文件请求相应的open事件,因此即使一个open事件在一个子线程中处理缓慢,也不会影响主线程继续接收客户端发送创建文件请求和其余子线程并行异步处理其他open事件的进度,解决创建文件时因为open调用时延较长导致后续的其他请求卡住的问题,从而提高了基于cifs协议下创建小文件的效率。
本发明实施例中,上述创建请求发送模块11,可以具体用于利用主线程发送的open处理判断结果,间断的逐个发送创建文件请求集中的创建文件请求至主线程,其中,open处理判断结果为主线程判断是否在预设时间内接收到子线程发送的open处理结果的判断结果。
进一步的,上述创建请求发送模块11,可以包括失败请求发送单元;其中,
失败请求发送单元,用于利用主线程发送的open处理判断超时结果,生成创建文件请求失败记录,利用创建文件请求失败记录,间断的逐个发送创建文件请求失败记录中的创建文件请求至主线程。
进一步的,上述失败请求发送单元,可以具体用于利用创建文件请求失败记录,在创建文件请求集中的创建请求均发送过主线程后,间断的逐个发送创建文件请求失败记录中的创建文件请求至主线程;
或,利用创建文件请求失败记录,在每发送预设阈值未发送过主线程的创建文件请求后,发送一个创建文件请求失败记录中的创建文件请求至主线程。
本发明实施例中,基于cifs协议创建小文件的系统,还可以包括重复发送判断模块和事件发送终止模块;其中,
重复发送判断模块,用于利用主线程判断与创建文件请求相应的open事件是否发送到子线程集中的空闲子线程;
事件发送终止模块,用于重复发送判断模块判定与创建文件请求相应的open事件已发送到子线程集中的空闲子线程,则不再利用主线程向子线程集中的空闲子线程发送open事件。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种基于cifs协议创建小文件的方法及系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。