本申请涉及计算机领域,尤其涉及一种用于在分布式存储系统中执行文件写入的技术。
背景技术:
随着互联网的普及,数据业务逐步增加,因此对分布式存储系统的要求亦逐步提高,尤其是对文件写入的吞吐量有一定的要求,在当前分布式存储系统中,往往需要支持一个文件同时被多个进程度读写,即允许多个进程同时向一个文件写入数据,其数据的一致性即交给其中的一个数据设备管理端节点负责,例如微软的azure系统即采用了这样的措施。
然而,现有技术会因为每个文件只有一个对应可以写数据的数据块使得吞吐量受限,同时当多个客户端同时对一个文件进行写入,若遇到写入失败时会导致写入延时增长,降低系统的可用性,且遇到写入失败后会导致数据块的长度小于期望值,而小数据块的数量增加使得管理代价增大。
技术实现要素:
本申请的一个目的是提供一种用于在分布式存储系统中执行文件写入的方法与设备,用以解决分布式存储系统中单文件多进程写入吞吐量低以及写入失败所致系统不稳定的问题。
根据本申请的一个方面,本申请提供了一种在元数据管理设备端用于在分布式存储系统中执行文件写入的方法,该方法解决了分布式存储系统中单文件多进程写入吞吐量低以及写入失败所致系统不稳定的问题,该方法包括:
获取用户设备提交的关于目标文件的可写数据块的块信息请求;
根据所述目标文件对应的可写块数量阈值确定所述用户设备对应的多个可写数据块,其中,所述多个可写数据块包括已分配给所述目标文件的其他用户设备的可写数据块或新分配的可写数据块;
将所述多个可写数据块返回至所述用户设备。
根据本申请的另一个方面,本申请提供了一种在用户设备端用于在分布式存储系统中执行文件写入的方法,该方法解决了分布式存储系统中单文件多进程写入吞吐量低以及写入失败所致系统不稳定的问题,该方法包括:
向元数据管理设备提交关于目标文件的可写数据块的块信息请求;
接收所述元数据管理设备基于所述块信息请求返回的、所述用户设备对应的多个可写数据块;
向对应主数据管理设备发送关于所述目标文件的写入请求以对所述多个可写数据块中之一执行文件写入。
根据本申请的另一个方面,本申请提供了一种在主数据管理设备端用于在分布式存储系统中执行文件写入的方法,该方法解决了分布式存储系统中单文件多进程写入吞吐量低以及写入失败所致系统不稳定的问题,该方法包括:
接收用户设备发送的对数据块执行文件写入的请求,并执行对所述数据块的文件写入;
若发生对所述数据块执行文件写入的失败,向所述用户设备报告失败信息,并拒绝与所述用户设备对应同一文件的其他用户设备对所述数据块执行文件写入的请求;
更新所述数据块的状态为不可写,并向对应元数据管理设备报告所述数据块更新后的状态。
根据本申请的又一个方面,本申请提供了一种用于在分布式存储系统中执行文件写入的元数据管理设备,该设备解决了分布式存储系统中单文件多进程写入吞吐量低以及写入失败所致系统不稳定的问题,该设备包括:
块信息请求获取装置,用于获取用户设备提交的关于目标文件的可写数据块的块信息请求;
可写数据块确定装置,用于根据所述目标文件对应的可写块数量阈值确定所述用户设备对应的多个可写数据块,其中,所述多个可写数据块包括已分配给所述目标文件的其他用户设备的可写数据块或新分配的可写数据块;
块信息反馈装置,用于将所述多个可写数据块返回至所述用户设备。
根据本申请的再一个方面,本申请提供了一种用于在分布式存储系统中执行文件写入的用户设备,该设备解决了分布式存储系统中单文件写入吞吐量低下的问题,该设备包括:
块信息请求发送装置,用于向元数据管理设备提交关于目标文件的可写数据块的块信息请求;
块信息接受装置,用于接收所述元数据管理设备基于所述块信息请求返回的、所述目标文件对应的多个可写数据块;
数据块写入请求发送装置,用于向对应主数据管理设备发送关于所述目标文件的写入请求以对所述多个可写数据块中之一执行文件写入。
根据本申请的再一个方面,本申请提供了一种在主数据管理设备用于在分布式存储系统中执行文件写入的方法,该方法解决了分布式存储系统中单文件多进程写入吞吐量低以及写入失败所致系统不稳定的问题,该方法包括:
文件写入执行装置,用于接收用户设备发送的对数据块执行文件写入的请求,并执行对所述数据块的文件写入;
写入失败处理装置,用于若发生对所述数据块执行文件写入的失败,向所述用户设备报告失败信息,并拒绝与所述用户设备对应同一文件的其他用户设备对所述数据块执行文件写入的请求;
数据块状态更新装置,用于更新所述数据块的状态为不可写,并向对应元数据管理设备报告所述数据块更新后的状态。
根据本申请的再一个方面,本申请提供了一种用于在分布式存储系统中执行文件写入的元数据管理设备,其中,该设备包括:
处理器;
以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
获取用户设备提交的关于目标文件的可写数据块的块信息请求;
根据所述目标文件对应的可写块数量阈值确定所述用户设备对应的多个可写数据块,其中,所述多个可写数据块包括已分配给所述目标文件的其他用户设备的可写数据块或新分配的可写数据块;
将所述多个可写数据块返回至所述用户设备。
根据本申请的再一个方面,本申请提供了一种用于在分布式存储系统中执行文件写入的用户设备,其中,该设备包括:
处理器;
以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
向元数据管理设备提交关于目标文件的可写数据块的块信息请求;
接收所述元数据管理设备基于所述块信息请求返回的、所述用户设备对应的多个可写数据块;
向对应主数据管理设备发送关于所述目标文件的写入请求以对所述多个可写数据块中之一执行文件写入。
根据本申请的再一个方面,本申请提供了一种用于在分布式存储系统中执行文件写入的主数据管理设备,其中,该设备包括:处理器;
以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
接收用户设备发送的对数据块执行文件写入的请求,并执行对所述数据块的文件写入;
若发生对所述数据块执行文件写入的失败,向所述用户设备报告失败信息,并拒绝与所述用户设备对应同一文件的其他用户设备对所述数据块执行文件写入的请求;
更新所述数据块的状态为不可写,并向对应元数据管理设备报告所述数据块更新后的状态。
根据本申请的再一方面,还提供了一种实现在分布式存储系统中执行文件写入的系统,解决了分布式存储系统中单文件多进程写入吞吐量低以及写入失败所致系统不稳定的问题,其中,该系统包括如前所述根据本发明一个方面的一种用于在分布式存储系统中执行文件写入的元数据管理设备,如前所述根据本发明另一个方面的一种用于在分布式存储系统中执行文件写入的用户设备,以及如前所述根据本发明另一个方面的一种用于在分布式存储系统中执行文件写入的主数据管理设备。
与现有技术相比,本申请向元数据管理设备提交关于目标文件的可写数据块的块信息请求,接收所述元数据管理设备基于所述块信息请求返回的、所述用户设备对应的多个可写数据块,并根据关于所述目标文件的写入请求对所述多个可写数据块中之一执行文件写入,从而允许单个文件可对应写入多个数据块,使得多个进程可同时对文件对应的不同数据块进行写入从而使得写入吞吐量增加,降低写入热点发生的概率。主数据管理设备在发生对数据块执行文件写入失败后,向用户设备报告失败信息,并拒绝与所述用户设备对应同一文件的其他用户设备对所述数据块执行文件写入的请求,并更新所述数据块的状态为不可写,并向对应元数据管理设备报告所述数据块更新后的状态,且用户设备端在遇到写入失败后将不可写数据块直接删除,选择目标文件对应的其它数据块重新写入,避免出现写入失败所致的写入延时增长,减少小数据块出现的概率,进而减轻用户管理负担。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的元数据管理设备端、用户设备端以及主数据管理设备端配合实现的一种实现在分布式存储系统中执行文件写入的方法流程图;
图2示出根据本申请一个优选实例的一种实现在分布式存储系统中执行文件写入的方法中的步骤s22流程图;
图3示出根据本申请一个优选实例的一种实现在分布式存储系统中执行文件写入的方法中的步骤s13流程图;
图4示出根据本申请另一个方面的元数据管理设备端、用户设备端以及主数据管理设备端配合实现的一种实现在分布式存储系统中执行文件写入的方法中修改可写块数量阈值的流程图;
图5示出根据本申请另一个方面的元数据管理设备、用户设备以及主数据管理设备配合实现的一种实现在分布式存储系统中执行文件写入的设备示意图;
图6示出根据本申请另一个优选实例的一种实现在分布式存储系统中执行文件写入的设备中可写数据块确定装置示意图;
图7示出根据本申请另一个优选实例的一种实现在分布式存储系统中执行文件写入的设备中数据块写入请求发送装置示意图;
图8示出根据本申请另一个方面的元数据管理设备以及用户设备配合实现的一种实现在分布式存储系统中执行文件写入的设备中实现修改可写块数量阈值功能的示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
图1示出根据本申请一个方面的元数据管理设备端、用户设备端以及主数据管理设备端配合实现的一种实现在分布式存储系统中执行文件写入的方法流程图。其中,所述用户设备端包括步骤s11、步骤s12、步骤s13;所述元数据管理设备包括步骤s21、步骤s22、步骤s23;所述主数据管理设备端包括步骤s31、步骤s32以及步骤s33。
其中,在步骤s11中用户设备端向元数据管理设备提交关于目标文件的可写数据块的块信息请求;在步骤s21中元数据管理设备端获取用户设备提交的关于目标文件的可写数据块的块信息请求;在步骤s22中元数据管理设备端根据所述目标文件对应的可写块数量阈值确定所述用户设备对应的多个可写数据块,其中,所述多个可写数据块包括已分配给所述目标文件的其他用户设备的可写数据块或新分配的可写数据块;在步骤s23中元数据管理设备端将所述多个可写数据块返回至所述用户设备;在步骤s12中用户设备端接收所述元数据管理设备基于所述块信息请求返回的、所述用户设备对应的多个可写数据块;在步骤s13中用户设备端向对应主数据管理设备发送关于所述目标文件的写入请求以对所述多个可写数据块中之一执行文件写入;在步骤s31中主数据管理设备端接收用户设备发送的对数据块执行文件写入的请求,并执行对所述数据块的文件写入;在步骤s32中主数据管理设备端若发生对所述数据块执行文件写入的失败,向所述用户设备报告失败信息,并拒绝与所述用户设备对应同一文件的其他用户设备对所述数据块执行文件写入的请求;在步骤s33中主数据管理设备端更新所述数据块的状态为不可写,并向对应元数据管理设备报告所述数据块更新后的状态。
具体地,在步骤s11中用户设备端向元数据管理设备提交关于目标文件的可写数据块的块信息请求;在步骤s21中元数据管理设备端获取用户设备提交的关于目标文件的可写数据块的块信息请求。其中,所述用户设备端是指分布式存储系统中用于为用户提供各种接口的端口模块,以三端模式的分布式存储系统为例,所述用户设备端即为客户端即client,下文这三种代称均指代用户设备端。所述元数据管理设备端是指分布式存储系统中管理分布式存储系统中元数据的模块,以三端模式的分布式存储系统为例,所述元数据管理设备端即为master也就是命名空间管理模块。所述目标文件即为需要执行写入的文件,通常在分布式存储系统中会预先创建好但不限于此,所有需要执行写入的文件均可成为目标文件。所述数据块是指一段用户逻辑数据,以字节流的形式存储,用于目标文件的数据写入,以三端模式的分布式存储系统为例,数据块即为该系统中所称的chunk。所述关于目标文件的可写数据块的块信息是指可以用于执行目标文件写入的当前可写的数据块及其位置,数量等信息。所述提交和获取请求的方法包括但不限于通过分布式存储系统自有接口进行,以三端模式的分布式存储系统为例,client客户端启动,在此因为是多进程同时对一个文件进行写入,所以是多个客户端均向master发送获取目标文件f所有可以写的chunk的信息的请求。通过上述动作,可以使得元数据管理设备端发起对目标文件可写数据块的块信息的查找,从而使得文件写入流程启动。
本领域技术人员应能理解上述发送和获取关于目标文件的可写数据块的块信息请求的方式仅为举例,其他现有的或今后可能出现的发送和获取关于目标文件的可写数据块的块信息请求的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,在步骤s22中元数据管理设备端根据所述目标文件对应的可写块数量阈值确定所述用户设备对应的多个可写数据块,其中,所述多个可写数据块包括已分配给所述目标文件的其他用户设备的可写数据块或新分配的可写数据块。即根据可写块数量阈值将与所述阈值比较的符合预置数目的目标文件可写数据块分配给所述用户设备进行写入,当若干用户设备同时对目标文件进行写入,所分配给用户设备的可写数据块列表是一致的,例如,所述可写块数量阈值为m,则以三端模式的分布式存储系统为例,元数据块管理设备端master收到请求后在内存中找到目标文件f所有可以写的chunk的信息t和可以写的chunk的数量m,若t大于或等于m则确定这t个可写数据块chunk为目标文件f所对应的可写数据块。所述可写块数量阈值是指所设置的控制可写数据块数量的阈值,在此,块即指代数据块,此指代上下文均通用,所述可写块数量阈值可根据写入吞吐量或速率的要求进行设置,本阈值的存在使得用户不需要自己管理多路写入的文件,只需要根据写入的需求调整可写数据块的数量,此外,所述可写块数量阈值亦可以根据系统的要求设置系统自行调整,或进行初始设定。所述用户设备对应的多个可写数据块是指每个写入文件可以有一个以上的可写数据块,因此对其进行写入的用户设备也对应多个可写数据块,在三端模式的分布式存储系统中,现有技术仅支持每个目标文件在元数据块管理设备端master有一个可写数据块,在本申请的实施例中可以通过对用户设备端以及元数据管理设备端的接口间的协议进行设置,使得每个目标文件在元数据块管理设备端有多个可写数据块,从而能够达到单文件写入时支持多个数据块同时写入的目的,使得文件写入不受限于单个机器的物理资源,进而提高单文件写入的效率、降低写入热点的形成概率。
其中,在本申请的实施例中通过对用户设备端以及元数据管理设备端的接口间的协议进行设置的方法,以三端模式的分布式存储系统为例,在元数据块管理设备端master中设置如下:在面向用户设备端client的服务和协议方面,对于获取文件可写数据块chunk信息的服务:扩展现有协议,增加对可写的数据块chunk有多个的支持;对于可写数据块chunk数量的服务:增加设置文件可写数据块chunk数量的协议和服务,增加获取文件可写数据块chunk数量的协议和服务。在用户设备端client中设置如下:在面向元数据块管理设备端master协议方面:对于获取文件可写数据块chunk信息的协议:扩展现有协议,增加对可写的数据块chunk有多个的支持;对于可写数据块chunk数量的接口:增加设置文件可写数据块chunk数量的协议,增加获取文件可写数据块chunk数量的协议;在对于在面向用户的接口方面:对于可写数据块chunk数量的接口:增加设置文件可写数据块chunk数量的接口,增加获取文件可写数据块chunk数量的接口。以上设置使得每个目标文件在元数据块管理设备端有多个可写数据块,从而能够达到单文件写入时支持多个数据块同时写入的目的,满足用户需求,同时在元数据块管理设备端master只耗费了单个文件的内存,没有降低集群服务用户的数量。
本领域技术人员应能理解上述对用户设备端以及元数据管理设备端的接口间的协议进行设置使得每个目标文件在元数据块管理设备端有多个可写数据块的方式仅为举例,其他现有的或今后可能出现的对用户设备端以及元数据管理设备端的接口间的协议进行设置使得每个目标文件在元数据块管理设备端有多个可写数据块的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,在步骤s23中元数据管理设备端将所述多个可写数据块返回至所述用户设备;在步骤s12中用户设备端接收所述元数据管理设备基于所述块信息请求返回的、所述用户设备对应的多个可写数据块。即如上文所述确定所述目标文件对应的多个可写数据块后将所述数据块及其相关信息由元数据管理设备端返回至用户设备端,所述用户设备对应的多个可写数据块即返回的每个用户设备所要写入的申请目标文件所对应的可写数据块,以三端模式的分布式存储系统为例,接上文举例,元数据管理设备端master将目标文件f所有可以写的数据块chunk的数量t及其相关信息从内存中找到并进行反馈,反馈的方式包括但不限于通过分布式存储系统自有接口进行。
其中,所述元数据管理设备端内存中的所述目标文件对应的可写数据块的数量以及相关信息的获取方式包括但不限于在获取每个在分布式存储系统中文件后,元数据管理设备端即存储其所有正在写以及允许写的数据块信息,以三端模式的分布式存储系统为例,元数据块管理设备端master在文件的元数据存储方面:负责存储每个文件当前所有正在写的数据块chunk信息,例如数据块的副本位置;负责存储每个文件当前所允许的可写数据块chunk的数量。以上信息在元数据块管理设备端master端都需要进行持久化的保存,宕机重启后不会丢失,从而使得可以在用户设备端需要目标文件是可以及时查找到。
本领域技术人员应能理解上述元数据管理设备端对每个文件数据块存储的方式仅为举例,其他现有的或今后可能出现的元数据管理设备端对每个文件数据块存储的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,在步骤s13中用户设备端向对应主数据管理设备发送关于所述目标文件的写入请求以对所述多个可写数据块中之一执行文件写入;在步骤s31中主数据管理设备端接收用户设备发送的对数据块执行文件写入的请求,并执行对所述数据块的文件写入。即因为所述目标文件有对应的多个可写数据块,因此,在所述用户设备端获得所述可写数据块相关信息后将所述多个可写数据块进行排序,或按照默认顺序依次在接受到目标文件的写入请求后对应的主数据管设备请求写入。以三端模式的分布式存储系统为例,用户设备端client将所接到的目标文件f所有的对应的可写数据块chunk之后,在按照默认或设置的顺序对某一chunk进行写入时,寻找其相应的数据块服务器即chunksever进行相应副本的写入,其中,因为本实施例中是多进程写入,因此,将写入请求发往进行主导的主数据块服务器即primarychunksever,进而主数据服务器在接受到写入请求后,将所接受到的客户端数据进行排序,在本地存储数据的同时向从数据块服务器即secondarychunksever进行转发,主从数据块服务器的工作模式可以参考微软azure中的底层分布式存储系统中数据存储节点的工作模式,主从数据块服务器在收到写入请求后即执行对文件的写入。在此,所举例的数据块服务器,以及chunksever均是指所述主数据管理设备或从数据管理设备,在上下文三种代称通用。chunksever的信息的获取方式包括但不限于由元数据管理设备端master记录当前可写chunk所在的所有chunkserver,这部分信息以缓存的形式存在,不需要持久化,宕机重启后可以根据之前所记录的信息恢复出来,也就是从所负责存储的每个文件当前所有正在写的数据块chunk信息中进行恢复;用户设备端client存储文件当前所有可写的chunk信息,这部分信息以缓存的形式存在,不需要持久化,宕机重启后从master端重新获取。
本领域技术人员应能理解上述保存和获取数据块对应数据块服务器信息的方式仅为举例,其他现有的或今后可能出现的保存和获取数据块对应数据块服务器信息的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,在步骤s32中主数据管理设备端若发生对所述数据块执行文件写入的失败,向所述用户设备报告失败信息,并拒绝与所述用户设备对应同一文件的其他用户设备对所述数据块执行文件写入的请求。其中,所述写入失败泛指造成写失败的场景,例如网络延时高或网络不通,以及磁盘延时高或无法写入等。因为多个用户设备同时对同一文件进行写入操作,因此,当某一用户设备对主数据管理设备发送写入请求后,该主数据管理设备对数据块写入的过程中发生写失败的情况,则主数据管理设备反馈该用户设备写入失败,同时拒绝所有用户设备新发起的写入请求,从而避免对写失败的数据块再次发起写入进而导致失败。以三端模式的分布式存储系统为例,即当primarychunkserver遇到failover的时候,一方面,对于已经接受的请求,返回client失败,拒绝所有client新发起的写请求。
接着,在步骤s33中主数据管理设备端更新所述数据块的状态为不可写,并向对应元数据管理设备报告所述数据块更新后的状态。即将当前写失败的数据块设置为不可写的状态,并将这一状态反馈至元数据管理设备端,从而将其所存储的所述数据块进行更新,使得后续会导致写入失败的数据块不会被再次写入。以三端模式的分布式存储系统为例,即primarychunkserver将写入失败的chunk状态设置为不可写,并持久化存储,同时将该写入失败的chunk的状态汇报给master,要求master进行持久化存储。在此,数据块不可写的状态的设置由主数据管理设备端和元数据管理设备端负责,避免了不必要的数据块切换,降低了非全局写入失败场景下的写延时的增长,提高了系统可用性。同时,因为避免了不必要的数据块切换,减少了写入不多即切换所产生的小数据块的比例,提高了系统的服务规模。
优选地,所述方法包括步骤s24(未示出),在步骤s24中元数据管理设备端接收对应主数据管理设备发送的所述多个可写数据块之一的数据块更新状态,其中,所述数据块更新状态为不可写。即将上述主数据管理设备端发送的某个数据块不可写的状态进行接收并在本地持久化存储,例如,接上文举例,master接收到primarychunkserver所汇报的某个数据块被设置为不可写的信息后,根据其要求对这一状态进行本地持久化存储,从而避免不可写的数据块再次被用户设备端所获取从而造成不必要的写失败。
本领域技术人员应能理解上述主数据管理设备端和元数据管理设备端处理写失败数据块的方式仅为举例,其他现有的或今后可能出现的主数据管理设备端和元数据管理设备端处理写失败数据块的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述方法还包括步骤s14(未示出),在步骤s14中用户设备端当所述多个可写数据块均为不可写时,向所述元数据管理设备重新提交关于所述目标文件的可写数据块的块信息请求。是指在对目标文件所对应的数据块进行写入时,若遇到从元数据管理设备端所获得的可写数据块均写完或不可写的情况,则需要向元数据管理设备重新提交获取同样目标文件的可写数据及其相关信息的请求,此时,如前文中实施例所述,将之前的步骤重新进行一遍。以三端模式的分布式存储系统为例,当client发现缓存中没有可写的chunk时,向master发送获取文件f所有可以写的chunk的信息的请求,重新分配获取可写chunk的数量,使得所述用户设备端获取目标文件所对应的新的可写数据块,从而继续进行文件的写入。
优选地,所述方法还包括步骤s15(未示出),在步骤s15中用户设备端若发生对所述数据块执行文件写入的失败,将写失败对应的所述目标文件对应的数据块信息删除。其中,所述写失败的情况包括主数据管理设备对数据块写入所发生的失败,也包括用户设备端与主数据管理设备之间所发生的失败情况,例如,两者之间用于传递信息的网络出现故障。在用户设备端获取到写入失败信息后,将这一数据块信息直接进行删除,进而直接在从元数据管理设备端所获取的目标文件对应的可写数据块中选择另一个数据块重新进行写入。以三端模式的分布式存储系统为例,当client遇到写入失败,将写入失败对应的chunk信息从缓存中删除,但不改变这个chunk的状态,进而从缓存中所有的当前可写chunk中按顺序选择下一个chunk进行重试,从而避免了在,降低了非全局写入失败场景下的写延时的增长。
图2示出根据本申请一个优选实例的一种实现在分布式存储系统中执行文件写入的方法中的步骤s22流程图。其中,所述步骤s22包括步骤s221、步骤s222、步骤s223。
其中,在步骤s221中元数据管理设备端确定所述目标文件对应的所有可写的数据块;在步骤s222中元数据管理设备端若所述所有可写的数据块的数量等于或大于所述目标文件对应的可写块数量阈值,则将所述所有可写的数据块作为所述用户设备对应的多个可写数据块;否则,在步骤s223中元数据管理设备端为所述目标文件分配其他可写的数据块,并将所述其他可写的数据块及所述所有可写的数据块作为所述用户设备对应的多个可写数据块,其中,所述多个可写数据块的数量等于可写块数量阈值。
具体地,在步骤s221中元数据管理设备端确定所述目标文件对应的所有可写的数据块。是指确定所述目标文件的所有可写数据块信息,获取的方法包括如上文所述从所述元数据管理设备端所存储的元数据信息中的每个文件当前所允许的可写数据块的数量,即以三端模式的分布式存储系统为例,因为元数据块管理设备端master在文件的元数据存储方面:负责存储每个文件当前所有正在写的数据块chunk信息,例如数据块的副本位置;负责存储每个文件当前所允许的可写数据块chunk的数量,因此可以从master端中找到目标文件f的所有可写数据块,假设所找到的目标文件f的所有可写数据块为t。
接着,在步骤s222中元数据管理设备端若所述所有可写的数据块的数量等于或大于所述目标文件对应的可写块数量阈值,则将所述所有可写的数据块作为所述用户设备对应的多个可写数据块。即将根据系统默认或用户根据写入要求所设置的可写块数量阈值与所获得的目标文件的所有可写数据块数量进行比较,若所述目标文件的所有可写数据块数量不小于所述可写块数量阈值则将所述目标文件的所有可写数据块及其相关信息直接由元数据管理设备端反馈给用户设备端,使之作为用户设备需要写入的所述目标文件对应的可写数据块进行写入。以三端模式的分布式存储系统为例,如果当前目标文件f已有的chunk数量不小于可写块数量阈值m,则将这些chunk信息返回client。
接着,若所述所有可写的数据块的数量小于所述目标文件对应的可写块数量阈值,在步骤s223中元数据管理设备端为所述目标文件分配其他可写的数据块,并将所述其他可写的数据块及所述所有可写的数据块作为所述用户设备对应的多个可写数据块,其中,所述多个可写数据块的数量等于可写块数量阈值。即将根据系统默认或用户根据写入要求所设置的可写块数量阈值与所获得的目标文件的所有可写数据块数量进行比较,若所述目标文件的所有可写数据块数量小于所述可写块数量阈值,则重新由元数据管理设备端分配从所存储或新被释放的数据块中分配差额数量的数据块,使得所述目标文件的可写数据块数量与所述可写块数量阈值相等,进而发送给各用户设备作为用户设备对应的若干可写数据块。以三端模式的分布式存储系统为例,如果当前文件f已有的chunk数量小于可写块数量阈值m,则重新分配足够数量的chunk,新分配的chunk数量加已有的chunk数量等于可写块数量阈值m,将所有chunk信息返回client。在此,每个由于单文件是多进程写入,因此,每个client均保留一份完成的相对独立的目标文件对应的可写chunk的信息,后期每个client各自维护各自缓存中的chunk信息,且每个之间的更新时间不同,随着时间的推移会有些许差异。通过上述方式,可以通过可写块数量阈值控制,使得可写数据块维持在一定值,从而使得用户不需要对文件写入进行人工控制,减小用户的管理成本。
本领域技术人员应能理解上述确定目标文件对应可写数据块的方式仅为举例,其他现有的或今后可能出现的目标文件对应可写数据块的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述为所述目标文件分配其他可写的数据块包括:根据每个文件当前对应的在写数据块及每个在写数据块对应的块服务器,为所述目标文件分配其他可写的数据块,其中,每个其他可写的数据块对应的块服务器与每个在写数据块对应的块服务器小于或等于预定的块服务器重复阈值。即在分配新的可写数据块所对应的数据块服务器时,尽量避免其所分配的数据块服务器是元数据管理设备端中已经记录的,从而减少数据块服务器同时接受多个数据块的写入请求从而造成写入热点的情况。所述块服务器是指chunksever,即数据管理模块本文亦称之为数据块服务器或块服务器,用于维护数据块副本的模块,提供数据块副本的访问的接口。所述块服务器重复阈值是指允许块服务器同时提供不同的数据块进行写入的数量,例如,所述块服务器重复阈值为3,即每个块服务器仅可对三个数据块提供服务。对数据块对应的块服务器的具体分配方式,以三端模式的分布式存储系统为例,在元数据管理设备端对chunk位置的分配方面:记录当前可写chunk所在的所有chunkserver,这部分信息以缓存的形式存在,不需要持久化,宕机重启后可以根据上面记录的元数据信息恢复出来。分配新的chunk的时候,根据块服务器重复阈值避免新分配的chunkserver与上述步骤记录的chunkserver重复。或者这一步操作采用尽量而为的策略,当集群可写的chunkserver数量太少,无法满足不重复的要求的时候,也允许chunk的分配动作成功。文件内部的数据分部信息可见,有效的避免多个chunk分布在相同的chunkserver上,消除热点,保证了写入吞吐量的实际效果。
图3示出根据本申请一个优选实例的一种实现在分布式存储系统中执行文件写入的方法中的步骤s13流程图。所述步骤s13包括步骤s131、步骤s132、步骤s133。
其中,在步骤s131中用户设备端接收关于所述目标文件的写入请求;在步骤s132中用户设备端将所述写入请求转发至所述多个可写数据块中当前第一个可写数据块对应的主数据管理设备,以对所述当前第一个可写数据块对应的一个或多个数据块副本执行文件写入;在步骤s133中用户设备端更新所述多个可写数据块中当前第一个可写数据块。
具体地,在步骤s131中用户设备端接收关于所述目标文件的写入请求。即用户设备端接受关于所述目标文件的写入请求,因为所述目标文件可写入的数据块数量大于所述可写块数量阈值,因此支持用户同时发起相应数量的写入请求。以三端模式的分布式存储系统为例,支持用户同时发起m个写请求,m等于当前可写chunk的数量。若干用户设备端client同时接受若干关于单个文件的写请求,使得单个文件的写入速率提升,且多进程写入过程中多个客户端对同一个数据块进行写入,从而减小写入失败后重试所致的延时。
接着,在步骤s132中用户设备端将所述写入请求转发至所述多个可写数据块中当前第一个可写数据块对应的主数据管理设备,以对所述当前第一个可写数据块对应的一个或多个数据块副本执行文件写入。即用户设备端在接受到所述目标文件对应的多个可写数据块后按照默认排序或依据一定的排序准则对所述可写数据块的主数据管理设备进行寻找,并传达相应的写入请求,从而在数据块及其副本上进行写入。以三端模式的分布式存储系统为例,client收到可写chunk信息后按顺序缓存,同时将下次可写chunk的序号i设置为第一个可写chunk的序号,client收到用户的写入请求,选取序号为i的chunk,将数据写入请求发往这个chunk的所有primarychunkserver,同时将i序号修改为下一个可写chunk的序号。
接着,在步骤s133中用户设备端更新所述多个可写数据块中当前第一个可写数据块。即用户设备端按顺序对所有写入请求进行响应,即按顺序对所述数据块执行写入,当所述数据块排序所在的第一个可写数据块被执行写入后,将后续的所述可写数据块更新排序信息,例如上文举例,client收到用户的写入请求,选取序号为i的chunk,将数据写入请求发往这个chunk的所有primarychunkserver,同时将i序号修改为下一个可写chunk的序号,即每当用户发起写请求的时候,根据序号i选择相应的chunk,同时将i指向下一个chunk,这样以轮询的方式访问所有的chunk,避免某个chunk成为写入的热点。
本领域技术人员应能理解上述对可写数据块进行轮询写入的方式仅为举例,其他现有的或今后可能出现的对可写数据块进行轮询写入的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,步骤s13还包括:步骤s134(未示出),在步骤s134中用户设备端当接收到所述主数据管理设备返回的文件写入成功信息,回收所述当前第一个可写数据块以接收关于所述目标文件的新写入请求。是指在某个可写数据块及其副本进行写入后,当主数据管理设备反馈写入成功后,用户设备端返回用户该数据块所对应的写入请求写入成功,进而因为当前所述可写数据块没有写满触发重新分配可写数据块的情况,因此可重新接受用户关于所述目标文件的写入请求。以三端模式的分布式存储系统为例,当某个chunk的对应的primarychunkserver返回client成功的时候,client返回用户成功,写流程返回接收用户新的请求的阶段,从而充分利用可写数据块同时使得单文件的写入保持在一定数量数据块的同时写入中,提升单文件写入速率。
图4示出根据本申请另一个方面的元数据管理设备端、用户设备端以及主数据管理设备端配合实现的一种实现在分布式存储系统中执行文件写入的方法中修改可写块数量阈值的流程图。为实现所述修改可写块数量阈值功能,所述用户设备端包括步骤s16。所述元数据管理设备端包括步骤s25、步骤s26。
其中,在步骤s16中用户设备端将用户提交的关于所述目标文件的可写块数量阈值设置请求发送至所述元数据管理设备,其中,所述可写块数量阈值设置请求包括关于所述目标文件的新的可写块数量阈值。在步骤s25中元主数据管理设备端接收所述用户设备发送的关于所述目标文件的可写块数量阈值设置请求,其中,所述可写块数量阈值设置请求包括关于所述目标文件的新的可写块数量阈值;在步骤s26中元数据管理设备端根据所述新的可写块数量阈值更新所述可写块数量阈值。
具体地,在步骤s16中用户设备端将用户提交的关于所述目标文件的可写块数量阈值设置请求发送至所述元数据管理设备,其中,所述可写块数量阈值设置请求包括关于所述目标文件的新的可写块数量阈值。接着,在步骤s25中元数据管理设备端接收所述用户设备发送的关于所述目标文件的可写块数量阈值设置请求,其中,所述可写块数量阈值设置请求包括关于所述目标文件的新的可写块数量阈值;是指所述可写块数量阈值是可以根据用户的写入需求进行调整,将调整的具体数据和请求通过用户设备端发送至元数据块管理设备端即可。具体执行中可比较当前可写的数据块数量与需要设置的所述可写块数量阈值是否相等,若相等则不进行修改,若不等,则将所述可写块数量阈值修改为所需的数值,但不限于此。以三端模式的分布式存储系统为例,用户根据写入吞吐的要求,决定将可写chunk的数量设置为m;用户调用client接口,获取当前可写chunk的数量;client向master发起请求,获取当前可写chunk的数量;master收到client请求后在内存中找到文件可写chunk的数量n,将n返回client,cilent将当前可写chunk数量n返回用户;用户根据n和m的值进行判断,如果n==m,则无需修改;如果n!=m,则调用client接口,设置当前可写chunk的数量为m;client向master发起请求,将可写chunk数量设置为m。
接着,在步骤s26中元数据管理设备端根据所述新的可写块数量阈值更新所述可写块数量阈值。是指所述元数据块管理设备端接受请求根据所述请求中的新的可写块数量阈值对历史值进行更新或存储。具体地,以三端模式的分布式存储系统为例,master收到请求后将可写chunk数量设置为m,同时将这个改动持久化。优选地,可返回client改动成功;client返回用户改动成功。通过以上方法为分布式文件系统添加了一种新的数据写入方式,允许单个文件同时可以写多个chunk,同时可写chunk的个数支持动态调整,从而用户不需要自己管理多路写入的文件,只需要根据写入的需求调整可写数据块的数量,节约用户管理成本。
图5示出根据本申请另一个方面的元数据管理设备、用户设备以及主数据管理设备配合实现的一种实现在分布式存储系统中执行文件写入的设备示意图。其中,所述用户设备包括块信息请求发送装置111、块信息接受装置112、数据块写入执行装置113;所述元数据管理设备包括块信息请求获取装置121、可写数据块确定装置122、块信息反馈装置123;所述主数据管理设备端包括文件写入执行装置131、写入失败处理装置132以及数据块状态更新装置133。
其中,块信息请求发送装置111向元数据管理设备提交关于目标文件的可写数据块的块信息请求;块信息请求获取装置121获取用户设备提交的关于目标文件的可写数据块的块信息请求;可写数据块确定装置122根据所述目标文件对应的可写块数量阈值确定所述用户设备对应的多个可写数据块,其中,所述多个可写数据块包括已分配给所述目标文件的其他用户设备的可写数据块或新分配的可写数据块;块信息反馈装置123将所述多个可写数据块返回至所述用户设备;块信息接受装置112接收所述元数据管理设备基于所述块信息请求返回的、所述目标文件对应的多个可写数据块;数据块写入执行装置113向对应主数据管理设备发送关于所述目标文件的写入请求以对所述多个可写数据块中之一执行文件写入;文件写入执行装置131接收用户设备发送的对数据块执行文件写入的请求,并执行对所述数据块的文件写入;写入失败处理装置132若发生对所述数据块执行文件写入的失败,向所述用户设备报告失败信息,并拒绝与所述用户设备对应同一文件的其他用户设备对所述数据块执行文件写入的请求;数据块状态更新装置133更新所述数据块的状态为不可写,并向对应元数据管理设备报告所述数据块更新后的状态。
具体地,所述用户设备中块信息请求发送装置111向元数据管理设备提交关于目标文件的可写数据块的块信息请求;所述元数据管理设备中块信息请求获取装置121获取用户设备提交的关于目标文件的可写数据块的块信息请求。其中,所述用户设备端是指分布式存储系统中用于为用户提供各种接口的端口模块,以三端模式的分布式存储系统为例,所述用户设备端即为客户端即client,下文这三种代称均指代用户设备端。所述元数据管理设备端是指分布式存储系统中管理分布式存储系统中元数据的模块,以三端模式的分布式存储系统为例,所述元数据管理设备端即为master也就是命名空间管理模块。所述目标文件即为需要执行写入的文件,通常在分布式存储系统中会预先创建好但不限于此,所有需要执行写入的文件均可成为目标文件。所述数据块是指一段用户逻辑数据,以字节流的形式存储,用于目标文件的数据写入,以三端模式的分布式存储系统为例,数据块即为该系统中所称的chunk。所述关于目标文件的可写数据块的块信息是指可以用于执行目标文件写入的当前可写的数据块及其位置,数量等信息。所述提交和获取请求的方法包括但不限于通过分布式存储系统自有接口进行,以三端模式的分布式存储系统为例,client客户端启动,在此因为是多进程同时对一个文件进行写入,所以是多个客户端均向master发送获取目标文件f所有可以写的chunk的信息的请求。通过上述动作,可以使得元数据管理设备端发起对目标文件可写数据块的块信息的查找,从而使得文件写入流程启动。
本领域技术人员应能理解上述发送和获取关于目标文件的可写数据块的块信息请求的方式仅为举例,其他现有的或今后可能出现的发送和获取关于目标文件的可写数据块的块信息请求的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,所述元数据管理设备中可写数据块确定装置122根据所述目标文件对应的可写块数量阈值确定所述用户设备对应的多个可写数据块,其中,所述多个可写数据块包括已分配给所述目标文件的其他用户设备的可写数据块或新分配的可写数据块。即根据可写块数量阈值将与所述阈值比较的符合预置数目的目标文件可写数据块分配给所述用户设备进行写入,当若干用户设备同时对目标文件进行写入,所分配给用户设备的可写数据块列表是一致的,例如,所述可写块数量阈值为m,则以三端模式的分布式存储系统为例,元数据块管理设备端master收到请求后在内存中找到目标文件f所有可以写的chunk的信息t和可以写的chunk的数量m,若t大于或等于m则确定这t个可写数据块chunk为目标文件f所对应的可写数据块。所述可写块数量阈值是指所设置的控制可写数据块数量的阈值,在此,块即指代数据块,此指代上下文均通用,所述可写块数量阈值可根据写入吞吐量或速率的要求进行设置,本阈值的存在使得用户不需要自己管理多路写入的文件,只需要根据写入的需求调整可写数据块的数量,此外,所述可写块数量阈值亦可以根据系统的要求设置系统自行调整,或进行初始设定。所述用户设备对应的多个可写数据块是指每个写入文件可以有一个以上的可写数据块,因此对其进行写入的用户设备也对应多个可写数据块,在三端模式的分布式存储系统中,现有技术仅支持每个目标文件在元数据块管理设备端master有一个可写数据块,在本申请的实施例中可以通过对用户设备端以及元数据管理设备端的接口间的协议进行设置,使得每个目标文件在元数据块管理设备端有多个可写数据块,从而能够达到单文件写入时支持多个数据块同时写入的目的,使得文件写入不受限于单个机器的物理资源,进而提高单文件写入的效率、降低写入热点的形成概率。
其中,在本申请的实施例中通过对用户设备端以及元数据管理设备端的接口间的协议进行设置的方法,以三端模式的分布式存储系统为例,在元数据块管理设备端master中设置如下:在面向用户设备端client的服务和协议方面,对于获取文件可写数据块chunk信息的服务:扩展现有协议,增加对可写的数据块chunk有多个的支持;对于可写数据块chunk数量的服务:增加设置文件可写数据块chunk数量的协议和服务,增加获取文件可写数据块chunk数量的协议和服务。在用户设备端client中设置如下:在面向元数据块管理设备端master协议方面:对于获取文件可写数据块chunk信息的协议:扩展现有协议,增加对可写的数据块chunk有多个的支持;对于可写数据块chunk数量的接口:增加设置文件可写数据块chunk数量的协议,增加获取文件可写数据块chunk数量的协议;在对于在面向用户的接口方面:对于可写数据块chunk数量的接口:增加设置文件可写数据块chunk数量的接口,增加获取文件可写数据块chunk数量的接口。以上设置使得每个目标文件在元数据块管理设备端有多个可写数据块,从而能够达到单文件写入时支持多个数据块同时写入的目的,满足用户需求,同时在元数据块管理设备端master只耗费了单个文件的内存,没有降低集群服务用户的数量。
本领域技术人员应能理解上述对用户设备端以及元数据管理设备端的接口间的协议进行设置使得每个目标文件在元数据块管理设备端有多个可写数据块的方式仅为举例,其他现有的或今后可能出现的对用户设备端以及元数据管理设备端的接口间的协议进行设置使得每个目标文件在元数据块管理设备端有多个可写数据块的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,所述元数据管理设备中块信息反馈装置123将所述多个可写数据块返回至所述用户设备;所述用户设备中块信息接受装置112接收所述元数据管理设备基于所述块信息请求返回的、所述用户设备对应的多个可写数据块。即如上文所述确定所述目标文件对应的多个可写数据块后将所述数据块及其相关信息由元数据管理设备端返回至用户设备端,所述用户设备对应的多个可写数据块即返回的每个用户设备所要写入的申请目标文件所对应的可写数据块,以三端模式的分布式存储系统为例,接上文举例,元数据管理设备端master将目标文件f所有可以写的数据块chunk的数量t及其相关信息从内存中找到并进行反馈,反馈的方式包括但不限于通过分布式存储系统自有接口进行。
其中,所述元数据管理设备端内存中的所述目标文件对应的可写数据块的数量以及相关信息的获取方式包括但不限于在获取每个在分布式存储系统中文件后,元数据管理设备端即存储其所有正在写以及允许写的数据块信息,以三端模式的分布式存储系统为例,元数据块管理设备端master在文件的元数据存储方面:负责存储每个文件当前所有正在写的数据块chunk信息,例如数据块的副本位置;负责存储每个文件当前所允许的可写数据块chunk的数量。以上信息在元数据块管理设备端master端都需要进行持久化的保存,宕机重启后不会丢失,从而使得可以在用户设备端需要目标文件是可以及时查找到。
本领域技术人员应能理解上述元数据管理设备端对每个文件数据块存储的方式仅为举例,其他现有的或今后可能出现的元数据管理设备端对每个文件数据块存储的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,所述用户设备中数据块写入执行装置113向对应主数据管理设备发送关于所述目标文件的写入请求以对所述多个可写数据块中之一执行文件写入;所述主数据管理设备中文件写入执行装置131接收用户设备发送的对数据块执行文件写入的请求,并执行对所述数据块的文件写入。即因为所述目标文件有对应的多个可写数据块,因此,在所述用户设备端获得所述可写数据块相关信息后将所述多个可写数据块进行排序,或按照默认顺序依次在接受到目标文件的写入请求后对应的主数据管设备请求写入。以三端模式的分布式存储系统为例,用户设备端client将所接到的目标文件f所有的对应的可写数据块chunk之后,在按照默认或设置的顺序对某一chunk进行写入时,寻找其相应的数据块服务器即chunksever进行相应副本的写入,其中,因为本实施例中是多进程写入,因此,将写入请求发往进行主导的主数据块服务器即primarychunksever,进而主数据服务器在接受到写入请求后,将所接受到的客户端数据进行排序,在本地存储数据的同时向从数据块服务器即secondarychunksever进行转发,主从数据块服务器的工作模式可以参考微软azure中的底层分布式存储系统中数据存储节点的工作模式,主从数据块服务器在收到写入请求后即执行对文件的写入。在此,所举例的数据块服务器,以及chunksever均是指所述主数据管理设备或从数据管理设备,在上下文三种代称通用。chunksever的信息的获取方式包括但不限于由元数据管理设备端master记录当前可写chunk所在的所有chunkserver,这部分信息以缓存的形式存在,不需要持久化,宕机重启后可以根据之前所记录的信息恢复出来,也就是从所负责存储的每个文件当前所有正在写的数据块chunk信息中进行恢复;用户设备端client存储文件当前所有可写的chunk信息,这部分信息以缓存的形式存在,不需要持久化,宕机重启后从master端重新获取。
本领域技术人员应能理解上述保存和获取数据块对应数据块服务器信息的方式仅为举例,其他现有的或今后可能出现的保存和获取数据块对应数据块服务器信息的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
接着,写入失败处理装置132若发生对所述数据块执行文件写入的失败,向所述用户设备报告失败信息,并拒绝与所述用户设备对应同一文件的其他用户设备对所述数据块执行文件写入的请求。其中,所述写入失败泛指造成写失败的场景,例如网络延时高或网络不通,以及磁盘延时高或无法写入等。因为多个用户设备同时对同一文件进行写入操作,因此,当某一用户设备对主数据管理设备发送写入请求后,该主数据管理设备对数据块写入的过程中发生写失败的情况,则主数据管理设备反馈该用户设备写入失败,同时拒绝所有用户设备新发起的写入请求,从而避免对写失败的数据块再次发起写入进而导致失败。以三端模式的分布式存储系统为例,即当primarychunkserver遇到failover的时候,一方面,对于已经接受的请求,返回client失败,拒绝所有client新发起的写请求。
接着,数据块状态更新装置133更新所述数据块的状态为不可写,并向对应元数据管理设备报告所述数据块更新后的状态。即将当前写失败的数据块设置为不可写的状态,并将这一状态反馈至元数据管理设备端,从而将其所存储的所述数据块进行更新,使得后续会导致写入失败的数据块不会被再次写入。以三端模式的分布式存储系统为例,即primarychunkserver将写入失败的chunk状态设置为不可写,并持久化存储,同时将该写入失败的chunk的状态汇报给master,要求master进行持久化存储。在此,数据块不可写的状态的设置由主数据管理设备端和元数据管理设备端负责,避免了不必要的数据块切换,降低了非全局写入失败场景下的写延时的增长,提高了系统可用性。同时,因为避免了不必要的数据块切换,减少了写入不多即切换所产生的小数据块的比例,提高了系统的服务规模。
优选地,所述设备包括数据块状态接受装置124(未示出),所述元数据管理设备端中所述数据块状态接受装置124接收对应主数据管理设备发送的所述多个可写数据块之一的数据块更新状态,其中,所述数据块更新状态为不可写。即将上述主数据管理设备送的某个数据块不可写的状态进行接收并在本地持久化存储,例如,接上文举例,master接收到primarychunkserver所汇报的某个数据块被设置为不可写的信息后,根据其要求对这一状态进行本地持久化存储,从而避免不可写的数据块再次被用户设备端所获取从而造成不必要的写失败。
本领域技术人员应能理解上述主数据管理设备端和元数据管理设备端处理写失败数据块的方式仅为举例,其他现有的或今后可能出现的主数据管理设备端和元数据管理设备端处理写失败数据块的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述设备还包括数据块写尽处理装置114(未示出),所述用户设备中数据块写尽处理装置114当所述多个可写数据块均为不可写时,向所述元数据管理设备重新提交关于所述目标文件的可写数据块的块信息请求。是指在对目标文件所对应的数据块进行写入时,若遇到从元数据管理设备端所获得的可写数据块均写完或不可写的情况,则需要向元数据管理设备重新提交获取同样目标文件的可写数据及其相关信息的请求,此时,如前文中实施例所述,将之前的步骤重新进行一遍。以三端模式的分布式存储系统为例,当client发现缓存中没有可写的chunk时,向master发送获取文件f所有可以写的chunk的信息的请求,重新分配获取可写chunk的数量,使得所述用户设备端获取目标文件所对应的新的可写数据块,从而继续进行文件的写入。
优选地,所述设备还包括写入失败删除装置115(未示出),所述用户设备中写入失败删除装置115若发生对所述数据块执行文件写入的失败,将写失败对应的所述目标文件对应的数据块信息删除。其中,所述写失败的情况包括主数据管理设备对数据块写入所发生的失败,也包括用户设备端与主数据管理设备之间所发生的失败情况,例如,两者之间用于传递信息的网络出现故障。在用户设备端获取到写入失败信息后,将这一数据块信息直接进行删除,进而直接在从元数据管理设备端所获取的目标文件对应的可写数据块中选择另一个数据块重新进行写入。以三端模式的分布式存储系统为例,当client遇到写入失败,将写入失败对应的chunk信息从缓存中删除,但不改变这个chunk的状态,进而从缓存中所有的当前可写chunk中按顺序选择下一个chunk进行重试,从而避免了在,降低了非全局写入失败场景下的写延时的增长。
图6示出根据本申请另一个优选实例的一种实现在分布式存储系统中执行文件写入的设备中可写数据块确定装置示意图。其中,所述可写数据块确定装置122包括候选数据块确定单元1221、直接反馈单元1222、重分配反馈单元1223。
其中,候选数据块确定单元1221确定所述目标文件对应的所有可写的数据块;直接反馈单元1222若所述所有可写的数据块的数量等于或大于所述目标文件对应的可写块数量阈值,则将所述所有可写的数据块作为所述用户设备对应的多个可写数据块;否则,重分配反馈单元1223为所述目标文件分配其他可写的数据块,并将所述其他可写的数据块及所述所有可写的数据块作为所述用户设备对应的多个可写数据块,其中,所述多个可写数据块的数量等于可写块数量阈值。
具体地,候选数据块确定单元1221确定所述目标文件对应的所有可写的数据块。是指确定所述目标文件的所有可写数据块信息,获取的方法包括如上文所述从所述元数据管理设备端所存储的元数据信息中的每个文件当前所允许的可写数据块的数量,即以三端模式的分布式存储系统为例,因为元数据块管理设备端master在文件的元数据存储方面:负责存储每个文件当前所有正在写的数据块chunk信息,例如数据块的副本位置;负责存储每个文件当前所允许的可写数据块chunk的数量,因此可以从master端中找到目标文件f的所有可写数据块,假设所找到的目标文件f的所有可写数据块为t。
接着,直接反馈单元1222若所述所有可写的数据块的数量等于或大于所述目标文件对应的可写块数量阈值,则将所述所有可写的数据块作为所述用户设备对应的多个可写数据块。即将根据系统默认或用户根据写入要求所设置的可写块数量阈值与所获得的目标文件的所有可写数据块数量进行比较,若所述目标文件的所有可写数据块数量不小于所述可写块数量阈值则将所述目标文件的所有可写数据块及其相关信息直接由元数据管理设备端反馈给用户设备端,使之作为用户设备需要写入的目标文件对应的可写数据块进行写入。以三端模式的分布式存储系统为例,如果当前目标文件f已有的chunk数量不小于可写块数量阈值m,则将这些chunk信息返回client。
接着,若所述所有可写的数据块的数量小于所述目标文件对应的可写块数量阈值,重分配反馈单元1223为所述目标文件分配其他可写的数据块,并将所述其他可写的数据块及所述所有可写的数据块作为所述用户设备对应的多个可写数据块,其中,所述多个可写数据块的数量等于可写块数量阈值。即将根据系统默认或用户根据写入要求所设置的可写块数量阈值与所获得的目标文件的所有可写数据块数量进行比较,若所述目标文件的所有可写数据块数量小于所述可写块数量阈值,则重新由元数据管理设备端分配从所存储或新被释放的数据块中分配差额数量的数据块,使得所述目标文件的可写数据块数量与所述可写块数量阈值相等,进而发送给各用户设备作为用户设备对应的若干可写数据块。以三端模式的分布式存储系统为例,如果当前文件f已有的chunk数量小于可写块数量阈值m,则重新分配足够数量的chunk,新分配的chunk数量加已有的chunk数量等于可写块数量阈值m,将所有chunk信息返回client。在此,每个由于单文件是多进程写入,因此,每个client均保留一份完成的相对独立的目标文件对应的可写chunk的信息,后期每个client各自维护各自缓存中的chunk信息,且每个之间的更新时间不同,随着时间的推移会有些许差异。通过上述方式,可以通过可写块数量阈值控制,使得可写数据块维持在一定值,从而使得用户不需要对文件写入进行人工控制,减小用户的管理成本。
本领域技术人员应能理解上述确定目标文件对应可写数据块的方式仅为举例,其他现有的或今后可能出现的目标文件对应可写数据块的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述为所述目标文件分配其他可写的数据块包括:根据每个文件当前对应的在写数据块及每个在写数据块对应的块服务器,为所述目标文件分配其他可写的数据块,其中,每个其他可写的数据块对应的块服务器与每个在写数据块对应的块服务器小于或等于预定的块服务器重复阈值。即在分配新的可写数据块所对应的数据块服务器时,尽量避免其所分配的数据块服务器是元数据管理设备端中已经记录的,从而减少数据块服务器同时接受多个数据块的写入请求从而造成写入热点的情况。所述块服务器是指chunksever,即数据管理模块本文亦称之为数据块服务器或块服务器,用于维护数据块副本的模块,提供数据块副本的访问的接口。所述块服务器重复阈值是指允许块服务器同时提供不同的数据块进行写入的数量,例如,所述块服务器重复阈值为3,即每个块服务器仅可对三个数据块提供服务。对数据块对应的块服务器的具体分配方式,以三端模式的分布式存储系统为例,在元数据管理设备端对chunk位置的分配方面:记录当前可写chunk所在的所有chunkserver,这部分信息以缓存的形式存在,不需要持久化,宕机重启后可以根据上面记录的元数据信息恢复出来。分配新的chunk的时候,根据块服务器重复阈值避免新分配的chunkserver与上述步骤记录的chunkserver重复。或者这一步操作采用尽量而为的策略,当集群可写的chunkserver数量太少,无法满足不重复的要求的时候,也允许chunk的分配动作成功。文件内部的数据分部信息可见,有效的避免多个chunk分布在相同的chunkserver上,消除热点,保证了写入吞吐量的实际效果。
图7示出根据本申请另一个优选实例的一种实现在分布式存储系统中执行文件写入的设备中数据块写入请求发送装置示意图。所述数据块写入执行装置113包括写入请求接受单元1131、数据块写入请求发送单元1132、数据块更新单元1133。
其中,写入请求接受单元1131接收关于所述目标文件的写入请求;数据块写入请求发送单元1132将所述写入请求转发至所述多个可写数据块中当前第一个可写数据块对应的主数据管理设备,以对所述当前第一个可写数据块对应的一个或多个数据块副本执行文件写入;数据块更新单元1133更新所述多个可写数据块中当前第一个可写数据块。
具体地,写入请求接受单元1131接收关于所述目标文件的写入请求。即用户设备端接受关于所述目标文件的写入请求,因为所述目标文件可写入的数据块数量大于所述可写块数量阈值,因此支持用户同时发起相应数量的写入请求。以三端模式的分布式存储系统为例,支持用户同时发起m个写请求,m等于当前可写chunk的数量。若干用户设备端client同时接受若干关于单个文件的写请求,使得单个文件的写入速率提升,且多进程写入过程中多个客户端对同一个数据块进行写入,从而减小写入失败后重试所致的延时。
接着,数据块写入请求发送单元1132将所述写入请求转发至所述多个可写数据块中当前第一个可写数据块对应的主数据管理设备,以对所述当前第一个可写数据块对应的一个或多个数据块副本执行文件写入。即用户设备端在接受到所述目标文件对应的多个可写数据块后按照默认排序或依据一定的排序准则对所述可写数据块的主数据管理设备进行寻找,并传达相应的写入请求,从而在数据块及其副本上进行写入。以三端模式的分布式存储系统为例,client收到可写chunk信息后按顺序缓存,同时将下次可写chunk的序号i设置为第一个可写chunk的序号,client收到用户的写入请求,选取序号为i的chunk,将数据写入请求发往这个chunk的所有primarychunkserver,同时将i序号修改为下一个可写chunk的序号。
接着,数据块更新单元1133更新所述多个可写数据块中当前第一个可写数据块。即用户设备端按顺序对所有写入请求进行响应,即按顺序对所述数据块执行写入,当所述数据块排序所在的第一个可写数据块被执行写入后,将后续的所述可写数据块更新排序信息,例如上文举例,client收到用户的写入请求,选取序号为i的chunk,将数据写入请求发往这个chunk的所有primarychunkserver,同时将i序号修改为下一个可写chunk的序号,即每当用户发起写请求的时候,根据序号i选择相应的chunk,同时将i指向下一个chunk,这样以轮询的方式访问所有的chunk,避免某个chunk成为写入的热点。
本领域技术人员应能理解上述对可写数据块进行轮询写入的方式仅为举例,其他现有的或今后可能出现的对可写数据块进行轮询写入的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述数据块写入执行装置113还包括:新写入请求接受单元1134(未示出),所述新写入请求接受单元1134当接收到所述主数据管理设备返回的文件写入成功信息,回收所述当前第一个可写数据块以接收关于所述目标文件的新写入请求。是指在某个可写数据块及其副本进行写入后,当主数据管理设备反馈写入成功后,用户设备端返回用户该数据块所对应的写入请求写入成功,进而因为当前所述可写数据块没有写满触发重新分配可写数据块的情况,因此可重新接受用户关于所述目标文件的写入请求。以三端模式的分布式存储系统为例,当某个chunk的对应的primarychunkserver返回client成功的时候,client返回用户成功,写流程返回接收用户新的请求的阶段,从而充分利用可写数据块同时使得单文件的写入保持在一定数量数据块的同时写入中,提升单文件写入速率。
图8示出根据本申请另一个方面的元数据管理设备以及用户设备配合实现的一种实现在分布式存储系统中执行文件写入的设备中实现修改可写块数量阈值功能的示意图。为实现所述修改可写块数量阈值功能,所述用户设备包括可写块数量阈值设置请求发送装置116。所述元数据管理设备包括可写块数量阈值设置请求接受装置125、可写块数量阈值更新装置126。
其中,可写块数量阈值设置请求发送装置116将用户提交的关于所述目标文件的可写块数量阈值设置请求发送至所述元数据管理设备,其中,所述可写块数量阈值设置请求包括关于所述目标文件的新的可写块数量阈值。可写块数量阈值设置请求接受装置125接收所述用户设备发送的关于所述目标文件的可写块数量阈值设置请求,其中,所述可写块数量阈值设置请求包括关于所述目标文件的新的可写块数量阈值;可写块数量阈值更新装置126根据所述新的可写块数量阈值更新所述可写块数量阈值。
具体地,可写块数量阈值设置请求发送装置116将用户提交的关于所述目标文件的可写块数量阈值设置请求发送至所述元数据管理设备,其中,所述可写块数量阈值设置请求包括关于所述目标文件的新的可写块数量阈值。接着,可写块数量阈值设置请求接受装置125接收所述用户设备发送的关于所述目标文件的可写块数量阈值设置请求,其中,所述可写块数量阈值设置请求包括关于所述目标文件的新的可写块数量阈值;是指所述可写块数量阈值是可以根据用户的写入需求进行调整,将调整的具体数据和请求通过用户设备端发送至元数据块管理设备端即可。具体执行中可比较当前可写的数据块数量与需要设置的所述可写块数量阈值是否相等,若相等则不进行修改,若不等,则将所述可写块数量阈值修改为所需的数值,但不限于此。以三端模式的分布式存储系统为例,用户根据写入吞吐的要求,决定将可写chunk的数量设置为m;用户调用client接口,获取当前可写chunk的数量;client向master发起请求,获取当前可写chunk的数量;master收到client请求后在内存中找到文件可写chunk的数量n,将n返回client,cilent将当前可写chunk数量n返回用户;用户根据n和m的值进行判断,如果n==m,则无需修改;如果n!=m,则调用client接口,设置当前可写chunk的数量为m;client向master发起请求,将可写chunk数量设置为m。
接着,可写块数量阈值更新装置126根据所述新的可写块数量阈值更新所述可写块数量阈值。是指所述元数据块管理设备端接受请求根据所述请求中的新的可写块数量阈值对历史值进行更新或存储。具体地,以三端模式的分布式存储系统为例,master收到请求后将可写chunk数量设置为m,同时将这个改动持久化。优选地,可返回client改动成功;client返回用户改动成功。通过以上方法为分布式文件系统添加了一种新的数据写入方式,允许单个文件同时可以写多个chunk,同时可写chunk的个数支持动态调整,从而用户不需要自己管理多路写入的文件,只需要根据写入的需求调整可写数据块的数量,节约用户管理成本。
此外,本申请提供了一种用于在分布式存储系统中执行文件写入的元数据管理设备,其中,该设备包括:
处理器;
以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
获取用户设备提交的关于目标文件的可写数据块的块信息请求;
根据所述目标文件对应的可写块数量阈值确定所述用户设备对应的多个可写数据块,其中,所述多个可写数据块包括已分配给所述目标文件的其他用户设备的可写数据块或新分配的可写数据块;
将所述多个可写数据块返回至所述用户设备。
此外,本申请提供了一种用于在分布式存储系统中执行文件写入的用户设备,其中,该设备包括:
处理器;
以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
向元数据管理设备提交关于目标文件的可写数据块的块信息请求;
接收所述元数据管理设备基于所述块信息请求返回的、所述用户设备对应的多个可写数据块;
向对应主数据管理设备发送关于所述目标文件的写入请求以对所述多个可写数据块中之一执行文件写入。
此外,本申请提供了一种用于在分布式存储系统中执行文件写入的主数据管理设备,其中,该设备包括:处理器;
以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
接收用户设备发送的对数据块执行文件写入的请求,并执行对所述数据块的文件写入;
若发生对所述数据块执行文件写入的失败,向所述用户设备报告失败信息,并拒绝与所述用户设备对应同一文件的其他用户设备对所述数据块执行文件写入的请求;
更新所述数据块的状态为不可写,并向对应元数据管理设备报告所述数据块更新后的状态。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。