数据存储的方法和存储系统与流程

文档序号:11154707阅读:1249来源:国知局
数据存储的方法和存储系统与制造工艺

本申请涉及计算机存储领域,并且更具体地,涉及数据存储的方法和存储系统。



背景技术:

镜像是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。在服务器上常用镜像操作是组建独立磁盘冗余阵列(Redundant Array Of Independent Disks,RAID)1,RAID1是将一个两块硬盘所构成的RAID磁盘阵列,其容量仅等于一个硬盘的容量,因为另一块只是当作数据“镜像”。

在分布式存储系统中,为了达到可靠性的要求,选择在节点间使用镜像机制。将本地数据,复制一份在镜像节点保存,在故障情况下,快速恢复业务。

在现有技术中,待存储数据发送到镜像节点,镜像节点需要为待存储数据配置内存索引,内存索引用于方便读取该镜像节点存储的数据;之后镜像节点需要申请资源空间,并设置资源空间的存储地址与内存索引的映射关系;最后将待存储数据存储到存储地址对应的资源空间中。现有技术镜像节点存储待存储数据的上述操作对镜像节点的中央处理器(Central Processing Unit,CPU)的占用较高。



技术实现要素:

本申请实施例提供一种数据存储的方法和存储系统,能够减少镜像存储设备存储数据对CPU的占用。

第一方面,本申请实施例提供了一种数据存储的方法,该方法应用于包括第一存储设备和至少一个第二存储设备的存储系统,其中,该第二存储设备为该第一存储设备的镜像存储设备,该方法包括:第一存储设备接收写请求消息,该写请求消息携带目标数据;该第一存储设备根据该目标数据,生成目标日志,该目标日志包括该目标数据和用于标识该目标数据的标识信息;该第一存储设备向该第二存储设备发送该目标日志;该第二存储设备存储该目标日志,且该存储该目标日志不需要配置内存索引。

本申请实施例应用于包括第一存储设备和至少一个第二存储设备的存储系统中,且第二存储设备为一类第一存储设备的镜像存储设备。第一存储设备接收写请求消息,写请求消息中携带待写的数据(表示为目标数据),根据该目标数据,生成相应的目标日志,并向第二存储设备发送该目标日志将该目标日志直接存储到第二存储设备中,由于该目标日志包括用于表示该目标数据的标识信息,这样第二存储设备存储该目标日志时并不需要创建内存索引,相比现有技术中,第二存储设备需要配置内存索引而言,本申请可以直接存储该目标日志,从而节省了第二存储设备配置内存索引时对CPU的占用。

在一些可能的实现方式中,该方法还包括:该第二存储设备在完成存储该目标日志时,向该第一存储设备发送存储完成消息;该第一存储设备存储该目标日志;该第一存储设备在完成该目标日志的存储和接收到该存储完成消息之后,发送写请求响应消息。

第一存储设备完成写入目标日志,且接收到第二存储设备发送的存储完成消息之后,向IO设备发送写请求响应消息,这样避免现有技术中需要等待将目标数据存储到内存索引对应的资源空间之后才能向IO设备返回写请求响应消息,从而减少了发出写请求到收到写请求响应消息的时延。

在一些可能的实现方式中,该第二存储设备包括多个资源空间;其中,该第二存储设备存储该目标日志包括:该第二存储设备根据该标识信息,确定存储该目标日志的第一资源空间,该第一资源空间为该第二存储设备的多个资源空间中满足该目标日志的资源需求的任一资源空间;该第二存储设备将该目标日志存储到该第一资源空间中。

第二存储设备根据该标识信息选择合适的资源空间(表示为第一资源空间),将该目标日志存储到第二存储设备的第一资源空间中。此外,第二存储设备可以根据标识信息识别目标数据,以目标日志的形式可以将目标数据按照顺序进行有规律的存储,这样第二存储设备可以不需要为目标数据配置内存索引,从而使得节省了第二存储设备的CPU占用。

在一些可能的实现方式中,该第二存储设备包括多个资源空间;该方法还包括:该第一存储设备获取第二资源空间的存储地址和该第二资源空间的存储容量,该第二资源空间为该第二存储设备的多个资源空间中任一资源空间;该第一存储设备根据该第二资源空间的存储容量和该标识信息,确定该第二资源空间是否满足该目标日志的资源需求;该第一存储设备在该第二资源空间满足该目标日志的资源需求时,根据RDMA编码方式、该目标日志和该第二资源空间的存储地址,生成RDMA消息,该RDMA消息包括该第二资源空间的存储地址和该目标日志;其中,该第一存储设备向该第二存储设备发送该目标日志包括:该第一存储设备向该第二存储设备的第二资源空间发送该RDMA消息;其中,该第二存储设备存储该目标日志包括:该第二存储设备的第二资源空间根据该RDMA消息,存储该目标日志。

第二存储设备在将目标日志存储到第二资源空间之后,就可以向第一存储设备返回存储完成消息。本申请实施例相比第二存储设备接收目标日志,并需要为目标日志选择合适的资源空间,能够更进一步节省了第二存储设备的CPU的占用。

在一些可能的实现方式中,该第一存储设备获取第二资源空间的存储地址和该第二资源空间的存储容量包括:该第一存储设备向该第二存储设备发送资源请求消息,该资源请求消息用于请求存储该目标日志的该第二资源空间;该第一存储设备接收该第二存储设备根据该资源请求消息发送的资源请求响应消息,该资源请求响应消息携带该第二资源空间的存储地址和该第二资源空间的存储容量。

第一存储设备可以向第二存储设备发送资源请求消息,第二存储设备在多个资源空间中选择任意一个资源空间(表示为第二资源空间),并向第一存储设备发送资源请求响应消息,且在资源请求响应消息中携带该第二资源空间的存储地址和该第二资源空间的剩余容量,从而使得第一存储设备能够为目标日志选择合适的资源空间。第一存储设备可以只获取一次第二存储设备的资源空间的地址和存储容量,直至该资源空间没有剩余资源,或者剩余资源不能够满足当前待写入数据的大小,然后才进行下一次获取第二存储设备的资源空间的地址和存储容量。

在一些可能的实现方式中,该方法还包括:该第一存储设备为该目标数据配置内存索引;该第一存储设备根据该内存索引,确定存储该目标数据的该第一存储设备的资源空间,其中,该第一存储设备的资源空间的存储地址对应于该内存索引;该第一存储设备将该目标数据写入该第一存储设备的资源空间中。

第一存储设备为目标数据配置内存索引,以及为目标数据申请存储资源(表示为第一存储设备的资源空间),且配置已经申请的存储资源的存储地址与内存索引的映射关系,该映射关系用于后续第一存储设备能够根据内存索引读取到对应的存储地址中存储的数据,最后将目标数据写入到存储地址对应的资源空间中。这样第一存储设备将目标数据存储到有内存索引对应的资源空间中,并不会延长影响返回写请求响应消息的时间。

第二方面,本申请实施例提供了一种存储系统,该存储系统可以实现上述方面所涉及方法中第一存储设备和第二存储设备所执行的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个上述功能相应的单元或模块。

第三方面,提供了一种存储系统,该存储系统的结构中包括存储器,该处理器被配置为支持上述方面所涉及方法中第一存储设备和第二存储设备所执行的功能。该通信接口用于支持该第一存储设备、第二存储设备与其它网元之间的通信。该存储器用于与处理器耦合,其保存该第一存储设备、该第二存储设备必要的程序指令和数据。

第四方面,提供了一种计算机存储介质,该计算机存储介质中存储有程序代码,该程序代码用于指示执行上述存储系统所用的计算机软件指令,其包含用于执行上述方面所设计的程序。

基于上述技术方案,第一存储设备通过接收携带目标数据的写请求消息,根据该写请求消息中的目标数据生成包括该目标数据和用于标识该目标数据的标识信息的目标日志,并向该第二存储设备发送该目标日志,第二存储设备存储该目标日志,且存储该目标日志不需要配置内存索引,这样第一存储设备生成包括标识目标数据的标识信息的目标日志,第二存储设备可以存储目标日志不需要配置内存索引,从而减少了对第二存储设备的CPU的占用。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例的存储系统的架构示意图;

图2是本申请实施例的存储节点和管理节点的结构示意图;

图3是本申请实施例Cache模块的工作流程图;

图4a、图4b和图4c是本申请实施例的日志格式的示意图;

图5是本申请实施例的资源空间的结构示意图;

图6是现有技术数据存储的方法的示意性流程图;

图7是本申请一个实施例的数据存储的方法的示意性流程图;

图8是本申请另一个实施例的数据存储的方法的示意性流程图;

图9是本申请实施例的存储系统的示意性框图;

图10是本申请实施例的存储系统的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

图1示出了本申请实施例的存储系统的架构示意图。如图1所示,该存储系统包括节点和网络。其中,节点分为用户节点(可以有多个用户节点:用户节点200a、用户节点200b、用户节点200c和用户节点200d)、存储节点(可以有多个存储节点:存储节点100a、存储节点100b、存储节点100c和存储节点100d)和管理节点300。网络分为用于承载用户输入输出(Input/Output,IO)数据的前端网络400和用于承载业务数据的后端网络500。本申请实施例中的业务数据可以是指支持RDMA的镜像数据。

用户节点用于在前端接收用户IO数据,通过前端网络转发给存储节点。存储节点用于存储用户业务数据,同时高速缓冲存储器(Cache)功能也在存储节点上。管理节点用于负责维护存储节点间的镜像关系。

图2示出了存储节点和管理节点的结构示意图。其中,存储节点可以区分IO的主存储节点(以图1中的100a为例)和IO的镜像存储节点(以图1中的100b为例)。IO的主节点100a主要包括前端IO模块110a、后端磁盘模块120a和Cache模块130a。前端IO模块110a用于负责用户IO接收、IO流控以及IO错误处理。后端磁盘模块120a用于提供用户业务数据通过磁盘读写功能。Cache模块130a分为日志层131a、资源层132a和本地存储133a。管理节点300包括镜像管理模块310,镜像管理模块310用于在管理节点上负责维护节点间镜像关系,并通知Cache模块130。镜像存储节点100b的结构与主存储节点100a的结构相同,在此不再赘述。

图3示出了Cache模块130a的内部工作流程。日志层131a接收前端IO模块110a发送的IO数据,并将IO数据转换为日志形式(例如,预写日志(Write-ahead logging,WAL log)格式的数据)发送给资源层132a;资源层132a负责资源(例如,非易失性的双列内存模块(Non-Volatile Dual In-line Memory Module,NVDIMM)资源)的空间分配,并将日志发送到镜像节点110b进行存储。主存储节点100a接收到存储完成消息,本地存储133a在本地存储日志。

为了方便理解本申请实施例,首先在此介绍本申请实施例之前引入以下几个要素。

远程直接数据存取(Remote Direct Memory Access,RDMA)通过网络将数据直接传入镜像节点的存储区,而不对操作系统造成任何影响,这样就可以减少镜像端的CPU的开销。具体RDMA实现是通过发送方和接收方针对目的缓存区的位置进行协商,与传统的TCP连接不同的是要对传统传输控制协议(Transmission Control Protocol,TCP)头部数据结构进行一些改动以支持RDMA协议,主要是增加一个表示目的地址的字段(即生成RDMA消息)。RDMA读写操作要求源端和目的端都知道目的缓存区的位置和大小,如果从主机的内存通过RDMA向另一个主机内存写一块数据,则必须提供目的缓存区的地址,并确保这个缓存区足够大来接收这块数据。

WAL log日志格式分为三种类型:简单型日志、复合型日志和命令型日志。

简单型日志只针对元数据(即是描述数据属性的信息,用来指示存储位置、历史数据、资源查找、文件记录等功能)的一个对象的日志,或数据的一个文件的日志。在一个写IO只包含一个Cache模块的数据时,通常使用简单型日志格式。简单型日志格式如图4a所示,包括魔术字部分、数据部分、日志头部分和日志尾部分。魔术字部分存储一组魔术字表示日志开始,日志头中存放元数据,日志尾中存放日志的循环冗余码校验(Cyclic Redundancy Check,CRC)校验信息。

复合型日志格式如图4b所示,在一个写IO包含多个Cache模块的数据时,需要转换为多条简单日志,再对多条简单日志封装一个复合日志头,组合成一条复合型日志,来保证这多条log的一致性。这条复合型日志的数据部分存放着多条简单日志,具体日志个数及数据长度在日志头中保存。

命令型日志格式如图4c所示,当一个写命令或者其他命令的IO下发数据,这部分IO携带的数据将不需要在Cache中保存,为了镜像节点能够感知到,也需要写入一条日志,描述实现数据的位置以及大小。其中,命令型日志头中描述失效范围信息。

资源层的资源分配是指将镜像的空间分为多个段(Segment)(通常使用8M NVDIMM空间)来管理。每个Segment可以存放多条WAL log(如图5所示),WAL log采用连续存放方式,每条WAL log首尾相连。魔术字部分存储一组魔术字表示一个Segment的开始,日志头记录Segmnet状态是否可用以及Segment序号等描述信息。

图6示出了现有技术数据存储的方法,具体流程如下所示:

101、IO前端模块向本地缓存模块发送写请求消息,该写请求消息携带待写的目标数据。

102、本地缓存模块接收到该目标数据,并将该目标数据发送给镜像缓存模块以使镜像缓存模块存储该目标数据。

103、镜像缓存模块接收该目标数据,并为该目标数据配置内存索引,该内存索引用于方便读取该目标数据,具体地,镜像缓存模块可以先在已有的索引表查询是否存在该目标数据对应的内存索引,若不存在,为该目标数据创建相应的内存索引;

104、镜像缓存模块根据内存索引为目标数据申请存储资源(即配置合适的用于存储目标数据的资源空间),且设置目标数据的内存索引与申请的资源空间的存储地址的映射关系,使得根据索引以及索引对应的存储地址能够读取存储空间中的数据。

105、镜像存储模块将目标数据存储到申请的资源空间中。

106、镜像缓存模块完成目标数据的存储后,向本地缓存模块发送存储完成消息。

107、本地缓存模块接收到镜像缓存模块发送的存储完成消息后,可以开始在本地缓存中进行存储目标数据,首先为目标数据配置内存索引。具体流程与镜像节点存储数据的流程(如上述步骤103和步骤104)相同,在此不进行赘述。

108、本地缓存模块为目标数据申请存储资源。

109、本地缓存模块将目标数据存储到申请的资源空间中。

110、本地缓存模块完成目标数据的存储后,向IO前端模块发送写请求响应消息。

因此,现有技术中,镜像缓存模块存储镜像数据时需要经过为目标数据配置内存索引、申请存储资源(镜像缓存模块需要根据目标数据的大小、类型等各种属性找到合适的资源空间,并配置资源空间的存储地址与内存索引的映射关系)和并将目标数据存储到镜像缓存模块的这些步骤都需要CPU参与,从而使得镜像存储节点的CPU占用较高。

本申请实施例应用于第一存储设备正常工作的情况下,第一存储设备存储数据以及第二存储设备存储数据的场景。

应理解,本申请实施例的第一存储设备对应于上述图2的主存储节点100a,第二存储设备对应于上述图2的镜像存储节点100b;或者说本申请实施例的第一存储设备就是上述图2的主存储节点100a,第二存储设备就是上述图2的镜像存储节点100b;或者该第一存储设备和第二存储设备分别为具有上述Cache模块130a功能的设备和上述Cache模块130b功能的设备,本申请对此不进行限定。

图7示出了根据本申请一个实施例的数据存储的方法的示意性流程图。本申请实施例中的第一存储设备可以是图1中的存储节点100a、100b、100c和100d中的任意一个存储节点,第二存储设备可以是通过管理节点300确定的主存储节点的镜像存储节点。

701、第一存储设备接收写请求消息,该写请求消息携带目标数据。

本申请实施例应用于包括第一存储设备和至少一个第二存储设备的存储系统中,且第二存储设备为一类第一存储设备的镜像存储设备。此外,第一存储设备也可以是第二存储设备的镜像存储设备,也就是说,第一存储设备和第二存储设备可以互为镜像存设备,本申请对此不进行限定。

第一存储设备可以是图2中的Cache模块130a,Cache模块130a接收IO前端模块110a发送的写请求消息,但本申请并不限于此。第一存储设备接收写请求消息,写请求消息中携带待写的数据(表示为目标数据),该目标数据可以是需要同一个缓存处理的数据,也可以是需要多个缓存单元处理的数据;或者该目标数据不需要在缓存中保存。

应注意,该第一存储设备可以包括多个内存区域、处理器、控制器、且控制器上运行着操作系统等,第二存储设备可以与第一存储设备相同,也可以不同,本申请对此不进行限定。

702、第一存储设备根据该目标数据,生成相应的目标日志。

该目标日志包括目标数据和用于标识目标数据的标识信息,该标识信息为指示目标数据属性的各种信息。例如,日志格式如图4a、图4b和图4c所示,以简单型日志为例,简单型日志中包括魔术字部分、数据部分和日志头部分和日志尾部分。存储设备能够根据魔术字部分识别日志的开始;而日志头中存储元数据,元数据用于指示数据存储位置、历史数据、资源查找、文件记录等功能;日志尾部分存放日志的CRC校验信息,保证了数据的可靠性。因此,本申请实施例中的目标日志中包括的标识信息可以是日志头、日志尾以及魔术字部分中存储的所有信息。

日志格式包括简单型日志、复合型日志和命令型日志。若目标数据需要一个缓存处理,则第一存储存储设备将该目标数据转换为简单型日志;若目标数据是需要多个缓存处理,则第一存储设备将目标数据转换为复合型日志。若目标数据不需要在缓存中保存,则第一存储设备将目标数据转换为命令型日志,以描述该数据失效,以及失效数据的位置和大小。这样第一存储设备能够根据目标数据需要一个缓存处理、多个缓存处理还是不需要缓存处理,为目标数据选择生成合适的目标日志。

应理解,本申请实施例中对“缓存”和“内存”不进行区分,也就是说,缓存和内存都能够实现本申请实施例对数据存储的需求,因此本申请对此不进行限定。

例如,目标数据为需要一个缓存处理的块存储数据,块存储数据主要包括卷标识(volume Identity,volume ID)、块起始地址(Logical block address,LBA)、块个数(lengh)、用户数据(buff)。由于目标数据需要一个缓存处理,因此,第一存储设备将该块存储数据转换为简单型日志,并将LBA转化为缓存管理单元的编号,比如LBA除以64k取整得到单元编号(chunk ID)、取余得到单元内的偏移(offset),把volume ID、chunk ID、offset写入日志头中,将buff写入日志数据部分,将用于保证数据的可靠性的循环冗余校验码(Cyclic Redundancy Check,CRC)写在日志尾。

应理解,本申请实施例中对“缓存”和“内存”不进行区分,也就是说,缓存和内存都能够实现本申请实施例对数据存储的需求。

703、第一存储设备向该第二存储设备发送该目标日志。

第二存储设备接收到该第一存储设备发送的目标日志,并将目标日志存储到第二存储设备的内存中。

704、第二存储设备镜像存储该目标日志。

第二存储设备接收第一存储设备根据写请求消息中携带的目标数据生成的目标日志,并将该目标日志直接存储到第二存储设备中,由于该目标日志包括用于表示该目标数据的标识信息,这样第二存储设备存储该目标日志时并不需要创建内存索引,相比现有技术中,第二存储设备需要配置内存索引而言,本申请可以直接存储该目标日志,从而节省了第二存储设备配置内存索引时对CPU的占用。

可选地,作为一个实施例,第一存储设备接收到第二存储设备完成镜像存储目标日志的存储完成消息,保证第二存储设备已经成功完成写入目标日志之后,第一存储设备才开始在自己的缓存中写入目标日志,这样可以避免第二存储设备失败,浪费了第一存储设备的CPU占用。第一存储设备完成写入目标日志,且接收到第二存储设备发送的存储完成消息之后,向IO设备发送写请求响应消息,这样避免现有技术中需要等待将目标数据存储到内存索引对应的资源空间之后才能向IO设备返回写请求响应消息,从而减少了发出写请求到收到写请求响应消息的时延。

应理解,发送写请求消息和接收写请求响应消息的设备可以是IO设备也可以是其他设备,为描述方便以IO设备为例进行说明,但本申请并不限于此。

可选地,第一存储设备没有接收到存储完成消息之前,第一存储设备就开始写入该目标日志,在第一存储设备完成写入目标日志,且接收到第二存储设备发送的存储完成消息之后,向IO设备发送写请求响应消息,这样可以更进一步节省向IO设备返回写请求响应消息的时间。

可选地,作为一个实施例,该第二存储设备包括多个资源空间;其中,该第二存储设备镜像存储该目标日志包括:该第二存储设备根据该标识信息,确定存储该目标日志的第一资源空间,该第一资源空间为该第二存储设备的多个资源空间中满足该目标日志的资源需求的任一资源空间;该第二存储设备将该目标日志镜像存储到该第一资源空间中。

具体而言,第二存储设备接收目标日志,该目标日志包括用于标识目标数据的标识信息,第二存储设备根据该标识信息选择合适的资源空间(表示为第一资源空间),将该目标日志存储到第二存储设备的第一资源空间中。此外,第二存储设备可以根据标识信息识别目标数据,以目标日志的形式可以将目标数据按照顺序进行有规律的存储,这样第二存储设备可以不需要为目标数据配置内存索引,从而使得节省了第二存储设备的CPU占用。

应理解,第一资源空间即为上述提到的以Segment为单位的资源空间,每个Segment可以存放多条日志。

可选地,该第二存储设备包括多个资源空间;该方法还包括:该第一存储设备获取第二资源空间的存储地址和该第二资源空间的存储容量,该第二资源空间为该第二存储设备的多个资源空间中任一资源空间;该第一存储设备根据该第二资源空间的存储容量和该标识信息,确定该第二资源空间是否满足该目标日志的资源需求;该第一存储设备在该第二资源空间满足该目标日志的资源需求时,根据RDMA编码方式、该目标日志和该第二资源空间的存储地址,生成RDMA消息,该RDMA消息包括该第二资源空间的存储地址和该目标日志;其中,该第一存储设备向该第二存储设备发送该目标日志包括:该第一存储设备向该第二存储设备发送该RDMA消息;其中,该第二存储设备镜像存储该目标日志包括:该第二存储设备根据该RDMA消息,将该目标日志存储到该第二资源空间中。

具体而言,第二存储设备包括多个资源空间,第二存储设备可以随意发送任意一个资源空间的存储容量和存储地址。第一存储设备获取到第二存储设备中多个资源空间中任意一个资源空间(表示为第二资源空间)的存储地址和存储容量,并根据该第二资源空间的存储容量和目标日志的标识信息确定第二资源空间是否满足目标日志的资源需求,相应地,第二资源空间也是上述提到的Segment资源空间。由于目标日志的标识信息包括目标数据的资源大小(即存储目标日志所需的资源),因此第一存储设备可以通过比较标识信息中目标数据的资源大小与第二资源空间的存储容量确定第二资源空间是否能够满足目标日志的资源需求。

该第一存储设备在该第二资源空间满足该目标日志的资源需求时,根据RDMA编码方式、该目标日志和该第二资源空间的存储地址,生成RDMA消息,该RDMA消息包括该第二资源空间的存储地址和该目标日志,第一存储设备向第二存储设备发送该RDMA消息,第二存储设备的第二资源空间接收到RDMA消息后,解析得到目标日志,并将目标日志直接存储到第二资源空间中。第二存储设备在将目标日志镜像存储到第二资源空间之后,就可以向第一存储设备返回镜像存储完成消息。本申请实施例相比第二存储设备接收目标日志,并需要为目标日志选择合适的资源空间,能够更进一步节省了第二存储设备的CPU的占用。

例如,如图2所示,第一存储设备通过RDMA技术,可以将目标日志从资源层132a直接发送到资源层132b。

可选地,作为一个实施例,该第一存储设备获取第二资源空间的存储地址和该第二资源空间的存储容量包括:该第一存储设备向该第二存储设备发送资源请求消息,该资源请求消息用于请求存储该目标日志的该第二资源空间;该第一存储设备接收该第二存储设备根据该资源请求消息发送的资源请求响应消息,该资源请求响应消息携带该第二资源空间的存储地址和该第二资源空间的存储容量。

具体而言,第一存储设备可以向第二存储设备发送资源请求,以获取第二存储设备的资源空间的存储地址以及该资源空间的剩余资源大小(即该资源空间中还能够写入多大的数据)。第一存储设备可以向第二存储设备发送资源请求消息,第二存储设备在多个资源空间中选择任意一个资源空间(表示为第二资源空间),并向第一存储设备发送资源请求响应消息,且在资源请求响应消息中携带该第二资源空间的存储地址和该第二资源空间的剩余容量,从而使得第一存储设备能够为目标日志选择合适的资源空间。

应理解,本申请实施例中,第一存储设备可以只获取一次第二存储设备的资源空间的地址和存储容量,直至该资源空间没有剩余资源,或者剩余资源不能够满足当前待写入数据的大小,然后才进行下一次获取第二存储设备的资源空间的地址和存储容量。

可选地,作为一个实施例,该方法还包括:该第一存储设备为该目标数据配置内存索引;该第一存储设备根据该内存索引,确定存储该目标数据的该第一存储设备的资源空间,其中,该第一存储设备的资源空间的存储地址对应于该内存索引;该第一存储设备将该目标数据写入该第一存储设备的资源空间中。

第一存储设备在完成存储目标日志,以及接收到第二存储设备返回的存储完成消息后,向IO设备发送写请求响应消息。由于根据内存索引读取目标数据比较快,因此,在此之后,第一存储设备还可以为目标数据配置内存索引,该内存索引用于标识目标数据(例如,目标数据的大小、类型等),并根据该内存索引为目标数据申请存储资源(表示为第一存储设备的资源空间,该第一存储设备也可以包括多个存储空间),且配置已经申请的存储资源的存储地址与内存索引的映射关系,该映射关系用于后续第一存储设备能够根据内存索引读取到对应的存储地址中存储的数据,最后将目标数据写入到存储地址对应的资源空间中,这样第一存储设备将目标数据存储到有内存索引对应的资源空间中,并不会延长影响返回写请求响应消息的时间。

应理解,该目标数据可以是写请求中携带的目标数据,也可以是解析目标日志获得的目标数据,本申请对此不进行限定。

还应理解,第一存储设备也可以不存储目标日志,而是直接将目标数据写入内存索引对应的资源空间中;或者,第一存储设备写入目标日志后,再进行将目标数据写入内存索引对应的资源空间中之后,才发送写请求响应消息。本申请对此不进行限定。

第二存储设备存储目标日志用于在第一存储设备故障时,第二存储设备可以接管第一存储设备当前服务的数据存储,具体故障现象有如下几种:

在第一存储设备故障时,第二存储设备检测到该故障后,第二存储设备接管数据存储。这时,第二存储设备需要进行目标日志回放,日志回放是指解析目标日志以获取有效的目标数据(即将目标数据逐条读出),为目标数据配置内存索引,并将目标数据存储到对应的资源空间中(即表示日志回放结束),该资源空间为内存索引对应的存储地址,该存储地址对应的资源空间;此后,第二存储设备才能够处理数据存储业务。

在第一存储设备故障后快速恢复,第一存储设备可以直接重启回放日志,之后,第一存储设备才能够处理数据存储业务。

在第一存储设备和第二存储设备都故障的情况下,重启后,第一存储设备可以与第二存储设备竞争主存储设备(即接管当前数据存储),竞争为主存储设备后,回放日志。此后,第二存储设备才能够处理数据存储业务,不会造成内存数据的丢失,提供了数据存储的可靠性。。

应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

因此,本申请实施例的数据存储的方法,第一存储设备通过接收携带目标数据的写请求消息,根据该写请求消息中的目标数据生成包括该目标数据和用于标识该目标数据的标识信息的目标日志,并向该第二存储设备发送该目标日志,第二存储设备镜像存储该目标日志,且镜像存储该目标日志不需要配置内存索引,这样第一存储设备生成包括标识目标数据的标识信息的目标日志,第二存储设备可以存储目标日志不需要配置内存索引,从而减少了对第二存储设备的CPU的占用。

图8示出了根据本申请一个实施例的数据存储的方法的交互流程图。本申请实施例中的各种术语的含义与前述各实施例相同。

应注意,这只是为了帮助本领域技术人员更好地理解本申请实施例,而非限制本申请实施例的范围。

801、第一存储设备接收写请求消息,该写请求消息携带目标数据。

802、第一存储设备根据目标数据生成相应的目标日志,目标日志包括目标数据和用于标识目标数据的标识信息。

803、第一存储设备获取第二存储设备的资源空间(表示为第二资源空间)的存储地址和资源空间的存储容量。

804、第一存储设备根据第二资源空间的存储容量和标识信息,确定获取的第二资源空间的存储容量是否能够满足目标日志的资源需求。

805、第一存储设备在确定获取的第二资源空间的存储容量能够满足目标日志的资源需求,根据目标日志、RDMA编码方式、第二资源空间的存储地址生成RDMA消息。

806、第一存储设备向第二存储设备发送RDMA消息。

807、第二存储设备根据RDMA消息,将目标日志直接存储到存储地址对应的第二资源空间中。

可选地,第一存储设备可以直接向第二存储设备发送目标日志,由第二存储设备来确定能够存储目标日志的资源空间,这样可以不需要步骤803至807。

808、第二存储设备在完成目标日志的镜像存储后,向第一存储设备发送存储完成消息。

809、第一存储设备在本地存储目标日志。

步骤808和步骤809可以没有先后关系,本申请对此不进行限定。

810、第一存储设备在本地完成存储目标日志,且接收到存储完成消息之后,向IO设备返回写请求响应消息。

811、第一存储设备在本地为目标数据配置对应的内存索引,该内存索引用于标识目标数据。

812、第一存储设备根据该内存索引,确定存储目标数据的第一存储设备的资源空间。

813、第一存储设备将目标数据存储到确定的第一存储设备的资源空间中。

应理解,上述相应信息的具体指示方式可参考前述各实施例,为了简洁,在此不再赘述。

因此,本申请实施例的数据存储的方法,第一存储设备通过接收携带目标数据的写请求消息,根据该写请求消息中的目标数据生成包括该目标数据和用于标识该目标数据的标识信息的目标日志,获取第二存储设备的第二资源空间,在第二资源空间满足目标日志的资源需求时,根据目标日志、RDMA编码方式和第二资源空间的存储地址生成RDMA消息,并向该第二存储设备发送该目标日志,第二存储设备根据RDMA消息将目标日志直接存储到第二资源空间中,且存储该目标日志不需要配置内存索引,这样第一存储设备生成包括标识目标数据的标识信息的目标日志,并通过发送RDMA消息直接将目标日志存储在满足资源需求的存储空间中,第二存储设备存储目标日志可以不需要配置内存索引,从而减少了对第二存储设备的CPU的占用。

应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

上文中详细描述了根据本申请实施例的数据存储的方法,下面将描述根据本申请实施例的存储设备。

图9示出了根据本申请实施例的存储系统900的示意性框图,该存储系统包括第一存储设备910和至少一个第二存储设备920,其中,该第二存储设备920为该第一存储设备910的镜像存储设备,该存储系统900用于执行图7所述的数据存储的方法,该存储系统900包括:

该第一存储设备910,用于接收写请求消息,该写请求消息携带目标数据,根据该目标数据生成目标日志,并向该第二存储设备920发送该目标日志,该目标日志包括该目标数据和用于标识该目标数据的标识信息;

该第二存储设备920,用于存储该目标日志,且该存储该目标日志不需要配置内存索引。

因此,本申请实施例的存储系统,第一存储设备通过接收携带目标数据的写请求消息,根据该写请求消息中的目标数据生成包括该目标数据和用于标识该目标数据的标识信息的目标日志,并向该第二存储设备发送该目标日志,第二存储设备镜像存储该目标日志,且镜像存储该目标日志不需要配置内存索引,这样第一存储设备生成包括标识目标数据的标识信息的目标日志,第二存储设备可以存储目标日志不需要配置内存索引,从而减少了对第二存储设备的CPU的占用。

可选地,在本申请一个实施例中,该第二存储设备920还用于在完成存储该目标日志时,向该第一存储设备910发送存储完成消息;

该第一存储设备910还用于存储该目标日志,并在完成该目标日志的存储和接收到该存储完成消息之后,发送写请求响应消息。

可选地,在本申请一个实施例中,该第二存储设备920包括多个资源空间;

该第二存储设备920具体用于:

根据该标识信息,确定存储该目标日志的第一资源空间,该第一资源空间为该第二存储设备920的多个资源空间中满足该目标日志的资源需求的任一资源空间;

将该目标日志存储到该第一资源空间中。

可选地,在本申请一个实施例中,该第二存储设备920包括多个资源空间;

该第一存储设备910,还用于获取第二资源空间的存储地址和该第二资源空间的存储容量,根据该第二资源空间的存储容量和该标识信息确定该第二资源空间是否满足该目标日志的资源需求,并在该第二资源空间满足该目标日志的资源需求时根据远程直接数据存取RDMA编码方式、该目标日志和该第二资源空间的存储地址生成RDMA消息,以及向该第二存储设备920的第二资源空间发送该RDMA消息,该第二资源空间为该第二存储设备920的多个资源空间中任一资源空间,该RDMA消息包括该第二资源空间的存储地址和该目标日志;

该第二存储设备920,还用于通过该第二资源空间根据该RDMA消息,存储该目标日志。

可选地,在本申请一个实施例中,该第一存储设备910,还用于向该第二存储设备920发送资源请求消息,并接收该第二存储设备920根据该资源请求消息发送的资源请求响应消息,该资源请求消息用于请求存储该目标日志的该第二资源空间,该资源请求响应消息携带该第二资源空间的存储地址和该第二资源空间的存储容量。

可选地,在本申请一个实施例中,该第一存储设备910,还用于为该目标数据配置内存索引,并根据该内存索引确定存储该目标数据的该第一存储设备的资源空间,以及将该目标数据写入该第一存储设备的资源空间中,其中,该第一存储设备的资源空间的存储地址对应于该内存索引。

因此,本申请实施例的存储系统,第一存储设备通过接收携带目标数据的写请求消息,根据该写请求消息中的目标数据生成包括该目标数据和用于标识该目标数据的标识信息的目标日志,并向该第二存储设备发送该目标日志,第二存储设备镜像存储该目标日志,且镜像存储该目标日志不需要配置内存索引,这样第一存储设备生成包括标识目标数据的标识信息的目标日志,第二存储设备可以存储目标日志不需要配置内存索引,从而减少了对第二存储设备的CPU的占用。

根据本申请实施例的存储系统900可对应于根据本申请实施例图7或图8的数据存储的方法的存储系统,并且存储系统900中的各个模块的上述和其它操作和/或功能分别为了实现前述各个方法的相应流程,为了简洁,在此不再赘述。

图10示出了本申请的实施例提供的存储系统的结构,包括至少一个处理器1002(例如CPU),至少一个网络接口1005或者其他通信接口,至少一个存储器1006,和至少一个通信总线1003,用于实现这些装置之间的连接通信。处理器1002用于执行存储器1006中存储的可执行模块,例如计算机程序。存储器1006可能包含高速随机存取存储器(Random Access Memory,RAM),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个网络接口1005(可以是有线或者无线)实现与至少一个其他网元之间的通信连接。

在一些实施方式中,存储器1006存储了程序10061,处理器1002执行程序10061,用于执行以下操作:

通过网络接口1005接收写请求消息,该写请求消息携带目标数据;

根据该目标数据,生成目标日志,该目标日志包括该目标数据和用于标识该目标数据的标识信息;

通过网络接口1005向第二存储设备发送该目标日志;

存储所述目标日志,且所述存储所述目标日志不需要配置内存索引。

需要说明的是,该存储系统可以用于执行上述图7或图8所示的方法实施例中的各个步骤和/或流程。

从本申请实施例提供的以上技术方案可以看出,第一存储设备通过接收携带目标数据的写请求消息,根据该写请求消息中的目标数据生成包括该目标数据和用于标识该目标数据的标识信息的目标日志,并向该第二存储设备发送该目标日志,第二存储设备镜像存储该目标日志,且镜像存储该目标日志不需要配置内存索引,这样第一存储设备生成包括标识目标数据的标识信息的目标日志,第二存储设备可以存储目标日志不需要配置内存索引,从而减少了对第二存储设备的CPU的占用。

本申请实施例还提供一种计算机存储介质,该计算机存储介质可以存储用于指示上述任一种方法的程序指令。

可选地,该存储介质具体可以为存储器1106。

应理解,本申请中的具体的例子只是为了帮助本领域技术人员更好地理解本申请实施例,而非限制本申请实施例的范围。

应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,该单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以该权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1