缓存的管理方法、缓存节点及分布式存储系统转让专利

申请号 : CN202010644027.X

文献号 : CN111796772A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张晓石佳刘彬彬苟子安刘贇

申请人 : 西北工业大学

摘要 :

本发明提供了缓存的管理方法、缓存节点及分布式存储系统,该方法包括:预先保存至少一个缓存节点的RDMA连接信息,确定待缓存数据的存储信息;确定用于缓存所述待缓存数据的缓存节点;确定用于向缓存节点缓存所述待缓存数据的存储节点;将所述待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点,以使所述确定出的存储节点根据所述待缓存数据的存储信息读取所述待缓存数据,根据所述确定出的缓存节点的RDMA连接信息将读取的所述待缓存数据通过RDMA连接缓存到所述确定出的缓存节点的内存中。本发明提供了缓存的管理方法、缓存节点及分布式存储系统,能够提高对分布式存储系统中缓存的处理速度。

权利要求 :

1.分布式存储系统中缓存的管理方法,其特征在于,应用于分布式存储系统的元数据节点,预先保存至少一个缓存节点的远程直接内存访问RDMA连接信息,该方法还包括:确定待缓存数据的存储信息;

确定用于缓存所述待缓存数据的缓存节点;

确定用于向缓存节点缓存所述待缓存数据的存储节点;

将所述待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点,以使所述确定出的存储节点根据所述待缓存数据的存储信息读取所述待缓存数据,根据所述确定出的缓存节点的RDMA连接信息将读取的所述待缓存数据通过RDMA连接缓存到所述确定出的缓存节点的内存中。

2.根据权利要求1所述的方法,其特征在于,

在所述确定待缓存数据的存储信息之前,进一步包括:

接收写入端发来的写入所述待缓存数据的写入请求;

根据所述写入请求,为所述待缓存数据分配至少一个缓存节点和至少一个存储节点,将该至少一个缓存节点的RDMA连接信息和该至少一个存储节点的节点信息发送给所述写入端,以使所述写入端根据该至少一个缓存节点的RDMA连接信息将所述待缓存数据通过RDMA连接缓存到该至少一个缓存节点的内存中,根据该至少一个存储节点的节点信息触发该至少一个存储节点从该至少一个缓存节点的内存读取所述待缓存数据并保存。

3.根据权利要求2所述的方法,其特征在于,

进一步包括:

初始化缓存节点中的缓存块的状态为第一状态,其中,所述缓存块为缓存节点中用于缓存数据的数据块,当缓存块为第一状态时,表示该缓存块没有缓存数据或该缓存块中缓存的数据已失效;

在所述确定用于缓存所述待缓存数据的缓存节点之后,进一步包括:

为所述确定出的缓存节点中的一个缓存块分配一个缓存任务,其中,所述缓存任务为缓存所述待缓存数据的任务;

将被分配了一个缓存任务的缓存块的状态修改为第二状态,其中,当缓存块为所述第二状态时,表示已为该缓存块分配一个缓存任务;

在所述为所述待缓存数据分配至少一个缓存节点之后,进一步包括:

为该至少一个缓存节点中的一个缓存块分配一个缓存任务;

将被分配了一个缓存任务的缓存块的状态修改为所述第二状态;

在所述将该至少一个缓存节点的RDMA连接信息和该至少一个存储节点的节点信息发送给所述写入端之后,进一步包括:在确定所述写入端已将所述待缓存数据缓存到该至少一个缓存节点后,将缓存了所述待缓存数据的缓存块的状态修改为第三状态,其中,当缓存块为所述第三状态时,表示该缓存块中缓存的数据没有保存到存储节点中;

在确定该至少一个存储节点已将所述待缓存数据保存到存储节点后,将缓存了所述待缓存数据的缓存块的状态修改为第四状态,其中,当缓存块为所述第四状态时,表示该缓存块中缓存的数据已经保存到存储节点中;

在所述将所述待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点之后,进一步包括:在确定所述确定出的缓存节点已将所述待缓存数据缓存到所述确定出的缓存节点后,将缓存了所述待缓存数据的缓存块的状态修改为所述第四状态;

进一步包括:

当处于所述第四状态的缓存块中的数据已失效,则将该缓存块的状态修改为所述第一状态。

4.分布式存储系统中缓存的管理方法,其特征在于,应用于分布式存储系统的存储节点,该方法包括:接收元数据节点发来的待缓存数据的存储信息和用于缓存所述待缓存数据的缓存节点的远程直接内存访问RDMA连接信息;

根据所述待缓存数据的存储信息读取所述待缓存数据;

根据所述RDMA连接信息与用于缓存所述待缓存数据的缓存节点建立RDMA连接,通过RDMA连接将读取的所述待缓存数据缓存到用于缓存所述待缓存数据的缓存节点的内存中。

5.分布式存储系统中缓存的管理方法,其特征在于,应用于分布式存储系统的元数据节点,预先保存至少一个缓存节点的远程直接内存访问RDMA连接信息,该方法包括:接收请求端发来的读取请求;

当确定所述读取请求所请求的待读取数据缓存在至少一个缓存节点中时,确定每个缓存有所述待读取数据的缓存节点;

确定所述待读取数据的缓存信息;

将所述待读取数据的缓存信息和每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端,以使所述请求端根据每个缓存有所述待读取数据的缓存节点的RDMA连接信息和所述待读取数据的缓存信息,通过RDMA连接从每个缓存有所述待读取数据的缓存节点的内存中读取所述待读取数据。

6.根据权利要求5所述的方法,其特征在于,

在所述将所述待读取数据的缓存信息和预先保存的每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端之后,进一步包括:当缓存有所述待读取数据的缓存块为第三状态时,将该缓存块的状态修改为第五状态,其中,缓存块为缓存节点中用于缓存数据的数据块,当缓存块为所述第三状态时,表示该缓存块中缓存的数据没有保存到存储节点中,当缓存块为所述第五状态时,表示该缓存块中缓存的数据没有保存到存储节点中且该缓存块中缓存的数据正在被读取;

在确定所述请求端已读取完所述待读取数据后,将缓存有所述待读取数据的缓存块的状态为所述第三状态;

和/或,

在所述将所述待读取数据的缓存信息和预先保存的每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端之后,进一步包括:当缓存有所述待读取数据的缓存块为第四状态时,将该缓存块的状态修改为第六状态,其中,当缓存块为所述第四状态时,表示该缓存块中缓存的数据已经保存到存储节点中,当缓存块为所述第六状态时,表示该缓存块中缓存的数据已经保存到存储节点中且该缓存块中缓存的数据正在被读取;

在确定所述请求端已读取完所述待读取数据后,将缓存有所述待读取数据的缓存块的状态修改为所述第四状态。

7.分布式存储系统中缓存的管理方法,其特征在于,应用于分布式存储系统的缓存节点,该方法包括:将本缓存节点的远程直接内存访问RDMA连接信息发送给所述分布式存储系统的元数据节点,以使所述元数据节点向需要与本缓存节点建立RDMA连接的设备发送所述RDMA连接信息;

当接收到所述设备发来的基于所述RDMA连接信息生成的连接请求时,与所述设备建立RDMA连接,以使所述设备通过所述RDMA连接向本缓存节点的内存缓存数据或通过所述RDMA连接从本缓存节点的内存读取缓存的数据。

8.分布式存储系统的缓存节点,其特征在于,包括:

发送模块,用于将本缓存节点的远程直接内存访问RDMA连接信息发送给分布式存储系统的元数据节点,以使所述元数据节点向需要与本缓存节点建立RDMA连接的设备发送所述RDMA连接信息;

连接模块,用于当接收到所述设备发来的基于所述RDMA连接信息生成的连接请求时,与所述设备建立RDMA连接,以使所述设备通过所述RDMA连接向本缓存节点的内存缓存数据或通过所述RDMA连接从本缓存节点的内存读取缓存的数据。

9.分布式存储系统,其特征在于,包括:

元数据节点、至少一个缓存节点和至少一个存储节点;

所述元数据节点,用于接收并保存至少一个缓存节点的远程直接内存访问RDMA连接信息,在向缓存节点缓存数据时,确定待缓存数据的存储信息,确定用于缓存所述待缓存数据的缓存节点,确定用于向缓存节点缓存所述待缓存数据的存储节点,将所述待缓存数据的存储信息和用于缓存所述待缓存数据的缓存节点的RDMA连接信息发送给确定出的存储节点;在从缓存节点读取缓存的数据时,接收请求端发来的读取请求,当确定所述读取请求所请求的待读取数据缓存在至少一个缓存节点中时,确定每个缓存有所述待读取数据的缓存节点,将所述待读取数据的缓存信息和每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端,以使所述请求端根据每个缓存有所述待读取数据的缓存节点的RDMA连接信息和所述待读取数据的缓存信息,通过RDMA连接从每个缓存有所述待读取数据的缓存节点的内存中读取所述待读取数据;

所述存储节点,用于接收所述元数据节点发来的所述待缓存数据的存储信息和用于缓存所述待缓存数据的缓存节点的RDMA连接信息,根据所述待缓存数据的存储信息读取所述待缓存数据,根据所述RDMA连接信息与用于缓存所述待缓存数据的缓存节点建立RDMA连接,通过RDMA连接将读取的所述待缓存数据缓存到用于缓存所述待缓存数据的缓存节点的内存中;

所述缓存节点,用于将本缓存节点的RDMA连接信息发送给所述元数据节点,与所述存储节点建立RDMA连接,与所述请求端建立RDMA连接。

10.根据权利要求9所述的分布式存储系统,其特征在于,

所述元数据节点,进一步用于接收写入端发来的写入请求,根据所述写入请求,为所述写入请求所请求写入的数据分配至少一个缓存节点和至少一个存储节点,将该至少一个缓存节点的RDMA连接信息和该至少一个存储节点的节点信息发送给所述写入端,以使所述写入端根据该至少一个缓存节点的RDMA连接信息将所述写入请求所请求写入的数据通过RDMA连接缓存到该至少一个缓存节点的内存中,根据该至少一个存储节点的节点信息向该至少一个存储节点发送读取通知;

所述存储节点,进一步用于当接收到所述写入端发来的读取通知时,从该至少一个缓存节点读取所述写入请求所请求写入的数据,保存到本存储节点中;

所述缓存节点,进一步用于与所述写入端建立RDMA连接。

说明书 :

缓存的管理方法、缓存节点及分布式存储系统

技术领域

[0001] 本发明涉及分布式存储技术领域,特别涉及缓存的管理方法、缓存节点及分布式存储系统。

背景技术

[0002] 随着大数据和信息产业的发展,需要保存和处理的数据量越来越大。分布式存储系统已成为数据中心的重要部分。I/O性能对上层应用的性能影响很大,目前大数据平台已出现了很多新的应用程序,如社交图分析、科学数据处理和机器学习等。缓存可以加速重复使用的文件或数据的读写性能。
[0003] 现有的分布式存储系统缓存机制中,在向缓存节点中缓存数据时,需要缓存节点的操作系统介入,在从缓存节点读取缓存的数据时,也需要缓存节点的操作系统介入。
[0004] 通过上述描述可见,在现有技术中由于需要缓存节点的操作系统介入,使得对分布式存储系统中缓存的处理速度较慢。

发明内容

[0005] 本发明实施例提供了缓存的管理方法、缓存节点及分布式存储系统,能够提高对分布式存储系统中缓存的处理速度。
[0006] 第一方面,本发明实施例提供了分布式存储系统中缓存的管理方法,应用于分布式存储系统的元数据节点,预先保存至少一个缓存节点的RDMA(Remote Direct Memory Access,远程直接数据存取)连接信息,该方法还包括:
[0007] 确定待缓存数据的存储信息;
[0008] 确定用于缓存所述待缓存数据的缓存节点;
[0009] 确定用于向缓存节点缓存所述待缓存数据的存储节点;
[0010] 将所述待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点,以使所述确定出的存储节点根据所述待缓存数据的存储信息读取所述待缓存数据,根据所述确定出的缓存节点的RDMA连接信息将读取的所述待缓存数据通过RDMA连接缓存到所述确定出的缓存节点的内存中。
[0011] 可选地,
[0012] 在所述确定待缓存数据的存储信息之前,进一步包括:
[0013] 接收写入端发来的写入所述待缓存数据的写入请求;
[0014] 根据所述写入请求,为所述待缓存数据分配至少一个缓存节点和至少一个存储节点,将该至少一个缓存节点的RDMA连接信息和该至少一个存储节点的节点信息发送给所述写入端,以使所述写入端根据该至少一个缓存节点的RDMA连接信息将所述待缓存数据通过RDMA连接缓存到该至少一个缓存节点的内存中,根据该至少一个存储节点的节点信息触发该至少一个存储节点从该至少一个缓存节点的内存读取所述待缓存数据并保存。
[0015] 可选地,
[0016] 该方法进一步包括:
[0017] 初始化缓存节点中的缓存块的状态为第一状态,其中,所述缓存块为缓存节点中用于缓存数据的数据块,当缓存块为第一状态时,表示该缓存块没有缓存数据或该缓存块中缓存的数据已失效;
[0018] 在所述确定用于缓存所述待缓存数据的缓存节点之后,进一步包括:
[0019] 为所述确定出的缓存节点中的一个缓存块分配一个缓存任务,其中,所述缓存任务为缓存所述待缓存数据的任务;
[0020] 将被分配了一个缓存任务的缓存块的状态修改为第二状态,其中,当缓存块为所述第二状态时,表示已为该缓存块分配一个缓存任务;
[0021] 在所述为所述待缓存数据分配至少一个缓存节点之后,进一步包括:
[0022] 为该至少一个缓存节点中的一个缓存块分配一个缓存任务;
[0023] 将被分配了一个缓存任务的缓存块的状态修改为所述第二状态;
[0024] 在所述将该至少一个缓存节点的RDMA连接信息和该至少一个存储节点的节点信息发送给所述写入端之后,进一步包括:
[0025] 在确定所述写入端已将所述待缓存数据缓存到该至少一个缓存节点后,将缓存了所述待缓存数据的缓存块的状态修改为第三状态,其中,当缓存块为所述第三状态时,表示该缓存块中缓存的数据没有保存到存储节点中;
[0026] 在确定该至少一个存储节点已将所述待缓存数据保存到存储节点后,将缓存了所述待缓存数据的缓存块的状态修改为第四状态,其中,当缓存块为所述第四状态时,表示该缓存块中缓存的数据已经保存到存储节点中;
[0027] 在所述将所述待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点之后,进一步包括:
[0028] 在确定所述确定出的缓存节点已将所述待缓存数据缓存到所述确定出的缓存节点后,将缓存了所述待缓存数据的缓存块的状态修改为所述第四状态;
[0029] 进一步包括:
[0030] 当处于所述第四状态的缓存块中的数据已失效,则将该缓存块的状态修改为所述第一状态。
[0031] 第二方面,本发明实施例提供了分布式存储系统中缓存的管理方法,应用于分布式存储系统的存储节点,该方法包括:
[0032] 接收元数据节点发来的待缓存数据的存储信息和用于缓存所述待缓存数据的缓存节点的RDMA连接信息;
[0033] 根据所述待缓存数据的存储信息读取所述待缓存数据;
[0034] 根据所述RDMA连接信息与用于缓存所述待缓存数据的缓存节点建立RDMA连接,通过RDMA连接将读取的所述待缓存数据缓存到用于缓存所述待缓存数据的缓存节点的内存中。
[0035] 第三方面,本发明实施例提供了分布式存储系统中缓存的管理方法,应用于分布式存储系统的元数据节点,预先保存至少一个缓存节点的RDMA连接信息,该方法包括:
[0036] 接收请求端发来的读取请求;
[0037] 当确定所述读取请求所请求的待读取数据缓存在至少一个缓存节点中时,确定每个缓存有所述待读取数据的缓存节点;
[0038] 确定所述待读取数据的缓存信息;
[0039] 将所述待读取数据的缓存信息和每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端,以使所述请求端根据每个缓存有所述待读取数据的缓存节点的RDMA连接信息和所述待读取数据的缓存信息,通过RDMA连接从每个缓存有所述待读取数据的缓存节点的内存中读取所述待读取数据。
[0040] 可选地,
[0041] 在所述将所述待读取数据的缓存信息和预先保存的每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端之后,进一步包括:
[0042] 当缓存有所述待读取数据的缓存块为第三状态时,将该缓存块的状态修改为第五状态,其中,缓存块为缓存节点中用于缓存数据的数据块,当缓存块为所述第三状态时,表示该缓存块中缓存的数据没有保存到存储节点中,当缓存块为所述第五状态时,表示该缓存块中缓存的数据没有保存到存储节点中且该缓存块中缓存的数据正在被读取;
[0043] 在确定所述请求端已读取完所述待读取数据后,将缓存有所述待读取数据的缓存块的状态为所述第三状态。
[0044] 可选地,
[0045] 在所述将所述待读取数据的缓存信息和预先保存的每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端之后,进一步包括:
[0046] 当缓存有所述待读取数据的缓存块为第四状态时,将该缓存块的状态修改为第六状态,其中,当缓存块为所述第四状态时,表示该缓存块中缓存的数据已经保存到存储节点中,当缓存块为所述第六状态时,表示该缓存块中缓存的数据已经保存到存储节点中且该缓存块中缓存的数据正在被读取;
[0047] 在确定所述请求端已读取完所述待读取数据后,将缓存有所述待读取数据的缓存块的状态修改为所述第四状态。
[0048] 第四方面,本发明实施例提供了分布式存储系统中缓存的管理方法,应用于分布式存储系统的缓存节点,该方法包括:
[0049] 将本缓存节点的RDMA连接信息发送给所述分布式存储系统的元数据节点,以使所述元数据节点向需要与本缓存节点建立RDMA连接的设备发送所述RDMA连接信息;
[0050] 当接收到所述设备发来的基于所述RDMA连接信息生成的连接请求时,与所述设备建立RDMA连接,以使所述设备通过所述RDMA连接向本缓存节点的内存缓存数据或通过所述RDMA连接从本缓存节点的内存读取缓存的数据。
[0051] 第五方面,本发明实施例提供了分布式存储系统的缓存节点,包括:
[0052] 发送模块,用于将本缓存节点的RDMA连接信息发送给分布式存储系统的元数据节点,以使所述元数据节点向需要与本缓存节点建立RDMA连接的设备发送所述RDMA连接信息;
[0053] 连接模块,用于当接收到所述设备发来的基于所述RDMA连接信息生成的连接请求时,与所述设备建立RDMA连接,以使所述设备通过所述RDMA连接向本缓存节点的内存缓存数据或通过所述RDMA连接从本缓存节点的内存读取缓存的数据。
[0054] 第六方面,本发明实施例提供了分布式存储系统,包括:
[0055] 元数据节点、至少一个缓存节点和至少一个存储节点;
[0056] 所述元数据节点,用于接收并保存至少一个缓存节点的RDMA连接信息,在向缓存节点缓存数据时,确定待缓存数据的存储信息,确定用于缓存所述待缓存数据的缓存节点,确定用于向缓存节点缓存所述待缓存数据的存储节点,将所述待缓存数据的存储信息和用于缓存所述待缓存数据的缓存节点的RDMA连接信息发送给确定出的存储节点;在从缓存节点读取缓存的数据时,接收请求端发来的读取请求,当确定所述读取请求所请求的待读取数据缓存在至少一个缓存节点中时,确定每个缓存有所述待读取数据的缓存节点,将所述待读取数据的缓存信息和每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端,以使所述请求端根据每个缓存有所述待读取数据的缓存节点的RDMA连接信息和所述待读取数据的缓存信息,通过RDMA连接从每个缓存有所述待读取数据的缓存节点的内存中读取所述待读取数据;
[0057] 所述存储节点,用于接收所述元数据节点发来的所述待缓存数据的存储信息和用于缓存所述待缓存数据的缓存节点的RDMA连接信息,根据所述待缓存数据的存储信息读取所述待缓存数据,根据所述RDMA连接信息与用于缓存所述待缓存数据的缓存节点建立RDMA连接,通过RDMA连接将读取的所述待缓存数据缓存到用于缓存所述待缓存数据的缓存节点的内存中;
[0058] 所述缓存节点,用于将本缓存节点的RDMA连接信息发送给所述元数据节点,与所述存储节点建立RDMA连接,与所述请求端建立RDMA连接。
[0059] 可选地,
[0060] 所述元数据节点,进一步用于接收写入端发来的写入请求,根据所述写入请求,为所述写入请求所请求写入的数据分配至少一个缓存节点和至少一个存储节点,将该至少一个缓存节点的RDMA连接信息和该至少一个存储节点的节点信息发送给所述写入端,以使所述写入端根据该至少一个缓存节点的RDMA连接信息将所述写入请求所请求写入的数据通过RDMA连接缓存到该至少一个缓存节点的内存中,根据该至少一个存储节点的节点信息向该至少一个存储节点发送读取通知;
[0061] 所述存储节点,进一步用于当接收到所述写入端发来的读取通知时,从该至少一个缓存节点读取所述写入请求所请求写入的数据,保存到本存储节点中;
[0062] 所述缓存节点,进一步用于与所述写入端建立RDMA连接。
[0063] 在本发明实施例中,元数据节点确定出用于缓存待缓存数据的缓存节点和用于向缓存节点缓存待缓存数据的存储节点,将待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点,该存储节点能够根据RDMA连接信息与该缓存节点建立RDMA连接,通过RDMA连接直接将读取的待缓存数据缓存到该缓存节点的内存中,也就是说,在向该缓存节点中缓存待缓存数据的过程中,无需该缓存节点的操作系统介入,该存储节点直接对该缓存节点的内存进行操作,提高了对分布式存储系统中缓存的处理速度,具体地,提高了向缓存节点缓存数据的速度。

附图说明

[0064] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0065] 图1是本发明一实施例提供的一种分布式存储系统中缓存的管理方法的流程图;
[0066] 图2是本发明一实施例提供的另一种分布式存储系统中缓存的管理方法的流程图;
[0067] 图3是本发明一实施例提供的又一种分布式存储系统中缓存的管理方法的流程图;
[0068] 图4是本发明一实施例提供的又一种分布式存储系统中缓存的管理方法的流程图;
[0069] 图5是本发明一实施例提供的又一种分布式存储系统中缓存的管理方法的流程图;
[0070] 图6是本发明一实施例提供的又一种分布式存储系统中缓存的管理方法的流程图;
[0071] 图7是本发明一实施例提供的一种缓存块的状态迁移图;
[0072] 图8是本发明一实施例提供的又一种分布式存储系统中缓存的管理方法的流程图;
[0073] 图9是本发明一实施例提供的一种分布式存储系统的缓存节点的示意图;
[0074] 图10是本发明一实施例提供的一种分布式存储系统的示意图。

具体实施方式

[0075] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0076] 在现有的分布式存储系统中,可以将一个大文件的缓存在多个不同的节点上,这些缓存的数据不能跨节点使用。举例来说,文件1被缓存在节点1、节点2和节点3上,当客户端通过节点1读取文件1时,客户端只能读取缓存在节点1上的属于文件1的缓存数据,客户端无法读取缓存在节点2和节点3上的属于文件1的缓存数据,文件1的没有缓存在节点1上的部分,客户端只能从存储节点的硬盘中读取,客户端只有读取节点1上的缓存数据时才有性能提升,如果节点1上缓存的属于文件1的数据不多,性能提升也不大。另外,缓存的数据占用了分布式存储系统分配给存储节点的内存,与在存储节点上运行的大数据处理程序互相影响。
[0077] 在向缓存节点中缓存数据时,需要缓存节点的操作系统介入,在从缓存节点读取缓存的数据时,也需要缓存节点的操作系统介入,使得对分布式存储系统中缓存的处理速度较慢。
[0078] 为了解决现有的分布式存储系统存在的问题,本发明实施例提供了分布式存储系统中缓存的管理方法、缓存节点及分布式存储系统,下面通过多个具体的实施例来详细说明本发明实施例提供的缓存的管理方法、缓存节点及分布式存储系统。
[0079] 如图1所示,本发明实施例提供了一种分布式存储系统中缓存的管理方法,该方法应用于分布式存储系统的元数据节点,该方法包括:
[0080] 步骤101:预先保存至少一个缓存节点的RDMA连接信息;
[0081] 步骤102:确定待缓存数据的存储信息;
[0082] 步骤103:确定用于缓存所述待缓存数据的缓存节点;
[0083] 步骤104:确定用于向缓存节点缓存所述待缓存数据的存储节点;
[0084] 步骤105:将所述待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点,以使所述确定出的存储节点根据所述待缓存数据的存储信息读取所述待缓存数据,根据所述确定出的缓存节点的RDMA连接信息将读取的所述待缓存数据通过RDMA连接缓存到所述确定出的缓存节点的内存中。
[0085] 在本发明实施例中,元数据节点确定出用于缓存待缓存数据的缓存节点和用于向缓存节点缓存待缓存数据的存储节点,将待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点,该存储节点能够根据RDMA连接信息与该缓存节点建立RDMA连接,通过RDMA连接直接将读取的待缓存数据缓存到该缓存节点的内存中,也就是说,在向该缓存节点中缓存待缓存数据的过程中,无需该缓存节点的操作系统介入,该存储节点直接对该缓存节点的内存进行操作,提高了对分布式存储系统中缓存的处理速度,具体地,提高了向缓存节点缓存数据的速度。
[0086] 在本发明实施例中,元数据节点可以称为NameNode,缓存节点可以称为CacheNode,存储节点可以称为DataNode。
[0087] 在本发明实施例中,步骤102可以通过以下方式实现:
[0088] 方式1:用户向元数据节点提供待缓存数据的存储信息。
[0089] 具体地,用户可以指定需要缓存的文件或目录,可通过CLI或API添加、删除和修改需要缓存的文件或目录,需要缓存的文件或目录可以分为多个数据块大小的数据进行缓存。
[0090] 方式2:元数据节点根据访问历史预测确定出热点数据,将属于热点数据的数据作为待缓存数据。
[0091] 具体地,元数据节点记录各个客户端的访问记录组成时间序列数据。根据文件的历史访问记录,通过文件访问热度,基于频繁序列挖掘或机器学习的方法,预测未来的访问需求并缓存相应的文件。已自动缓存内容的换出可使用基于统计的方法,如LRU、ARC、SLRU和LIRS等算法,也可以使用基于机器学习的方法。
[0092] 另外,待缓存数据的存储信息,可以包括:保存待缓存数据的存储节点的节点信息(节点ID等)、保存待缓存数据的数据块的ID、待缓存数据的存储地址、确定出的用于缓存待缓存数据的缓存节点的节点信息以及该缓存节点中用于缓存待缓存数据的数据块的ID等。
[0093] RDMA连接信息可以包括内存秘钥等。每个缓存节点都会在元数据节点注册,在注册时,缓存节点将本缓存节点的RDMA连接信息发送给元数据节点。
[0094] RDMA连接是指基于RDMA协议建立的连接。
[0095] 在本发明实施例中,各个缓存节点均支持RDMA。
[0096] 在本发明一实施例中,该方法进一步包括:
[0097] 预先保存第一列表,其中,所述第一列表用于保存至少一个缓存节点的可用空间的信息;
[0098] 预先保存第二列表,其中,所述第二列表用于保存待缓存数据的存储信息;
[0099] 预先保存第三列表,其中,所述第三列表用于保存已缓存的数据的缓存信息;
[0100] 所述确定待缓存数据的存储信息,包括:
[0101] 从所述第二列表中获取所述待缓存数据的存储信息;
[0102] 所述确定用于缓存所述待缓存数据的缓存节点,包括:
[0103] 根据所述第一列表中的至少一个缓存节点的可用空间的信息,确定用于缓存所述待缓存数据的缓存节点;
[0104] 在所述将所述待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点之后,进一步包括:
[0105] 在确定该存储节点已将所述待缓存数据缓存到该缓存节点后,生成所述待缓存数据的缓存信息,将所述待缓存数据的缓存信息保存到所述第三列表中。
[0106] 在本发明实施例中,缓存节点在注册时,将缓存节点的可用空间的信息(例如:可用空间的大小)发送给元数据节点,元数据节点保存到第一列表中,当为缓存节点分配了待缓存数据后,更新第一列表中该缓存节点的可用空间的信息。在确定用于缓存待缓存数据的缓存节点时,可以根据待缓存数据的大小以及各个缓存节点的可用空间的大小,确定具有足够空间缓存该待缓存数据的缓存节点,将具有足够空间缓存该待缓存数据的缓存节点作为用于缓存待缓存数据的缓存节点。
[0107] 用户可以通过CLI或API可以添加、删除和修改第二列表中的项,元数据节点也可以添加、删除和修改第二列表中的项。
[0108] 第三列表中保存了已缓存的数据的缓存信息,该缓存信息可以包括缓存了已缓存的数据的数据块的ID,已缓存的数据的缓存地址等。当已缓存的数据不继续缓存时,元数据节点将该已缓存的数据的缓存信息从第三列表中删除,并释放相应的缓存空间,更新第一列表中相应的缓存节点的可用空间的信息。缓存节点的缓存空间是分布式存储系统中的一种稀缺资源,可以定期从缓存节点的内存中删除不再需要的数据。
[0109] 在本发明一实施例中,在所述确定待缓存数据的存储信息之前,进一步包括:
[0110] 接收写入端发来的写入所述待缓存数据的写入请求;
[0111] 根据所述写入请求,为所述待缓存数据分配至少一个缓存节点和至少一个存储节点,将该至少一个缓存节点的RDMA连接信息和该至少一个存储节点的节点信息发送给所述写入端,以使所述写入端根据该至少一个缓存节点的RDMA连接信息将所述待缓存数据通过RDMA连接缓存到该至少一个缓存节点的内存中,根据该至少一个存储节点的节点信息触发该至少一个存储节点从该至少一个缓存节点的内存读取所述待缓存数据并保存。
[0112] 在本发明实施例中,待缓存数据在缓存到缓存节点之前,需要先保存到存储节点中,在将待存储数据保存到存储节点的过程中,该待缓存数据就一个需要写入的数据。在本发明实施例中,可以将需要写入存储节点的数据通过缓存节点保存到存储节点中,写入端将需要写入的数据缓存到缓存节点的内存后,各个存储节点自动从缓存节点中获取需要写入的数据进行保存。
[0113] 在为需要写入的数据分配缓存节点和存储节点时,可以根据具体的需要来分配。例如:如果资源不足或者需要节约资源的话,可以分配一个缓存节点和一个存储节点,设置需要写入的数据为1副本;如果需要提高安全性和读取速度,可以设置需要写入的数据为3副本分配3个存储节点,当然,也可以设置更多的副本,并分配更多的存储节点。另外,还可以分配2个缓存节点,这两个缓存节点互为备份,存储节点可以通过任意的缓存节点获取需要写入的数据,降低了写入过程中数据丢失的风险,提高了写入过程中数据的安全性。
[0114] 下面通过一个具体的实施例来详细描述本发明实施例提供的一种分布式存储系统中缓存的管理方法,在本发明实施例中数据A为需要写入存储节点的数据,为该数据A分配了两个缓存节点和三个存储节点,如图2所示,该方法可以包括以下步骤:
[0115] 步骤201:写入端向元数据节点发送请求写入数据A的写入请求。
[0116] 具体地,该写入请求中可以包括:数据A的大小等信息。
[0117] 步骤202:元数据节点接收写入请求,根据写入请求,为数据A分配两个缓存节点和三个存储节点,将预先保存的该两个缓存节点的RDMA连接信息和该三个存储节点的节点信息发送给写入端。
[0118] 具体地,存储节点的节点信息可以包括:存储节点的ID等。
[0119] 步骤203:写入端接收两个缓存节点的RDMA连接信息和该三个存储节点的节点信息,在写入端支持RDMA的情况下,执行步骤204,在写入端不支持RDMA的情况下,执行步骤207。
[0120] 步骤204:写入端根据该两个缓存节点的RDMA连接信息与该两个缓存节点建立RDMA连接,将数据A通过RDMA连接缓存到该两个缓存节点的内存中,向该三个存储节点发送开始读取的通知,执行步骤205。
[0121] 步骤205:该三个存储节点接收到写入端发来的开始读取的通知后,从该两个缓存节点的内存中读取数据A并保存到本地文件系统,保存完成后,向写入端发送写入完成的信息,执行步骤206。
[0122] 步骤206:写入端在接收到该三个存储节点发来的写入完成的信息后,确认数据A的写入过程结束。
[0123] 步骤207:写入端将数据A发送给该三个存储节点中第一个存储节点,执行步骤208。
[0124] 步骤208:第一个存储节点将数据A保存到本地文件系统并发送给第二个存储节点,第二个存储节点将数据A保存到本地文件系统并发送给第三个存储节点,第三个存储节点将数据A保存到本地文件系统,在三个存储节点均将数据A保存到本地文件系统后,第一个存储节点向写入端发送写入完成的信息,执行步骤209。
[0125] 步骤209:写入端在接收到第一个存储节点发来的写入完成的信息后,确认数据A的写入过程结束。
[0126] 如图3,本发明实施例提供了一种分布式存储系统中缓存的管理方法,应用于分布式存储系统的存储节点,该方法包括:
[0127] 步骤301:接收元数据节点发来的待缓存数据的存储信息和用于缓存所述待缓存数据的缓存节点的RDMA连接信息;
[0128] 步骤302:根据所述待缓存数据的存储信息读取所述待缓存数据;
[0129] 步骤303:根据所述RDMA连接信息与用于缓存所述待缓存数据的缓存节点建立RDMA连接,通过RDMA连接将读取的所述待缓存数据缓存到用于缓存所述待缓存数据的缓存节点的内存中。
[0130] 在本发明实施例中,从存储节点的角度来描述向缓存节点缓存数据的过程。存储节点支持RDMA,存储节点能够直接通过RDMA连接对缓存节点的内存进行操作,加快了向缓存节点缓存数据的速度。
[0131] 下面通过一个具体的实施例来详细描述本发明实施例提供的一种分布式存储系统中缓存的管理方法,如图4所示,该方法可以包括以下步骤:
[0132] 步骤401:元数据节点确定待缓存的数据B的存储信息。
[0133] 该存储信息包括:保存了数据B的存储节点的节点信息(节点ID等)、保存了数据B的数据块的ID、数据B的存储地址等。
[0134] 步骤402:确定用于缓存数据B的缓存节点A,确定用于向缓存节点A缓存数据B的存储节点A,将数据B的存储信息和预先保存的缓存节点A的RDMA连接信息发送给存储节点A。
[0135] 步骤403:存储节点A接收元数据节点发来的数据B的存储信息和缓存节点A的RDMA连接信息。
[0136] 步骤404:存储节点A根据数据B的存储信息读取数据B。
[0137] 步骤405:存储节点A根据RDMA连接信息与缓存节点A建立RDMA连接,通过RDMA连接将读取的数据B缓存到缓存节点A的内存中,向元数据节点返回缓存完毕的信息。
[0138] 步骤406:元数据节点接收到存储节点A发来的缓存完毕的信息后,更新第一列表中缓存节点A的可用空间的信息,将数据B的存储信息从第二列表中删除,将数据B的缓存信息添加的第三列表中。
[0139] 如图5所示,本发明实施例提供了一种分布式存储系统中缓存的管理方法,应用于分布式存储系统的元数据节点,该方法包括:
[0140] 步骤501:预先保存至少一个缓存节点的RDMA连接信息
[0141] 步骤502:接收请求端发来的读取请求;
[0142] 步骤503:当确定所述读取请求所请求的待读取数据缓存在至少一个缓存节点中时,确定每个缓存有所述待读取数据的缓存节点;
[0143] 步骤504:确定所述待读取数据的缓存信息;
[0144] 步骤505:将所述待读取数据的缓存信息和每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端,以使所述请求端根据每个缓存有所述待读取数据的缓存节点的RDMA连接信息和所述待读取数据的缓存信息,通过RDMA连接从每个缓存有所述待读取数据的缓存节点的内存中读取所述待读取数据。
[0145] 在本发明实施例中,从读取缓存节点中缓存的数据的角度来描述了分布式存储系统中缓存的管理方法。
[0146] 在本发明实施例中,请求端在支持RDMA的情况下,可以从缓存节点的内存中直接读取缓存的数据,无需缓存节点的操作系统介入,提高了读取缓存节点中的数据的速度。
[0147] 另外,在本发明实施例中,请求端通过RDMA可以从任意一个缓存节点的内存中读取缓存的数据,提高了缓存的访问和实用效率,为集群中所有节点提供了一个稳定的性能,能够提高单个节点访问所有数据的性能。
[0148] 在本发明实施例中,当元数据节点接收到请求端发来的读取请求时,该读取请求所请求的待读取数据可以是一个文件,当该文件被缓存在多个缓存节点时,该请求端可以从该多个缓存节点的内存中读取该文件的数据。举例来说,文件2的被缓存在缓存节点1、缓存节点2和缓存节点3上,请求端能够通过RDMA连接直接从缓存节点1的内存、缓存节点2的内存和缓存节点3的内存中读取属于文件2的数据。
[0149] 通过上述描述可见,请求端能够读取任意一个缓存节点的内存中缓存的数据,对于任何一个请求端都能够提高读取缓存的数据的速度。
[0150] 在本发明一实施例中,该方法进一步包括:
[0151] 预先保存第三列表,其中,所述第三列表用于保存已缓存的数据的缓存信息;
[0152] 所述确定所述待读取数据的缓存信息,包括:
[0153] 从所述第三列表中获取所述待读取数据的缓存信息。
[0154] 在本发明实施例中,元数据节点维护了一个第三列表,第三列表中的缓存信息可以包括缓存了已缓存的数据的数据块的ID,已缓存的数据的缓存地址等。
[0155] 下面通过一个具体实施例来详细描述本发明实施例提供的一种分布式存储系统中缓存的管理方法,如图6所示,该方法可以包括以下步骤:
[0156] 步骤601:元数据节点预先保存至少一个缓存节点的RDMA连接信息。
[0157] 步骤602:请求端向元数据节点发送读取请求。
[0158] 具体地,该读取请求中可以包括待读取数据的文件名等信息。
[0159] 步骤603:元数据节点接收请求端发来的读取请求,判断读取请求所请求的待读取数据是否缓存在至少一个缓存节点中,如果是,则执行步骤604,否则,执行步骤607。
[0160] 步骤604:元数据节点确定待读取数据的缓存信息,执行步骤605。
[0161] 步骤605:元数据节点将待读取数据的缓存信息、每个缓存有待读取数据的缓存节点的RDMA连接信息和待读取数据的存储信息发送给请求端,当请求端支持RDMA时,执行步骤606,当请求端不支持RDMA时,执行步骤608。
[0162] 该缓存信息是指缓存了待读取数据的缓存节点的相关信息。
[0163] 该存储信息是指存储了待读取数据的存储节点的相关信息。
[0164] 步骤606:请求端针对每个缓存有待读取数据的缓存节点执行:根据当前缓存节点的RDMA连接信息与当前缓存节点建立RDMA连接,根据待读取数据的缓存信息,通过RDMA连接从当前缓存节点的内存中读取当前缓存节点中缓存的待读取数据的部分数据。
[0165] 具体地,待读取数据可能被缓存在多个数据块中,并且这些数据块可能位于多个不同的缓存节点中,一个缓存节点中缓存了待读取数据的部分数据,请求端在读取时,分别从每个缓存节点读取部分数据,最终得到整个待读取数据。
[0166] 步骤607:元数据节点将待读取数据的存储信息发送给请求端,执行步骤608。
[0167] 步骤608:请求端根据待读取数据的存储信息从每个存储待读取数据的存储节点中获取待读取数据。
[0168] 具体地,待读取数据可能被存储在多个数据块中,并且这些数据块可能位于多个不同的存储节点中,一个存储节点中存储了待读取数据的部分数据,请求端在读取时,分别从每个存储节点读取部分数据,最终得到整个待读取数据。
[0169] 在本发明实施例提供的一种分布式存储系统中缓存的管理方法中,为了方便对各个缓存节点中的数据块以及各个缓存节点中缓存的数据进行管理,需要记录缓存节点中的数据块的状态,具体的过程如下:
[0170] 在本发明一实施例中,该方法进一步包括:
[0171] 初始化缓存节点中的缓存块的状态为第一状态,其中,所述缓存块为缓存节点中用于缓存数据的数据块,当缓存块为第一状态时,表示该缓存块没有缓存数据或该缓存块中缓存的数据已失效;
[0172] 在所述确定用于缓存所述待缓存数据的缓存节点之后,进一步包括:
[0173] 为所述确定出的缓存节点中的一个缓存块分配一个缓存任务,其中,所述缓存任务为缓存所述待缓存数据的任务;
[0174] 将被分配了一个缓存任务的缓存块的状态修改为第二状态,其中,当缓存块为所述第二状态时,表示已为该缓存块分配一个缓存任务;
[0175] 在所述为所述待缓存数据分配至少一个缓存节点之后,进一步包括:
[0176] 为该至少一个缓存节点中的一个缓存块分配一个缓存任务;
[0177] 将被分配了一个缓存任务的缓存块的状态修改为所述第二状态;
[0178] 在所述将该至少一个缓存节点的RDMA连接信息和该至少一个存储节点的节点信息发送给所述写入端之后,进一步包括:
[0179] 在确定所述写入端已将所述待缓存数据缓存到该至少一个缓存节点后,将缓存了所述待缓存数据的缓存块的状态修改为第三状态,其中,当缓存块为所述第三状态时,表示该缓存块中缓存的数据没有保存到存储节点中;
[0180] 在确定该至少一个存储节点已将所述待缓存数据保存到存储节点后,将缓存了所述待缓存数据的缓存块的状态修改为第四状态,其中,当缓存块为所述第四状态时,表示该缓存块中缓存的数据已经保存到存储节点中;
[0181] 在所述将所述待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点之后,进一步包括:
[0182] 在确定所述确定出的缓存节点已将所述待缓存数据缓存到所述确定出的缓存节点后,将缓存了所述待缓存数据的缓存块的状态修改为所述第四状态;
[0183] 进一步包括:
[0184] 当处于所述第四状态的缓存块中的数据已失效,则将该缓存块的状态修改为所述第一状态。
[0185] 在所述将所述待读取数据的缓存信息和预先保存的每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端之后,进一步包括:
[0186] 当缓存有所述待读取数据的缓存块为第三状态时,将该缓存块的状态修改为第五状态,其中,缓存块为缓存节点中用于缓存数据的数据块,当缓存块为所述第三状态时,表示该缓存块中缓存的数据没有保存到存储节点中,当缓存块为所述第五状态时,表示该缓存块中缓存的数据没有保存到存储节点中且该缓存块中缓存的数据正在被读取;
[0187] 在确定所述请求端已读取完所述待读取数据后,将缓存有所述待读取数据的缓存块的状态为所述第三状态;
[0188] 在所述将所述待读取数据的缓存信息和预先保存的每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端之后,进一步包括:
[0189] 当缓存有所述待读取数据的缓存块为第四状态时,将该缓存块的状态修改为第六状态,其中,当缓存块为所述第四状态时,表示该缓存块中缓存的数据已经保存到存储节点中,当缓存块为所述第六状态时,表示该缓存块中缓存的数据已经保存到存储节点中且该缓存块中缓存的数据正在被读取;
[0190] 在确定所述请求端已读取完所述待读取数据后,将缓存有所述待读取数据的缓存块的状态修改为所述第四状态。
[0191] 在本发明实施例中,第一状态是缓存块的初始状态。在第二状态的缓存块中的数据处于不完整且不可用的状态,写入端或存储节点可以将数据写入对应的该缓存块,但是,还没有完成写入。在第三状态的缓存块中已经缓存了数据,但是该缓存块中的数据没有持久化到存储节点中,在第三状态下的缓存块中的数据是完整并且可被读取的,当处于第三状态的缓存块中的数据被读取时,将数据块的状态修改为第五状态,第五状态是一个临时状态。在第四状态的缓存块中的数据已经缓存到缓存节点且已经持久化到存储节点,在第四状态的缓存块中的数据是完整并且可被读取的,当第四状态的缓存块中的数据被读取时,将该缓存块的状态修改为第六状态,该第六状态也是一个临时状态。
[0192] 如图7所示,图7为一种缓存块的状态迁移图。其中,S1表示第一状态,S2表示第二状态,S3表示第三状态,S4表示第四状态,S5表示第五状态,S6表示第六状态。
[0193] 如图8所示,本发明实施例提供了一种分布式存储系统中缓存的管理方法,应用于分布式存储系统的缓存节点,该方法包括:
[0194] 步骤801:将本缓存节点的RDMA连接信息发送给所述分布式存储系统的元数据节点,以使所述元数据节点向需要与本缓存节点建立RDMA连接的设备发送所述RDMA连接信息;
[0195] 步骤802:当接收到所述设备发来的基于所述RDMA连接信息生成的连接请求时,与所述设备建立RDMA连接,以使所述设备通过所述RDMA连接向本缓存节点的内存缓存数据或通过所述RDMA连接从本缓存节点的内存读取缓存的数据。
[0196] 在本发明实施例中,分布式存储系统的缓存节点支持RDMA,外部的设备可以基于该缓存节点的RDMA连接信息与该缓存节点建立RDMA连接,建立RDMA连接后,该设备能够直接对缓存节点的内存进行操作,无需缓存节点的缓存节点的操作系统介入,提高了向缓存节点缓存数据的速度,提高了从缓存节点读取数据的速度。上述的设备可以是分布式存储系统的存储节点,可以是向缓存节点写入数据的写入端、从缓存节点读取数据的请求端等。
[0197] 如图9所示,本发明实施例提供了一种分布式存储系统的缓存节点,包括:
[0198] 发送模块901,用于将本缓存节点的RDMA连接信息发送给分布式存储系统的元数据节点,以使所述元数据节点向需要与本缓存节点建立RDMA连接的设备发送所述RDMA连接信息;
[0199] 连接模块902,用于当接收到所述设备发来的基于所述RDMA连接信息生成的连接请求时,与所述设备建立RDMA连接,以使所述设备通过所述RDMA连接向本缓存节点的内存缓存数据或通过所述RDMA连接从本缓存节点的内存读取缓存的数据。
[0200] 本发明实施例提供了一种分布式存储系统的元数据节点,包括:
[0201] 第一保存单元,用于保存至少一个缓存节点的RDMA连接信息
[0202] 第一确定模块,用于确定待缓存数据的存储信息;
[0203] 第二确定模块,用于确定用于缓存所述待缓存数据的缓存节点;
[0204] 第三确定模块,用于确定用于向缓存节点缓存所述待缓存数据的存储节点;
[0205] 第一发送模块,用于将所述待缓存数据的存储信息和确定出的缓存节点的RDMA连接信息发送给确定出的存储节点,以使所述确定出的存储节点根据所述待缓存数据的存储信息读取所述待缓存数据,根据所述确定出的缓存节点的RDMA连接信息将读取的所述待缓存数据通过RDMA连接缓存到所述确定出的缓存节点的内存中。
[0206] 本发明实施例提供了一种分布式存储系统的存储节点,包括:
[0207] 接收模块,用于接收元数据节点发来的待缓存数据的存储信息和用于缓存所述待缓存数据的缓存节点的RDMA连接信息;
[0208] 读取模块,用于根据所述待缓存数据的存储信息读取所述待缓存数据;
[0209] 缓存模块,用于根据所述RDMA连接信息与用于缓存所述待缓存数据的缓存节点建立RDMA连接,通过RDMA连接将读取的所述待缓存数据缓存到用于缓存所述待缓存数据的缓存节点的内存中。
[0210] 本发明实施例提供了一种分布式存储系统中缓存的元数据节点,包括:
[0211] 第二保存模块,用于保存至少一个缓存节点的RDMA连接信息,
[0212] 请求接收模块,用于接收请求端发来的读取请求;
[0213] 缓存节点确定模块,用于当确定所述读取请求所请求的待读取数据缓存在至少一个缓存节点中时,确定每个缓存有所述待读取数据的缓存节点;
[0214] 缓存信息确定模块,用于确定所述待读取数据的缓存信息;
[0215] 第二发送模块,用于将所述待读取数据的缓存信息和每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端,以使所述请求端根据每个缓存有所述待读取数据的缓存节点的RDMA连接信息和所述待读取数据的缓存信息,通过RDMA连接从每个缓存有所述待读取数据的缓存节点的内存中读取所述待读取数据。
[0216] 如图10所示,本发明实施例提供了一种分布式存储系统,包括:
[0217] 元数据节点1001、至少一个缓存节点1002和至少一个存储节点1003;
[0218] 所述元数据节点1001,用于接收并保存至少一个缓存节点的RDMA连接信息,在向缓存节点缓存数据时,确定待缓存数据的存储信息,确定用于缓存所述待缓存数据的缓存节点,确定用于向缓存节点缓存所述待缓存数据的存储节点,将所述待缓存数据的存储信息和用于缓存所述待缓存数据的缓存节点的RDMA连接信息发送给确定出的存储节点;在从缓存节点读取缓存的数据时,接收请求端发来的读取请求,当确定所述读取请求所请求的待读取数据缓存在至少一个缓存节点中时,确定每个缓存有所述待读取数据的缓存节点,将所述待读取数据的缓存信息和每个缓存有所述待读取数据的缓存节点的RDMA连接信息发送给所述请求端,以使所述请求端根据每个缓存有所述待读取数据的缓存节点的RDMA连接信息和所述待读取数据的缓存信息,通过RDMA连接从每个缓存有所述待读取数据的缓存节点的内存中读取所述待读取数据;
[0219] 所述存储节点1003,用于接收所述元数据节点发来的所述待缓存数据的存储信息和用于缓存所述待缓存数据的缓存节点的RDMA连接信息,根据所述待缓存数据的存储信息读取所述待缓存数据,根据所述RDMA连接信息与用于缓存所述待缓存数据的缓存节点建立RDMA连接,通过RDMA连接将读取的所述待缓存数据缓存到用于缓存所述待缓存数据的缓存节点的内存中;
[0220] 所述缓存节点1002,用于将本缓存节点的RDMA连接信息发送给所述元数据节点,与所述存储节点建立RDMA连接,与所述请求端建立RDMA连接。
[0221] 该分布式存储系统中的元数据节点可以是上述实施例提供的任一一个元数据节点,该分布式存储系统中的存储节点可以是上述实施例提供的任一一个存储节点,该分布式存储系统中的缓存节点可以是上述实施例提供的任一一个缓存节点。
[0222] 在本发明实施例中,元数据节点可以与每个存储节点和每个缓存节点相连,每个存储节点可以与每个缓存节点相连。
[0223] 在本发明一实施例中,所述元数据节点,进一步用于接收写入端发来的写入请求,根据所述写入请求,为所述写入请求所请求写入的数据分配至少一个缓存节点和至少一个存储节点,将该至少一个缓存节点的RDMA连接信息和该至少一个存储节点的节点信息发送给所述写入端,以使所述写入端根据该至少一个缓存节点的RDMA连接信息将所述写入请求所请求写入的数据通过RDMA连接缓存到该至少一个缓存节点的内存中,根据该至少一个存储节点的节点信息向该至少一个存储节点发送读取通知;
[0224] 所述存储节点,进一步用于当接收到所述写入端发来的读取通知时,从该至少一个缓存节点读取所述写入请求所请求写入的数据,保存到本存储节点中;
[0225] 所述缓存节点,进一步用于与所述写入端建立RDMA连接。
[0226] 在本发明实施例中,请求端和写入端均可以通过客户端来实现,客户端可以称为Client。
[0227] 在本发明实施例中,该分布式存储系统还可以包括请求端和写入端,该请求端和写入端可以通过客户端来实现。
[0228] 需要说明的是:在本发明实施例中,缓存节点可以与存储节点共同部署在同一个服务器上,也可以单独部署在一个服务器上。在缓存节点中运行有缓存服务,缓存服务是一个独立的程序,该缓存服务与存储节点的存储服务分离,缓存服务管理一个独立的内存区域。当缓存节点与存储节点共同部署在同一个服务器上时,缓存节点所占用的内存区域与存储节点所占用的内存区域是相互独立的。
[0229] 元数据节点管理集群中所有缓存节点的空闲空间、缓存数据列表,并根据应用访问这些数据的情况标记缓存块的状态。每个缓存节点启动后会在元数据节点注册相关信息,所有缓存节点的地址空间被组织成一个连续的缓存空间,由元数据节点管理。元数据节点管理缓存块列表、缓存节点状态和可用空间。缓存节点等待来自写入端、请求端和存储节点的RDMA连接请求。在缓存读写过程中,元数据节点提供目标地址并执行访问控制和互斥。
[0230] 当缓存节点的缓存服务启动时,首先预留一部分内存地址,然后向元数据节点发送RDMA连接信息、保留的内存大小和空闲空间等信息。缓存节点的缓存程序注册后,元数据节点将其地址组织成一个连续的缓存空间。元数据节点保存缓存空闲地址列表,已缓存块列表,用户提交缓存需求列表等。
[0231] 上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
[0232] 本发明还提供了一种计算机可读介质,存储用于使一计算机执行如本文所述的分布式存储系统中缓存的管理方法的指令。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或CPU或MPU)读出并执行存储在存储介质中的程序代码。
[0233] 在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
[0234] 用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD+RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上下载程序代码。
[0235] 此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
[0236] 此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的CPU等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
[0237] 需要说明的是,上述各流程和各系统结构图中不是所有的步骤和模块都是必须的,可以根据实际的需要忽略某些步骤或模块。各步骤的执行顺序不是固定的,可以根据需要进行调整。上述各实施例中描述的系统结构可以是物理结构,也可以是逻辑结构,即,有些模块可能由同一物理实体实现,或者,有些模块可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
[0238] 以上各实施例中,硬件单元可以通过机械方式或电气方式实现。例如,一个硬件单元可以包括永久性专用的电路或逻辑(如专门的处理器,FPGA或ASIC)来完成相应操作。硬件单元还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。
[0239] 上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。