CN115495433A - 一种分布式存储系统、数据迁移方法及存储装置 - Google Patents
一种分布式存储系统、数据迁移方法及存储装置 Download PDFInfo
- Publication number
- CN115495433A CN115495433A CN202110678722.2A CN202110678722A CN115495433A CN 115495433 A CN115495433 A CN 115495433A CN 202110678722 A CN202110678722 A CN 202110678722A CN 115495433 A CN115495433 A CN 115495433A
- Authority
- CN
- China
- Prior art keywords
- node
- memory
- data
- nodes
- target data
- 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.)
- Pending
Links
- 238000003860 storage Methods 0.000 title claims abstract description 213
- 238000000034 method Methods 0.000 title claims abstract description 93
- 238000013508 migration Methods 0.000 title claims abstract description 48
- 230000005012 migration Effects 0.000 title claims abstract description 46
- 230000015654 memory Effects 0.000 claims abstract description 453
- 230000004044 response Effects 0.000 description 28
- 238000013461 design Methods 0.000 description 26
- 230000006870 function Effects 0.000 description 21
- 230000006854 communication Effects 0.000 description 18
- 238000004891 communication Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 11
- 238000012545 processing Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 8
- 238000004590 computer program Methods 0.000 description 7
- 235000019580 granularity Nutrition 0.000 description 7
- 230000003993 interaction Effects 0.000 description 7
- 230000009286 beneficial effect Effects 0.000 description 6
- 230000005055 memory storage Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000002146 bilateral effect Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000014759 maintenance of location Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000010187 selection method Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000013524 data verification Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种分布式存储系统、数据迁移方法及存储装置,该分布式存储系统包括多个节点,该多个节点中的第一节点处于空闲状态,该多个节点中的第二节点处于繁忙状态。第一节点用于向该第二节点发送数据拉取请求,对应的,第二节点接收到第一节点发送的数据拉取请求,之后,第二节点基于该数据拉取请求将存储在第二存储器中的目标数据发送给第一节点,第一节点接收该目标数据,并将该目标数据存储在第一存储器中。通过上述方法,第二节点可以将目标数据迁出至第一节点,这样,第二节点便可以释放中用于存储目标数据的存储空间,从而缓解了存储器资源不足的问题,同时由于第二节点不需要寻找可用的存储资源,因此也减轻了第二节点的CPU负担。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种分布式存储系统、数据迁移方法及存储装置。
背景技术
在一种存储集群架构中,集群内的存储节点可以使用集群内其他远程存储节点上面的内存资源来解决本地内存资源不足的情况。例如,当存储节点上的内存密集型应用在运行过程中产生大量的内存数据时,存储节点可以寻找集群内位于其他存储节点中的可用的远端内存资源,将本地的内存数据迁移至远端内存资源中。
上述方式虽然缓解了该存储节点内存资源不足的问题,但是数据迁移过程也会增加该存储节点额外的工作负担。也就是,上述方式是牺牲CPU资源来换取内存资源的一种方式。
发明内容
本申请提供一种分布式存储系统、数据迁移方法及存储装置,用于在缓解该系统中繁忙节点的内存资源不足的问题的基础上,减轻繁忙节点的CPU负担。
第一方面,本申请实施例提供了一种分布式存储系统,该分布式存储系统包括多个节点,其中,该多个节点中的第一节点处于空闲状态,该多个节点中的第二节点处于繁忙状态,第一节点的空闲状态是根据第一节点的存储器(如DRAM)的使用情况确定的,第二节点的繁忙状态是根据第二节点的存储器(如DRAM)的使用情况确定的,如下将第一节点的存储器称为第一存储器,将第二节点的存储器称为第二存储器。
该第一节点用于向该第二节点发送数据拉取请求,对应的,第二节点接收到第一节点发送的数据拉取请求,之后,第二节点基于该数据拉取请求将存储在第二存储器中的目标数据发送给第一节点,第一节点接收该第二节点发送的目标数据,并将该目标数据存储在第一存储器中。
按照第一方面提供的系统,由处于空闲状态的第一节点向处于繁忙状态的第二节点发送数据拉取请求,第二节点基于该数据拉取请求可以将第二存储器内存储的目标数据发送给第一节点,由第一节点存储,这样,第二节点便可以释放用于存储目标数据的存储器空间,从而缓解了存储器资源,特别是内存资源不足的问题,同时由于第二节点不需要寻找可用的存储器资源,因此也减轻了第二节点的CPU负担。
在一种可能的实施方式中,第一存储器与第二存储器都属于高性能存储器,例如,第一存储器和第二存储器均为DRAM,则第二节点确定的目标数据可以是第二存储器中访问频率低于第二存储器中存储的其他数据中的至少一部分数据的访问频率。
上述方式,可以将第二存储器中较冷的数据如访问频率较低的数据迁出,这样可以释放第二存储器的存储空间,从而缓解第二存储器的存储资源不足的问题,同时由于迁出的为较冷的数据,也因此可以提高第二存储器的命中率。更进一步地,由于从第二存储器中迁出的数据也会存储到性能较高的第一存储器中,因此,也尽可能保证了第二节点对该迁出后的这部分数据的读写速度。
在一种可能的实施方式中,第一存储器的读写性能高于第二存储器的读写性能,例如,第一存储器为DRAM,第二存储器为SCM,则第二节点确定的目标数据可以是第二存储器中访问频率高于第二存储器中存储的其他数据中的至少一部分数据的访问频率,或者,该目标数据是第二节点预测出的将要被读取的数据。
上述方式,第二节点可以将第二存储器中较热的数据如访问频率较高的数据,或预测到的将要被读取的数据迁出至性能较高的第一存储器,这样可以释放第二存储器的存储空间,从而缓解第二存储器的存储资源不足的问题,同时由于这部分迁出的数据会存储到性能较高的第一存储器中,由于第一存储器的性能高于第二存储器,因此,提高了第二节点对该迁出后的这部分数据的读写速度。
在一种可能的实施方式中,第一节点还用于获取第二节点的状态信息,该状态信息用于指示第二节点处于繁忙状态或者空闲状态。
上述方式,第一节点可以根据状态信息确定第二节点处于繁忙状态还是空闲状态,不需要第二节点主动询问,减轻第二节点的CPU负担。在一种可能的实施方式中,第一节点还用于基于RDMA协议向第二节点发送读请求,以获取第二节点的状态信息。
上述方式,第一节点通过RDMA协议,例如通过RDMA读请求来读取第二节点的状态信息,可以节省第一节点和第二节点的CPU开销,降低网络时延。
在一种可能的实施方式中,该多个节点中还包括处于繁忙状态的其他节点,第一节点在多个繁忙节点中选择将被拉取数据的对象时,可以基于被第一节点拉取过的数据的数据量来选择,例如第二节点被第一节点拉取过的数据的数据量小于其他节点被第一节点拉取过的数据的数据量。
上述方式,可以避免第一节点拉取同一节点较多的数据,尽量使系统中的节点被拉取数据的机会均衡,另外,如果第一节点存储同一节点较多的数据时,该第一节点故障,可能会导致该节点的大量数据丢失,上述方式可以尽量避免这种情况发生。
在一种可能的实施方式中,第一节点向第二节点发送数据拉取请求之前,还用于向第二节点发送第一信息,第一信息包括第一节点的第一存储器中空闲的存储空间的地址信息;第二节点接收第一信息之后,向第一节点发送目标数据的地址信息。在一种可能的实施方式中,数据拉取请求包含所述目标数据的地址信息。
上述方式,第一节点将准备用于存储目标数据的存储空间的地址信息发送给第二节点,这样第二节点将目标数据迁出后,可以方便第二节点更新该目标数据的元数据,当第二节点需要读取或回迁该目标数据时可以根据更新后的元数据来执行。
第二方面,本申请实施例还提供了一种数据迁移方法,该方法应用于分布式存储系统,该分布式存储系统中包括多个节点(如服务器、存储设备、计算设备等)。该方法包括:该多个节点中处于空闲状态的第一节点向该多个节点中处于繁忙状态的第二节点发送数据拉取请求,该数据拉取请求用于请求第二节点将第二节点中存储的数据发送至第一节点;其中,第一节点的空闲状态是基于第一节点的第一存储器的使用情况确定的,第二节点的繁忙状态是基于第二节点的第二存储器的使用情况确定的;对应的,第二节点接收到第一节点发送的数据拉取请求,并基于所述数据拉取请求,将第二节点的第二存储器中存储的目标数据发送给第一节点;第一节点接收该目标数据,并将目标数据存储在第一节点的第一存储器中。
在一种可能的实施方式中,第一存储器与所述第二存储器都属于高性能存储器,目标数据的访问频率低于所述第二存储器中存储的其他数据中的至少一部分数据的访问频率。
在一种可能的实施方式中,第一存储器的读写性能高于第二存储器的读写性能,目标数据的访问频率高于第二存储器中存储的其他数据中的至少一部分数据的访问频率,或者,目标数据是第二节点预测出的将要被读取的数据。
在一种可能的实施方式中,第一节点获取第二节点的状态信息,该状态信息用于指示第二节点处于繁忙状态或者空闲状态。
在一种可能的实施方式中,第一节点获取第二节点的状态信息,包括:第一节点基于RDMA协议向第二节点发送读请求,以获取第二节点的状态信息。
在一种可能的实施方式中,多个节点中还包括处于繁忙状态的其他节点,第二节点被第一节点拉取过的数据的数据量小于其他节点被第一节点拉取过的数据的数据量。
在一种可能的实施方式中,第一节点向第二节点发送第一信息,该第一信息包括第一节点的第一存储器中空闲的存储空间的地址信息;第二节点接收第一信息之后,向第一节点发送目标数据的地址信息。
在一种可能的实施方式中,数据拉取请求包含目标数据的地址信息。
第三方面,本申请实施例还提供了一种存储装置,该存储装置具有实现上述第一方面示例中第一节点的行为的功能,或该存储装置具有实现上述第一方面示例中第二节点的行为的功能,有益效果可以参见第一方面的描述此处不再赘述。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。这些模块可以执行上述第一方面示例中第一节点的相应功能,或执行上述第一方面示例中第二节点的相应功能,具体参见系统示例中的详细描述,此处不做赘述。
在一个实施方式中,所述存储装置用于实现上述第一方面中第一节点所执行的功能,所述存储装置的结构中包括发送模块和接收模块。
发送模块,用于向所述第二存储装置发送数据拉取请求,所述数据拉取请求用于请求所述第二存储装置将所述第二存储装置中存储的数据发送至所述第一存储装置;所述第一存储装置处于空闲状态,所述第二存储装置处于繁忙状态,所述空闲状态是基于所述第一存储装置的第一存储器的使用情况确定的,所述繁忙状态是基于所述第二存储装置的第二存储器的使用情况确定的;
接收模块,用于接收来自所述第二存储装置的所述第二存储器中存储的目标数据。
在一个可能的设计中,第一存储器与第二存储器都属于高性能存储器,目标数据的访问频率低于第二存储器中存储的其他数据中的至少一部分数据的访问频率。
在一个可能的设计中,第一存储器的读写性能高于第二存储器的读写性能,目标数据的访问频率高于第二存储器中存储的其他数据中的至少一部分数据的访问频率,或者,目标数据是第二节点预测出的将要被读取的数据。
在一个可能的设计中,所述装置还包括:获取模块,用于获取第二存储装置的状态信息,状态信息用于指示第二存储装置处于繁忙状态或者空闲状态。
在一个可能的设计中,发送模块具体用于,基于RDMA协议向第二存储装置发送读请求,以获取第二存储装置的状态信息。
在一个可能的设计中,该分布式存储系统还包括处于繁忙状态的其他存储装置;第二存储装置被第一存储装置拉取过的数据的数据量小于其他存储装置被第一存储装置拉取过的数据的数据量。
在一个可能的设计中,发送模块在向第二存储装置发送数据拉取请求之前,还用于向第二存储装置发送第一信息,该第一信息包括第一存储装置的第一存储器中空闲的存储空间的地址信息;接收模块,还用于接收第二存储装置发送的目标数据的地址信息。
在一个可能的设计中,数据拉取请求包含该目标数据的地址信息。
在另一个实施方式中,所述存储装置用于实现上述第一方面中第二节点的功能,所述装置的结构包括:
接收模块,用于接收所述第一存储装置发送的数据拉取请求,所述数据拉取请求用于请求所述第二存储装置将所述第二存储装置中存储的数据发送至所述第一存储装置;所述第一存储装置处于空闲状态,所述第二存储装置处于繁忙状态,所述空闲状态是基于所述第一存储装置的第一存储器的使用情况确定的,所述繁忙状态是基于所述第二存储装置的第二存储器的使用情况确定的;
发送模块,用于基于所述数据拉取请求,将所述第二节点的所述第二存储器中存储的目标数据发送给所述第一存储装置。
在一个可能的设计中,第一存储器与第二存储器都属于高性能存储器,目标数据的访问频率低于第二存储器中存储的其他数据中的至少一部分数据的访问频率。
在一个可能的设计中,第一存储器的读写性能高于第二存储器的读写性能,目标数据的访问频率高于第二存储器中存储的其他数据中的至少一部分数据的访问频率,或者,目标数据是第二节点预测出的将要被读取的数据。
在一个可能的设计中,接收模块在接收到第一存储装置发送的数据拉取请求之前,还用于接收第一存储装置发送的第一信息,该第一信息包括第一存储装置的第一存储器中空闲的存储空间的地址信息;发送模块,还用于向第一存储装置发送的目标数据的地址信息。
在一个可能的设计中,数据拉取请求包含该目标数据的地址信息。
第四方面,本申请还提供了一种存储设备,所述存储设备包括处理器和存储器,还可以包括通信接口,所述处理器执行所述存储器中的程序指令执行上述第一方面或第一方面任一可能的实现方式提供的第一节点执行的方法,或执行所述存储器中的程序指令执行上述第一方面或第一方面任一可能的实现方式提供的第二节点执行的方法。该存储设备可以为分布式存储系统中的存储节点、服务器、或计算节点等设备。所述存储器与所述处理器耦合,其保存确定数据处理过程中必要的程序指令和数据(如保存布隆过滤器)。所述通信接口,用于与其他设备进行通信。
第五方面,本申请提供了一种计算机可读存储介质,所述计算书可读存储介质被存储设备执行时,所述存储设备执行前述第一方面或第一方面的任意可能的实现方式中提供的第一节点的操作,或执行前述第一方面或第一方面的任意可能的实现方式中提供的第二节点的操作。该存储介质中存储了程序。该存储介质包括但不限于易失性存储器,例如随机访问存储器,非易失性存储器,例如快闪存储器、硬盘(hard disk drive,HDD)、固态硬盘(solid state drive,SSD)。
第六方面,本申请提供了一种计算设备程序产品,所述计算设备程序产品包括计算机指令,在被计算设备执行时,所述计算设备执行前述第一方面或第一方面的任意可能的实现方式中提供的第一节点的操作,或执行前述第一方面或第一方面的任意可能的实现方式中提供的第二节点的操作。该计算机程序产品可以为一个软件安装包,在需要使用前述第一方面或第一方面的任意可能的实现方式中提供的第一节点或第二节点的功能的情况下,可以下载该计算机程序产品并在计算设备上执行该计算机程序产品。
第七方面,本申请还提供一种计算机芯片,所述芯片与存储器相连,所述芯片用于读取并执行所述存储器中存储的软件程序,执行上述第一方面以及第一方面的各个可能的实现方式中所述第一节点或第二节点的操作。
上述第二方面至第七方面实现的有益效果,请参考第一方面关于分布式存储系统的有益效果的描述,此处不再赘述。
附图说明
图1为本申请实施例提供的一种应用场景示意图;
图2A为本申请实施例提供的一种可能的网络架构示意图之一;
图2B为本申请实施例提供的一种可能的网络架构示意图之二;
图2C为本申请实施例提供的一种可能的网络架构示意图之三;
图3A为本申请实施例提供的一种基于内存使用情况确定节点状态的示意图;
图3B为本申请实施例提供的另一种基于内存使用情况确定节点状态的示意图;
图4为本申请实施例提供的一种数据迁移方法中数据拉取方法所对应的流程示意图;
图5为本申请实施例提供的可拉取节点和不可拉取节点的对比示意图;
图6为本申请实施例提供的另一种数据拉取方法所对应的流程示意图;
图7为本申请实施例提供的一种数据迁移方法中数据回迁方法所对应的流程示意图;
图8为本申请提供的一种存储装置的结构示意图。
具体实施方式
在对本申请实施例提供的一种数据迁移方法进行说明之前,先对本申请实施例涉及的概念进行说明:
1,非易失性内存主机控制器(Non-Volatile Memory Express,NVMe)接口:是一个逻辑设备接口规范,通常基于PCIe总线协议。
2,RDMA(Remote Direct Memory Access):远程直接内存访问是一种绕过远程主机操作系统内核访问其内存中数据的技术,主机的CPU将,有关发送传输的所有内容都卸载到网卡上,由网卡负责数据传输的相关操作,由于不经过操作系统,不仅节省了大量CPU资源,同样也提高了系统吞吐量、降低了系统的网络通信延迟,尤其适合在大规模并行计算机集群中有广泛应用。RDMA通信过程的大致流程如下:
1)注册内存域。
注册内存域是指确定一段专用于RDMA操作的内存空间,该段内存空间的虚拟地址和物理地址的映射关系不再改变,(支持RDMA协议的)智能网卡会建立直通到这段内存的通道,之后,智能网卡便可以在这段内存上寻址,这便是所谓的注册一个内存区域。内存区域注册完毕后,智能网卡便可以使用这段内存来做任何RDMA操作。
2)通过SEND/RECEIVE建立RDMA连接(双边操作)。
RDMA的传输模式有双边操作也有单边操作。SEND/RECEIVE属于双边操作,即需要远端的应用感知参与才能完成收发。READ和WRITE是单边操作,只需要本端明确信息的源和目的地址,远端应用不必感知此次通信,数据的读或存都通过远端的网卡完成,再由远端网卡封装成消息返回到本端。在实际中,SEND/RECEIVE多用于连接控制类报文,而数据报文多是通过READ/WRITE来完成的。
3)通过WRITE/READ操作,进行数据传输(单边操作)。
图1为本申请实施例提供的一种应用场景示意图,该应用场景中示出了空闲节点10和繁忙节点20。
其中,空闲节点10用于向繁忙节点20发送数据拉取请求,该数据拉取请求用于请求繁忙节点将内存数据发送至空间节点10进行存储。繁忙节点20用于在接收到空闲节点10发送的数据拉取请求之后,向空闲节点发送繁忙节点20的内存数据至空闲节点10,由空闲节点10来存储这部分内存数据。这样繁忙节点20可以释放用于存储这部分内存数据的内存空间,从而缓解存储器资源,特别是内存资源不足的问题。
本申请实施例的应用场景有多种,例如,数据存储场景、计算集群场景等。上述空闲节点10和繁忙节点20可以是上述任一场景所适用的系统(或集群)内的多个节点中的其中两个节点。
下面以数据存储场景中所适用的系统架构为例进行说明。图2A为本申请实施例提供的一种存储系统的架构示意图。
如图2A所示,本实施例提供的分布式存储系统包括存储集群。存储集群包括一个或多个服务器(图2A中示出了三个服务器110-130,但本申请不限于三个服务器),各个服务器110之间可以相互通信。应注意,该集群中的任意两个服务器之间可以直接通信(图2A未示出)。服务器是一种既具有计算能力又具有存储能力的设备,如服务器、台式计算机等。示例型的,ARM服务器或者X86服务器都可以作为这里的服务器。图1所示的空闲节点10和繁忙节点20可以图2A所示的存储集群中的两个服务器,如服务器110和服务器120、服务器110和服务器130等,图2A中的服务器的结构可以是相同,如下以服务器110为例,对服务器的结构进行具体介绍。
在硬件上,如图2A所示,服务器110至少包括处理器112、内存113、网卡114、硬盘105和总线106。处理器112、内存113、网卡114和硬盘105通过总线106连接。
其中,处理器112和内存113用于提供计算资源。具体地,处理器112是一个中央处理器(central processing unit,CPU),用于处理来自服务器110外部(如其他服务器110)的数据访问请求,也用于处理服务器110内部生成的请求。示例性的,处理器112接收写数据请求时,会将这些写数据请求中的数据暂时保存在内存113中。当内存113中的数据总量达到一定阈值时,处理器112将内存113中存储的数据发送给硬盘105进行持久化存储。除此之外,处理器112还用于进行数据计算或处理,例如元数据管理、重复数据删除、数据压缩、数据校验、虚拟化存储空间以及地址转换等。图2A中以CPU为例,仅示出了一个CPU112,在实际应用中,处理器112的数量可以有多个,该多个处理器112可以包括多个相同类型的处理器,也可以包括多个不同类型的处理器,例如,多个处理器112包括多个CPU112。又例如,该多个处理器112包括一个或多个CPU以及一个或多个GPU112。再例如,多个处理器112包括一个或多个CPU、一个或多个GPU、以及一个或多个FPGA等等。其中,一个CPU 112又具有一个或多个CPU核。本实施例不对CPU的数量,以及CPU核的数量进行限定。处理器112可以执行本申请的数据迁移方法中的数据拉取方式,以获取其他节点迁出的内存数据,并储存在内存中。
内存113是指与处理器112直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,作为操作系统或其他正在运行中的程序的临时数据存储器。内存包括至少两种存储器,例如内存既可以是随机存取存储器,也可以是只读存储器(Read Only Memory,ROM)。举例来说,随机存取存储器是动态随机存取存储器(Dynamic Random AccessMemory,DRAM),或者存储级存储器(Storage Class Memory,SCM)。DRAM是一种半导体存储器,与大部分随机存取存储器(Random Access Memory,RAM)一样,属于一种易失性存储器(volatile memory)设备。SCM是一种同时结合传统储存装置与存储器特性的复合型储存技术,存储级存储器能够提供比硬盘更快速的读写速度,但运算速度上比DRAM慢,在成本上也比DRAM更为便宜。然而,DRAM和SCM在本实施例中只是示例性的说明,内存还可以包括其他随机存取存储器,例如静态随机存取存储器(Static Random Access Memory,SRAM)等。在后面的描述中,均以DRAM和SCM为例进行说明,但不代表服务器110不包含其他类型的内存存储器。
实际应用中,服务器110中可配置多个内存113,以及不同类型的内存113。本实施例不对内存113的数量和类型进行限定。此外,可对内存113进行配置使其具有保电功能。保电功能是指系统发生掉电又重新上电时,内存113中存储的数据也不会丢失。具有保电功能的内存被称为非易失性存储器。
硬盘105用于提供存储资源,如用于存储数据。与内存不同的是,硬盘读写数据的速度比内存慢,通常用于持久性地存储数据。服务器110的外部还可以挂载一个硬盘框(图2A未示出),在硬盘框中设置多个硬盘。无论哪一种部署方式,这些硬盘都可以视作存储节点20a所包含的硬盘。硬盘可以是磁盘或者其他类型的存储介质,例如固态硬盘(solid-state drive/solid-state disk,SSD)、机械硬盘(hard disk drive,HDD)或者叠瓦式磁记录硬盘等。
网卡114用于与其他设备例如应用服务器、或其他服务器110通信。网卡114可以使用的通信协议有多种,例如TCP/IP、UDP/IP、RDMA等。
总线106包括但不限于:串行高级技术附件(Serial Advanced TechnologyAttachment,SATA)总线、串行连接SCSI(Serial Attached SCSI,SAS)总线、快捷外设互联标准(Peripheral Component Interconnect Express,PCI-E)总线、双数据速率(DoubleData Rate,DDR)总线等。其中,按照数据传输速率,DDR总线高于PCIE总线,PCIE总线高于SAS总线和SATA总线。在一种实施方式,数据传输速率高的总线应用在读写速度也较高的元件中,例如,处理器112与DRAM之间通过DDR总线连接。处理器112与SCM之间通过PCIE总线连接。网卡114可以是具有PCIE接口的网卡,处理器112与网卡114之间可以通过PCIE总线连接。硬盘105可以具有SATA接口或SAS接口,处理器112可以通过SATA总线或SAS总线连接硬盘105。本申请中,硬盘105也可以具有内存接口,例如NVMe接口,NVMe速度比SATA或SAS快得多,具有NVMe接口的硬盘105可以通过PCIe总线直接接入处理器112,这样可以提高硬盘的读写性能。具有内存接口的硬盘105可以被当做内存使用。
图2B为本申请实施例提供的另一种存储系统的架构示意图。
如图2B所示,该存储系统包括计算节点集群和存储节点集群。其中,计算节点集群包括一个或多个计算节点100(图2B中示出了两个计算节点100,但本申请不限于两个计算节点100)。计算节点100是用户侧的一种计算设备,如服务器、台式计算机等。在硬件层面,计算节点100中设置有网卡,还设置有处理器和内存(图2B中未示出)。在软件层面,计算节点100上运行有应用程序(application)101(简称应用)。应用101是对用户呈现的各种应用程序的统称。网卡用于接收由应用101触发的数据访问请求,并且与存储节点20交互,向存储节点20发送所述数据访问请求。网卡还用于接收来自存储节点20的数据,并向应用101转发所述数据。计算节点集群中的任意一个网卡可以访问存储节点集群中的任意一个存储节点20。各个存储节点20之间可以相互通信。应注意,该集群中的任意两个存储节点20之间可以直接通信(图2B未示出)。图1所示的空闲节点10和繁忙节点20可以图2B所示的存储集群其中的两个存储节点20。或者,图1所示的空闲节点10和繁忙节点20可以图2B所示的计算集群其中的两个计算节点100。
与图2A不同之处在于,如图2B所示,各个存储节点20中可以包含不同类型的存储介质,这些不同类型的存储介质均提供内存接口可直接被处理器访问。可选的,这些存储节点所包含的各种类型内存还可以组成一个内存池,被纳入内存池的存储空间会被统一编址,这样,内存池的每段空间都有一个唯一的全局地址,下文会对此进行介绍。
图2C为本申请实施例提供的另一种系统架构示意图。与图2B不同之处在于,如图2C所示,在这种网络架构中,存储节点和计算节点集成在同一个物理设备中,本实施例中将所述集成的设备统一称为存储节点。应用部署在存储节点20内部,所以应用可直接通过存储节点20中的客户端触发写数据请求或读数据请求,由该存储节点20处理,或者发送给其他存储节点20处理。此时,客户端向本地存储节点20发送的读写数据请求具体是指客户端向处理器发送数据访问请求。除此之外,存储节点20所包含的组件及其功能与图2B中的存储节点20类似,这里不再赘述。图1所示的空闲节点10和繁忙节点20可以图2C所示的集群其中的两个存储节点20。
上述图2A~2C所示的系统架构仅是举例,本申请并不限定系统的结构,也不限定系统下每个节点的结构。任何能够提供内存(如DRAM)的设备所构建的集群均使用于本申请实施例。
由上可知,内存是保障CPU正常运行的关键计算资源,如今内存密集型应用越来越广泛,这类应用程序在运行过程中会占用大量内存,服务器可能会出现内存资源不足的问题。在本申请实施例中,服务器可以根据内存使用情况作出不同的调整,从而解决部分节点存储器资源,特别是内存资源不足的问题,提高集群整体的内存使用率。
内存使用情况可以基于一种或多种内存参数衡量,如以内存使用率为例,本申请实施例可以根据内存使用率来界定节点所处的不同状态,并根据不同状态提供不同的调整方法。如图3A和图3B所示,(1)阶段一:当节点为空闲状态时,例如节点的内存使用率低于第一预设值时,可以执行本申请实施例的数据迁移方法中的数据拉取方式,主动拉取其他节点上的内存数据至本地内存,以缓解其他节点的内存需求。(2)阶段二:当节点为繁忙状态时,例如节点的内存使用率不低于第二预设值,其中,第二预设值≥第一预设值(如图3A显示的为第二预设值=第一预设值的情况,图3B显示的为第二预设值>第一预设值的情况),可以执行本申请实施例的数据迁移方法中的数据回迁方式,将节点本地内存中存储的其他节点的内存数据回迁回去,以缓解本节的内存需求,避免本地内存资源不足影响本节点的运行。更进一步地,(3)阶段三:当内存使用率高于第三预设值时,其中,第三预设值大于第二预设值,节点本地可能没有待回迁的数据了,也没有其他空闲状态的节点来主动拉取本节点的内存数据,为避免内存资源不足对本节点内应用的运行产生影响,节点可以将部分内存数据迁移至硬盘中,以释放内存空间,保证密集型应用程序的正常运行,应注意,这里要迁移至硬盘的内存数据为节点自身的数据。
如下依次对上述各阶段进行详细说明,需要说明的是,上述不同阶段中所涉及的方法并非必须集成在同一节点中,任何方法均可以在一个节点中独立的存在,也可以部分方法集成在一个节点中,本申请实施例对此不做限定。
下面以本申请实施例提供的数据迁移方法应用于图2A~图2C所示的系统架构中为例进行说明。如下方法中所提及的节点可以是图2A中的服务器110(或服务器110内部的元件如处理器112),也可以是图2B中存储节点20a(或存储节点20a内部的元件如处理器),也可以是图2B中计算节点100(或计算节点100内部的元件如处理器),也可以是图2C中的存储节点20a(或存储节点20a内部的元件如处理器)。
请参见图4,图4是本申请提供的一种数据迁移方法中数据拉取方式所对应的流程示意图,如图4所示,该方法包括如下步骤:
步骤401,节点基于内存使用情况更新自身的状态信息。
这里节点是指集群中的任意一个节点。例如,在图2A中,节点可以是图2A所示系统中的任一服务器110。又例如,在图2B或2C中,节点为任一一个存储节点20。
其中,节点的内存使用情况可以是基于下列内存参数中的一项或多项确定的:内存使用率、内存空闲率、剩余内存大小、已使用内存大小、总内存大小等等,任何能够表示内存使用情况的内参数均适用于本申请实施例,为便于说明,在下文中均以内存使用率为例予以说明。
节点基于内存使用情况来确定自身的状态,例如,如图3A所示,给定第一预设值=第二预设值=30%,如果内存使用率低于30%时,该节点是空闲状态;如果内存使用率不低于30%,该节点是繁忙状态。又例如,如图3B所示,给定第一预设值=30%,第二预设值=35%,如果内存使用率低于30%时,该节点是空闲状态;如果内存使用率不低于35%,该节点是繁忙状态。其中,内存使用率可以通过调用相关的系统函数来确定,例如,usedRatio=usedQuota/totalQuoat,其中,usedRatio表示内存使用率,usedQuota表示节点上已使用的内存大小,totalQuoat表示节点上总的内存大小。当然,上述确定内存使用率的方式仅为举例,在不同的系统中,可以使用不同的函数,或不同的方法确定内存使用率,本申请实施例对此不做限定。另外,每个节点确定自身状态时所使用的内存参数也可以是不同的,本申请对此也不限定。
集群内的每个节点可以基于上述方式确定自身所处的状态,并更新自身的状态信息,状态信息用于指示节点处于繁忙状态或者空闲状态。
示例性地,节点可以周期性的确定自身所处的状态,例如,每一秒钟检测一次自身的状态,或者每1分钟检测一次自身的状态等等,本申请不限定于周期长度,但可以理解,周期越短则越有利于及时发现内存不足的问题,并及时作出调整,有利于保持系统的稳定性,但是同时对CPU的资源消耗也相对较高。实际应用中,集群内的每个节点都可以周期性的检测自身的状态,每个节点的周期长度可以完全相同也可以不完全相同,另外,每个节点可以是在同一时间同时执行检测的,也可以是在不同时间执行检测的。在不同时间执行检测更有利于减少节点之间的碰撞,例如,多个空闲节点请求向同一个繁忙节点拉取数据。类似的,节点也可以周期性的更新自身的状态信息,更新状态信息的方式将在步骤402进行介绍,此处不做重复说明。
步骤402,多个节点中的第一节点获取其他节点的状态信息,并根据每个节点的状态信息确定各节点的状态。
在本申请中,处于空闲状态的节点可以称为空闲节点,处于繁忙状态的节点可以称为繁忙节点。这里假设第一节点为图1中的空闲节点10,也即第一节点检测到自身处于空闲状态,如下以第一节点为例,对空闲节点10执行数据拉取方式进行介绍。
下面列举几种第一节点获取其他每一节点的状态信息的方式:
获取方式一:通过RDMA协议获取。
接下来对本申请中基于RDMA协议获取状态信息的过程进行介绍:
首先对节点更新状态信息的方式进行介绍,在一种实施方式中(示例一),每个节点具有一段预设内存区域,节点可以将自身的状态信息写入自身的预设内存区域中,该预设内存区域可以是上述节点注册的内存域中的一段指定内存空间。每个节点会将这块用于存储状态信息的预设内存区域的地址通知给其他节点,以方便其他节点可以通过RDMA协议直接获取该节点的状态信息。这里节点之间如何交互各自的预设内存区域的地址的方式不是重点,可以基于现有机制实现,也可以是未来其他交互方式实现,此处不做重点说明。对应的,第一节点可以通过RDMA读请求来获取其他节点的状态信息。
例如,图2A所示的系统,服务器110将自身的状态信息写入第一内存区域,第一内存区域位于服务器110的内存113中。类似的,服务器120将自身的状态信息写入第二内存空间,第二内存区域位于服务器120的内存113中。服务器130将自身的状态信息写入第三内存空间,第三内存区域位于服务器130的内存113中。依此类推。
假设第一节点为服务器110,服务器110通过RDMA协议获取服务器120的状态信息为例,该获取过程可以包括:服务器110的网卡向服务器120的网卡发送RDMA读请求,该RDMA读请求携带第二内存空间的地址,服务器120的网卡将第二内存空间内存储的服务器120的状态信息封装成消息发送给服务器110的网卡,这样服务器110便通过一个RDMA读请求获取了一个节点的状态信息。第一节点可以通过上述方式分别获取其他节点的状态信息,此处不再赘述。应注意,图4中示出了示例一的交互流程,并未示出示例二的交互流程。
在另一种实施方式中(示例二),集群中的每个节点可以周期性的将自身的状态信息写入同一节点的预设内存区域中,该预设内存区域可以是该节点注册的内存域中的一段指定内存空间。该节点也会将这块预设内存区域通知给其他节点,以方便其他节点更新以及获取状态信息。这样第一节点可以通过一个RDMA读请求交互来获取其他多个节点的状态信息。
仍以图2A为例,假设该预设内存区域位于服务器120的内存113中,服务器110可以将服务器110自身的状态信息写入服务器120的该预设内存区域中,类似的,服务器120将服务器120自身的状态信息写入服务器120的该预设内存空间,服务器130将服务器130自身的状态信息也写入服务器120的该预设内存区域中,依此类推。应理解,虽然都称为预设内存区域,但示例二和示例一中预设内存区域的大小和位置可以是不同的,显然,由于可以存储多个节点的状态信息,示例二中服务器120的预设内存区域较大。
服务器110的网卡向服务器120的网卡发送RDMA读请求,该RDMA读请求携带目标内存空间的地址,服务器120将目标内存空间内存储的所有服务器的状态信息发送给服务器110。
上述方式,第一节点可以通过RDMA协议直接获取其他节点的状态信息,可以降低网络传输时延,同时降低多个节点的CPU开销。
获取方式二:通过除RDMA协议之外的通信协议获取。
与获取方式一不同之处在于,第一节点可以使用除RDMA协议之外的其他通信协议,如TCP/IP协议来获取其他节点的状态信息。示例性地,类似于上述示例一,节点A向节点B发送读数据请求,该读数据请求用于请求读取节点B的状态信息。对应的,节点B接收节点A发送的读数据请求,之后,节点B将自身的状态信息发送给节点A。与RDMA协议不同之处包括:节点B的网卡接收到读数据请求后,将该读数据请求发送给节点B的处理器处理,因此,相对于RDMA协议,该获取方式二节点的CPU开销会较大一些。再示例性地,类似于上述示例二,每个节点也可以将自身的状态信息写入同一个节点,然后可以通过该同一个节点来获取其他多个节点的状态信息,区域在于,使用除RDMA协议之外的其他通信协议进行节点之间的交互。
当然,如果使用RDMA协议之外的通信方式来获取其他节点的状态信息,则预设内存区域不限定于注册的内存域。
上述方式,节点不需要具有特定的硬盘(例如支持RDMA操作的智能网卡),适用范围广。
上述节点更新的状态信息可以有多种类型,示例性地,状态信息可以是用于指示节点是空闲状态还是繁忙状态的指示信息,例如,该状态信息包括1比特,该1比特的值为0时,表示该节点处于空闲状态,该1比特的值为1时,表示该节点处于繁忙状态。也就是说,节点在更新自身的状态信息时,可以通过修改状态信息的值来指示其处于不同的状态。
再示例性地,该状态信息还可以不直接指示节点的状态,而是包括可用于计算节点状态的内存参数,例如,内存使用率、内存空闲率、剩余内存大小、已使用内存大小、总的内存大小等等中的一项或多项,通过节点的内存参数来反应该节点的内存使用情况。应理解的是,如果节点更新的为自身的内存参数,则同一集群内的各节点基于内存参数确定节点状态的方法可以是相同的也可以是不同的,本申请对此不做限定。
第一节点可以通过上述任一获取方式获取其他节点的状态信息,这里的其他节点可以是集群中的除第一节点之外的全部节点,或者也可以是集群中除第一节点之外的部分节点。示例性地,这部分节点也可以是第一节点随机选择的预设数量的一个或多个节点。再示例性地,这部分节点可以是第一节点对应的一个或多个固定的节点。例如,假设以节点为粒度将系统划分为多个组,每个组可以包括多个节点,第一节点对应的一个或多个固定的节点可以是与第一节点同一组的节点,这样同一个组内的节点之间可以获取对方的状态信息,例如,假设图2A的系统包括服务器110、服务器120、服务器130、服务器140、服务器150、服务器160,其中,服务器110~服务器130为组一,服务器140~服务器160为组二。以组一为例,服务器110可以分别获取服务器120的状态信息、服务器130的状态信息。同理,组一内的其他服务器也可以分别获取同一组内的其他服务器的状态信息。同理,组二内的服务器也可以分别获取组二内其他服务器的状态信息,如服务器140可以获取服务器150的状态信息、服务器160的状态信息。上述仅列举几个服务器以保持简洁,实际上要给分组内可以有更多服务器,以减少节点之间的碰撞。再例如,第一节点所对应的一个或多个固定的节点还可以是与第一节点处于同一机架(rack)的节点,等等。
上述方式,由于同一系统中,不同的节点所对应的预设节点可能是不同的,因此,可以减少节点之间的碰撞,如多个空闲节点向同一个繁忙节点请求拉取数据。另外,由于节点不需要获取集群中全部节点的状态信息,可以节省CPU资源。
在一种可选的方式中,节点还可以具有指示信息,该指示信息用于指示节点是否正在执行数据拉取流程。第一节点可以根据指示信息确定进一步需要获取状态信息的节点。例如,以第二节点为例,如果指示信息指示第二节点正在执行数据拉取方式相关的操作,如第二节点在向其他节点拉取数据,或者第二节点正在被其他节点拉取数据,则第一节点可以不获取该第二节点的状态信息。或者,如果该指示信息指示第二节点未执行数据拉取方式相关的操作,则第一节点可以获取该第二节点的状态信息。该指示信息可以包括1个比特,通过该1个比特的不同值来指示节点是否正在执行数据拉取的相关操作。上述方式,可以避免第一节点拉取正在执行数据拉取相关操作的节点的状态信息,在状态信息包括内存参数时,可以节省网络开销。
步骤403,第一节点根据其他节点的状态信息,在繁忙节点中选择一个节点(如第二节点)。
第一节点可以在一个或多个繁忙节点中选择至少一个第二节点,来拉取该至少一个第二节点上的内存数据。如下以一个第二节点为例,对第一节点选择第二节点的几种选择方式进行介绍:
选择方式一:若状态信息包括内存参数,则第一节点可以基于各节点的内存参数选择第二节点。
假设在步骤402中,第一节点获取的其他每一节点的状态信息包括节点的内存参数,例如内存使用率,在一种实施例方式中,第一节点可以根据各节点的内存使用率,将该多个节点划分为可拉取节点和不可拉取节点,后续,第一节点可以在可拉取节点中选择第二节点。应理解,实际上,任何一个节点都可以被拉取数据,这里“可拉取节点”、“不可拉取节点”仅示意本申请提供的一种确定第二节点的选择范围的方式,在本申请中,在这种选择范围下选择的第二节点,得到的收益可能是较好的。
示例性地,请结合图3A和图5理解,1)如果节点的内存使用率低于T1,说明该节点为空闲节点,选择该节点来拉取数据的收益较低,则将该节点归为不可拉取节点。2)如果节点的内存使用率高于T2,如前所述,该节点自身可能会执行内存的换出操作,以将内存数据迁移至硬盘,因此,也可以将该类节点归为不可拉取节点。3)如果节点的内存使用率不低于T1,且不高于T2,该节点处于等待其他节点来拉取数据的阶段,拉取该节点的收益较高,可以将该节点归为可拉取节点。应理解的是,可拉取节点实际上也是繁忙节点。需要说明的是,上述划分可拉取节点和不可取节点的方式仅为举例,本申请实施例对此不做限定。
在确定了可拉取节点之后,如果确定出的可拉取节点只有1个,则该1个可拉取节点即为第二节点。如果可拉取节点有多个,则第一节点可以在多个可拉取节点之间选择一个第二节点。在一种选择方式中,第一节点可以首先在该多个可拉取节点中通过随机选择等方式选择至少两个可拉取节点。之后在选择出的该至少两个可拉取节点中,再按照预设条件或随机选择等方式选择一个作为第二节点,例如,第一节点可以选择该至少两个可拉取节点中被第一节点拉取过的数据的数据量较少的作为第二节点。
举例来说,假设系统中节点1、节点2、节点3、节点4均为可拉取节点,第一节点可以在该多个可拉取节点中随机选择两个节点,如节点2和节点4。之后,第一节点可以在节点2和节点4中,选择被第一节点拉取过的数据的数据量较少的节点作为第二节点。例如,第一节点未拉取过节点2的数据,第一节点拉取过节点4的数据,则第一节点可以选择节点2作为第二节点。又例如,第一节点分别拉取过节点2和节点4的数据,且第一节点拉取节点2的数据的数据量大于第一节点拉取节点4的数据的数据量,则第一节点选择节点4作为第二节点。又例如,第一节点均未拉取过节点2和节点4的数据,或第一节点拉取节点2和拉取节点4的数据的数据量相等,则第一节点可以从节点2和节点4中随机选择一个作为第二节点。
上述方式,由于同一集群中的多个空闲节点面对的可拉取节点可能是相同的,因此,通过随机选择至少两个节点的方式可以减少多个空闲节点同时选中同一个节点作为第二节点的碰撞,更进一步的,在至少两个节点之间选择一个拉取过数据的数据量较少的节点作为第二节点,可以避免第一节点上拉取同一个节点较多的数据,这是由于如果第一节点存储同一个节点较多的数据,则可能由于第一节点自身故障而对这个节点的数据恢复产生较大的影响,如节点无法及时从第一节点回迁数据,甚至还可能导致这部分数据丢失。
选择方式二:在繁忙节点中选择一个作为第二节点。
不论步骤402中的状态信息是用于直接指示节点状态的信息还是内存参数,第一节点均可以基于节点的状态信息确定出节点状态。与选择方式一的区别在于,这里不再区分繁忙节点是可拉取节点还是不可取节点,第一节点在通过步骤402确定出其他各节点的状态之后,可以在确定出的多个繁忙节点中选择第二节点,例如,随机选择一个节点作为第二节点,或选择被第一节点拉取过的数据的数据量最少的节点作为第二节点,或者与选择方式一类似的,在多个繁忙节点中先随机选择至少两个繁忙节点,然后再在该至少两个繁忙节点中再选择一个作为第二节点,这种方式为内存使用率高于第二预设值的繁忙节点也提供了被拉取数据的机会,以此缓解这类节点的内存需求。
本申请所提供的选择第二节点(即将被拉取数据的节点)的方式是一种去中心化的方式,通过上述设计,集群内的每个节点都可以自行判断和决策来选择节点进行数据拉取,因此,当集群中任一节点出现故障时不会影响集群中其他节点的数据拉取操作,这对于集群的扩容和缩容没有影响,使得集群具有良好的可扩展性。
步骤404,第一节点向第二节点发送拉取连接请求。对应的,第二节点接收第一节点发送的拉取连接请求。
该拉取连接请求用于请求第二节点将第二节点上存储的数据发送至第一节点,这里的数据可以是第二节点上的任何数据,例如内存数据或硬盘中存储的数据,由于之前是根据第二节点的内存使用情况触发的拉取连接请求,因此,这里以拉取的数据是内存数据为例予以说明。区别于读数据请求所获取的数据,这里第一节点并不需要对第二节点发送的数据进行处理,可以理解第一节点帮助第二节点暂时存储这部分数据,以缓解第二节点的内存需求。
示例性地,该拉取连接请求包括但不限于:第一节点上空闲的内存空间(如称为第一内存空间)的地址。空闲的内存空间即未存储数据的内存空间。该第一内存空间将用于存储第二节点迁出的内存数据(如称为目标数据)。这里第一节点将第一内存空间的地址发送给第二节点是为了方便第二节点在将目标数据迁移至第一节点时,根据该第一内存空间的地址更新该目标数据的元数据。这样,当第二节点需要迁回该目标数据时,可以根据第一内存空间的地址将该目标数据再迁回至第二节点。当第二节点的目标数据存储在第一节点时,第一节点为该目标数据的宿主数据,第二节点为该目标数据的源数据。
在一种实施方式中,第一节点每次拉取过来的数据的大小可以是固定的,也就是说,第一节点在每个拉取连接请求中所指示的内存空间的大小是固定的预设值,例如,该内存空间为至少一个内存页,该内存页可以是逻辑页如4K大小或8K大小,也可以是一个物理页,或者其他预设值,本申请实施例对此不做限定。如下以该内存空间的大小为一个内存页为例进行说明。示例性地,该第一内存空间可以是第一节点的内存中的一个空闲的内存页,或者,第一内存空间还可以是第一节点上注册的内存域中一个空闲的内存页。
其中,拉取连接请求中携带的第一内存空间的地址,可以是该第一内存空间在第一节点本地内存中的虚拟地址(也是第一内存空间在本地内存中的全局地址),或者是该第一内存空间在内存池中的全局地址。例如,基于系统中多个节点的内存构建有内存池,每个节点上的每一段内存空间在该内存池中具有全局地址,所谓全局地址是指,它所指示的空间在内存池中是唯一的,并且系统中每个节点都知道该地址的含义。需要说明的是,除内存空间的地址之外,本申请中的拉取连接请求还可以包括其他信息,例如还可以包括节点标识,用于唯一标识系统内的一个节点,本申请实施例对用于表示第一内存空间地址的形式不做限定。
上文介绍了拉取连接请求的具体内容和生成方式。
之后,第一节点将生成的拉取连接请求发送至第二节点,对应的,第二节点接收第一节点的拉取连接请求。值得注意的是,在一种可能的情况中,除了接收到第一节点发送的拉取连接请求之后,第二节点还可能接收到来自其他节点发送的拉取连接请求,在这种情况下,第二节点可以在接收到的多个拉取连接请求中选择一个进行响应,例如,按照接收的时间顺序,选择首先接收到的拉取连接请求进行响应。又例如,还可以选择拉取第二节点的数据的数据量较少的节点进行响应,举例来说,第二节点接收到节点A的拉取连接请求和节点B的拉取连接请求,其中,节点A拉取过第二节点的8KB内存数据,节点B拉取过第二节点的4KB内存数据,则第二节点可以选择拉取自身的数据的数据量少的节点B进行响应,这样,第二节点的数据可以均衡存储在不同的节点上,减轻节点故障对第二节点的影响。这里假设第二节点仅接收到第一节点发送的拉取连接请求或假设第二节点选择第一节点进行响应(具体参见步骤405)。
步骤405,第二节点确定待迁出的数据(如称为目标数据)。
第一节点和第二节点上可能具有一种或多种性能的内存存储器,本申请中的存储器的性能主要从运算速度和/或访问时延等方面进行考量。例如,前述的内存存储器包括但不限于DRAM、SCM等。其中DRAM的性能高于SCM的性能。
为便于说明,将第一节点的内存存储器称为第一存储器,将第二节点的内存存储器称为第二存储器,第一存储器和第二存储器可以是相同性能的存储器,也可以是不同性能的存储器。例如,第一存储器为DRAM,第二存储器也为DRAM。又如第一存储器为DRAM,第二存储器为SCM。可以理解的是,由于第一节点为空闲节点,因此,第一节点上还存在较多空闲的DRAM,可以认为第一存储器为第一节点上的DRAM。
本申请中,对于不同性能的内存存储器,选择目标数据的方式也有多种,如下以DRAM和SCM为例对第二节点确定目标数据的方式进行介绍。
确定方式一:第二存储器的性能不低于第一存储器。
例如第一存储器为DRAM,第二存储器为DRAM。第二节点可以选择自身的DRAM(第二存储器)中热度值相对较低的数据作为目标数据。
示例性地,第二节点可以以内存页为粒度确定DRAM中每个内存页的热度值,该热度值可以是,第二节点统计的该内存页的被访问次数,或者是该内存页在一段时间内的被访问次数,或者是根据该内存页的被访问时间和被访问次数计算确定的热度值等等,本申请实施例并不限定于计算数据热度值的方法。应理解的是,DRAM中每个内存页的热度值可以是在第一节点在运行过程中统计的,例如,DRAM每接收到一个DRAM内存页的读请求,则将该内存页的被访问次数加1,在需要确定目标数据时,目标节点可以直接获取该内存页的被访问次数。之后,第二节点根据DRAM中每个内存页的热度值选择DRAM中热度值较低的内存页所包含的数据作为目标数据,之后,便可以将目标数据从DRAM中迁出,从而释放DRAM的这部分内存空间。
需要说明的是,由于第一内存空间的大小可以是一个内存页,因此,第二节点也可以以内存页为粒度来统计数据的热度值,然而这里以内存页为粒度来统计热度值仅为举例,实际上,还可以是其他粒度来统计,本申请实施例对此不做限定,但确定的目标数据的大小应与第一内存空间的大小相匹配,下文类似之处不再重复说明。
上述方式,由于DRAM的性能较高,第二节点将DRAM中热度值较低的数据迁出至第一节点的DRAM,在缓解第二节点的内存需求的基础上,还可以提高第二节点本地的DRAM的命中率和使用率。另外,由于远端DRAM的读取速度一般也会高于本地的SCM或硬盘等的读取速度,相对于将第二节点的DRAM中热度值较低的数据迁移至第二节点本地性能较低的存储器这种方式,因此,第二节点将DRAM中的数据迁出至第一节点的DRAM中,还能够获取较快的读写速度,减少了对第二节点的性能的影响。
确定方式二:第二存储器的性能低于第一存储器。
例如第一存储器为DRAM,第二存储器为SCM,在一种实施方式中,第二节点可以选择SCM中热度值较高的数据作为目标数据。例如,第二节点可以以内存页为粒度确定SCM中每个内存页的热度值,确定热度值的方式可以参见上述确定DRAM中每个内存页的热度值的介绍,此处不再赘述。之后,第二节点根据SCM中每个内存页的热度值选择SCM中热度值较低的内存页所包含的数据作为目标数据。
在另一种实施方式中,第二节点可以预测SCM中将要被读取的数据,并将这部分数据作为目标数据。例如,第二节点接收到用户通过应用服务器发送的读数据请求,该读数据请求用于请求读取内存数据A,则第二节点可以基于内存数据A预测接下来将会被读取的内存数据,例如位于内存数据A之后的内存数据B,第二节点将数据B作为目标数据。应注意,本申请实施例对预测算法不做限定,任何可以预测将被访问的数据的方式都适用于本申请实施例。
应理解的是,对于第二节点而言,将数据存储在远端的第一节点的DRAM中的读写速度可能还要高于将数据存储在第二节点本地SCM中,因此,通过上述设计,可以在缓解第二节点的内存需求的基础上,提高第二节点的读写性能。
步骤406,第二节点向第一节点发送拉取连接响应。对应的,第一节点接收第二节点发送的拉取连接响应。
该拉取连接响应,用于指示第二节点接受第一节点的拉取连接请求,示例性地,该拉取连接响应包括但不限于:第二节点确定的待从第二节点内存中迁出的数据。
第二节点确定目标数据之后,可以将目标数据的地址承载于该拉取连接响应中发送给第一节点,以通知第一节点可以根据目标数据的地址向第二节点拉取目标数据。需要说明的是,除了目标数据的地址之外,本申请中的拉取连接响应还可以包括其他信息,例如,第二节点的节点标识,第一内存空间的地址、目标数据的长度等中的一项或多项,本申请实施例对此不做限定。
值得注意的是,这里的拉取连接请求和拉取连接响应也可以通过RDMA协议传输,或使用RDMA协议之外的其他通信协议传输。如果第一节点在执行步骤404之前,与第二节点未建立RDMA连接,则拉取连接请求和拉取连接响应除具有上述介绍的功能之外,第一节点和第二节点还可以通过拉取连接请求和拉取连接响应建立RDMA连接。当然,第一节点和第二节点也可以在步骤404之前已建立RDMA连接,如果第一节点和第二节点不使用RDMA协议进行数据拉取,则不需要建立RDMA连接,本申请实施例对此不做限定。
步骤407,第一节点生成数据拉取请求。
该读数据请求用于拉取目标数据。在一种可实施的方式中,第一节点接收第二节点的拉取连接响应之后,可以立即生成数据拉取请求并触发数据拉取。通过这种设计,可以及时缓解第二节点的内存需求,提高集群内存使用率。
在另一种可实施的方式中,第一节点也可以将接收到的拉取连接响应缓存下来,之后,可以针对缓存的同一个节点的多个拉取连接响应所对应的多个数据拉取请求合并为一个数据拉取请求,以减少生成以及传输的读IO数量。例如,第一节点在1:01接收到第二节点的拉取连接响应1,该拉取连接响应1携带内存数据1的地址,第一节点缓存该拉取连接响应1;之后,第一节点在1:02接收到第二节点的拉取连接响应2,该拉取连接响应2携带内存数据2的地址,第一节点缓存该拉取连接响应2;再之后,第一节点在1:03接收到第二节点的拉取连接响应3,该拉取连接响应3携带内存数据3的地址,第一节点可以基于拉取连接响应1、拉取连接响应2和拉取连接响应3生成一个数据拉取请求,该数据拉取请求用于携带内存数据1的地址、内存数据2的地址以及内存数据3的地址,从而减少第一节点与第二节点之间数据拉取的交互次数,可以节省CPU的资源。
步骤408,第一节点判断基于数据拉取请求将待拉取数据拉取至本地内存之后,第一节是否变为繁忙状态,如果不是,则执行步骤408;如果是,则缓存该数据拉取请求并退出该流程。
需要说明的是,步骤408并非为必须执行的步骤,因此,图4中以虚线框示出。
上述方式,可以避免第一节点在空闲状态和频繁状态之间频繁振荡,同时,避免第一节点自身的内存资源不足的问题。
步骤409,第一节点向第二节点发送数据拉取请求。对应的,第二节点接收第一节点发送的数据拉取请求。
步骤410,第二节点响应于数据拉取请求将目标数据发送给第一节点。对应的,第一节点接收第二节点发送的目标数据,并将目标数据存储在第一内存空间中。
如下结合步骤409和步骤410,对这两个步骤的实施方式进行介绍。其中,数据拉取请求包括但不限于:目标数据的地址。示例性地,该目标数据的地址可以包括该目标数据的起始地址和数据长度。
在一种可实施的方式中,第一节点通过RDMA协议获取目标数据,例如,在步骤408中,第一节点的网卡向第二节点发送RDMA读请求。其中,该RMDA读请求中携带目标数据的地址。对应的,第二节点的网卡接收该RDMA读请求。在步骤409中,第二节点的网卡响应于该RDMA读请求,根据该目标数据的地址,从目标内存空间中获取该目标数据,并将该目标数据封装成消息发送给第一节点。对应的,第一节点的网卡接收该目标数据,并将该目标数据写入第一内存空间。上述拉取连接请求和拉取连接响应也可以是用于建立第一节点和第二节点之间的RDMA连接的SEND消息和RECEIVE消息。在建立了RDMA连接之后,第一节点便通过RDMA的单边READ操作来获取第二节点的目标数据。上文介绍了通过RDMA读请求来获取目标数据的流程,下文将通过RDMA写请求来获取目标数据的流程(参见步骤606)。
上述方式,第一节点在确定自身处于空闲状态之后,在繁忙节点中选择一个第二节点,之后,第一节点通过上述方式主动将第二节点中的数据拉取至第一节点的内存中进行存储,缓解了第二节点的内存需求,同时,相对于繁忙节点寻找可用内存资源的方式,减轻了繁忙节点CPU的工作负担。提高了集群整体的内存使用率和计算资源使用率。更进一步地,通过RDMA协议进行数据迁移的方式,降低了两个节点上的CPU开销,同时降低了网络通信的延迟。
在另一种可实施的方式中,第一节点通过除RDMA协议之外的其他通信协议获取目标数据,例如,使用TCP/IP协议来交互目标数据。上述方式,不需要第一节点、第二节点具有特定的硬件(如支持RDMA协议的智能网卡),因此适用范围更广。
第二节点将目标数据迁出至第一节点之后,可以根据第一内存空间的地址来更新目标数据的元数据。如将目标数据的存储地址修改为第一内存空间的地址。应理解,第二节点本地也记录有该目标数据的元数据,以用于根据该元数据回迁该目标数据。
另外,第一节点接收到目标数据,将目标数据存储至第一内存空间之后,也可以生成该目标数据的元数据,该元数据用于描述该目标数据,例如,该元数据包括但不限于下列中的一项或多项:目标数据的存储地址(如第一内存空间的虚拟地址、物理地址)、是否为拉取过来的数据、数据来源(即数据的源节点,如第二节点的节点标识)、拉取时间、数据量大小等等。后续,第一数据可以根据元数据来确定是否向某节点拉取过数据,以及拉取过来的数据的数据量大小等。
图6为本申请实施例提供的另一种数据迁移方法所对应的流程示意图,其中,步骤601至步骤606分别与步骤401至步骤406相同,此处不再赘述。以下仅就不同之处进行说明。
步骤607,第二节点向第一节点发送RDMA写请求。对应的,第一节点接收第二节点发送的RDMA写请求。
建立了RDMA连接之后,第二节点也通过RDMA的单边WRITE操作将第二节点的目标数据写入第一节点。示例性地,第二节点的网卡将RDMA写请求发送给第一节点,该RDMA写请求中可以携带第一内存空间的地址和/或目标数据的地址以及目标数据。对应的,第一节点的网卡接收该RDMA写请求,并将目标数据写入第一内存空间。之后,第一节点、第二节点分别更新该目标数据的元数据,具体请参见上述步骤409中的相关描述,此处不再赘述。
上述方式,第一节点在确定自身处于空闲状态之后,在繁忙节点中选择一个第二节点,之后,第一节点主动拉取第二节点的内存数据,第二节点将内存中的目标数据迁出至第一节点,缓解了第二节点的内存需求,同时,相对于繁忙节点寻找可用内存资源的方式,减轻了繁忙节点CPU的工作负担,提高了集群整体的内存使用率和计算资源使用率。更进一步地,通过RDMA写请求进行数据迁移的方式,降低了两个节点上的CPU开销,同时降低了网络通信的延迟。其中,RDMA写请求与RDMA读请求相比,即相对于图5所示的方式,图6所示方式可以减少第一节点用于调度网卡生成RDMA读请求的CPU开销,但增加了第二节点上用于调度网卡生成RDMA写请求的CPU开销,但可以减少一条消息交互,提高了第一节点写入目标数据的效率。
上文介绍阶段一空闲节点拉取繁忙节点内存数据的流程,如下对阶段二数据回迁的流程进行介绍。
参见图7,图7为本申请实施例提供的数据回迁的方法所对应的流程示意图。如图7所示,该方法包括如下步骤:
步骤701,第一节点根据内存使用情况触发数据回迁。
第一节点基于内存使用情况判断是否满足数据回迁条件,如当内存资源不足时可以触发数据回迁,例如,当内存使用率不低于第二预设值,且不高于第三预设值,为了避免内存不足,第一节点可以触发数据回迁,以释放内存空间,保证应用程序可以更流畅地运行。需要说明的是,上述触数据回迁的条件仅是举例,本申请实施例对此不做限定,例如,触发数据回迁的条件还可以是内存使用率不低于第二预设值等。
在一种可选的方式中,在确定满足数据回迁条件之后,第一节点还可以继续判断执行一次数据回迁之后,第一节点是否变为空闲状态,如果是,则不触发数据回迁;否则,触发数据回迁。这样,避免第一节点在空闲状态和繁忙状态之间频繁切换。
步骤702,第一节点选择待回迁数据。
第一节点可能存储有多个来自其他节点的数据,这里的数据是指第一节点暂时替其他节点存储的数据,如第一节点通过图4或图6所示方法从其他节点拉取过来的数据,或其他节点主动迁出至第一节点的数据。当确定触发数据回迁时,第一节点可以从这部分数据中选择待回迁数据,选择策略有多种,例如第一节点可以按照数据的热度值,选择热度值较高的数据进行回迁。又例如,第一节点可以按照所存储的每个节点的数据的数据量,选择数据量较大的数据进行回迁,举例来说,第一节点拉取了节点A的8K数据,拉取了节点B的16K数据,则第一节点可以选择节点B的数据进行回迁。当然,本申请实施例对选择待回迁数据的方法不做限定,例如第一节点还可以随机选择待回迁数据。
与数据拉取操作类似,第一节点每次回迁的数据的大小也可以是固定的,例如,以内存页为粒度,每次回迁一个或多个内存页,也即每个待回迁数据为至少一个内存页,具体大小可以是预设值。或者,每次回迁的数据的大小也可以是不固定的,本申请实施例对此不做限定。
应理解,第一节点选择待回迁数据的同时,也就是选择了待回迁的节点,即待回迁数据的源节点,如下将待回迁数据的源节点为第二节点为例进行说明。
步骤703,第一节点向第二节点发送数据回迁请求。对应的,第二节点接收第一节点发送的数据回迁请求。
数据回迁请求,用于请求将第一节点上的待回迁数据回迁至该第二节点。示例性地,该数据回迁请求包括但不限于:该待回迁数据的地址,该地址为第一节点上存储该待回迁数据的内存空间的地址。需要说明的是,该数据回迁请求还可能包括其他的信息,如第一节点的节点标识、待回迁数据的大小等等,本申请实施例对此不做限定。
步骤704,第二节点向第一节点发送数据回迁响应。对应的,第一节点接收第二节点发送的数据回迁响应。
数据回迁响应,用于指示第一节点将数据回迁至第二节点。示例性地,该数据回迁响应包括但不限于:第二节点准备的用于存储该待回迁数据的内存空间(如称为第二内存空间)的地址(如称为第二内存地址)。该第二内存空间可以是第二节点的任意一段空闲的内存,也可以是注册的内存域中的一段空闲的内存空间。需要说明的是,该数据回迁请求还可能包括其他的信息,例如第二节点的节点标识等,本申请实施例对此不做限定。
值得注意的是,这里的数据回迁请求和数据回迁响应也可以通过RDMA协议传输,或使用RDMA协议之外的其他通信协议传输。如果第一节点在执行步骤703之前,与第二节点未建立RDMA连接,则数据回迁请求和数据回迁响应除具有上述介绍的功能之外,第一节点和第二节点还可以通过拉取连接请求和拉取连接响应建立RDMA连接。当然,第一节点和第二节点也可以在步骤703之前已建立RDMA连接,例如,该第二节点为图4中的第二节点,则在图4所示流程中若第一节点与第二节点已建立RDMA连接,则此流程中可以不重复建立RDMA连接。另外,如果第一节点和第二节点不使用RDMA协议进行数据回迁,则不需要建立RDMA连接,本申请实施例对此不做限定。
后续有两种迁移方式,分别为第一节点主动将待回迁数据迁移至第二节点(参见步骤705a-步骤706a),另一种方式为第二节点主动向第一节点获取该待回迁数据(参见步骤705b-步骤707b)。
步骤705a,第一节点向第二节点发送写数据请求。对应的,第二节点接收第一节点发送的写数据请求。
该写数据请求包括该待回迁数据,需要说明的是,该写数据请求还可能包括其他的信息,例如,还可以包括第二内存地址,本申请实施例对此不做限定。
具体的,第一节点可以通过RDMA协议发送该写数据请求,也可以通过其他通信协议例如TCP/IP协议发送该写数据请求。例如,第一节点的网卡向第二节点发送RDMA写请求,该RDMA写请求中可以携带该待回迁数据和第二内存地址。对应的,第二节点的网卡接收第一节点发送的RDMA写请求,并将该RDMA写请求中携带的数据存储至第二内存地址所指示的第二内存空间。
步骤706a,第二节点将写数据请求中携带的数据写入第二内存空间。
步骤705b,第二节点的网卡向第一节点发送RDMA读请求。对应的,第一节点的网卡接收第二节点发送的RDMA读请求。
该RDMA读请求,用于读取该待回迁数据。示例性地,该RDMA读请求包括但不限于:该待回迁数据的地址。该地址是从第一节点发送给第二节点的数据回迁请求中获取的。
步骤706b,第一节点的网卡将待回迁数据封装成消息发送给第二节点。对应的,第二节点的网卡接收第一节点的网卡发送的数据(即第一节点发送的待回迁数据),并将该数据存储在第二内存空间中。
第一节点的网卡接收该RDMA读请求之后,根据该待回迁数据的地址从内存中获取该待回迁数据,并将该待回迁数据封装成消息发送给第二节点。对应的,第二节点的网卡接收该待回迁数据,并将该待回迁数据存储至目标内存中(步骤707b)。
上述方式,可以在节点处于繁忙状态时,通过将拉取过来的其他节点的数据迁移回源节点处,从而减轻繁忙节点的内存负担。同时,通过RDMA协议进行数据回迁还可以节省两端节点的CPU开销。
需要说明的是,本申请实施例第一节点确定的第一内存空间,以及第二节点确定的第二内存空间均是连续的,这里的连续是指虚拟地址连续,物理地址可以连续也可以不连续。
基于与方法实施例相同的构思,本申请实施例还提供了一种存储装置,该存储装置用于执行上述方法实施例中第一节点或第二节点所执行的方法。如图8所示,该存储装置800包括发送模块801、接收模块802。可选的,还包括获取模块803(由于该模块是可选的模型,因此图8中以虚线框示出)。具体地,在存储装置800中,各模块之间通过通信通路建立连接。
在一个实施例中,该存储装置用于实现上述方法实施例中第一节点执行的方法。
发送模块801,用于向所述第二存储装置发送数据拉取请求,所述数据拉取请求用于请求所述第二存储装置将所述第二存储装置中存储的数据发送至所述第一存储装置;所述第一存储装置处于空闲状态,所述第二存储装置处于繁忙状态,所述空闲状态是基于所述第一存储装置的第一存储器的使用情况确定的,所述繁忙状态是基于所述第二存储装置的第二存储器的使用情况确定的;具体实现方式请参见图4中的步骤409的描述,或参见图6中步骤604的描述,此处不再赘述。
接收模块802,用于接收来自所述第二存储装置的所述第二存储器中存储的目标数据。具体实现方式请参见图4中的步骤410的描述,或参见图6中步骤607的描述,此处不再赘述。
在一个可能的设计中,第一存储器与第二存储器都属于高性能存储器,目标数据的访问频率低于第二存储器中存储的其他数据中的至少一部分数据的访问频率。具体实现方式请参见图4中的步骤405的描述,或参见图6中步骤605的描述,此处不再赘述。
在一个可能的设计中,第一存储器的读写性能高于第二存储器的读写性能,目标数据的访问频率高于第二存储器中存储的其他数据中的至少一部分数据的访问频率,或者,目标数据是第二节点预测出的将要被读取的数据。具体实现方式请参见图4中的步骤405的描述,或参见图6中步骤605的描述,此处不再赘述。
在一个可能的设计中,获取模块803,用于获取第二存储装置的状态信息,状态信息用于指示第二存储装置处于繁忙状态或者空闲状态。具体实现方式请参见图4中的步骤402的描述,或参见图6中步骤602的描述,此处不再赘述。
在一个可能的设计中,发送模块801具体用于,基于RDMA协议向第二存储装置发送读请求,以获取第二存储装置的状态信息。具体实现方式请参见图4中的步骤402的描述,或参见图6中步骤602的描述,此处不再赘述。
在一个可能的设计中,该分布式存储系统还包括处于繁忙状态的其他存储装置;第二存储装置被第一存储装置拉取过的数据的数据量小于其他存储装置被第一存储装置拉取过的数据的数据量。具体实现方式请参见图4中的步骤403的描述,或参见图6中步骤603的描述,此处不再赘述。
在一个可能的设计中,发送模块801在向第二存储装置发送数据拉取请求之前,还用于向第二存储装置发送第一信息,该第一信息包括第一存储装置的第一存储器中空闲的存储空间的地址信息;具体实现方式请参见图4中的步骤404的描述,或参见图6中步骤604的描述,此处不再赘述。接收模块802,还用于接收第二存储装置发送的目标数据的地址信息。在一个可能的设计中,数据拉取请求包含该目标数据的地址信息。具体实现方式请参见图4中的步骤406的描述,此处不再赘述。
在另一个实施例中,该存储装置用于实现上述方法实施例中第二节点执行的方法。
接收模块802,用于接收第一存储装置发送的数据拉取请求,该数据拉取请求用于请求第二存储装置将第二存储装置中存储的数据发送至第一存储装置;其中,第一存储装置处于空闲状态,第二存储装置处于繁忙状态,空闲状态是基于第一存储装置的第一存储器的使用情况确定的,繁忙状态是基于第二存储装置的第二存储器的使用情况确定的;具体实现方式请参见图4中的步骤409的描述,或参见图6中步骤604的描述,此处不再赘述。发送模块801,用于基于数据拉取请求,将第二节点的第二存储器中存储的目标数据发送给第一存储装置。具体实现方式请参见图4中的步骤406的描述,此处不再赘述。
在一个可能的设计中,第一存储器与第二存储器都属于高性能存储器,目标数据的访问频率低于第二存储器中存储的其他数据中的至少一部分数据的访问频率。具体实现方式请参见图4中的步骤405的描述,或参见图6中步骤605的描述,此处不再赘述。
在一个可能的设计中,第一存储器的读写性能高于第二存储器的读写性能,目标数据的访问频率高于第二存储器中存储的其他数据中的至少一部分数据的访问频率,或者,目标数据是第二节点预测出的将要被读取的数据。具体实现方式请参见图4中的步骤405的描述,或参见图6中步骤605的描述,此处不再赘述。
在一个可能的设计中,接收模块802在接收到第一存储装置发送的数据拉取请求之前,还用于接收第一存储装置发送的第一信息,该第一信息包括第一存储装置的第一存储器中空闲的存储空间的地址信息;具体实现方式请参见图4中的步骤404的描述,或参见图6中步骤604的描述,此处不再赘述。发送模块801,还用于向第一存储装置发送的目标数据的地址信息。在一个可能的设计中,数据拉取请求包含该目标数据的地址信息。具体实现方式请参见图4中的步骤406的描述,此处不再赘述。
本申请实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在存储装置上运行时,使得存储装置执行上述相关方法步骤以实现上述实施例中的第一节点所执行的方法,参见图4中步骤401~步骤404、步骤406~步骤410的描述,或参见图6中步骤601~步骤604、步骤606~步骤607的描述,此处不再赘述,或执行上述相关方法步骤以实现上述实施例中的第二节点所执行的方法,参见图4中步骤401、步骤402、步骤404~步骤406、步骤409~步骤410的描述,或参见图6中步骤601~步骤602、步骤604~步骤607的描述,此处不再赘述。
本申请实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的第一节点所执行的方法,参见图4中步骤401~步骤404、步骤406~步骤410的描述,或参见图6中步骤601~步骤604、步骤606~步骤607的描述,此处不再赘述,或第二节点所执行的方法,参见图4中步骤401、步骤402、步骤404~步骤406、步骤409~步骤410的描述,或参见图6中步骤601~步骤602、步骤604~步骤607的描述,此处不再赘述。
另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的第一节点所执行的方法,参见图4中步骤401~步骤404、步骤406~步骤410的描述,或参见图6中步骤601~步骤604、步骤606~步骤607的描述,此处不再赘述,或第二节点所执行的方法,参见图4中步骤401、步骤402、步骤404~步骤406、步骤409~步骤410的描述,或参见图6中步骤601~步骤602、步骤604~步骤607的描述,此处不再赘述。
其中,本申请实施例提供的存储设备、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的第一节点或第二节点对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其他的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其他的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元(或模块)可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
可选的,本申请实施例中的计算机执行指令也可以称之为应用程序代码,本申请实施例对此不作具体限定。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包括一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
本申请实施例中所描述的各种说明性的逻辑单元和电路可以通过通用处理器,数字信号处理器,专用集成电路(ASIC),现场可编程门阵列(FPGA)或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。
本申请实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件单元、或者这两者的结合。软件单元可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于ASIC中。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包括这些改动和变型在内。
Claims (17)
1.一种分布式存储系统,其特征在于,包括多个节点,其中,
所述多个节点中的第一节点用于向所述多个节点中的第二节点发送数据拉取请求,所述数据拉取请求用于请求所述第二节点将所述第二节点中存储的数据发送至所述第一节点;所述第一节点处于空闲状态,所述第二节点处于繁忙状态,所述空闲状态是基于所述第一节点的第一存储器的使用情况确定的,所述繁忙状态是基于所述第二节点的第二存储器的使用情况确定的;
所述第二节点用于基于所述数据拉取请求,将所述第二节点的所述第二存储器中存储的目标数据发送给所述第一节点;
所述第一节点还用于接收所述目标数据,将所述目标数据存储在所述第一节点的所述第一存储器中。
2.如权利要求1所述的系统,其特征在于,所述第一存储器与所述第二存储器都属于高性能存储器,所述目标数据的访问频率低于所述第二存储器中存储的其他数据中的至少一部分数据的访问频率。
3.如权利要求1所述的系统,其特征在于,所述第一存储器的读写性能高于所述第二存储器的读写性能,所述目标数据的访问频率高于所述第二存储器中存储的其他数据中的至少一部分数据的访问频率,或者,所述目标数据是所述第二节点预测出的将要被读取的数据。
4.如权利要求1-3任一项所述的系统,其特征在于,所述第一节点还用于:
获取所述第二节点的状态信息,所述状态信息用于指示所述第二节点处于繁忙状态或者空闲状态。
5.如权利要求4所述的系统,其特征在于,所述第一节点还用于基于RDMA协议向所述第二节点发送读请求,以获取所述第二节点的状态信息。
6.如权利要求1-5任一项所述的系统,其特征在于,所述多个节点中还包括处于繁忙状态的其他节点,所述第二节点被所述第一节点拉取过的数据的数据量小于所述其他节点被所述第一节点拉取过的数据的数据量。
7.如权利要求1-6任一项所述的系统,其特征在于,所述第一节点用于向所述多个节点中的第二节点发送数据拉取请求之前,所述第一节点还用于向所述第二节点发送第一信息,所述第一信息包括所述第一节点的所述第一存储器中空闲的存储空间的地址信息;
所述第二节点用于接收所述第一信息之后,向所述第一节点发送所述目标数据的地址信息。
8.如权利要求7所述的系统,其特征在于,所述数据拉取请求包含所述目标数据的地址信息。
9.一种数据迁移方法,其特征在于,应用于分布式存储系统,所述分布式存储系统包括多个节点,该方法包括:
所述多个节点中的第一节点向所述多个节点中的第二节点发送数据拉取请求,所述数据拉取请求用于请求所述第二节点将所述第二节点中存储的数据发送至所述第一节点;所述第一节点处于空闲状态,所述第二节点处于繁忙状态,所述空闲状态是基于所述第一节点的第一存储器的使用情况确定的,所述繁忙状态是基于所述第二节点的第二存储器的使用情况确定的;
所述第二节点基于所述数据拉取请求,将所述第二节点的所述第二存储器中存储的目标数据发送给所述第一节点;
所述第一节点接收所述目标数据,将所述目标数据存储在所述第一节点的所述第一存储器中。
10.如权利要求9所述的方法,其特征在于,所述第一存储器与所述第二存储器都属于高性能存储器,所述目标数据的访问频率低于所述第二存储器中存储的其他数据中的至少一部分数据的访问频率。
11.如权利要求9所述的方法,其特征在于,所述第一存储器的读写性能高于所述第二存储器的读写性能,所述目标数据的访问频率高于所述第二存储器中存储的其他数据中的至少一部分数据的访问频率,或者,所述目标数据是所述第二节点预测出的将要被读取的数据。
12.如权利要求9-11任一项所述的方法,其特征在于,还包括:
所述第一节点获取所述第二节点的状态信息,所述状态信息用于指示所述第二节点处于繁忙状态或者空闲状态。
13.如权利要求12所述的方法,其特征在于,所述第一节点获取所述第二节点的状态信息,包括:
所述第一节点基于RDMA协议向所述第二节点发送读请求,以获取所述第二节点的状态信息。
14.如权利要求9-13任一项所述的方法,其特征在于,所述多个节点中还包括处于繁忙状态的其他节点,所述第二节点被所述第一节点拉取过的数据的数据量小于所述其他节点被所述第一节点拉取过的数据的数据量。
15.如权利要求9-14任一项所述的方法,其特征在于,所述第一节点向所述多个节点中的第二节点发送数据拉取请求之前,还包括:
所述第一节点向所述第二节点发送第一信息,所述第一信息包括所述第一节点的所述第一存储器中空闲的存储空间的地址信息;
所述第二节点接收所述第一信息之后,向所述第一节点发送所述目标数据的地址信息。
16.如权利要求15所述的方法,其特征在于,所述数据拉取请求包含所述目标数据的地址信息。
17.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质被计算设备执行时,所述计算设备执行上述权利要求9至16中任一项所述的第一节点或第二节点所执行的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110678722.2A CN115495433A (zh) | 2021-06-18 | 2021-06-18 | 一种分布式存储系统、数据迁移方法及存储装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110678722.2A CN115495433A (zh) | 2021-06-18 | 2021-06-18 | 一种分布式存储系统、数据迁移方法及存储装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115495433A true CN115495433A (zh) | 2022-12-20 |
Family
ID=84464056
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110678722.2A Pending CN115495433A (zh) | 2021-06-18 | 2021-06-18 | 一种分布式存储系统、数据迁移方法及存储装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115495433A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116886719A (zh) * | 2023-09-05 | 2023-10-13 | 苏州浪潮智能科技有限公司 | 存储系统的数据处理方法、装置、存储系统、设备及介质 |
CN118170550A (zh) * | 2024-05-11 | 2024-06-11 | 中移(苏州)软件技术有限公司 | Node节点水位线阈值调节方法、装置及相关设备 |
-
2021
- 2021-06-18 CN CN202110678722.2A patent/CN115495433A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116886719A (zh) * | 2023-09-05 | 2023-10-13 | 苏州浪潮智能科技有限公司 | 存储系统的数据处理方法、装置、存储系统、设备及介质 |
CN116886719B (zh) * | 2023-09-05 | 2024-01-23 | 苏州浪潮智能科技有限公司 | 存储系统的数据处理方法、装置、存储系统、设备及介质 |
CN118170550A (zh) * | 2024-05-11 | 2024-06-11 | 中移(苏州)软件技术有限公司 | Node节点水位线阈值调节方法、装置及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6651444B2 (ja) | ハイブリッドストレージ | |
US20160085585A1 (en) | Memory System, Method for Processing Memory Access Request and Computer System | |
JP2021190123A (ja) | キャッシュコヒーレントインターコネクトを使用するシステム及び方法 | |
US11966612B2 (en) | Solid-state disk (SSD) data migration | |
US20170366412A1 (en) | Managing cluster-level performance variability without a centralized controller | |
US10762137B1 (en) | Page table search engine | |
US11861196B2 (en) | Resource allocation method, storage device, and storage system | |
CN106534308B (zh) | 一种分布式存储系统中解决数据块访问热点的方法及装置 | |
US9601180B2 (en) | Automatic partial array self-refresh | |
EP3404537B1 (en) | Processing node, computer system and transaction conflict detection method | |
WO2023035646A1 (zh) | 一种扩展内存的方法、装置及相关设备 | |
CN115495433A (zh) | 一种分布式存储系统、数据迁移方法及存储装置 | |
US10810133B1 (en) | Address translation and address translation memory for storage class memory | |
WO2014206078A1 (zh) | 内存访问方法、装置及系统 | |
WO2023051715A1 (zh) | 数据处理的方法、装置、处理器和混合内存系统 | |
JP2017537404A (ja) | メモリアクセス方法、スイッチ、およびマルチプロセッサシステム | |
CN113794764A (zh) | 服务器集群的请求处理方法、介质和电子设备 | |
CN116414735A (zh) | 数据存储方法、系统、存储访问配置方法及相关设备 | |
CN116560562A (zh) | 一种读、写数据方法及装置 | |
US10754789B1 (en) | Address translation for storage class memory in a system that includes virtual machines | |
WO2023051359A1 (zh) | 控制内存带宽的方法、装置、处理器及计算设备 | |
CN116521608A (zh) | 数据迁移方法及计算设备 | |
CN115268763A (zh) | 一种缓存管理方法、装置及设备 | |
KR101587600B1 (ko) | Numa 시스템상에서 가상머신간의 통신방법 | |
US12056398B2 (en) | Electronic data file access management in a distributed computer system |
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 |