计算存储分离系统及其数据访问方法、介质和电子设备与流程

文档序号:26193292发布日期:2021-08-06 18:46阅读:107来源:国知局
计算存储分离系统及其数据访问方法、介质和电子设备与流程

本公开涉及计算机技术领域,具体地,涉及一种计算存储分离系统及其数据访问方法、介质和电子设备。



背景技术:

主从节点(master-slave)结构是分布式系统中一种经典的计算存储分离系统的配置方案。其中,主节点主要用于响应用户操作,处理资源调度和业务计算等;从节点主要用于数据存储和响应主节点的请求。从节点逻辑上从属于主节点,受主节点支配。

现有的计算存储分离系统在从节点上只部署了固态硬盘(solidstatedisk,ssd),通过主节点与从节点双边通信的方式完成数据块的读写。此外,现有的计算存储分离系统使用的网络数据传输主要是基于传输控制协议(transfercontrolprotocol,tcp)/网际协议(internetprotocol,ip)的。因此,现有的计算存储分离系统存在三个方面的昂贵开销:第一,网络开销,主要指单次数据访问导致的主节点-从节点的网络数据传输开销和tcp/ip软件栈开销;第二,cpu开销,主要指从节点在等待主节点的请求所占用的时间开销和多重数据拷贝开销;第三,存储开销,主要指数据在从节点上从内存的页缓存写入到ssd所占用的输入/输出(input/output,i/o)开销。这些开销都在数据访问的关键路径上,会形成系统整体性能的瓶颈。



技术实现要素:

提供该发明内容部分以便以简要的形式介绍构思,这些构思将在后面的具体实施方式部分被详细描述。该发明内容部分并不旨在标识要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求的保护的技术方案的范围。

第一方面,本公开提供一种计算存储分离系统的数据访问方法,包括:获取数据访问请求;基于所述数据访问请求的类型,获取所述计算存储分离系统的主节点上的索引表或者所述主节点及其从节点的同步元数据信息;在所述数据访问请求为数据读请求的情况下,查询所述索引表中待读取数据块的索引项,基于索引项查询结果来读取所述待读取数据块,其中,所述索引表的索引项至少包括存储位置属性和存储地址属性;和/或在所述数据访问请求为数据写请求的情况下,基于所述同步元数据信息,将待写入数据块写入到所述从节点上的持久内存的空闲空间中,其中,所述同步元数据信息用于指示所述持久内存的空间占用与空闲情况。

第二方面,本公开提供一种计算存储分离系统,包括:索引缓存模块,位于所述计算存储分离系统的主节点上,用于建立和维护索引表和缓存表,其中,所述索引表的索引项至少包括关于数据块的存储位置属性和存储地址属性,所述缓存表用于缓存所述主节点本地的数据块;第一远程过程调用交互模块和第二远程过程调用交互模块,所述第一远程过程调用交互模块位于所述主节点上,所述第二远程过程调用交互模块位于所述计算存储分离系统的从节点上,所述第一远程过程调用交互模块和所述第二远程过程调用交互模块用于存储所述主节点与所述从节点的同步元数据信息,所述同步元数据信息用于指示所述从节点上的持久内存的空间占用与空闲情况;持久存储模块,用于管理所述主节点上的持久内存与固态硬盘的存储空间;以及数据访问模块,位于所述主节点上,用于获取数据访问请求,基于所述数据访问请求的类型,获取所述索引表或者所述同步元数据信息,在所述数据访问请求为数据读请求的情况下,查询所述索引表中待读取数据块的索引项,基于索引项查询结果来读取所述待读取数据块,和/或在所述数据访问请求为数据写请求的情况下,基于所述同步元数据信息,将待写入数据块写入到所述持久内存的空闲空间中。

第三方面,本公开提供一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现本公开第一方面所述方法的步骤。

第四方面,本公开提供一种电子设备,包括:存储装置,其上存储有计算机程序;处理装置,用于执行所述存储装置中的所述计算机程序,以实现本公开第一方面所述方法的步骤。

通过采用上述技术方案,由于能够负责建立和维护针对数据块的索引表和缓存表,基于索引表或基于主节点与从节点的同步元数据信息,将数据访问请求转化为到从节点上的持久内存上的数据的访问或到缓存表的访问,因此使得根据本公开实施例的计算存储分离系统能够支持计算业务与存储业务的解耦合部署,在保障数据一致性的同时支持低延迟和高吞吐的块访问服务,降低了数据访问的网络开销、cpu开销和存储开销。

本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。在附图中:

图1是根据本公开实施例的计算存储分离系统的整体架构示意图。

图2展示了索引表的数据结构示意图。

图3示出了双指针持久内存空间管理的示意图。

图4示出了根据本公开实施例的计算存储分离系统的数据访问方法的流程图。

图5示出了数据访问请求为数据读请求的情况下块数据的读操作流程图。

图6示出了数据访问请求为数据写读请求的情况下块数据的写操作流程图。

图7示出了一种示例性的日志数据结构。

图8a-8l示出了持久内存上的数据同步到ssd中的流程示意图。

图9是根据本公开一种实施例的电子设备的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。

应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。

本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。

需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。

需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。

本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。

首先,对根据本公开实施例的计算存储分离系统的整体架构进行描述。如图1所示,根据本公开实施例的计算存储分离系统包括位于主节点上的数据访问模块10、索引缓存模块20、第一远程过程调用(remoteprocesscall,rpc)交互模块30,位于从节点上的第二rpc交互模块40和持久存储模块50。数据访问模块10负责将用户的本地数据块访问转化封装为到远端从节点或者到主节点本地缓存的数据块访问;索引缓存模块20负责建立与维护数据块的索引与缓存,以支持快速的数据块读取与写入服务;第一rpc交互模块30和第二rpc交互模块40负责轻量级的元数据同步和提供必要的数据传输保障,以保障主节点对从节点空间及数据块位置的正确认知;持久存储模块50负责管理持久内存(例如aep内存)与固态硬盘(solidstatedisk,ssd)的存储空间以及持久内存上数据到ssd的存储同步。其中,图1中的aep仅是持久内存的一个示例,不构成对本公开的限制。虽然图1中以aep为例示出了持久内存,但是实际上,持久内存也可以是aep之外的其他类型的持久内存。

在一些实施例中,索引缓存模块20负责建立和维护索引表201和缓存表202。索引表201至少包括关于数据块的存储位置属性和存储地址属性,缓存表202用于缓存主节点本地的数据块,也即缓存表202是数据块在主节点上的缓存,缓存粒度为从节点上的ssd块粒度。这样,索引缓存模块20就能够建立和维护数据块的索引与缓存,以支持快速的块数据读取与写入服务。

索引表201可以是任意结构的索引表,例如索引表201可以基于布谷鸟(cuckoo)哈希表来构建,其哈希键为块标识(blockid)。图2展示了索引表201的数据结构示意图。如图2所示,索引表201中包括多个索引项,每个索引项各自均包含4个属性。

第一个属性是blockid,用于记录对应的ssd数据块编号。

第二个属性是flag,用于标记数据的存储情况。根据数据的存储情况,具体可以为以下三种类型之一:lc(locally-cached)表示数据块在主节点缓存表202中存在本地缓存;ra(read-available)表示数据块在从节点的持久内存(例如aep)上,可通过远程直接内存访问(remotedirectmemoryaccess,rdma)read命令来直接访问;ru(read-unavailable)表示数据块在从节点的ssd上,不可通过rdmaread命令进行访问。

第三个属性是addr,用于表示数据块在本地(也即主节点的缓存表202中)或远端(也即从节点的持久内存或ssd)上的内存地址。需要注意的是,flag为ru的数据块因其无法存储在主节点本地缓存表或从节点的持久内存上,故addr的内容无实际意义。

第四个属性是heat,用于统计数据块的热度。每次访问数据块都会改变数据块的访问计数值,访问计数值越高代表数据越热,越应该存储在缓存表202中。访问计数值会被周期性置位以防数据溢出。

当然,flag属性和addr属性是必要的;而blockid属性和heat属性是可选的,也即可以不包括在索引项中。

在一些实施例中,数据访问模块10用于获取数据访问请求,例如可以从主节点的块存储接口获取到来自用户的数据访问请求,然后数据访问模块10可以基于数据访问请求的类型,获取索引表或者同步元数据信息,并在数据访问请求为数据读请求的情况下,查询索引表201中待读取数据块的索引项,基于索引项查询结果来读取待读取数据块,和/或在数据访问请求为数据写请求的情况下,基于同步元数据信息,将待写入数据块写入到持久内存的空闲空间中,其中,同步元数据信息用于指示持久内存的空间占用与空闲情况。

例如,数据访问模块10可以将用户对主节点本地盘的块访问,转化封装为对远端从节点的rdma操作。在一种实施例中,数据访问模块10可以将blockread(块读取)命令转化为rdmaread(rdma读取)命令,将blockwrite(块写入)命令转化为rdmawrite(rdma写入)命令,rdmaread/write的目标地址为从节点上的持久内存通过mmap-dax所暴露的可访问虚拟地址。

第一rpc交互模块30和第二rpc交互模块40负责对主节点与从节点上的关键元数据信息进行同步。例如,这两个模块通过相互通信来对用于指示从节点上的持久内存的空间占用与空闲的信息进行同步,这样就能够保障主节点对从节点空间及数据块位置的正确认知,也即,提供了轻量级的元数据同步保障以及必要的数据传输保障。

在一个实施例中,主节点与从节点对于持久内存的空间管理是基于双指针技术来完成的。图3示出了双指针持久内存空间管理的示意图。如图3所示,双指针方案包含两个指针,也即头(head)指针和尾(tail)指针。其中,head指针总是指向已占用空间(也即图3中的usedaep)的开始;相对地,tail指针总是指向已占用空间的末尾。图3中的freeaep指的是空闲空间。主节点与从节点都会维护和按需更新这两个指针。一个不变性约束是:无论在主节点还是从节点上,head指针总是落后于tail指针。此外,主节点的tail指针的值总是领先或等于从节点的tail指针的值,这是因为主节点会持续向持久内存最新的空闲空间写入数据并实时更新自己的tail指针;相对地,从节点的head指针的值总是领先或等于主节点的head指针的值,这是因为持久内存已占用空间的数据同步到ssd的过程是由从节点来控制的,当数据同步到ssd以后,从节点会实时更新自己的head指针。而前文中所述的关键元数据信息就包括head指针和tail指针的值。

在一些实施例中,持久存储模块50部署在从节点上,负责管理持久内存与ssd的存储空间以及持久内存上数据到ssd的存储同步。通过持久存储模块50,就能够在持久内存上存储空间不足时释放一定的持久内存占用空间,以及可以将ssd中的一些转热的数据块拷贝到持久内存中,以支持后续的快速rdma访问,例如使用rdmaread直接读取持久内存以获取块数据。

通过采用上述技术方案,由于索引缓存模块20能够负责建立和维护针对数据块的索引表201和缓存表202,数据访问模块10能够基于索引表或基于主节点与从节点的之间同步元数据信息,将数据访问请求转化为到从节点上的持久内存上的数据的访问或到缓存表的访问,因此使得根据本公开实施例的计算存储分离系统能够支持计算业务与存储业务的解耦合部署,在保障数据一致性的同时支持低延迟和高吞吐的块访问服务,降低了数据访问的网络开销、cpu开销和存储开销。

下面结合前文中描述的计算存储分离系统的架构来描述根据本公开实施例的计算存储分离系统的数据访问方法。

图4示出了根据本公开实施例的计算存储分离系统的数据访问方法的流程图。如图4所示,该方法包括以下步骤s41至s43。

在步骤s41中,获取数据访问请求;

在步骤s42中,基于数据访问请求的类型,获取索引表或者同步元据信息;

在步骤s43中,在数据访问请求为数据读请求的情况下,查询主节点上的索引表中待读取数据块的索引项,基于索引项查询结果来读取所述待读取数据块,其中,所述索引表的索引项至少包括存储位置属性和存储地址属性;和/或

在步骤s44中,在数据访问请求为数据写请求的情况下,基于所述同步元数据信息,将待写入数据块写入到所述从节点上的持久内存的空闲空间中,其中,所述同步元数据信息用于指示所述持久内存的空间占用与空闲情况。

通过采用上述技术方案,由于能够基于索引表或基于主节点与从节点的之间同步元数据信息,将数据访问请求转化为到从节点上的持久内存上的数据的访问或到缓存表的访问,因此使得根据本公开实施例的计算存储分离系统的数据访问方法能够支持计算业务与存储业务的解耦合部署,在保障数据一致性的同时支持低延迟和高吞吐的块访问服务,降低了数据访问的网络开销、cpu开销和存储开销。

图5示出了数据访问请求为数据读请求的情况下块数据的读操作流程图。数据读取的基本流程是:从主节点上的索引表中查询待读取数据块的索引项,若查询到的索引项的存储位置属性指示所述待读取数据块被存储在所述主节点本地的缓存表中,则基于查询到的索引项的存储地址属性从所述缓存表中读取所述待读取数据块,若查询到的索引项的存储位置属性指示所述待读取数据块被存储在所述持久内存上,则通过远程直接内存访问的方式基于查询到的索引项的存储地址属性从所述持久内存中读取所述待读取数据块,若查询到的索引项的存储位置属性指示所述待读取数据块被存储在所述从节点上的固态硬盘上,则通过远程过程调用的方式基于查询到的索引项的存储地址属性从所述固态硬盘上读取所述待读取数据块,若未查询到所述待读取数据块的索引项,则通过所述远程过程调用的方式从所述从节点上读取所述待读取数据块。

如图5所示,首先,在步骤501中,数据访问模块10从主节点的块存储接口获取用户的数据读请求,该数据读请求可以包含blockid。

然后,在步骤502中,数据访问模块10基于数据读请求将数据块读访问重定向到缓存索引模块20中的索引表201中,并从索引表201查询待读取数据块的索引项。

然后,在步骤503中,数据访问模块10判断索引表是否命中,也即判断是否在索引表201中查询到待读取数据块的索引项。如果查询到待读取数据块的索引项,则转至步骤504,如果未查询到待读取数据块的索引项,则转至步骤s510。

在步骤s504中,由于在步骤s503中查询到待读取数据块的索引项,则继续检查该索引项的flag标记,并转至步骤s505。

然后,在步骤s505中,基于flag标记判断待读取数据块是否在主节点的本地缓存表中。如果步骤s504中检查到的flag标记是lc,则代表待读取数据块在主节点的本地缓存表中,则转至步骤s506。如果步骤s504中检查到的flag标记不是lc,则代表待读取数据块不在本地缓存表中,则转至步骤s507。

在步骤s506中,数据访问模块10直接从缓存表202中读取待读取数据块数据,并转至步骤s511。

在步骤s507中,判断待读取数据块是否在持久内存上,或者是否待读取数据块仅存在于从节点的ssd上。如果步骤s504中检查到的flag标记是ra,则代表待读取数据块在从节点的持久内存上,则转至步骤s508,如果步骤s504中检查到的flag标记不是ra,则说明该flag标记是ru,也即说明待读取数据块仅存在于从节点的ssd上,则转至步骤s510。

在步骤s508中,数据访问模块10直接通过rdmaread命令来从持久内存上读取待读取数据块,例如,可以通过图1中的infiniband/roce网络来进行rdmaread。其中,待读取数据块的数据长度可以为写操作封装的数据块的块长度。然后转至步骤509。

在步骤s509中,判断读取到的数据块是否有效。例如,可以判断读取到的数据块的tag标记是否为0,如果为0,则说明无效,则转至步骤s510,如果不为0,则说明有效,则转至步骤s511。通过步骤s509,就能够防止因待读取数据块被从节点的持久存储模块50同步回ssd中致使无效化而被错误返回。

在步骤s510中,由于在步骤s503中未查询到待读取数据块的索引项,或者由于通过rdmaread命令读取的数据块无效,或者由于基于flag标记确定待读取数据存储在ssd上,所以利用远程过程调用的方式来读取待读取数据块。也即,数据访问模块10向第一rpc交互模块30发送数据读请求,第一rpc交互模块30将接收到的数据读请求发送给第二rpc交互模块40,第二rpc交互模块40根据数据读请求从ssd上读取待读取数据块。

然后,转至步骤s511

然后,在步骤s511中,在成功读取到待读取数据块后,主节点上的索引缓存模块20需要相应更新自己的索引表201及缓存表202,然后返回。

通过采用上述技术方案,就能够将数据访问请求转化为到从节点上的持久内存上的数据的访问或到缓存表的访问,因此使得根据本公开实施例的计算存储分离系统的数据访问方法能够支持计算业务与存储业务的解耦合部署,在保障数据一致性的同时支持低延迟和高吞吐的块访问服务,降低了数据访问的网络开销、cpu开销和存储开销。

图6示出了数据访问请求为数据写请求的情况下块数据的写操作流程图。

如图6所示,首先,在步骤s601中,数据访问模块10从主节点的块存储接口获取用户的数据写请求,该数据写请求包含blockid。

然后,在步骤s602中,数据访问模块10基于数据写请求将数据块写访问重定向到从节点的持久内存空闲空间上。在一个实施例中,数据访问模块10会查询第一rpc交互模块30所保存维护的head指针与tail指针并转至步骤s603。

在步骤s603中,数据访问模块10判断持久内存的空闲空间是否足够。如果空间不足,则转至步骤s605,如果空间足够,则转至步骤s604。

在步骤s605中,主节点上的第一rpc交互模块30向从节点上的第二rpc交互模块40发送空间释放请求,使得从节点上的持久存储模块50被动触发持久内存数据同步到ssd的过程,从而释放更多空闲空间。也即,第一rpc交互模块30向第二rpc交互模块40发送空间释放请求,然后第二rpc交互模块40将空间释放请求转发给持久存储模块50,使得持久存储模块50被动触发持久内存数据同步到ssd的过程。在同步结束之后,持久内存上的空间就得到了释放,从而足够用于写入待写入数据块,则转至步骤s606。持久存储模块50将持久内存数据同步到ssd的过程将在下文中结合图8进行详细描述,这里的同步包括持久存储模块50主动执行同步的过程和被动触发同步的过程。

在步骤s606中,主节点上的第一rpc交互模块30通过从节点上的第二rpc交互模块40进行元数据同步,从而获得更新后的head指针。然后转至步骤s604。

在步骤s604中,由于此时持久内存的空闲空间是充足的,所以主节点的数据访问模块10将块数据进行封装。块数据的封装结构可以是任意的。图7示出了一种示例性的日志数据结构。如图7所示,日志数据结构除了包括块数据(blockdata)本身之外,还包含blockid与tag标记。tag是用来表示数据的完整性,其中非0为全部持久化到持久内存上的完整数据,否则数据不完整(可能是故障导致的部分写),需被丢弃。封装结束之后,转至步骤s607。

在步骤s607中,数据访问模块10使用rdmawrite命令将封装后的数据块写入tail指针对应的地址,并转至步骤s608。

在步骤s608中,实时更新第一rpc交互模块30和第二rpc交互模块40所维护的tail指针值。然后,转至步骤s609。

在步骤s609中,索引缓存模块20相应更新索引表201和缓存表202。并转至步骤s610。

在步骤s610中,为提升性能,数据访问模块10会根据时间延迟需求等,考虑是否对下一次数据块的写访问进行批处理,通过批处理,能够减少提交带来的额外网络传输开销。如果做批处理,则转至步骤s603,如果不做批处理,则转至步骤s611。

在步骤s611中,使用一次额外的rdmaread命令作为flush(刷新)操作。

然后,在步骤s612中,数据访问模块10在主节点轮询到rdmaread命令的工作完成后,方能确认块数据的写已经完全持久化到从节点的持久内存上,然后返回。

通过采用上述技术方案,就能够将数据访问请求转化为到从节点上的持久内存上的数据的访问或到缓存表的访问,因此使得根据本公开实施例的计算存储分离系统的数据访问方法能够支持计算业务与存储业务的解耦合部署,在保障数据一致性的同时支持低延迟和高吞吐的块访问服务,降低了数据访问的网络开销、cpu开销和存储开销。

图8示出了持久内存上的数据同步到ssd中的流程示意图。

持久存储模块50负责管理从节点上持久内存与ssd的存储空间,它会主动或者被动触发地将持久内存中的数据同步回ssd以释放持久内存上的空间,供主节点持续写入更多数据。持久存储模块50会从从节点的head指针位置开始,将持久内存上的数据同步到ssd上。在同步完成后,从节点要更新本地head指针的值,向后移动。接下来详细描述同步过程。

如图8所示,首先,在图8a中,示出了持久内存与ssd存储同步之前的空间状态示意图。其中,深黑色块(例如b1、l2、l4)表示热数据,浅灰色块(例如l1、l3、l5)表示冷数据,灰色块(例如b2、b3、b4)表示无效数据,head和tail指针如果不做强调则默认指代从节点上的持久内存管理指针。

然后,在图8b中,持久存储模块50通过逆向(或正向)搜索从本地保存的tail指针到head指针之间的数据,将过期的日志项(也即,被后续的更新的blockid相同的日志项所覆盖的日志项)进行置位,也即,把这些过期日志项的tag标记为0。

然后,在图8c中,持久存储模块50控制持久内存的head指针后移到下一个有效日志项。

然后,在图8d中,持久存储模块50将持久内存中的热数据拷贝到距离tail指针最近的空闲位置。

然后,在图8e中,持久存储模块50释放持久内存中拷贝前的热日志项所占存储空间,并移动head指针。

然后,在图8f中,持久存储模块50将持久内存中冷日志项的数据弹出到相应的ssd块中,以释放占用的持久内存空间。

然后,在图8g中,持久存储模块50将持久内存中完成数据同步的日志项置为无效。

然后,在图8h中,持久存储模块50将ssd中的热数据块提取到持久内存中head与tail指针之间的空闲空间中。

然后,在图8i中,持久存储模块50将ssd中已提取到持久内存中的数据块置为无效。

然后,图8j示出了在持久内存与ssd数据同步期间,持久内存上存在新的写入操作的示意图。

然后,图8k示出了第一rpc交互模块30与第二rpc交互模块40进行元数据同步之前主从节点的空间状态认知差异示意图。

然后,图8l示出了第一rpc交互模块30与第二rpc交互模块40进行元数据同步之后主从节点的空间状态认知一致性示意图。

另外,需要说明的是,虽然本公开的附图中均以aep为例示出了持久内存,但是持久内存也可以是aep之外的其他类型的持久内存。

需要注意的是,同步回ssd的热日志项或者拷贝到tail临近区域的源日志项需要被无效化,即tag同样被标记为0。另外,当aep释放空间已经足够,持久存储模块50可以将ssd中一些转热的数据块拷贝会aep,以支持后续的快速rdma访问,也即使用rdmaread直接读取持久内存获取块数据。在从节点执行持久内存与ssd的数据同步以及冷热数据交换的同时,主节点同样可以执行新的读写操作,它们是异步进行的。从节点与主节点会通过第一rpc交互模块30与第二rpc交互模块40之间的元数据同步来获取head指针和tail指针的一致视角,支持安全高效的块数据读写服务。

下面参考图9,其示出了适于用来实现本公开实施例的电子设备600的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图9示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图9所示,电子设备600可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(rom)602中的程序或者从存储装置608加载到随机访问存储器(ram)603中的程序而执行各种适当的动作和处理。在ram603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、rom602以及ram603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。

通常,以下装置可以连接至i/o接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图9示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。

特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从rom602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。

需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。

在一些实施方式中,客户端、服务器可以利用诸如http(hypertexttransferprotocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“lan”),广域网(“wan”),网际网(例如,互联网)以及端对端网络(例如,adhoc端对端网络),以及任何当前已知或未来研发的网络。

上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。

上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取数据访问请求;基于所述数据访问请求的类型,获取所述计算存储分离系统的主节点上的索引表或者所述主节点及其从节点的同步元数据信息;在所述数据访问请求为数据读请求的情况下,查询索引表中待读取数据块的索引项,基于索引项查询结果来读取所述待读取数据块,其中,所述索引表的索引项至少包括存储位置属性和存储地址属性;和/或在所述数据访问请求为数据写请求的情况下,基于所述同步元数据信息,将待写入数据块写入到所述从节点上的持久内存的空闲空间中,其中,所述同步元数据信息用于指示所述持久内存的空间占用与空闲情况。

可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言——诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)——连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定。

本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑设备(cpld)等等。

在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

根据本公开的一个或多个实施例,示例1提供了一种计算存储分离系统的数据访问方法,所述计算存储分离系统包括主节点和从节点,其中,该方法包括:获取数据访问请求;基于所述数据访问请求的类型,获取所述计算存储分离系统的主节点上的索引表或者所述主节点及其从节点的同步元数据信息;在所述数据访问请求为数据读请求的情况下,查询所述索引表中待读取数据块的索引项,基于索引项查询结果来读取所述待读取数据块,其中,所述索引表的索引项至少包括存储位置属性和存储地址属性;和/或在所述数据访问请求为数据写请求的情况下,基于所述同步元数据信息,将待写入数据块写入到所述从节点上的持久内存的空闲空间中,其中,所述同步元数据信息用于指示所述持久内存的空间占用与空闲情况。

根据本公开的一个或多个实施例,示例2提供了示例1的方法,其中,所述基于索引项查询结果来读取所述待读取数据块,包括:若查询到的索引项的存储位置属性指示所述待读取数据块被存储在所述主节点本地的缓存表中,则基于查询到的索引项的存储地址属性从所述缓存表中读取所述待读取数据块;若查询到的索引项的存储位置属性指示所述待读取数据块被存储在所述持久内存上,则通过远程直接内存访问的方式基于查询到的索引项的存储地址属性从所述持久内存中读取所述待读取数据块;若查询到的索引项的存储位置属性指示所述待读取数据块被存储在所述从节点上的固态硬盘上,则通过远程过程调用的方式基于查询到的索引项的存储地址属性从所述固态硬盘上读取所述待读取数据块;若未查询到所述待读取数据块的索引项,则通过所述远程过程调用的方式从所述从节点上读取所述待读取数据块。

根据本公开的一个或多个实施例,示例3提供了示例2的方法,在所述通过远程直接内存访问的方式基于查询到的索引项的存储地址属性从所述持久内存中读取所述待读取数据块之后,所述方法还包括:检查所读取的数据块的有效性;在所读取的数据块失效的情况下,通过所述远程过程调用的方式从所述固态硬盘上读取所述待读取数据块。

根据本公开的一个或多个实施例,示例4提供了示例2的方法,所述方法还包括:在成功读取所述待读取数据块之后,更新所述索引表和所述缓存表。

根据本公开的一个或多个实施例,示例5提供了示例1的方法,所述将待写入数据块写入到所述从节点上的持久内存的空闲空间中,包括:对所述待写入数据块进行封装;通过远程直接内存访问的方式将封装后的待写入数据块写入所述空闲空间中。

根据本公开的一个或多个实施例,示例6提供了示例5的方法,所述对所述待写入数据块进行封装,包括:将所述待写入数据块封装为日志结构的待写入数据块,其中,所述日志结构的待写入数据块包括所述待写入数据块本身、块标识以及数据完整性标识。

根据本公开的一个或多个实施例,示例7提供了示例5的方法,所述方法还包括:在执行写入之前,基于所述同步元数据信息判断所述空闲空间是否足够写入所述待写入数据块;如果所述空闲空间不足,则将所述持久内存中的数据同步到所述从节点上的固态硬盘中;以及在同步完成之后,更新所述同步元数据信息。

根据本公开的一个或多个实施例,示例8提供了示例7的方法,所述将所述持久内存中的数据同步到所述从节点上的固态硬盘中,包括:将所述持久内存的占用空间中的过期数据标记为失效;控制所述持久内存的表示已占用空间的开始位置的头指针后移,同时将冷数据同步回所述固态硬盘;将同步回所述固态硬盘的热数据或者被复制到指示所述持久内存的表示已占用空间的末尾的尾指针的临近区域的源数据无效化。

根据本公开的一个或多个实施例,示例9提供了示例1至8之一的方法,所述同步元数据信息包括用于指向所述持久内存的已占用空间的开始位置的头指针以及用于指向所述持久内存的已占用空间的末尾位置的尾指针,其中:所述主节点和所述从节点上的同步元数据信息中的所述头指针均落后于所述尾指针;所述主节点上的尾指针的值总是领先或等于所述从节点上的尾指针的值;所述从节点上的头指针的值总是领先或等于所述主节点上的头指针的值。

以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。

尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

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