CN112988680B - 数据加速方法、缓存单元、电子设备及存储介质 - Google Patents
数据加速方法、缓存单元、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112988680B CN112988680B CN202110338562.7A CN202110338562A CN112988680B CN 112988680 B CN112988680 B CN 112988680B CN 202110338562 A CN202110338562 A CN 202110338562A CN 112988680 B CN112988680 B CN 112988680B
- Authority
- CN
- China
- Prior art keywords
- cache
- data
- cache node
- node
- storage medium
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/1824—Distributed file systems implemented using Network-attached Storage [NAS] architecture
- G06F16/183—Provision of network file services by network file servers, e.g. by using NFS, CIFS
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种数据加速方法、缓存单元、电子设备及存储介质,该数据加速方法用于为发送至第一缓存节点的第一缓存请求提供数据缓存服务。该数据加速方法包括:响应于第一缓存节点接收到第一缓存请求,将第一目标数据存储到第一缓存节点;利用远程直接数据存取方法,将第一目标数据传输至不同于第一缓存节点的第二缓存节点并存储到第二缓存节点;通过第一缓存节点返回针对第一缓存请求的响应。该数据加速方法可以保证数据的一致性,实现缓存服务的高可用性,使得数据缓存服务不受节点故障的限制,在发生节点故障时仍能提供数据缓存服务,响应速度快,无数据丢失,可以提升***的可靠性和可用性。
Description
技术领域
本公开的实施例涉及一种数据加速方法、缓存单元、电子设备及存储介质。
背景技术
随着网络传输技术的飞速发展,使得通过互联网提供的内容越来越丰富。例如,用户可以通过互联网读新闻、听音乐、看电影、下载应用软件等。为了能更有效率地为用户提供服务,可以采用主服务器与存储***相结合的方式。例如,主服务器用于为用户提供服务,而服务涉及的内容数据(例如音视频数据、本文数据以及其他所需要的数据)被存储在存储***中。存储***包括存储服务器,存储服务器可以拥有自己的文件***以对外提供文件访问服务。主服务器与存储***进行交互,进行数据的存储与访问,以实现所需要的功能。
发明内容
本公开至少一个实施例提供一种数据加速方法,用于为发送至第一缓存节点的第一缓存请求提供数据缓存服务,包括:响应于所述第一缓存节点接收到所述第一缓存请求,将第一目标数据存储到所述第一缓存节点;利用远程直接数据存取方法,将所述第一目标数据传输至不同于所述第一缓存节点的第二缓存节点并存储到所述第二缓存节点;通过所述第一缓存节点返回针对所述第一缓存请求的响应。
例如,在本公开一实施例提供的数据加速方法中,所述第一缓存节点包括第一存储介质,所述第二缓存节点包括第二存储介质,所述第一存储介质和/或所述第二存储介质包括持久化内存。
例如,在本公开一实施例提供的数据加速方法中,将所述第一目标数据存储到所述第一缓存节点包括:对所述第一目标数据进行处理,以生成至少一个分片数据文件;将所述至少一个分片数据文件存储到所述第一存储介质中,并基于所述至少一个分片数据文件的存储地址生成管理数据结构,其中,所述管理数据结构用于对所述至少一个分片数据文件进行管理;将所述管理数据结构作为所述第一目标数据对应的元数据存储到所述第一存储介质中。
例如,在本公开一实施例提供的数据加速方法中,所述管理数据结构包括第一链表和第二链表,所述第一链表包括文件节点,所述第二链表包括至少一个分片数据管理节点,所述文件节点包括第一指针,所述第一指针指向所述第二链表中对应的分片数据管理节点,所述分片数据管理节点包括至少一个第二指针,所述第二指针指向对应的分片数据文件的起始存储地址。
例如,在本公开一实施例提供的数据加速方法中,各个分片数据文件的大小相同。
例如,在本公开一实施例提供的数据加速方法中,利用所述远程直接数据存取方法,将所述第一目标数据传输至不同于所述第一缓存节点的所述第二缓存节点并存储到所述第二缓存节点,包括:调用所述第一存储介质的库文件,利用所述远程直接数据存取方法将所述第一目标数据以所述分片数据文件的形式通过网络传输至所述第二缓存节点,并存储到所述第二存储介质中;调用所述第一存储介质的所述库文件,利用所述远程直接数据存取方法将所述第一目标数据对应的元数据通过所述网络传输至所述第二缓存节点,并存储到所述第二存储介质中。
例如,在本公开一实施例提供的数据加速方法中,所述第一存储介质的存储空间包括目标本地空间,所述第一目标数据及所述第一目标数据对应的元数据存储在所述第一存储介质的目标本地空间中,所述第二存储介质的存储空间包括镜像备份空间,所述第一目标数据及所述第一目标数据对应的元数据镜像存储在所述第二存储介质的镜像备份空间中。
例如,在本公开一实施例提供的数据加速方法中,所述第一存储介质的存储空间还包括目标备份空间,所述第二存储介质的存储空间还包括镜像本地空间,所述的数据加速方法还包括:响应于所述第二缓存节点接收到第二缓存请求,将第二目标数据存储到所述第二存储介质的镜像本地空间中;利用所述远程直接数据存取方法,将所述第二目标数据传输至所述第一缓存节点并镜像存储到所述第一存储介质的目标备份空间中;通过所述第二缓存节点返回针对所述第二缓存请求的响应。
例如,在本公开一实施例提供的数据加速方法中,所述第一缓存节点和所述第二缓存节点为物理上彼此独立的缓存节点,所述第一存储介质和所述第二存储介质为物理上彼此独立的存储介质;或者所述第一缓存节点和所述第二缓存节点为逻辑上彼此独立的缓存节点但物理上为同一个缓存设备,所述第一存储介质和所述第二存储介质为同一个持久化内存的不同存储区域。
例如,在本公开一实施例提供的数据加速方法中,所述第一缓存请求包括写数据请求。
本公开至少一个实施例还提供一种数据加速方法,用于为发送至第一缓存节点的第一缓存请求提供数据缓存服务,包括:响应于发送至所述第一缓存节点的所述第一缓存请求无响应,将所述第一缓存请求发送至不同于所述第一缓存节点的第二缓存节点;所述第二缓存节点阻塞请求队列中与所述第一缓存节点对应的剩余缓存请求;将所述第二缓存节点中存储的与第一目标数据对应的元数据读取到所述第二缓存节点的内存中;基于所述第二缓存节点中存储的所述第一目标数据,所述第二缓存节点响应所述第一缓存请求,并依序接收并响应所述请求队列中与所述第一缓存节点对应的剩余缓存请求,从而利用所述第二缓存节点替代所述第一缓存节点提供数据缓存服务;其中,所述第一目标数据及所述第一目标数据对应的元数据是利用远程直接数据存取方法由所述第一缓存节点传输到所述第二缓存节点并存储到所述第二缓存节点的。
例如,在本公开一实施例提供的数据加速方法中,所述第一缓存节点包括第一存储介质,所述第二缓存节点包括第二存储介质,所述第一存储介质和/或所述第二存储介质包括持久化内存。
例如,在本公开一实施例提供的数据加速方法中,所述第二存储介质的存储空间包括镜像备份空间,所述第一目标数据及所述第一目标数据对应的元数据镜像存储在所述第二存储介质的镜像备份空间中。
例如,本公开一实施例提供的数据加速方法还包括:基于读取到所述内存中的元数据,将所述第二存储介质的镜像备份空间中存储的、需要进行下刷操作的分片数据文件存储到所述第二缓存节点的持久化层;将所述第二存储介质的镜像备份空间中已存储到所述持久化层的分片数据文件删除。
例如,在本公开一实施例提供的数据加速方法中,所述第一缓存节点由于发生故障而无法响应所述第一缓存请求。
本公开至少一个实施例还提供一种数据加速方法,用于为与第一缓存节点对应、发送至不同于所述第一缓存节点的第二缓存节点的第一缓存请求提供数据缓存服务,包括:响应于发送至所述第二缓存节点的所述第一缓存请求无响应,将所述第一缓存请求发送至所述第一缓存节点;所述第一缓存节点阻塞请求队列中与所述第一缓存节点对应的剩余缓存请求;清空所述第一缓存节点的第一存储介质的存储空间;将所述第二缓存节点的第二存储介质中存储的分片数据文件均存储到所述第二缓存节点的持久化层;所述第二缓存节点向所述第一缓存节点发送下刷完成标识;所述第一缓存节点响应所述第一缓存请求,并依序接收并响应所述请求队列中与所述第一缓存节点对应的剩余缓存请求,从而利用所述第一缓存节点提供数据缓存服务。
例如,在本公开一实施例提供的数据加速方法中,所述第二缓存节点由于网络连接协议发生变化而无法响应所述第一缓存请求,所述网络连接协议由于所述第一缓存节点的故障解除而发生变化。
本公开至少一个实施例还提供一种缓存单元,包括通信连接的第一缓存节点和第二缓存节点,其中,所述缓存单元配置为向发送至所述第一缓存节点的第一缓存请求提供数据缓存服务,所述第一缓存节点配置为响应于接收到所述第一缓存请求,将第一目标数据存储到所述第一缓存节点,并利用远程直接数据存取方法,将所述第一目标数据传输至所述第二缓存节点;所述第二缓存节点配置为接收所述第一缓存节点发送的所述第一目标数据,并将所述第一目标数据存储到所述第二缓存节点中;所述第一缓存节点还配置为在所述第二缓存节点存储所述第一目标数据之后,返回针对所述第一缓存请求的响应。
例如,在本公开一实施例提供的缓存单元中,所述第一缓存节点包括第一存储介质,所述第二缓存节点包括第二存储介质,所述第一存储介质和/或所述第二存储介质包括持久化内存。
本公开至少一个实施例还提供一种电子设备,包括如本公开任一实施例所述的缓存单元。
本公开至少一个实施例还提供一种电子设备,包括:处理器;存储器,包括一个或多个计算机程序模块;其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于实现如本公开任一实施例所述的数据加速方法的指令。
本公开至少一个实施例还提供一种存储介质,用于存储非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时可以实现如本公开任一实施例所述的数据加速方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1为本公开一些实施例提供的一种数据加速方法的流程示意图;
图2为本公开一些实施例提供的缓存节点交互示意图之一;
图3为图1中步骤S110的示例的流程示意图;
图4为本公开一些实施例提供的一种数据加速方法所采用的管理数据结构的示意图;
图5为图1中步骤S120的示例的流程示意图;
图6为本公开一些实施例提供的缓存节点交互示意图之二;
图7为本公开一些实施例提供的一种缓存节点的存储空间示意图;
图8为本公开一些实施例提供的另一种数据加速方法的流程示意图;
图9为本公开一些实施例提供的另一种数据加速方法的流程示意图;
图10为本公开一些实施例提供的另一种数据加速方法的流程示意图;
图11为本公开一些实施例提供的一种数据加速方法的应用流程图;
图12为本公开一些实施例提供的一种数据加速方法的流程示意图;
图13为本公开一些实施例提供的一种数据加速方法的应用流程图;
图14为本公开一些实施例提供的一种缓存单元的示意框图;
图15为本公开一些实施例提供的一种电子设备的示意框图;
图16为本公开一些实施例提供的另一种电子设备的示意框图;以及
图17为本公开一些实施例提供的一种存储介质的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
在存储***通过文件***协议例如通用网络文件***(Common Internet FileSystem,CIFS)协议导出数据供客户端使用时,受限于单个读写请求的数据大小及后端存储***性能,客户端读写性能较差。因此,可以采用缓存(Cache)来加速数据访问的速度。在计算机***中,缓存是一种软件或者硬件的组件,用来存放将来即将访问或者过去已经访问过的数据,用以加速数据访问的性能。在存储***中,为了加速***的数据处理能力,通常也使用缓存,该缓存同样可以通过软件、硬件、软件与硬件的组合来实现。例如,可以将持久化层(例如硬盘)中存储的数据先存放在数据链中离数据请求方较近、访问速度更快的组件中,即进行数据缓存,然后可以使数据请求方进行快速访问,提高数据的输出效率。
持久化内存(Persistent Memory,PMem)作为一种非易失内存,可以作为读写的缓存,PMem例如可以支持字节寻址,可以通过CPU指令直接进行操作,断电后数据不丢失;例如,PMem可以为傲腾TM持久化内存。例如,文件***服务器上协议使用写回模式将数据写到PMem后立即返回结果给客户端,然后文件***服务器将PMem中的数据后台下刷到存储***的持久化层,从而提高读写性能。
然而,仅单个缓存节点使用PMem时,在单节点故障后,由于PMem的数据不丢失,所以可以完成单节点故障恢复。但在故障过程中及恢复过程中,故障节点无法提供文件读写服务,也即,无法提供高可用特性,这影响了***整体的可靠性和可用性。
本公开至少一个实施例提供一种数据加速方法、缓存单元、电子设备及存储介质。该数据加速方法可以保证数据的一致性,实现缓存服务的高可用性,使得数据缓存服务不受节点故障的限制,在发生节点故障时仍能提供数据缓存服务,响应速度快,无数据丢失,可以提升***的可靠性和可用性。
下面,将参考附图详细地说明本公开的实施例。应当注意的是,不同的附图中相同的附图标记将用于指代已描述的相同的元件。
本公开至少一个实施例提供一种数据加速方法。该数据加速方法用于为发送至第一缓存节点的第一缓存请求提供数据缓存服务。该数据加速方法包括:响应于第一缓存节点接收到第一缓存请求,将第一目标数据存储到第一缓存节点;利用远程直接数据存取方法,将第一目标数据传输至不同于第一缓存节点的第二缓存节点并存储到第二缓存节点;通过第一缓存节点返回针对第一缓存请求的响应。
图1为本公开一些实施例提供的一种数据加速方法的流程示意图。该数据加速方法例如用于为发送至第一缓存节点的第一缓存请求提供数据缓存服务。如图1所示,该数据加速方法包括如下操作。
步骤S110:响应于第一缓存节点接收到第一缓存请求,将第一目标数据存储到第一缓存节点;
步骤S120:利用远程直接数据存取方法,将第一目标数据传输至不同于第一缓存节点的第二缓存节点并存储到第二缓存节点;
步骤S130:通过第一缓存节点返回针对第一缓存请求的响应。
例如,在步骤S110中,第一缓存节点接收到第一缓存请求后,将第一目标数据存储到第一缓存节点。例如,第一缓存请求可以为写数据请求,并用于请求将第一目标数据进行缓存,也即,请求将第一目标数据写入第一缓存节点的存储介质中。第一目标数据可以为任意类型的数据,本公开的实施例对此不作限制,只要第一目标数据是需要存储到第一缓存节点的数据即可。第一缓存请求可以为客户端发送的请求,也可以为管理缓存服务的模块发出的请求,本公开的实施例对此不作限制。例如,第一缓存请求对应的服务提供方为第一缓存节点,该第一缓存请求可以为被分配至第一缓存节点的缓存请求,也可以为请求发送方在发送第一缓存请求时指定为需要发送至第一缓存节点的请求。
例如,在步骤S120中,利用远程直接数据存取方法将第一目标数据传输至第二缓存节点并存储到第二缓存节点。例如,第二缓存节点与第一缓存节点不同。例如,第一缓存节点和第二缓存节点可以为物理上彼此独立的缓存节点。又例如,第一缓存节点和第二缓存节点也可以为逻辑上彼此独立的缓存节点但物理上为同一个缓存设备。当第一目标数据被存储到第一缓存节点后,第一缓存节点会自动将第一目标数据传输至第二缓存节点,第二缓存节点接收到第一目标数据后会存储第一目标数据。需要说明的是,将第一目标数据由第一缓存节点传输至第二缓存节点的过程不需要由任何请求方发送请求来触发,该过程为针对第一目标数据的缓存过程中的一个步骤。
例如,远程直接数据存取方法(Remote Direct Memory Access,RDMA)能够从网络节点中的一个设备直接访问远端节点的另一个设备内存,从而实现远端节点内存和本地节点内存之间的直接传输。
例如,在一些示例中,RDMA可以采用软件的处理方式来实现,软件在本地节点的内存中开辟一块缓存区域,数据存储设备(例如存储介质等)通过例如直接内存访问(DirectMemory Access,DMA)的方式把数据拷贝到本地节点的内存的缓存区域中;相应地,远端节点的内存中也开辟有缓存区域,通过使用网络适配器把本地节点的内存中的数据拷贝到远端节点的内存中。例如,远端节点也可以采用DMA的方式将数据从内存中拷贝到数据存储设备中,由此实现两个节点之间的数据传输。需要说明的是,本公开的实施例中,RDMA的具体实现方式不限于上文描述的方式,也可以为其他任意适用的方式,这可以参考常规技术中RDMA的实现方式,本公开的实施例对此不作限制。
例如,如图2所示,在一些示例中,第一缓存节点通过RDMA的方式将第一目标数据传输至第二缓存节点并存储到第二缓存节点,由此,使得第一目标数据不仅被存储在第一缓存节点中,还被镜像存储到第二缓存节点中。这里,“镜像存储”是指第一目标数据被存储到不同的缓存节点中,并且,不同的缓存节点中存储的该第一目标数据彼此相同。
例如,如图1所示,在步骤S130中,通过第一缓存节点返回针对第一缓存请求的响应。也即是,当第一目标数据被存储到第一缓存节点并且被存储到第二缓存节点之后,第一缓存节点才返回针对第一缓存请求的响应。例如,该响应可以指示缓存成功,该响应可以由第一缓存节点返回给第一缓存请求的发送方。由此,完成针对第一目标数据的缓存操作。第一目标数据不仅被缓存至第一缓存节点,还被镜像存储到第二缓存节点,实现了镜像存储和多点备份。
例如,第一缓存节点包括第一存储介质,第一存储介质作为第一缓存节点的存储介质,第一存储介质可以至少部分包括持久化内存(PMem)。第二缓存节点包括第二存储介质,第二存储介质作为第二缓存节点的存储介质,第二存储介质可以至少部分包括持久化内存。例如,第一存储介质和第二存储介质可以为相同类型的存储介质,也可以为不同类型的存储介质,本公开的实施例对此不作限制。
图3为图1中步骤S110的示例的流程示意图。如图3所示,在一些示例中,步骤S110可以包括如下操作。
步骤S111:对第一目标数据进行处理,以生成至少一个分片数据文件;
步骤S112:将至少一个分片数据文件存储到第一存储介质中,并基于至少一个分片数据文件的存储地址生成管理数据结构,管理数据结构用于对至少一个分片数据文件进行管理;
步骤S113:将管理数据结构作为第一目标数据对应的元数据存储到第一存储介质中。
例如,在步骤S111中,对第一目标数据进行处理,从而基于第一目标数据生成至少一个分片数据文件。由于第一缓存节点的第一存储介质为持久化内存,持久化内存中的数据需要以分片数据(Data Block)的形式存储,因此需要对第一目标数据进行处理,将第一目标数据转化为分片数据的形式。所生成的分片数据文件例如是对第一目标数据进行分割所得到的,每个分片数据文件为一个数据块。
例如,在一些示例中,数据块的大小为4MB,由此可以在后续利用RDMA进行数据传输时获得较好的性能。例如,当得到多个分片数据文件时,各个分片数据文件的大小均相同,例如均为4MB,从而可以提高数据文件的同一性,更有利于后续操作。例如,处理得到的分片数据文件的数量可以为1个或多个,这可以根据第一目标数据的大小以及每个分片数据文件的大小而定,本公开的实施例对此不作限制。
需要说明的是,本公开的实施例中,每个分片数据文件的大小不限于4MB,可以为任意大小,并且,分片数据文件的数量和第一目标数据的处理方式均不受限制,这可以根据实际需求而定。
例如,在步骤S112中,将对第一目标数据进行处理所得到的分片数据文件存储到第一存储介质中,并且根据分片数据文件的存储地址生成管理数据结构。例如,管理数据结构以文件为单位对分片数据文件进行管理。这里,“以文件为单位”是指以第一目标数据中的逻辑层面的文件为单位,逻辑层面的文件例如为文档、视频、音频等。
图4为本公开一些实施例提供的一种数据加速方法所采用的管理数据结构的示意图。如图4所示,在一些示例中,管理数据结构包括第一链表01和第二链表02。
第一链表01包括至少一个文件节点。每个文件节点对应于一个读写的文件,该文件节点存储文件相关的元数据信息,例如记录有文件名称、文件编号(inode号)等信息。第二链表02包括至少一个分片数据管理节点,每个分片数据管理节点记录有管理节点索引及分片数据文件列表。每个分片数据文件列表记录有每个分片数据文件的大小等信息。
例如,文件节点还包括第一指针,第一指针指向第二链表02中对应的分片数据管理节点。分片数据管理节点存储分片数据文件相关的元数据信息。分片数据管理节点包括至少一个第二指针,第二指针指向对应的分片数据文件在第一存储介质中的起始存储地址(也即块数据起始地址)。例如,当分片数据文件为多个时,第二指针也为多个,通过第二指针所指向的地址便可获取对应的分片数据文件。
例如,第一链表01为单向链表,第二链表02为双向链表。第一链表01和第二链表02均为管理数据结构的组成部分,第一链表01和第二链表02均作为元数据存储在第一存储介质中。
需要说明的是,本公开的实施例中,管理数据结构不限于采用第一链表01和第二链表02的形式,也可以采用其他任意适用的数据结构,只要能对分片数据文件进行管理即可,本公开的实施例对此不作限制。
例如,如图3所示,在步骤S113中,将管理数据结构作为第一目标数据对应的元数据存储到第一存储介质中。也即是,管理数据结构为对应于第一目标数据的元数据,管理数据结构和第一目标数据均被存储到第一存储介质中。当管理数据结构包括上述的第一链表01和第二链表02时,第一链表01和第二链表02均被存储到第一存储介质中。
图5为图1中步骤S120的示例的流程示意图。如图5所示,在一些示例中,步骤S120可以包括如下操作。
步骤S121:调用第一存储介质的库文件,利用远程直接数据存取方法将第一目标数据以分片数据文件的形式通过网络传输至第二缓存节点,并存储到第二存储介质中;
步骤S122:调用第一存储介质的库文件,利用远程直接数据存取方法将第一目标数据对应的元数据通过网络传输至第二缓存节点,并存储到第二存储介质中。
例如,步骤S121和步骤S122可以采用类似的方式实现数据传输,从而分别将第一目标数据和对应的元数据传输至第二缓存节点。
例如,由于第一存储介质和第二存储介质为持久化内存,因此配置有相应的库文件。例如,如图6所示,libpmemobj、librpmem、libfabric、libibverbs均为持久化内存提供的库文件,用于实现基于持久化内存的各种功能。例如,库文件libpmemobj用于实现内部数据写入的功能,库文件librpmem用于实现外部数据写入的功能,库文件libfabric和libibverbs用于实现与硬件相关或与RDMA相关的功能。关于各个库文件的详细说明可参考常规设计,此处不再赘述。
例如,当需要存储第一目标数据时,可以调用库文件librpmem,利用库文件librpmem将第一目标数据写入第一存储介质。当需要将第一目标数据从第一缓存节点传输至第二缓存节点时,可以调用库文件libfabric,利用库文件libfabric实现RDMA。例如,通过调用库文件librpmem,会将基于第一目标数据得到的分片数据文件写入第一存储介质,然后通过调用库文件libfabric,可以通过第一缓存节点的网络适配器以RDMA的方式通过网络传输到第二缓存节点的网络适配器,然后再存储到第二缓存节点的第二存储介质中,由此将对应于第一目标数据的分片数据文件镜像存储到第二存储介质中。通过这种方式,可以实现数据的备份,存储在第一存储介质中的第一目标数据和存储在第二存储介质中的第一目标数据相同。
需要说明的是,在第一存储介质和第二存储介质中存储的第一目标数据均为分片数据文件的形式,并且在利用库文件libfabric传输第一目标数据时,也是采用分片数据文件的形式进行传输。这些分片数据文件与第一目标数据对应,例如是对第一目标数据进行分割所得到的。类似地,当需要将第一目标数据对应的元数据从第一缓存节点传输至第二缓存节点时,也可以调用库文件librpmem来实现写入并调用库文件libfabric来实现RDMA。关于利用库文件librpmem实现写入并利用库文件libfabric实现RDMA的详细说明可参考常规设计,此处不再赘述。
例如,在一些示例中,第一缓存节点和第二缓存节点为物理上彼此独立的缓存节点,相应地,第一存储介质和第二存储介质为物理上彼此独立的存储介质。例如,在另一些示例中,第一缓存节点和第二缓存节点为逻辑上彼此独立的缓存节点但物理上为同一个缓存设备,也即,该缓存设备上配置了两个不同的缓存节点,这两个缓存节点各自独立地提供数据缓存服务。相应地,在该情形下,第一存储介质和第二存储介质可以为同一个持久化内存的不同存储区域,也即是,对同一个持久化内存进行区域划分后得到多个分区空间,将各个分区空间分配给各个缓存节点,以作为对应的缓存节点的存储介质。当然,本公开的实施例不限于此,在第一缓存节点和第二缓存节点为逻辑上彼此独立的缓存节点但物理上为同一个缓存设备的情形,第一存储介质和第二存储介质也可以为不同的持久化内存,这可以根据实际需求而定。
例如,第一缓存节点和第二缓存节点的网络适配器可以为主机总线适配器(HostBus Adapter,HBA),也可以为其他任意适用的网络适配器,只要使第一缓存节点与第二缓存节点能通过总线或网络等方式实现通信连接即可,本公开的实施例对此不作限制。例如,网络可以为以太网(Ethernet)或其他任意适用的网络。
需要说明的是,本公开的实施例中,所调用的库文件不限于上文中描述的librpmem和libfabric,当第一存储介质和第二存储介质不为持久化内存时,库文件也相应改变,可以为任意适用的用于实现数据写入和RDMA的库文件,只需使所调用的库文件能够将第一存储介质中的第一目标数据传输到第二存储介质并存储到第二存储介质即可,本公开的实施例对此不作限制。
需要说明的是,本公开的实施例中,RDMA的具体实现方式不受限制,可以采用任意适用的方式实现RDMA,这可以根据实际需求而定,例如根据第一存储介质和第二存储介质的类型、所调用的库文件等因素而定,本公开的实施例对此不作限制。
例如,在一些示例中,第一缓存节点提供数据缓存服务的流程如下。首先,第一缓存节点接收到第一缓存请求(例如为写数据请求),第一缓存节点将接收到的第一目标数据进行处理从而得到分片数据文件。然后,通过调用持久化内存提供的库文件librpmem将第一目标数据以分片数据文件的形式写入第一缓存节点的第一存储介质。库文件librpmem使用库文件libpmemobj保证数据的原子性。接着,库文件librpmem自动地使用库文件libfabric将第一目标数据以分片数据文件的形式通过RDMA方式发送到第二缓存节点并存储到第二缓存节点的第二存储介质中。
然后,将第一目标数据对应的元数据(例如管理数据结构,也即第一链表01和第二链表02)也采用类似的方式写入第一存储介质。接着,库文件librpmem自动地使用库文件libfabric将元数据以分片数据文件的形式通过RDMA方式发送到第二缓存节点并存储到第二缓存节点的第二存储介质中。然后,第一缓存节点返回针对第一缓存请求的响应,例如返回指示缓存成功的响应。需要说明的是,当第一目标数据及对应的元数据被存储到第二缓存节点之后,第一缓存节点才返回针对第一缓存请求的响应,以保证备份的有效性和完整性。
由此,第一缓存节点完成了针对第一缓存请求的数据缓存服务,第一目标数据及对应的元数据既被存储在第一缓存节点的第一存储介质中,又被镜像存储在第二缓存节点的第二存储介质中。在后续工作阶段中,若第一缓存节点无法提供数据缓存服务,则第二缓存节点能够接管针对第一缓存节点的缓存请求并提供与第一缓存节点无差别的数据缓存服务。由此,数据缓存服务不再受节点故障的限制,即使第一缓存节点发生故障,也能够继续为针对第一缓存节点的缓存请求提供数据缓存服务,从而提高***的可用性和可靠性。
图7为本公开一些实施例提供的一种缓存节点的存储空间示意图。如图7所示,第一缓存节点包括第一存储介质11,第一存储介质11的存储空间包括目标本地空间111和目标备份空间112,也即是,第一存储介质11的存储空间被划分为两部分,分别为目标本地空间111和目标备份空间112。第二缓存节点包括第二存储介质12,第二存储介质12的存储空间包括镜像本地空间121和镜像备份空间122,也即是,第二存储介质12的存储空间被划分为两部分,分别为镜像本地空间121和镜像备份空间122。
例如,第一目标数据及第一目标数据对应的元数据存储在第一存储介质11的目标本地空间111中,并且还镜像存储在第二存储介质12的镜像备份空间122中。当第一缓存节点接收到第一缓存请求(例如为写数据请求)后,第一缓存节点提供数据缓存服务,将第一目标数据及第一目标数据对应的元数据存储在第一存储介质11的目标本地空间111中,并且通过RDMA将第一目标数据及第一目标数据对应的元数据传输至第二缓存节点,并存储到第二存储介质12的镜像备份空间122。第一目标数据及第一目标数据对应的元数据被存储到第一存储介质11和第二存储介质12之后,第一缓存节点返回针对第一缓存请求的响应,该响应例如指示数据缓存成功。
例如,镜像备份空间122用于对目标本地空间111中的数据进行备份,镜像备份空间122和目标本地空间111中的数据具有一致性,以便在第一缓存节点无法提供数据缓存服务时,第二缓存节点能够接管针对第一缓存节点的缓存请求并提供与第一缓存节点无差别的数据缓存服务。由此,使得数据缓存服务不受节点故障的限制,即使第一缓存节点发生故障,也能够继续为针对第一缓存节点的缓存请求提供数据缓存服务,从而提高***的可用性和可靠性。
例如,目标本地空间111与镜像备份空间122的大小相同,从而既满足镜像存储的需求,又避免存储资源的浪费。当然,本公开的实施例不限于此,根据实际设计需求,目标本地空间111与镜像备份空间122的大小也可以不同,本公开的实施例对此不作限制。
例如,在一些示例中,第二缓存节点不仅用于对第一缓存节点的数据进行备份,还用于为发送至第二缓存节点的第二缓存请求提供数据缓存服务,因此可以利用第一存储介质11的目标备份空间112对第二存储介质12的镜像本地空间121中的数据进行备份。也即是,第一缓存节点和第二缓存节点互相同步,互为备份。下面结合图8对该操作方式进行说明。
图8为本公开一些实施例提供的另一种数据加速方法的流程示意图。如图8所示,该数据加速方法还可以进一步包括如下操作。
步骤S140:响应于第二缓存节点接收到第二缓存请求,将第二目标数据存储到第二存储介质的镜像本地空间中;
步骤S150:利用远程直接数据存取方法,将第二目标数据传输至第一缓存节点并镜像存储到第一存储介质的目标备份空间中;
步骤S160:通过第二缓存节点返回针对第二缓存请求的响应。
例如,在步骤S140中,第二缓存节点接收到第二缓存请求后,将第二目标数据存储到第二存储介质12的镜像本地空间121中。例如,第二缓存请求可以为写数据请求,并用于请求将第二目标数据进行缓存,也即,请求将第二目标数据写入第二缓存节点的第二存储介质12中。第二目标数据可以为任意类型的数据,本公开的实施例对此不作限制,只要第二目标数据是需要缓存到第二缓存节点的数据即可。第二缓存请求可以为客户端发送的请求,也可以为管理缓存服务的模块发出的请求,本公开的实施例对此不作限制。例如,第二缓存请求对应的服务提供方为第二缓存节点,该第二缓存请求可以为被分配至第二缓存节点的缓存请求,也可以为请求发送方在发送第二缓存请求时指定为需要发送至第二缓存节点的请求。
例如,在步骤S150中,利用远程直接数据存取方法将第二目标数据传输至第一缓存节点并镜像存储到第一存储介质11的目标备份空间112中。当第二目标数据被存储到第二缓存节点后,第二缓存节点会自动将第二目标数据传输至第一缓存节点,第一缓存节点接收到第二目标数据后会存储第二目标数据。需要说明的是,将第二目标数据由第二缓存节点传输至第一缓存节点的过程不需要由任何请求方发送请求来触发,该过程为针对第二目标数据的缓存过程中的一个步骤。关于利用远程直接数据存取方法传输第二目标数据的方式可参考上文中关于步骤S120中利用远程直接数据存取方法传输第一目标数据的说明,两者基本相同,只是数据传输方向彼此相反,具体说明此处不再赘述。
例如,在步骤S160中,通过第二缓存节点返回针对第二缓存请求的响应。也即是,当第二目标数据被存储到第二缓存节点并且被存储到第一缓存节点之后,第二缓存节点才返回针对第二缓存请求的响应。例如,该响应可以指示缓存成功,该响应可以由第二缓存节点返回给第二缓存请求的发送方。由此,完成针对第二目标数据的缓存操作。第二目标数据不仅被缓存至第二缓存节点,还被镜像存储到第一缓存节点,实现了镜像存储和多点备份。
由此,第一缓存节点和第二缓存节点互相同步,互为备份。每个缓存节点的存储空间既包括本地空间,又包括备份空间,本地空间用于为自身的缓存请求提供数据缓存服务,备份空间用于为对端节点提供备份和镜像存储服务。通过这种方式,可以实现缓存服务的高可用性,使得任意的缓存节点的数据都镜像存储在对端节点中,从而使数据缓存服务不受节点故障的限制,在发生节点故障时仍能提供数据缓存服务,响应速度快,无数据丢失,可以提升***的可靠性和可用性。这里,“对端节点”是指为某一缓存节点提供备份和镜像存储服务的节点。例如,在上文的示例中,第一缓存节点为第二缓存节点的对端节点,第二缓存节点为第一缓存节点的对端节点。
例如,在一些示例中,在返回针对缓存请求的响应后,也即,完成数据缓存服务后,第一缓存节点和第二缓存节点会利用后台线程将各自的本地空间中的数据下刷至持久化层。
本公开至少一个实施例还提供一种数据加速方法,该数据加速方法用于为发送至第一缓存节点的第一缓存请求提供数据缓存服务。例如,该数据加速方法适用于第一缓存节点发生故障的场景,此时,第二缓存节点会接管针对第一缓存节点的缓存请求并提供与第一缓存节点无差别的数据缓存服务。由此,数据缓存服务不再受节点故障的限制,即使第一缓存节点发生故障,也能够继续为针对第一缓存节点的缓存请求提供数据缓存服务,从而提高***的可用性和可靠性。
图9为本公开一些实施例提供的另一种数据加速方法的流程示意图。如图9所示,该数据加速方法包括如下操作。
步骤S210:响应于发送至第一缓存节点的第一缓存请求无响应,将第一缓存请求发送至不同于第一缓存节点的第二缓存节点;
步骤S220:第二缓存节点阻塞请求队列中与第一缓存节点对应的剩余缓存请求;
步骤S230:将第二缓存节点中存储的与第一目标数据对应的元数据读取到第二缓存节点的内存中;
步骤S240:基于第二缓存节点中存储的第一目标数据,第二缓存节点响应第一缓存请求,并依序接收并响应请求队列中与第一缓存节点对应的剩余缓存请求,从而利用第二缓存节点替代第一缓存节点提供数据缓存服务。
例如,第一目标数据及第一目标数据对应的元数据是利用远程直接数据存取方法由第一缓存节点传输到第二缓存节点并存储到第二缓存节点的。也即是,第一目标数据及第一目标数据对应的元数据是通过图1所示的数据加速方法传输并存储到第二缓存节点的。
需要说明的是,在该实施例中,第一缓存请求可以为写数据请求,也可以为读数据请求。该实施例中的第一缓存请求与图1所示的实施例中的第一缓存请求不同,两者为不同时刻发送给第一缓存节点的缓存请求。
例如,在步骤S210中,若发送至第一缓存节点的第一缓存请求无响应,则将第一缓存请求发送至第二缓存节点。第二缓存节点与第一缓存节点不同。关于第一缓存节点和第二缓存节点的说明可参考前文内容,此处不再赘述。例如,在一些示例中,第一缓存节点由于发生故障而无法响应第一缓存请求。例如,在另一些示例中,第一缓存节点也可以由于***设置的变化而无法响应第一缓存请求。当然,第一缓存节点可以由于应用中各种可能的原因而无法响应第一缓存请求,本公开的实施例对此不作限制。例如,可以通过软件设置或协议设置,使得第一缓存请求无响应时,请求发送方再次发送第一缓存请求并将第一缓存请求发送至第二缓存节点。
例如,在步骤S220中,第二缓存节点接收到第一缓存请求后,阻塞请求队列中与第一缓存节点对应的剩余缓存请求。例如,请求队列包括多个请求,多个请求可以包括1个或多个待发送至第一缓存节点的缓存请求,将这些待发送至第一缓存节点的缓存请求称为与第一缓存节点对应的剩余缓存请求。第二缓存节点可以向请求队列发送阻塞命令,从而阻塞请求队列中与第一缓存节点对应的剩余缓存请求,也即是,使请求队列暂停发送与第一缓存节点对应的剩余缓存请求。
例如,在步骤S230中,将第二缓存节点中存储的与第一目标数据对应的元数据读取到第二缓存节点的内存中。由于第一缓存节点中的第一目标数据及第一目标数据对应的元数据已经被镜像存储在第二缓存节点中,因此可以直接从第二缓存节点中读取与第一目标数据对应的元数据。
例如,在步骤S240中,基于第二缓存节点中存储的第一目标数据,第二缓存节点响应第一缓存请求。此时,无论第一缓存请求是写数据请求还是读数据请求,由于第二缓存节点存储有第一目标数据,因此第二缓存节点均可以响应该第一缓存请求。之后,第二缓存节点依序接收并响应请求队列中与第一缓存节点对应的剩余缓存请求。由此,第二缓存节点接管请求队列中与第一缓存节点对应的剩余缓存请求,从而利用第二缓存节点替代第一缓存节点提供数据缓存服务。即使第一缓存节点发生故障,数据缓存服务也不会受到影响,第二缓存节点可以提供与第一缓存节点无差别的数据缓存服务。
例如,第一缓存节点包括第一存储介质,第一存储介质可以为持久化内存。例如,第二缓存节点包括第二存储介质,第二存储介质可以为持久化内存。例如,第二存储介质的存储空间包括镜像备份空间,第一目标数据及第一目标数据对应的元数据镜像存储在第二存储介质的镜像备份空间中。关于数据存储位置、第一缓存节点和第二缓存节点的存储空间划分方式等可以参考前述实施例的内容,此处不再赘述。
图10为本公开一些实施例提供的另一种数据加速方法的流程示意图。如图10所示,在一些示例中,除了包括上述步骤S210-S240,该数据加速方法还可以进一步包括步骤S250-S260。关于步骤S210-S240的详细说明可参考上文内容,此处不再赘述。
步骤S250:基于读取到内存中的元数据,将第二存储介质的镜像备份空间中存储的、需要进行下刷操作的分片数据文件存储到第二缓存节点的持久化层;
步骤S260:将第二存储介质的镜像备份空间中已存储到持久化层的分片数据文件删除。
例如,在步骤S250中,基于读取到内存中的元数据,对第二存储介质的镜像备份空间中存储的、需要进行下刷操作的分片数据文件进行下刷操作,将其存储到第二缓存节点的持久化层。例如,可以按照预设时间定期下刷,也可以根据第二存储介质的存储空间的使用情况而下刷,或者也可以根据其他预设条件进行下刷,本公开的实施例对此不作限制。
例如,在步骤S260中,将第二存储介质的镜像备份空间中已存储到持久化层的分片数据文件删除。由此,可以释放第二存储介质的存储空间,以便于为后续的缓存请求提供数据缓存服务。
图11为本公开一些实施例提供的一种数据加速方法的应用流程图。如图11所示,在该示例中,故障节点可以为前述的第一缓存节点,该第一缓存节点发生故障而无法提供数据缓存服务。恢复节点可以为前述的第二缓存节点,第二缓存节点接管针对第一缓存节点的缓存请求并提供数据缓存服务。该场景为节点故障时利用对端节点进行服务恢复的场景。
在恢复阶段,客户端向故障节点发送IO请求,该IO请求即为发送至故障节点的第一缓存请求,可以为写数据请求或读数据请求。由于故障节点发生故障,因此无法响应该IO请求。客户端没有接收到响应,因此重新发送IO请求并将IO请求发送至恢复节点。恢复节点接收到IO请求后,阻塞客户端的请求队列中待发送给故障节点的IO请求。接着,恢复节点将恢复节点的存储介质的镜像备份空间中的元数据读取到内存中。该元数据为故障节点发生故障之前通过RDMA镜像存储在恢复节点中的元数据,恢复节点的存储介质的镜像备份空间中还存储有对应的目标数据。
在提供IO服务阶段,恢复节点执行客户端发送给故障节点的IO请求,并向客户端返回结果。客户端接收IO请求的结果,由此完成数据缓存服务。这里,“客户端发送给故障节点的IO请求”是指客户端预计发送至故障节点的IO请求,而并非实际发送给故障节点的请求。由于恢复节点接管了相应的数据缓存服务,因此客户端预计发送至故障节点的IO请求会被实际发送至恢复节点。此外,恢复节点后台下刷镜像备份空间中的分片数据文件,即将分片数据文件下刷至持久化层,然后后台清理镜像备份空间中的元数据,以释放存储空间。
通过上述方式,故障节点发生故障后,恢复节点可以接管针对故障节点的缓存请求并提供数据缓存服务,缓存服务具有高可用性,不受节点故障的限制。
本公开至少一个实施例还提供一种数据加速方法,该数据加速方法用于为与第一缓存节点对应、发送至第二缓存节点的第一缓存请求提供数据缓存服务。例如,该数据加速方法适用于第一缓存节点的故障排除后,第一缓存节点恢复服务的场景。此时,第二缓存节点不再接管针对第一缓存节点的缓存请求。由此,可以恢复第一缓存节点的数据缓存服务,使***按照正常机制提供数据缓存服务。
图12为本公开一些实施例提供的另一种数据加速方法的流程示意图。如图12所示,该数据加速方法包括如下操作。
步骤S310:响应于发送至第二缓存节点的第一缓存请求无响应,将第一缓存请求发送至第一缓存节点;
步骤S320:第一缓存节点阻塞请求队列中与第一缓存节点对应的剩余缓存请求;
步骤S330:清空第一缓存节点的第一存储介质的存储空间;
步骤S340:将第二缓存节点的第二存储介质中存储的分片数据文件均存储到第二缓存节点的持久化层;
步骤S350:第二缓存节点向第一缓存节点发送下刷完成标识;
步骤S360:第一缓存节点响应第一缓存请求,并依序接收并响应请求队列中与第一缓存节点对应的剩余缓存请求,从而利用第一缓存节点提供数据缓存服务。
需要说明的是,在该实施例中,第一缓存请求可以为写数据请求,也可以为读数据请求。该实施例中的第一缓存请求与图1所示的实施例中的第一缓存请求不同,两者为不同时刻发送的缓存请求。
例如,在步骤S310中,若发送至第二缓存节点的第一缓存请求无响应,则将第一缓存请求发送至第一缓存节点。第二缓存节点与第一缓存节点不同。关于第一缓存节点和第二缓存节点的说明可参考前文内容,此处不再赘述。例如,在一些示例中,第二缓存节点由于网络连接协议发生变化而无法响应第一缓存请求,该网络连接协议由于第一缓存节点的故障解除而发生变化。例如,在一些示例中,第一缓存节点的故障被排除后,可以利用软件更改网络连接协议的设置,从而使第二缓存节点无法接收第一缓存请求。当然,本公开的实施例不限于此,当第一缓存节点的故障被排除后,可以采用任意适用的方式使第二缓存节点不再响应第一缓存请求。例如,可以通过软件设置或协议设置,使得第一缓存请求无响应时,请求发送方再次发送第一缓存请求并将第一缓存请求发送至第一缓存节点。
例如,在步骤S320中,第一缓存节点接收到第一缓存请求后,阻塞请求队列中与第一缓存节点对应的剩余缓存请求。例如,请求队列包括多个请求,多个请求可以包括1个或多个待发送至第一缓存节点的缓存请求,将这些待发送至第一缓存节点的缓存请求称为与第一缓存节点对应的剩余缓存请求。第一缓存节点可以向请求队列发送阻塞命令,从而阻塞请求队列中与第一缓存节点对应的剩余缓存请求,也即是,使请求队列暂停发送与第一缓存节点对应的剩余缓存请求。需要说明的是,在第一缓存节点的故障恢复之前,由于第二缓存节点接管了第一缓存节点的数据缓存服务,因此请求队列中与第一缓存节点对应的剩余缓存请求会被发送至第二缓存节点。
例如,在步骤S330中,清空第一缓存节点的第一存储介质的存储空间。由于在第一缓存节点发生故障期间,第二缓存节点接管了第一缓存节点的数据缓存服务,因此第二缓存节点的第二存储介质的镜像备份空间中存储的数据会因为数据缓存服务而改变,而第一缓存节点的第一存储介质中存储的数据为故障发生之前的数据,这些数据已经为无效数据,因此需要清空。
例如,在步骤S340中,将第二缓存节点的第二存储介质中存储的分片数据文件均存储到第二缓存节点的持久化层,也即是,将分片数据文件进行下刷。
例如,在步骤S350中,完成下刷后,第二缓存节点向第一缓存节点发送下刷完成标识,以通知第一缓存节点已完成下刷。该下刷完成标识可以为任意格式或协议的标识,这可以根据实际需求而定,只需使第一缓存节点能够识别即可。
例如,在步骤S360中,第一缓存节点响应第一缓存请求。之后,第一缓存节点依序接收并响应请求队列中与第一缓存节点对应的剩余缓存请求。由此,利用第一缓存节点提供数据缓存服务。
例如,第一缓存节点包括第一存储介质,第一存储介质可以为持久化内存。例如,第二缓存节点包括第二存储介质,第二存储介质可以为持久化内存。
图13为本公开一些实施例提供的一种数据加速方法的应用流程图。如图13所示,在该示例中,故障节点可以为前述的第一缓存节点,该第一缓存节点的故障被排除因此可以继续提供数据缓存服务。恢复节点可以为前述的第二缓存节点,在第一缓存节点的故障被排除之前,第二缓存节点接管针对第一缓存节点的缓存请求并提供数据缓存服务,在第一缓存节点的故障被排除后,第二缓存节点不再接管对应的缓存请求。该场景为节点故障排除后故障节点进行服务恢复的场景。
在恢复阶段,客户端向恢复节点发送IO请求,该IO请求即为第一缓存请求,可以为写数据请求或读数据请求。恢复节点由于网络连接协议发生变化而无法响应该IO请求,网络连接协议由于故障节点的故障解除而发生变化。客户端没有接收到响应,因此重新发送IO请求并将IO请求发送至故障节点。故障节点接收到IO请求后,阻塞客户端的请求队列中待发送给故障节点的IO请求。接着,故障节点清空存储介质的本地空间和备份空间中的数据。然后,恢复节点将其本地空间中对应于故障节点的IO数据、备份空间中的数据均下刷到持久化层。下刷完成后,恢复节点向故障节点发送下刷完成标识,也即是,故障节点等待对端(即恢复节点)返回直到收到下刷完成标识。
在提供IO服务阶段,故障节点执行客户端发送给故障节点的IO请求,并向客户端返回结果。客户端接收IO请求的结果,由此完成数据缓存服务。
通过上述方式,故障节点的故障排除后,故障节点可以恢复服务,也即是,故障节点可以继续接收缓存请求并提供数据缓存服务,从而恢复正常工作状态。
在本公开实施例提供的数据加速方法中,在提供数据缓存服务时,不仅将目标数据存储到第一缓存节点,还将目标数据镜像存储到第二缓存节点,之后再返回针对缓存请求的响应,可以实现缓存数据的备份。当第一缓存节点发生故障时,第二缓存节点可以接管待发送至第一缓存节点的缓存请求,可以提供与第一缓存节点无差别的数据缓存服务,从而可以保证数据的一致性,实现缓存服务的高可用性,使得数据缓存服务不受节点故障的限制,可以提升***的可靠性和可用性,并且响应速度快,无数据丢失。当第一缓存节点的故障被排除后,第一缓存节点又可以继续提供数据缓存服务,从而快速恢复到正常工作状态。
本公开至少一个实施例还提供一种缓存单元。该缓存单元可以保证数据的一致性,实现缓存服务的高可用性,使得数据缓存服务不受节点故障的限制,在发生节点故障时仍能提供数据缓存服务,响应速度快,无数据丢失,可以提升***的可靠性和可用性。
图14为本公开一些实施例提供的一种缓存单元的示意框图。如图14所示,该缓存单元10包括通信连接的第一缓存节点110和第二缓存节点120。例如,第一缓存节点110和第二缓存节点120可以通过任意适用的网络实现通信连接。缓存单元10配置为向发送至第一缓存节点110的第一缓存请求提供数据缓存服务。
例如,第一缓存节点110配置为响应于接收到第一缓存请求,将第一目标数据存储到第一缓存节点110,并利用远程直接数据存取方法,将第一目标数据传输至第二缓存节点120。第二缓存节点120配置为接收第一缓存节点110发送的第一目标数据,并将第一目标数据存储到第二缓存节点120中。第一缓存节点110还配置为在第二缓存节点120存储第一目标数据之后,返回针对第一缓存请求的响应。
例如,第一缓存节点110包括第一存储介质,第一存储介质可以为持久化内存。例如,第二缓存节点120包括第二存储介质,第二存储介质可以为持久化内存。
需要说明的是,本公开的实施例中,缓存单元10可以用于实施前述的数据加速方法,关于缓存单元10的具体功能和技术效果可以参考上文中关于数据加速方法的说明,此处不再赘述。图14所示的缓存单元10的组件和结构只是示例性的,而非限制性的,根据需要,该缓存单元10还可以包括其他组件和结构。关于第一缓存节点110和第二缓存节点120的详细说明可参考上文中关于第一缓存节点和第二缓存节点的说明,此处不再赘述。
本公开至少一个实施例还提供一种电子设备,该电子设备包括本公开任一实施例提供的缓存单元。该电子设备可以保证数据的一致性,实现缓存服务的高可用性,使得数据缓存服务不受节点故障的限制,在发生节点故障时仍能提供数据缓存服务,响应速度快,无数据丢失,可以提升***的可靠性和可用性。
图15为本公开一些实施例提供的一种电子设备的示意框图。如图15所示,该电子设备20包括缓存单元21。例如,缓存单元21可以为图14所示的缓存单元10。缓存单元21可以实现本公开实施例提供的数据加速方法。例如,该电子设备20可以为存储***、存储服务器等任意适用的设备,只要该设备可以提供数据缓存服务即可,本公开的实施例对此不作限制。关于电子设备20的详细说明和技术效果,可以参考上文中关于缓存单元10和数据加速方法的说明,此处不再赘述。
本公开至少一个实施例还提供一种电子设备,该电子设备包括处理器和存储器,一个或多个计算机程序模块被存储在该存储器中并被配置为由该处理器执行,一个或多个计算机程序模块包括用于实现本公开任一实施例提供的数据加速方法的指令。该电子设备可以保证数据的一致性,实现缓存服务的高可用性,使得数据缓存服务不受节点故障的限制,在发生节点故障时仍能提供数据缓存服务,响应速度快,无数据丢失,可以提升***的可靠性和可用性。
图16为本公开一些实施例提供的另一种电子设备的示意框图。如图16所示,该电子设备30包括处理器31和存储器32。存储器32用于存储非暂时性计算机可读指令(例如一个或多个计算机程序模块)。处理器31用于运行非暂时性计算机可读指令,非暂时性计算机可读指令被处理器31运行时可以执行上文所述的数据加速方法中的一个或多个步骤。存储器32和处理器31可以通过总线***和/或其它形式的连接机构(未示出)互连。例如,根据本公开实施例的数据加速方法通过运行于该电子设备30的操作***中的应用程序实现。
例如,处理器31可以是中央处理单元(CPU)、图形处理单元(GPU)、数字信号处理器(DSP)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元,例如现场可编程门阵列(FPGA)等;例如,中央处理单元(CPU)可以为X86或ARM架构等。处理器31可以为通用处理器或专用处理器,可以控制电子设备30中的其它组件以执行期望的功能。
例如,存储器32可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块,处理器31可以运行一个或多个计算机程序模块,以实现电子设备30的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。
需要说明的是,本公开的实施例中,电子设备30的具体功能和技术效果可以参考上文中关于数据加速方法的描述,此处不再赘述。
本公开至少一个实施例还提供一种存储介质,用于存储非暂时性计算机可读指令,当该非暂时性计算机可读指令由计算机执行时可以实现本公开任一实施例提供的数据加速方法。利用该存储介质,可以保证数据的一致性,实现缓存服务的高可用性,使得数据缓存服务不受节点故障的限制,在发生节点故障时仍能提供数据缓存服务,响应速度快,无数据丢失,可以提升***的可靠性和可用性。
图17为本公开一些实施例提供的一种存储介质的示意图。如图17所示,存储介质40用于存储非暂时性计算机可读指令41。例如,当非暂时性计算机可读指令41由计算机执行时可以执行根据上文所述的数据加速方法中的一个或多个步骤。
例如,该存储介质40可以应用于上述电子设备中。例如,存储介质40可以为图16所示的电子设备30中的存储器32。例如,关于存储介质40的相关说明可以参考图16所示的电子设备30中的存储器32的相应描述,此处不再赘述。
有以下几点需要说明:
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (20)
1.一种数据加速方法,用于为发送至第一缓存节点的第一缓存请求提供数据缓存服务,包括:
响应于发送至所述第一缓存节点的所述第一缓存请求无响应,将所述第一缓存请求发送至不同于所述第一缓存节点的第二缓存节点;
所述第二缓存节点阻塞请求队列中与所述第一缓存节点对应的剩余缓存请求;
将所述第二缓存节点中存储的与第一目标数据对应的元数据读取到所述第二缓存节点的内存中以实现持久化存储;
基于所述第二缓存节点中存储的所述第一目标数据,所述第二缓存节点响应所述第一缓存请求,并依序接收并响应所述请求队列中与所述第一缓存节点对应的剩余缓存请求,从而利用所述第二缓存节点替代所述第一缓存节点提供数据缓存服务;
其中,所述第一目标数据及所述第一目标数据对应的元数据是利用远程直接数据存取方法由所述第一缓存节点传输到所述第二缓存节点并存储到所述第二缓存节点的。
2.根据权利要求1所述的数据加速方法,还包括:
响应于所述第一缓存节点接收到所述第一缓存请求,将所述第一目标数据存储到所述第一缓存节点;
利用所述远程直接数据存取方法,将所述第一目标数据传输至所述第二缓存节点并存储到所述第二缓存节点;
通过所述第一缓存节点返回针对所述第一缓存请求的响应。
3.根据权利要求2所述的数据加速方法,其中,所述第一缓存节点包括第一存储介质,所述第二缓存节点包括第二存储介质,
所述第一存储介质和/或所述第二存储介质包括持久化内存。
4.根据权利要求3所述的数据加速方法,其中,将所述第一目标数据存储到所述第一缓存节点包括:
对所述第一目标数据进行处理,以生成至少一个分片数据文件;
将所述至少一个分片数据文件存储到所述第一存储介质中,并基于所述至少一个分片数据文件的存储地址生成管理数据结构,其中,所述管理数据结构用于对所述至少一个分片数据文件进行管理;
将所述管理数据结构作为所述第一目标数据对应的元数据存储到所述第一存储介质中。
5.根据权利要求4所述的数据加速方法,其中,所述管理数据结构包括第一链表和第二链表,所述第一链表包括文件节点,所述第二链表包括至少一个分片数据管理节点,
所述文件节点包括第一指针,所述第一指针指向所述第二链表中对应的分片数据管理节点,所述分片数据管理节点包括至少一个第二指针,所述第二指针指向对应的分片数据文件的起始存储地址。
6.根据权利要求4所述的数据加速方法,其中,各个分片数据文件的大小相同。
7.根据权利要求4所述的数据加速方法,其中,利用所述远程直接数据存取方法,将所述第一目标数据传输至所述第二缓存节点并存储到所述第二缓存节点,包括:
调用所述第一存储介质的库文件,利用所述远程直接数据存取方法将所述第一目标数据以所述分片数据文件的形式通过网络传输至所述第二缓存节点,并存储到所述第二存储介质中;
调用所述第一存储介质的所述库文件,利用所述远程直接数据存取方法将所述第一目标数据对应的元数据通过所述网络传输至所述第二缓存节点,并存储到所述第二存储介质中。
8.根据权利要求4所述的数据加速方法,其中,所述第一存储介质的存储空间包括目标本地空间,所述第一目标数据及所述第一目标数据对应的元数据存储在所述第一存储介质的目标本地空间中,
所述第二存储介质的存储空间包括镜像备份空间,所述第一目标数据及所述第一目标数据对应的元数据镜像存储在所述第二存储介质的镜像备份空间中。
9.根据权利要求8所述的数据加速方法,其中,所述第一存储介质的存储空间还包括目标备份空间,所述第二存储介质的存储空间还包括镜像本地空间,
所述的数据加速方法还包括:
响应于所述第二缓存节点接收到第二缓存请求,将第二目标数据存储到所述第二存储介质的镜像本地空间中;
利用所述远程直接数据存取方法,将所述第二目标数据传输至所述第一缓存节点并镜像存储到所述第一存储介质的目标备份空间中;
通过所述第二缓存节点返回针对所述第二缓存请求的响应。
10.根据权利要求3-9任一所述的数据加速方法,其中,
所述第一缓存节点和所述第二缓存节点为物理上彼此独立的缓存节点,所述第一存储介质和所述第二存储介质为物理上彼此独立的存储介质;或者
所述第一缓存节点和所述第二缓存节点为逻辑上彼此独立的缓存节点但物理上为同一个缓存设备,所述第一存储介质和所述第二存储介质为同一个持久化内存的不同存储区域。
11.根据权利要求2-9任一所述的数据加速方法,其中,所述第一缓存请求包括写数据请求。
12.根据权利要求8所述的数据加速方法,还包括:
基于读取到所述内存中的元数据,将所述第二存储介质的镜像备份空间中存储的、需要进行下刷操作的分片数据文件存储到所述第二缓存节点的持久化层;
将所述第二存储介质的镜像备份空间中已存储到所述持久化层的分片数据文件删除。
13.根据权利要求12所述的数据加速方法,其中,由于所述第一缓存节点发生故障而无法响应所述第一缓存请求,从而产生发送至所述第一缓存节点的所述第一缓存请求无响应的情形。
14.一种数据加速方法,用于为与第一缓存节点对应、发送至不同于所述第一缓存节点的第二缓存节点的第一缓存请求提供数据缓存服务,其中,所述第一缓存请求包括将第一目标数据写入所述第一缓存节点的第一存储介质的写数据请求,所述数据加速方法包括:
响应于发送至所述第二缓存节点的所述第一缓存请求无响应,将所述第一缓存请求发送至所述第一缓存节点;
所述第一缓存节点阻塞请求队列中与所述第一缓存节点对应的剩余缓存请求;
清空所述第一缓存节点的所述第一存储介质的存储空间;
将所述第二缓存节点的第二存储介质中存储的分片数据文件均存储到所述第二缓存节点的持久化层;
所述第二缓存节点向所述第一缓存节点发送下刷完成标识;
所述第一缓存节点响应所述第一缓存请求,并依序接收并响应所述请求队列中与所述第一缓存节点对应的剩余缓存请求,从而利用所述第一缓存节点提供数据缓存服务。
15.根据权利要求14所述的数据加速方法,其中,所述第二缓存节点由于网络连接协议发生变化而无法响应所述第一缓存请求,所述网络连接协议由于所述第一缓存节点的故障解除而发生变化。
16.一种缓存单元,包括通信连接的第一缓存节点和第二缓存节点,其中,
所述缓存单元配置为向发送至所述第一缓存节点的第一缓存请求提供数据缓存服务;
所述缓存单元还配置为响应于发送至所述第一缓存节点的所述第一缓存请求无响应,将所述第一缓存请求发送至所述第二缓存节点;
所述第二缓存节点配置为阻塞请求队列中与所述第一缓存节点对应的剩余缓存请求;
所述第二缓存节点还配置为将所述第二缓存节点中存储的与第一目标数据对应的元数据读取到所述第二缓存节点的内存中以实现持久化存储;
所述第二缓存节点还配置为基于所述第二缓存节点中存储的所述第一目标数据,响应所述第一缓存请求,并依序接收并响应所述请求队列中与所述第一缓存节点对应的剩余缓存请求,从而利用所述第二缓存节点替代所述第一缓存节点提供数据缓存服务;
其中,所述第一目标数据对应的元数据是利用远程直接数据存取方法由所述第一缓存节点传输到所述第二缓存节点并存储到所述第二缓存节点的。
17.根据权利要求16所述的缓存单元,其中,所述第一缓存节点包括第一存储介质,所述第二缓存节点包括第二存储介质,
所述第一存储介质和/或所述第二存储介质包括持久化内存。
18.一种电子设备,包括权利要求16或17所述的缓存单元。
19.一种电子设备,包括:
处理器;
存储器,包括一个或多个计算机程序模块;
其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于实现权利要求1-15任一所述的数据加速方法的指令。
20.一种存储介质,用于存储非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时可以实现权利要求1-15任一所述的数据加速方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110338562.7A CN112988680B (zh) | 2021-03-30 | 2021-03-30 | 数据加速方法、缓存单元、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110338562.7A CN112988680B (zh) | 2021-03-30 | 2021-03-30 | 数据加速方法、缓存单元、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112988680A CN112988680A (zh) | 2021-06-18 |
CN112988680B true CN112988680B (zh) | 2022-09-27 |
Family
ID=76338223
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110338562.7A Active CN112988680B (zh) | 2021-03-30 | 2021-03-30 | 数据加速方法、缓存单元、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112988680B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113721845B (zh) * | 2021-07-30 | 2023-08-25 | 苏州浪潮智能科技有限公司 | 一种卷处理方法、***、设备及计算机可读存储介质 |
CN116610598A (zh) * | 2022-02-08 | 2023-08-18 | 华为技术有限公司 | 一种数据存储***、数据存储方法、装置及相关设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107346307A (zh) * | 2016-05-04 | 2017-11-14 | 北京京东尚科信息技术有限公司 | 分布式缓存***及方法 |
CN107967270A (zh) * | 2016-10-19 | 2018-04-27 | 北京京东尚科信息技术有限公司 | 实现多功能缓存的方法和*** |
CN111125175A (zh) * | 2019-12-20 | 2020-05-08 | 北京奇艺世纪科技有限公司 | 业务数据的查询方法和装置、存储介质、电子装置 |
CN111541753A (zh) * | 2020-04-16 | 2020-08-14 | 深圳市网心科技有限公司 | 区块链数据的分布式存储***、方法、计算机设备及介质 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120089700A1 (en) * | 2010-10-10 | 2012-04-12 | Contendo, Inc. | Proxy server configured for hierarchical caching and dynamic site acceleration and custom object and associated method |
CN102843403A (zh) * | 2011-06-23 | 2012-12-26 | 盛大计算机(上海)有限公司 | 基于分布式文件***的文件处理方法、***及客户端 |
US10223326B2 (en) * | 2013-07-31 | 2019-03-05 | Oracle International Corporation | Direct access persistent memory shared storage |
CN103747073A (zh) * | 2013-12-30 | 2014-04-23 | 乐视网信息技术(北京)股份有限公司 | 一种分布式缓存的方法和*** |
US10884926B2 (en) * | 2017-06-16 | 2021-01-05 | Alibaba Group Holding Limited | Method and system for distributed storage using client-side global persistent cache |
CN107329708A (zh) * | 2017-07-04 | 2017-11-07 | 郑州云海信息技术有限公司 | 一种分布式存储***实现缓存数据的方法及*** |
CN107862064B (zh) * | 2017-11-16 | 2021-09-10 | 北京航空航天大学 | 一个基于nvm的高性能、可扩展的轻量级文件*** |
CN111124993B (zh) * | 2018-10-31 | 2023-09-01 | 伊姆西Ip控股有限责任公司 | 减小i/o处理时缓存数据镜像时延的方法、设备和程序产品 |
CN111708719B (zh) * | 2020-05-28 | 2023-06-23 | 西安纸贵互联网科技有限公司 | 计算机存储加速方法、电子设备及存储介质 |
CN112468601B (zh) * | 2021-02-03 | 2021-05-18 | 柏科数据技术(深圳)股份有限公司 | 一种分布式存储***的数据同步方法、访问方法及*** |
-
2021
- 2021-03-30 CN CN202110338562.7A patent/CN112988680B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107346307A (zh) * | 2016-05-04 | 2017-11-14 | 北京京东尚科信息技术有限公司 | 分布式缓存***及方法 |
CN107967270A (zh) * | 2016-10-19 | 2018-04-27 | 北京京东尚科信息技术有限公司 | 实现多功能缓存的方法和*** |
CN111125175A (zh) * | 2019-12-20 | 2020-05-08 | 北京奇艺世纪科技有限公司 | 业务数据的查询方法和装置、存储介质、电子装置 |
CN111541753A (zh) * | 2020-04-16 | 2020-08-14 | 深圳市网心科技有限公司 | 区块链数据的分布式存储***、方法、计算机设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112988680A (zh) | 2021-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110113420B (zh) | 基于nvm的分布式消息队列管理*** | |
US9307024B2 (en) | Efficient storage of small random changes to data on disk | |
CN112988680B (zh) | 数据加速方法、缓存单元、电子设备及存储介质 | |
US11240306B2 (en) | Scalable storage system | |
JP2016513306A (ja) | データ格納方法、データストレージ装置、及びストレージデバイス | |
US11182084B2 (en) | Restorable memory allocator | |
CN115599747B (zh) | 一种分布式存储***的元数据同步方法、***及设备 | |
US10620851B1 (en) | Dynamic memory buffering using containers | |
CN111316251B (zh) | 可扩展存储*** | |
US7149922B2 (en) | Storage system | |
US20050278483A1 (en) | Local bitmaps for an array of redundant storage devices | |
US20150074316A1 (en) | Reflective memory bridge for external computing nodes | |
WO2022033269A1 (zh) | 数据处理的方法、设备及*** | |
US10853314B1 (en) | Overlay snaps | |
CN110121874B (zh) | 一种存储器数据替换方法、服务器节点和数据存储*** | |
CN114490540B (zh) | 数据存储方法、介质、装置和计算设备 | |
JP6376626B2 (ja) | データ格納方法、データストレージ装置、及びストレージデバイス | |
US10073874B1 (en) | Updating inverted indices | |
CN114185815A (zh) | 用于实现内存键值存储的方法、设备和*** | |
US8595457B1 (en) | Method and system for replicating stored information | |
CN117255101B (zh) | 分布式存储***的数据处理方法、装置、设备及介质 | |
WO2024114105A1 (zh) | 一种数据库的数据更新方法、***及计算设备集群 | |
WO2023093091A1 (zh) | 数据存储***、智能网卡及计算节点 | |
US20230185822A1 (en) | Distributed storage system | |
WO2023110117A1 (en) | Multi-writer centralized logging storage array |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |