1.本技术涉及计算机技术领域,具体涉及一种使用中间设备对数据处理的方法、计算机系统、及中间设备。
背景技术:2.在多节点的计算机系统中,通常包括多个计算节点和多个存储节点。为了实现由多个计算节点并发地对应用的存储空间进行访问,相关技术中通过存储节点对应用的存储空间进行管理,而通过存储节点对应用的存储空间进行管理时,在计算节点对存储节点中存储的应用的数据访问时,会增加计算节点的负载,并影响数据处理的时延。例如,当计算节点需要将应用的数据写入应用对应的存储空间时,计算节点首先请求存储节点在应用对应的存储空间中为所述数据分配写入地址,在获取写入地址后再向存储节点发送将数据写入所述写入地址的写请求。这样,在写入数据时,计算节点首先需要向存储节点申请分配写入地址,在分配了写入地址之后,再向存储节点发送将数据写入所述写入地址的写请求,即计算节点需要向存储节点发送至少两次请求,这不但增加了计算节点的负载,且增加了数据写入的时延。
技术实现要素:3.本技术实施例旨在提供一种数据处理的方法、计算机系统、及中间设备,通过在计算节点与存储节点之间连接的中间设备对应用的存储空间进行管理,有效减少了计算节点的负载,且减少了数据写入的时延。
4.为实现上述目的,本技术第一方面提供一种计算机系统。所述计算机系统包括计算节点、存储节点和中间设备。所述计算节点上运行业务,所述存储节点上存储所述业务的数据。所述业务分配有存储空间,所述业务通过访问所述存储空间对存储节点中的业务的数据进行操作,所述存储空间例如为持久化日志空间(plog)。本技术实施例将所述存储空间的元数据存储在所述中间设备中,由所述中间设备对所述存储空间的元数据进行管理,并根据所述存储空间的元数据实现所述计算节点与所述存储节点之间的数据操作。
5.通过将业务的存储空间的元数据存储在所述中间设备上,以使中间设备通过所述元数据对所述业务的存储空间进行管理,这样可以减轻计算节点的负载,并减少了数据写入的时延。例如,当所述操作为写操作时,计算节点只需要发送写请求至中间设备即可,中间设备根据所述元数据为所述写请求在所述存储空间中分配地址,并根据所分配的地址将数据写入存储设备,由于计算节点只需要发送请求至中间设备,所以减轻了计算节点的负载,也减少了数据写入的时延。
6.在所述第一方面的一种实现方式中,所述存储空间的元数据包括逻辑存储空间的元数据,所述逻辑存储空间的元数据包括逻辑存储空间的标识,所述逻辑存储空间的地址信息,以及所述逻辑存储空间对应的物理存储空间的地址信息,所述物理存储空间属于所述存储节点中的空间。
7.通过在所述元数据中记录应用的逻辑存储空间的地址信息与存储节点中物理存储空间的地址信息,中间设备可以将对逻辑存储空间的操作映射至对存储节点中的物理存储空间的操作,从而实现对存储在存储节点中的物理存储空间中的业务数据的操作。
8.在所述第一方面的一种实现方式中,所述计算节点与所述存储节点之间包括多个中间设备,所述计算节点在所述多个中间设备中为所述逻辑存储空间指定第一中间设备,所述第一中间设备用于保存所述逻辑存储空间的元数据,例如,所述计算节点可以根据所述逻辑存储空间的标识从所述多个中间设备中选择所述第一中间设备。
9.这样,可以将应用的多个存储空间分布至不同的中间设备,从而实现中间设备的负载均衡,也提升了应用的数据的处理效率。
10.在所述第一方面的一种实现方式中,所述逻辑存储空间为持久化日志空间。
11.在所述第一方面的一种实现方式中,所述中间设备为网络交换设备。
12.由于计算节点与存储节点之间的通信会经过网络交换机,所以将应用的存储空间的元数据存储在网络交换机中,可以更加方便的实现对应用的存储空间的管理。
13.在本发明第一方面的一种实现方式中,当所述计算节点将业务的数据写入存储节点时,将写请求首先发送至中间设备,中间设备根据为待写数据在逻辑存储空间中分配第一地址,然后确定第一地址对应的将所述待写数据写入存储节点的第二地址,然后请求所述请求节点将所述待写数据写入所述第二地址。
14.在写数据时,由于计算节点只需要发送写请求至中间设备即可,所以降低了计算节点的负载,且减少了写请求的时延。
15.在所述第一方面的一种实现方式中,在计算节点为应用分配了逻辑存储空间后,会请求中间设备为所述逻辑存储空间分配存储节点中的物理存储空间,所述中间设备在接收到请求后,会请求存储节点为所述逻辑存储空间分配物理存储空间,这样,可以建立应用的逻辑存储空间与存储节点中物理存储空间的对应关系,应用可以通过逻辑存储空间对物理存储空间的数据进行访问。
16.在所述第一方面的一种实现方式中,所述中间设备基于所述至少两个写请求的接收顺序分别为每个写请求分配逻辑存储空间的地址,或者,所述中间设备基于所述至少两个写请求的接收顺序分别向所述计算节点返回每个写请求的完成消息。
17.按照写请求的顺序返回写请求的完成消息或者分配地址,可以实现写请求的待写数据在存储节点中顺序存储,避免存储节点中的存储介质出现空洞。
18.在所述第一方面的一种实现方式中,所述中间设备在接收到所述计算节点发送的对逻辑存储空间的只读设定请求后,在所述逻辑存储空间没有冲突的情况下,将所述逻辑存储空间的状态设置为只读状态。
19.在所述第一方面的一种实现方式中,所述中间设备还用于在接收到所述计算节点发送的对逻辑存储空间的删除请求后,在所述逻辑存储空间没有冲突的情况下,将所述逻辑存储空间的状态设置为删除中状态,并指示所述存储节点删除所述逻辑存储空间对应的物理存储空间。
20.在上述两个实现方式中,通过由中间设备确定是否存在对逻辑存储空间的冲突操作,从而实现状态互斥控制,减少了计算节点或存储节点之间的通信次数,提升了计算机系统的处理效率。
21.在所述第一方面的一种实现方式中,在接收所述计算节点发送的第一写请求之后,所述中间设备还用于获取所述第一写请求中的待写数据的多个分片,其中,确定将所述第一写请求中的待写数据写入所述存储节点的第一地址包括,确定将所述多个分片分别写入多个存储节点的第一地址。
22.在该实现方式中,通过中间设备将待写数据的多个分片分别存入多个存储节点,保证了数据的可靠性,同时,利用中间设备的作为集中点的位置优势和高性能的报文处理能力,在保证可靠性的同时减少了计算节点需要传输的数据量。
23.在所述第一方面的一种实现方式中,所述中间设备从所述逻辑存储空间的未分配空间中按照地址从小到大的顺序为所述第一写请求分配所述第二地址。
24.在所述第一方面的一种实现方式中,所述存储节点包括第一存储节点和第二存储节点,所述第二地址对应所述第一存储节点中写入所述待写数据的第一地址,及所述第二存储节点中写入所述待写数据的第一地址,所述请求所述存储节点将所述待写数据写入所述第一地址包括:请求所述第一存储节点将所述待写数据写入所述第一存储节点中写入所述待写数据的第一地址;请求所述第二存储节点将所述待写数据写入所述第二存储节点中写入所述待写数据的第一地址。
25.在该实施方式中,中间设备对多个存储节点写入数据副本,保证了数据的可靠性,同时,利用中间设备的网络位置优势和高性能的报文处理能力,在保证可靠性的同时减少了计算节点需要向中间设备传输的数据量。
26.在所述第一方面的一种实现方式中,所述中间设备中记录有队列,所述队列按照接收的时间顺序记录从所述计算节点接收到的待处理的访问所述逻辑存储空间的写请求,在确定所述第一写请求是所述队列中接收时间最早的请求时,则确定在所述第一写请求之前接收的针对所述逻辑存储空间的其它写请求都已经完成。
27.在该实施方式中,通过队列记录写请求的接收顺序,可以更加方便准确的控制写请求的完成信息返回的顺序。
28.在所述第一方面的一种实现方式中,所述中间设备还用于建立与计算节点对应的qp队列和n个分别与n个存储节点对应的qp队列,以维护连接信息,从而可实现一对n组播可靠通信。
29.在所述第一方面的一种实现方式中,当所述中间设备接收到访问所述逻辑存储空间的读请求时,如果所述逻辑存储空间的状态为删除中状态,则所述中间设备阻塞所述读请求,或者将所述逻辑存储空间的状态为删除中状态的信息返回给计算节点。
30.本发明第二方面提供一种应用于本发明第一方面提供的计算机系统的方法,方法中所包括各个步骤由计算机系统的计算节点、中间设备、及存储节点执行,方法中每个步骤对应的功能与计算机系统中的计算节点、中间设备、及存储节点执行的功能相同,达到的有益效果也相同,在此不再赘述。
31.本发明第三方面提供一种由中间设备执行的数据处理方法,所述中间设备连接计算节点及存储节点,所述计算节点上运行业务,所述存储节点上存储所述业务的数据。所述中间设备保存所述业务的数据对应的存储空间的元数据。所述中间设备首先接收所述计算节点发送的对所述业务的数据的第一写请求,然后根据所述存储空间的元数据确定将所述第一写请求中的待写数据写入所述存储节点的第一地址,在确定了第一地址后,请求所述
存储节点将所述待写数据写入所述第一地址。
32.通过将业务的存储空间的元数据存储在所述中间设备上,计算节点只需要发送写请求至中间设备即可,中间设备根据所述元数据为所述写请求在所述存储空间中分配地址,并根据所分配的地址将数据写入存储设备,由于计算节点只需要发送请求至中间设备,所以减轻了计算节点的负载,也减少了数据写入的时延。
33.所述中间设备所执行的方法的其他步骤所执行的功能与所述第一方面的计算机系统中的中间设备所执行的功能及有益效果相同,在此不再赘述。
34.本技术第四方面提供一种数据处理装置,所述装置部署于中间设备中,所述中间设备连接计算节点及存储节点,所述计算节点上运行业务,所述存储节点上存储所述业务的数据,所述处理装置包括若干个模块,各个模块用于执行本技术第三方面提供的数据处理方法中的各个步骤,关于模块的划分在此不做限制。该数据处理装置各个模块所执行的具体功能及达到的有益效果请参考本技术第三方面提供的数据处理方法的各个步骤的功能,在此不再赘述。
35.本技术第五方面提供另一种计算机系统,所述计算机系统包括计算节点、存储节点和中间设备,所述计算节点通过所述中间设备访问所述存储节点;所述计算节点上运行应用,所述存储节点上存储所述应用的数据;所述计算节点,用于为所述应用的数据指定存储空间,并发送第一分配请求,所述第一分配请求用于请求所述存储空间对应的存储节点的物理存储空间;所述中间设备,用于接收所述计算节点发送的第一分配请求,根据所述第一分配请求向所述存储节点发送第二分配请求,获取所述存储节点分配的所述物理存储空间,根据所述逻辑存储空间的信息和物理存储空间的信息建立并保存所述应用的元数据。
36.通过在中间设备上保存元数据,为应用的存储空间分配存储节点中的存储空间,可以减轻存储节点的负载及计算节点的负载,提升数据的传输效率。
37.本技术第五方面的在一种实现方式中,所述第一分配请求携带所述逻辑存储空间的标识与大小,所述元数据包括:所述逻辑存储空间的标识、所述逻辑存储空间的大小、所述逻辑存储空间的可用地址和所述逻辑存储空间对应的物理存储空间的地址信息。
38.在一种实现方式中,所述逻辑存储空间为持久化日志空间,所述计算节点指定所述持久化日志空间的标识与大小。
39.本技术第五方面的在一种实现方式中,所述计算节点,还用于发送第一写请求,所述第一写请求携带所述应用的第一数据以及所述第一数据对应的逻辑存储空间的标识;所述中间设备还用于接收所述第一写请求,根据所述应用的元数据确定所述第一数据在所述存储节点中的第一物理地址,根据所述第一物理地址向所述存储节点发送第二写请求;所述存储节点还用于接收所述第二写请求,在所述第一物理地址存储所述第一数据。
40.本技术第五方面的在一种实现方式中,所述中间设备在接收到所述第一写请求之后,根据所述逻辑存储空间的标识和所述第一数据的大小,为所述第一数据分配第一逻辑空间地址,并根据所述元数据中记录的所述逻辑存储空间与物理存储空间的对应关系,确定所述第一逻辑空间地址对应的所述第一物理地址。
41.本技术第五方面的在一种实现方式中,所述中间设备还用于接收所述存储节点发送的存储完成通知,根据所述通知确认所述第一写请求执行完成。
42.本技术第五方面的在一种实现方式中,所述中间设备根据所述第一写请求更新所
述应用的元数据的信息。
43.本技术第五方面的在一种实现方式中,所述计算机系统包括多个中间设备,所述计算节点还用于从所述多个中间设备中选择一个中间设备,以向所选择的中间设备发送所述第一分配请求或所述第一写请求。
44.本技术第六方面提供一种计算机系统,所述计算系统包括:包括计算节点、存储节点和中间设备,所述计算节点通过所述中间设备访问所述存储节点,所述计算节点用于发送第一写请求至中间设备,所述第一写请求访问逻辑存储空间,所述逻辑存储空间对应于所述存储节点中的存储空间;中间设备用于接收所述第一写请求,在确定在所述第一写请求之前接收的且访问所述逻辑存储空间的写请求已全部完成时,通知所述计算节点所述第一写请求已完成。
45.通过在中间设备中实现写请求按照接收顺序返回写请求完成消息,可以在实现不同计算节点的写请求并行处理的同时,防止存储节点中的存储空间出现空洞。
46.关于该计算系统所执行的其他功能可参考第一方面提供的计算机系统所提供的功能,在此不再赘述。
47.本技术第七方面提供一种中间设备,所述中间设备,包括处理单元和存储单元,所述存储单元中存储有可执行代码,所述处理单元执行所述可执行代码时,实现本技术第二方面及第三方面提供的方法
48.本技术第八方面提供一种中间设备,所述中间设备包括:通信接口,用于与存储节点及计算节点进行数据传输;处理单元,用于对所述通信接口接收的数据进行处理,以执行本技术第二方面及第三方面提供的方法。
49.本技术第九方面提供一种存储介质,所述存储介质中存储有可执行指令,中间设备的处理器执行所述存储介质中的可执行指令以实现本技术第二方面及第三方面提供的方法。
50.本技术第十方面提供一种程序产品,中间设备的处理器通过运行所述程序产品,以控制所述处理器执行本技术第二方面及第三方面提供的方法。
附图说明
51.通过结合附图描述本技术实施例,可以使得本技术实施例更加清楚:
52.图1为本技术实施例所应用的计算机系统的架构图;
53.图2为本技术实施例提供的在计算机系统中写数据的方法流程图;
54.图3为在plog i的剩余空间不足时所执行的流程a的流程图;
55.图4为计算节点c0和c1并行对plog j进行写入的过程示意图;
56.图5为与plog j对应的写请求队列的内容示意图;
57.图6为在plog i的剩余空间足够时所执行的流程b的流程图;
58.图7为本技术另一实施例提供的在计算机系统中写数据的方法流程图;
59.图8为通过多分片存储的方式在计算机系统中写数据的过程示意图;
60.图9为通过多分片存储的方式在计算机系统中读数据的过程示意图;
61.图10为本技术实施例提供的在计算机系统中读取数据的方法流程图;
62.图11为本技术实施例提供的在计算机系统中删除数据的方法流程图;
63.图12为本技术实施例提供的在计算机系统中设定数据只读的方法流程图;
64.图13为本技术实施例提供的一种数据处理装置的结构示意图;
65.图14为本技术实施例提供的一种中间设备的结构示意图;
66.图15为本技术实施例提供的一种中间设备的结构示意图;
67.图16为根据本技术实施例的云服务系统的示意图。
具体实施方式
68.下面将结合附图,对本技术实施例中的技术方案进行描述。
69.图1为本技术实施例所应用的计算机系统100的架构图。如图1中所示,该计算机系统100中包括计算层12、网络层13和存储层14。其中,计算层12包括多个计算节点,图1中示意示出计算节点c0、c1和c2;网络层13包括多个中间设备,图1中示意示出中间设备st0和st1;存储层14包括多个存储节点,图1中示意示出存储节点s0、s1和s2。其中,所述计算节点和存储节点可以为物理服务器,或者也可以为虚拟机、容器等基于通用硬件资源抽象的虚拟实体。所述中间设备可以为可编程网络连接设备,例如交换机,下文中将以交换机作为中间设备的示例进行描述。所述多个计算节点例如可以作为多个应用(application,app)的应用服务器,为用户终端的用户提供业务处理服务。所述多个存储节点例如可用于存储app的业务数据。存储节点中可通过内存或硬盘等存储介质来存储业务数据。由于非易失性内存介质不仅具有大容量、高访问速度的特点,同时还具备非易失的存储特性,所以本发明实施例中的存储介质为非易失性内存介质,所述非易失性内存例如包括存储级内存(storage class memory,scm)。所述非易失性内存介质只是举例说明,但本发明实施例并不仅限于所述非易失性内存。
70.在图1所示的多节点分布式的计算机系统中,每个计算节点与至少一个交换机连接,每个交换机与多个存储节点连接,从而计算节点通过交换机可访问到多个存储节点。另外,交换机与交换机之间直接或间接连接,从而使得计算节点可通过任一交换机访问存储节点。其中,计算节点与交换机之间的连接、交换机与存储节点之间的连接可以为各种连接方式,如远程直接内存访问(remote direct memory access,rdma)连接方式,或者传输控制协议(transmission control protocol,tcp)连接方式。多个计算节点可通过交换机对存储节点进行对业务数据的写入、读取等操作。
71.在相关技术中,计算节点与存储节点直接连接,计算节点通过对与存储节点中的存储空间对应的一段逻辑存储空间进行访问,从而访问所述存储节点中的存储空间。所述逻辑存储空间例如为持久化日志空间(persistence log,plog)。该plog通过plog的唯一标识plog id来标识,plog上的存储数据采用追加写的形式进行存储,即,对于已经存储的数据不进行覆盖修改,而是将该修改追加存储到新的地址中。通常,plog与存储节点中的scm、固态硬盘(solid state disk,ssd)等介质中的一段连续物理存储空间相对应,所述物理存储空间为存储节点对外部设备提供的存储空间,外部设备可以利用该存储空间进行数据的访问,对于scm等介质来说所述物理存储空间即为数据实际存储的物理地址,但对于ssd等存储介质来说,并不是数据实际存储的物理地址。
72.在该相关技术中,在存储节点中存储plog的元数据,该元数据中包括plog的id、该plog对应的存储节点中的存储空间的地址、该plog的未分配空间的地址等信息,存储节点
通过plog的元数据对plog进行管理。例如,当计算节点希望通过plog写入数据至存储节点时,计算节点首先请求存储节点在plog中为所述数据分配地址,在存储节点根据plog元数据在所述plog中未分配的存储空间为所述数据分配地址后,将所分配的地址返回给计算节点。计算节点在获取所分配的地址之后再向存储节点发送写请求,以将所述数据写入所述存储节点。在该相关技术中,计算节点在向存储节点写入数据的过程中,需要与存储节点进行多次通信,增加了计算节点的负载,且增加了数据写入的时延。
73.在本技术实施例中,如图1中所示,计算节点通过交换机与存储节点连接,交换机作为中间设备存储有plog的元数据,并对plog的元数据进行管理,从而通过对plog的元数据的管理实现对plog的管理。所述交换机中存储的plog的元数据包括plog的id、该plog对应的存储节点中的存储空间的地址信息(例如可以为存储空间的起始地址及长度)、该plog的未分配空间的地址信息(例如可以为该plog未分配空间的起始地址)等。当计算节点响应于用户对应用的操作需要对plog写入数据时,计算节点向交换机发送对plog写入数据的写请求。交换机在接收到该写请求之后,基于plog的元数据,对该写请求分配plog中的写入地址,基于该写入地址确定将该写请求中的待写数据写入存储节点的地址,并向存储节点发送对所述确定的存储节点中的地址写入所述待写数据的请求,以使存储节点将所述待写数据写入所述存储节点的存储空间。在本技术实施例的技术实现中,通过将plog的元数据存储在交换机中,使得交换机来管理plog,这样计算节点在将数据写入存储节点的时候,只要发数据写请求至交换机即可,而不需要发送地址分配请求,如此,不但降低了计算节点的负载,而且降低了写请求的时延。
74.另外,交换机在对plog进行管理之后,交换机根据写请求的接收顺序处理各个写请求,从而为各个写请求顺序分配该plog中的地址,并在分配了地址之后,将写请求中的待写数据写入存储节点,在存储节点写完数据之后,交换机会根据各个写请求的接收顺序返回写请求,从而防止该plog对应的存储节点的存储空间中出现空洞。
75.下文将详细描述通过图1所示的计算机系统进行的数据处理过程。
76.图2为本技术实施例提供的在计算机系统中写数据的方法流程图。
77.如图2所示,首先在步骤s201,计算节点发送对plog i的写请求1。
78.在本说明书中图2、图3、图6、图7、图10、图11和图12的流程图中,计算节点可以为图1中多个计算节点中的任一计算节点,交换机为与所操作的plog对应的交换机,存储节点为与该plog对应的存储节点。在本技术实施例中,一个plog仅由一个交换机进行管理。在计算节点生成一个新的plog之后,该plog被确定归属于某个交换机,该确定的交换机即为该plog对应的交换机,所述对应的交换机中记录有该plog的元数据,并基于该元数据对该plog进行管理。所述plog对应的存储节点为计算节点在生成一个新的plog之后为所述plog指定的存储节点。确定plog所述归属的交换机的具体方法例如可以为:计算节点在生成新的plog之后,可对该plog的id进行哈希计算,从而将该plog归属到某个交换机,并将该plog的信息发送到该交换机,以由该交换机对该plog进行管理。另一种确定plog所述归属的交换机的方法可以为:计算节点在生成新的plog之后,可将该plog的信息发给其连接的任一交换机,从而由多个交换机协商确定并记录该plog与交换机的映射关系,之后,接收到plog信息的交换机可基于所述映射关系将该plog的信息转发给对应的交换机,并由对应的交换机对该plog进行管理。
79.下文中将以计算节点c0、交换机st0、存储节点s0、s1和s2为例进行描述。
80.假设图2中的计算节点为图1中的计算节点c0。计算节点c0中设置有plog功能层,该plog功能层对应用提供调用接口,所述调用接口例如包括plog申请接口、plog写接口等等。当计算节点c0中的应用需要向计算机系统中写入数据时,首先,应用从plog功能层获取预先记录的当前可写入的plog的id,确定当前可写入的plog为plog i,从而,应用调用plog功能层中的写接口,从而使得计算节点c0向交换机发送对plog i的写请求1。
81.具体是,计算节点c0中的应用调用所述写接口,传入plog i的标识,待写数据的存放地址、待写数据的长度,plog功能层根据传入的参数调用网卡的数据发送接口,根据待写数据的存放地址和待写数据的长度获取待写数据,基于该待写数据组装成写请求1的数据包发送给交换机,其中,该写请求1中包括plog i的标识和待写数据。其中,在一种实现方式中,计算节点c0可通过对“plog i”进行哈希运算确定plog i对应的交换机,并将所述数据包发送给该对应的交换机。在另一种实施方式中,计算节点c0可将所述数据包发送给其连接的任一交换机,并由该交换机基于本地存储的plog与交换机之间的映射关系将该数据包转发给与plog i对应的交换机。假设plog i与交换机st0相对应,因此,对plog i的写请求1被发送给交换机st0。
82.在步骤s202,交换机确定plog i的剩余空间是否足够。
83.如上文所述,交换机st0与plog i相对应,因此,交换机st0中记录作为plog i的元数据,以通过所述元数据对plog i进行管理。该plog i的元数据中例如包括plog i的标识、plogi的地址信息(例如plogi的未分配存储空间的起始地址及plog i的大小等)、plogi对应的存储节点中的存储空间的地址信息等信息,由于所述plog i为逻辑存储空间,其中的地址为从0开始的偏移地址,从而,交换机通过以plog i的大小减去plogi的未分配存储空间起始地址可获得plog i的剩余空间大小。
84.在接收到写请求1之后,交换机将待写数据的长度与plog i的剩余空间的大小进行比较,以确定剩余空间是否足够用于写入该待写数据。如果剩余空间不足,则交换机执行图3所示的流程a中的步骤s301,如果剩余空间足够,则交换机执行图6中的流程b中的步骤s601。下文将对图3中的流程a和图6中的流程b分别进行描述。
85.图3为在plog i的剩余空间不足时所执行的流程a的流程图,该流程a中包括生成新的plog j和在plog j中写入待写数据的过程。
86.在步骤s301,交换机在上述步骤s202确定plog i的剩余空间不足之后,向计算节点发送plog i空间不足的信息。
87.在步骤s302,计算节点生成plog j。
88.例如,在计算节点c0中,应用在接收到上述plog i空间不足的信息之后,可调用plog功能层中的plog申请接口,以向plog功能层发送申请新的plog的请求。在该申请请求中,指定了与该新申请的plog对应的存储节点,该plog的大小、以及该plog的初始状态等信息。其中,所述初始状态信息例如为可读写状态。在计算机系统中,为了保证数据存储的可靠性,可将同一份数据存储至多个存储节点,也即,每个存储节点存储该数据的一个副本,从而在某个存储节点出现异常的情况下,可以从其它存储节点获取数据。在该情况下,在上述申请请求中指定与该新申请的plog对应的多个存储节点。例如,上述申请请求可指定该新申请的plog与存储节点s0、s1和s2相对应,即将写入所述plog的数据分别存储至存储节
点s0、s1和s2中。
89.计算节点c0中的plog功能层在从应用接收到对新的plog的申请之后,生成新的plogid,并将该id返回给应用。该新生成的plogid可表示为“plog j”,该id例如为根据plog的编号顺序生成,例如,plog i为plog 1,则确定“plog j”为plog 2。可以理解,本技术实施例不限于根据plog的编号顺序来确定plog id,只要该plog id可唯一标识该新生成的plog即可,例如,可将之前删除的plog的id重新用作为该新的plog的id。
90.在步骤s303,计算节点向交换机发送plog j的元数据。
91.计算节点c0的plog功能层在如上所述生成plog j之后,在一种实现方式中,计算节点c0可基于预定规则确定plog j对应的交换机,并将plog j的元数据发送给plog j对应的交换机;在另一种实施方式中,计算节点c0可将plog j的元数据信息发送给其连接的任一交换机,该交换机使得由多个交换机协商确定与plog j对应的交换机、并将plog j的元数据发送给与plog j对应的交换机。假设plog j对应的交换机为交换机st0,即,plog j的元数据被发送给交换机st0。所发送的元数据中包括plog j的标识、plog j对应的存储节点(即s0、s1和s2)、该plog j的大小、以及plog j的初始状态等信息。
92.在步骤s304,交换机向存储节点发送存储空间分配请求。
93.交换机st0在接收到plog j的元数据之后,在本地存储plog j的元数据,并在元数据中增加plog j的未分配存储空间的地址信息,例如未分配存储空间的起始地址。由于plogj还未被使用,因此,此时的plogj未分配存储空间的起始地址为默认的偏移地址0。
94.交换机st0可以表格的形式记录每个plog的元数据,如表1所示,为交换机st0中管理的plog的元数据。
95.plog 0status=delete,offset=200,
…
plog 1status=r,offset=100,
……ꢀ
plog jstatus=rw,offset=0,volume=2m,s0:addr=/s1:addr=/s2:addr=,
……ꢀ
96.表1
97.如表1中所示,其中“status”表示plog的状态,plog的状态可以包括可读写状态(rw)、只读状态(r)和删除中状态(delete),其中,所述rw状态表示plog对应的存储节点中的存储空间是可读且可写的,所述r状态表示plog对应的存储节点中的存储空间仅仅为可读的而不可写,所述delete状态表示所述plog对应的存储节点中正在进行对该plog对应的存储空间的删除操作。表1中的“offset”表示plog的未分配存储空间的起始地址,“volume”表示plog的大小。另外,在plog j的元数据中,“s0:addr=/s1:addr=/s2:addr=”表示plog j与存储节点s0、s1和s2相对应,存储节点s0、s1和s2中与plog j对应的地址(addr)尚未确定,因此为空。
98.之后,交换机st0基于plog j的元数据中的plog j对应的存储节点向对应的存储节点发送存储空间分配请求,所述存储空间分配请求中包括该plog j的大小。所述plog j的大小例如为2兆(m),因此,所述存储空间分配请求用于请求在存储节点中分配2m的存储空间。在对数据进行多副本写入的情况中,例如,上述由计算节点c0向交换机st0发送的plog j的信息中指定了存储节点s0、s1和s2,则,交换机st0分别向存储节点s0、s1和s2发送
存储空间分配请求。图3中仅示出一个存储节点用于示意,可以理解,在多副本写入的情况中,对应的多个存储节点都将进行与图3中存储节点所示相同的操作。
99.在步骤s305,存储节点根据存储空间分配请求分配存储空间,并返回存储空间信息。
100.如上文所述,在多副本存储的情况中,存储节点s0、s1和s2在分别接收到存储空间分配请求之后,将分别为plog j分配本地的存储空间,并向交换机st0返回该存储空间信息。这里仅描述存储节点s0中的操作作为示例。存储节点s0在接收到存储空间分配请求之后,在本地的存储介质中(例如scm)中获取未使用的2m大小的连续存储空间,将该存储空间标记为已分配,并将该存储空间的地址信息(例如起始地址或者地址范围)返回给交换机st0。
101.在步骤s306,交换机记录plog j与存储空间信息的关系。
102.具体是,交换机st0在从各个与plog j对应的存储节点接收到存储空间的信息,例如存储空间的起始地址之后,记录到plog j的元数据中。具体是,交换机st0可将存储节点s0、s1和s2中的为plog j分配的存储空间的起始地址分别记录到表1中的各个相应的“addr”字段中。
103.在完成上述各个步骤之后,也即完成了对plog j的创建过程。交换机在该创建过程完成之后,可将新生成的plog j通知给各个计算节点,从而各个计算节点可并行对该plog j写数据。图4为计算节点c0和c1并行对plog j进行写入的过程示意图。为了区别计算节点c0和c1的写入,在图4中,将与计算节点c0相关的操作用实线示出,将与计算节点c1相关的操作用虚线示出。另外,在图4中,如上文所述,在交换机st0中存储了plog j的元数据,图4中以数据条示意示出plog j,同时在与plog j对应的存储节点s0、s1和s2的scm0、scm1和scm2中分别为plog j分配了一段存储空间,该存储空间也以数据条示意示出。下文中将参考图4描述图3中的步骤。
104.另外,在计算节点中的应用首次使用的时候,计算节点会给应用分配一个初始plog,并为该初始plog分配存储空间,对初始plog分配存储空间的过程与为plog j分配存储空间的过程相同,具体请参考步骤s303-s306的描述,在此不再赘述。
105.在步骤s307,计算节点向交换机发送对plog j的写请求1
′
。
106.如上文所述,计算节点c0中的应用在获取到新生成的plog j之后,可重新发起对该plog j的写请求1
′
,以写入上述未成功写入的待写数据。所述写请求1
′
用于与上述对plog i的写请求1相区别。类似地,该写请求1
′
中包括plog j的标识和待写数据。
107.在步骤s308,交换机在plog j中为写请求1
′
分配地址空间1
′
。
108.在通过交换机为写请求分配地址空间1
′
时,可以对来自多个计算节点的写请求进行并发控制,具体请参考图4,假设计算节点c0在操作
①
向计算节点st0发送对plog j的写请求1
′
,计算节点c1在操作
②
向交换机st0发送了对plog j的写请求1
″
,交换机st0基于流程线机制,根据接收的写请求的先后顺序依次处理各个写请求。假设交换机st0首先接收到写请求1
′
,因此,交换机st0可以先在plog j中为写请求1
′
分配地址空间1
′
,其中,地址空间1
′
也可以表示为地址1
′
。一般情况下,地址空间用起始地址加地址空间的长度表示,所以,在交换机st0为写请求1
′
分配地址空间1
′
时,首先从plog j的元数据中获取plog j中未分配地址空间中的起始地址offset1,并将所述offset1作为所述写请求1
′
的起始地址,如此,
分配给所述写请求1
′
的地址空间1
′
即为以所述offset1为起始地址,长度为待写数据长度的地址空间。在为所述写请求1
′
分配地址空间1
′
之后,则交换机st0将元数据中plog j的offset更新为offset1加上待写数据的长度。例如,假设在为写请求1
′
分配地址之前,offset的值为10,即,plog j中已经为其它写请求分配了10字节的地址空间,因此,plog j当前的未分配地址空间中的起始地址为10。假设写请求1
′
的待写数据的长度为10字节,则交换机st0为写请求1
′
分配的写入地址空间为10~19。然后,交换机st0将plog j的元数据中的变量offset的值更新为10+10=20,即,当前plog j中的未分配地址空间的起始地址为20。当st0在处理完写请求1
′
之后为写请求1
″
分配写入地址空间时,则以地址空间20作为起始地址为所述写请求1
″
分配地址空间。
109.在本技术实施例中,交换机按照写请求的接收顺序为各个写请求分配写入地址空间,从而实现了各个写请求写入地址空间分配的互斥,这样对于不同计算节点并发的写请求,不需要设置互斥锁,即可实现不同计算节点对同一个plog访问的并发控制,从而达到了更高的处理效率。
110.在步骤s309,交换机确定存储节点中与地址空间1
′
对应的地址空间2
′
。
111.在一种实现方式中,交换机可基于地址空间1
′
的起始地址offset1和plog j对应的存储节点中的存储空间的起始地址来计算出存储节点中与地址空间1
′
对应的地址空间2
′
的起始地址,并且可确定该地址空间2
′
为写请求1
′
的待写数据的长度。对于多副本写的情况,交换机st0可分别确定存储节点s0、s1和s2中与地址空间1
′
对应的地址空间2
′
。例如,假设存储节点s0中与plog j对应的存储空间的起始地址为100,而如上文所述,地址空间1
′
的起始地址为10,从而地址空间2
′
的起始地址=100+10=110。交换机st0可类似地计算存储节点s1和s2中与地址空间1
′
对应的地址空间2
′
的起始地址。
112.可以理解,在上述实施方式中,通过确定地址空间2
′
的起始地址和地址空间长度来确定地址空间2
′
,本技术实施例不限于此,其他可以确定地址空间2
′
的方式也在本发明实施例提供的保护范围之内。
113.在步骤s310,交换机向存储节点发送对地址空间2
′
的写请求2
′
。
114.交换机在确定对应的存储节点中与地址空间1
′
对应的地址空间2
′
的起始地址之后,将生成对对应的存储节点进行写入的写请求2
′
,该写请求2
′
包括地址空间2
′
的信息(例如起始地址)和写请求1
′
中的待写数据。具体是,参考图4,交换机st0相对于存储节点s0、s1和s2分别生成写请求2
′
,并在图中的操作
③
、
④
和
⑤
分别向存储节点s0、s1和s2发送写请求2
′
,从而以在scm0、scm1和scm2各自的存储空间(图4中的数据条)的地址空间2
′
中分别写入写请求1
′
中的待写数据。其中,在rdma连接方式中,交换机st0通过建立与计算节点对应的qp队列和三个分别与存储节点s0、s1和s2对应的qp队列,维护连接信息,实现一对三组播可靠通信。交换机st0将写请求1
′
的待写数据复制为三份数据,并基于该三份数据生成三个写请求2
′
,从而计算节点c0只需要向交换机st0发送一个写请求,而达到了对三个存储节点进行写入的效果,与相关技术中通过计算节点分别针对每个存储节点生成一个写请求的方式相比,大大减少了从计算节点c0发出的写请求数,从而减少了计算节点c0的数据传输量。
115.从步骤s308~s310可以看出,由于交换机中存储了plogj的元数据,所以计算节点只需要发送写请求1
′
至交换机st0,由交换机st0根据plogj的元数据为写请求1
′
分配地址空间1
′
,且在为plogj分配了地址空间1
′
之后,交换机st0不需要将该分配的地址返回给计
算节点c0,从而有效减少了计算节点c0的负载,并减少了数据的写入时延,从而提升了计算机系统的处理效率。
116.在发送了与写请求1
′
对应的写请求2
′
之后,交换机st0可在本地的与plog j对应的写请求队列中对写请求1
′
进行记录,以用于在数据写入存储节点后,按照写请求的接收顺序返回写请求,具体返回的方式将在下文详细介绍。
117.在执行完步骤s310之后,交换机st0可以开始处理上述写请求1
″
,即,在plog j中为写请求1
″
分配plog j中的地址空间1
″
,确定存储节点中与地址空间1
″
对应的地址空间2
″
的起始地址,并对存储节点发送对地址空间2
″
的写请求2
″
,如图4中的操作
⑥
、
⑦
和
⑧
所示,交换机st0可分别对存储节点s0、s1和s2发送写请求2
″
,从而将写请求1
″
中的待写数据写入各个存储节点。其中,例如在存储节点s0中,在执行操作
⑥
之后,可并行执行对地址空间2
′
的写入和对地址空间2
″
的写入,而不需要等对地址空间2
′
的写入执行完之后再执行对地址空间2
″
的写入。同样地,在发送了与写请求1
″
对应的写请求2
″
之后,可在写请求队列中对写请求1
″
进行记录。
118.图5为与plog j对应的写请求队列的内容示意图。如图5所示,该写请求队列中用于记录访问所述plog j但还没有完成的写请求的id(request id),交换机st0根据接收各个写请求时间顺序在该写请求队列中记录各个写请求,当接收到新的写请求后,则交换机st0将所述写请求的id记录至所述写请求队列的队尾,当写请求完成之后,例如从存储节点接收到写请求的写完成确认信息之后,在确定该写请求的id为写请求队列的队列头的情况中,向发送该写请求的计算节点返回写请求完成信息,并将所述写请求的id从所述写请求队列中移除。例如,在图5所示的队列中,队列头对应于没有完成的写请求中最早接收的访问plog j的写请求,队列尾对应于没有完成的写请求中最晚接收的访问plog j的写请求。其中,request id5例如为写请求1
′
的id,request id6例如为写请求1
″
的id。
119.可以理解,该写请求队列的形式不限于如图5所示,例如,队列中除了包括写请求id之外,还可以包括该写请求的副本个数。当所述写请求队列中包括写请求的副本个数的情况中,交换机可基于该副本个数确定该写请求对应的各个存储节点是否都返回了该写请求,而不需要额外查询副本个数。例如,写请求队列中记录了写请求1
′
的副本个数为3个,当写请求1
′
位于写请求队列的队列头,并且当写请求1
′
对应的三个存储节点都返回写请求之后,交换机st0即可向计算节点c0返回写请求1
′
完成信息。在另一种实施方式中,所述写请求队列中可包括各个写请求的偏移地址。所述偏移地址即为plog j中分配给各个写请求的地址空间的起始地址,如上文所述,分配给写请求的偏移地址的大小与该写请求到达交换机的时间相关,写请求到达交换机的时间越早,被分配的偏移地址越小。因此,可将各个写请求被分配的偏移地址以从小到大的顺序排列在写请求队列中,各个偏移地址与一个写请求相对应。例如,交换机st0在接收到新的写请求后,将该写请求的偏移地址记录至写请求队列的队尾,当交换机st0从该写请求对应的存储节点接收到写请求完成确认信息之后,在确定该写请求的偏移地址为写请求队列的队列头的情况中,向发送该写请求的计算节点返回写请求完成信息,并将所述写请求的偏移地址从所述写请求队列中移除。
120.在步骤s311,存储节点将待写数据写入存储节点中地址空间2
′
中。
121.存储节点在接收到写请求2
′
之后,响应于该写请求2
′
在与plog j对应的存储空间中的地址空间2
′
中写入上述待写数据。参考图4,在存储节点s0、s1和s2中,分别在scm0、
scm1和scm2中的对应的存储空间中的地址空间2
′
中写入待写数据。
122.在步骤s312,存储节点向交换机返回写请求2
′
完成信息。
123.存储节点s0、s1和s2在分别在其存储空间中的地址空间2
′
中写入写请求1
′
中的待写数据之后,分别向交换机st0返回写请求2
′
完成信息。
124.在步骤s313,交换机确定写请求1
′
之前接收的访问plog j的写请求都已经完成。
125.交换机st0在分别从存储节点s0、s1和s2接收到写请求2
′
完成信息之后,说明写请求1
′
中的待写数据已经被写入到plog j对应的三个存储节点中。通过控制访问plog j的写请求在plog j的地址空间的保序写入,可以防止plog j对应的存储节点的存储空间中出现空洞。本发明实施例中,通过根据交换机接收访问plog j的写请求的顺序向计算节点返回写请求,实现写请求在plog j的地址空间的保序写入。由于交换机st0根据接收写请求的顺序为访问plog j的各个写请求分配plog j中的地址空间,因此,较早接收的写请求被分配的地址空间中的地址较小,通过根据接收写请求的顺序向计算节点返回写请求,也即根据写请求的写入地址的从小到大的顺序返回写请求,从而可在plog j的地址空间保序写入,防止存储节点中与plog j对应的存储空间出现空洞。
126.在本技术实施例中,可基于图5所示的写请求队列来进行该确定写请求1
′
之前接收的访问plog j的写请求都已经完成。例如,写请求1
′
的id为request id5,当request id5成为该写请求队列的队列头时,表示写请求1
′
为该写请求队列中最早接收的写请求,从而可确定在写请求1
′
之前接收的写请求当前都已经完成。如果在接收到存储节点s0、s1和s2接收到写请求2
′
完成信息之后,交换机st0确定所述request id5不是所述写请求队列中的队列头时,则一直等待,等待所述request id5为所述写请求队列中的队列头时,则确定写请求1
′
之前接收的访问plog j的写请求都已经完成。可以理解,本技术实施例不限于通过写请求队列的方式来确认写请求1
′
之前接收的访问plog j的写请求都已经完成,其他可以确定写请求1
′
之前接收的访问plog j的写请求都已经完成的方式也在本发明实施例提供的保护范围之内。
127.在步骤s14,交换机向计算节点返回写请求1
′
的相关信息。
128.交换机st0在确定写请求1
′
之前接收的访问plog j的写请求都已经完成之后,向计算节点c0返回写请求1
′
的相关信息,该相关信息中包括写请求1
′
成功完成信息,以及写请求1
′
被分配的plog j中的写入地址。当返回写请求1
′
的相关信息至计算节点后,所述交换机st0将所述写请求1
′
的id从所述写请求队列中删除。
129.具体是,在一种实现方式中,交换机st0在确定写请求1
′
之前的写请求都已经完成之后,向计算节点c0返回确认信息,所述确认信息用于指示写请求1
′
已经完成。计算节点c0在接收到确认信息之后,向交换机st0发送读取写请求1
′
的相关信息的读请求。交换机st0在接收到该读请求之后,向计算节点c0返回写请求1
′
的成功完成信息和写入地址。在另一种实施方式中,交换机st0在确定写请求1
′
之前的写请求都已经完成之后,可直接向计算节点c0返回写请求1
′
的成功完成信息和写入地址。
130.计算节点c0中的应用在获取该写请求1
′
的成功完成信息之后,将所述写请求1
′
的写入地址(即plog j,地址空间1
′
)记录在产生所述写请求1
′
的业务中,以方便后续业务对写入所述写入地址的数据进行读取操作。当计算节点c0中的应用需要读取通过上述写请求1
′
写入的数据时,可对交换机st0发送对plog j的地址空间1
′
的读请求,交换机st0根据
plog j的元数据,可从存储节点s0、s1和s2中任一个存储节点中的与地址空间1
′
对应的地址空间2
′
读取到该数据,并将该数据返回给计算节点c0。
131.图6为在plog i的剩余空间足够时所执行的流程b的流程图,该流程b中包括在plog i中进行写入的过程。
132.在步骤s601,当交换机在图2中的步骤s202确定plog i的剩余空间足够之后,即可确定可在plog i写入写请求1中的待写数据,因此,交换机在plog i中为写请求1分配地址空间1。在步骤s602,交换机根据plogi的元数据确定存储节点中与地址空间1对应的地址空间2,与上文类似地,该存储节点为与plog i对应的至少一个存储节点。在步骤s603,交换机向存储节点发送对存储空间2的写请求2。在步骤s604,存储节点对存储空间2进行写入。在步骤s605,存储节点返回写请求2的完成信息。在步骤s606,交换机确定写请求1之前接收的访问plog i的写请求都已经完成。在步骤s607,交换机向计算节点返回写请求1的相关信息。上述步骤s601~s607在plog i中写入写请求1中的数据的方式与图3中在plog j中写入写请求1’的数据的方式相同,具体可参考上文对步骤s308~s314的描述,在此不再详述。
133.与上文类似地,计算节点中的应用在获取该写请求1的成功完成信息之后,将所述写请求1的写入地址(即plog i,地址空间1)记录在产生所述写请求1的业务中,以方便后续业务对写入所述写入地址的数据进行读取操作。
134.上文中主要以多副本存储方式保证数据可靠性作为示例描述了本技术实施例提供的数据写入方法,本技术实施例还可以应用于通过对数据分片存储的方式保证数据可靠性的场景,例如通过(redundant arrays of independent disks,raid)算法及纠删码(erasure coding,ec)来保证写入数据的可靠性的场景。具体如图7的流程图及图8的示意图所所示。
135.如图7所示,首先,在步骤s701,计算节点向交换机发送对plog i的写请求1,所述写请求1用于写入数据1。
136.该写请求1中例如包括plog i的标识和待写的数据1。
137.在步骤s702,交换机在接收到写请求1之后,获取写请求1的待写数据的多个分片。
138.交换机在接收到写请求1之后,可根据预设ec算法或者raid算法将写请求1中的待写的数据1划分为多个数据分片,并计算多个数据分片的校验分片。或者计算节点可在发送写请求1之前将数据1划分为多个数据分片,并计算多个数据分片的校验分片,并在发送的写请求1中包括数据1的数据分片和校验分片,从而交换机可以从写请求1直接获取数据1的多个数据分片和校验分片。参考图8,交换机可将数据1平均分成大小相同的两个数据分片d1和d2(图8中以白色小矩形示出),并基于ec算法或raid算法计算出该两个数据分片的一个校验分片c1(图8中以灰色小矩形示出),从而获取数据1的三个分片d1、d2和c1,该三个分片的数据长度都是一致的。该数据1的三个分片为2个数据分片+1个校验分片的形式,从而,当将该三个分片分别存入到三个存储节点之后,可允许三个存储节点中的一个节点出现异常。具体是,通过d1+d2可直接拼接出数据1,而如果存储d1的存储节点出现异常,基于ec算法或raid算法,可通过d2+c1恢复出数据1。
139.在步骤s703,交换机确定plog i的剩余空间是否足够。
140.在本实施例中,是将数据1的各个分片分别存储到各个存储节点中,而不是存入数据1。因此,在该步骤中,确定plog i的剩余空间是否足够存储数据1的一个分片。如果空间
不足,则执行图3所示的流程a,如果空间足够,则可执行图6所示的流程b。
141.当在该方法中执行流程a时,与图2所示方法不同在于,参考图8,当在交换机st0中为写请求1
′
分配plog j中地址时,基于各个分片的大小来分配地址(地址空间1
′
)。另外,在向各个存储节点存入数据时,将各个分片存入到各个存储节点中与地址空间1
′
对应的地址空间2
′
,而不是将数据1存入到地址空间2
′
,通过以这样的方式来在存储系统中存储数据1,相比于多副本存储方式,减少了数据存储量,节省了存储介质资源。
142.与上文类似地,在将数据1的各个分片写入存储节点之后,交换机st0将写请求1
′
的成功完成信息和写入地址返回给计算节点c0。从而计算节点c0中的应用在获取该写请求1
′
的成功完成信息之后,将所述写请求1
′
的写入地址(即plog j,地址空间1
′
)记录在产生所述写请求1
′
的业务中,以方便后续业务对写入所述写入地址的数据进行读取操作。
143.图9为通过多分片存储的方式在计算机系统中读数据的过程示意图。参考图9,当计算节点c0中的应用希望读取上述存入的数据1时,计算节点可向交换机st0发送对plog j的地址空间1
′
的读请求。交换机st0可从例如存储节点s0和s1各自的与地址空间1
′
对应的地址空间2
′
读取数据1的数据分片d1和d2,通过将数据分片d1和d2进行拼接获取数据1,并将数据1返回给计算节点c0。
144.通过将业务的存储空间的元数据存储在所述中间设备上,以使中间设备通过所述元数据对所述业务的存储空间进行管理,这样,在写入数据时,计算节点只需要发送写请求至中间设备即可,中间设备根据所述元数据为所述写请求在所述存储空间中分配地址,并根据所分配的地址将数据写入存储设备,由于计算节点只需要发送请求至中间设备,所以减轻了计算节点的负载,也减少了数据写入的时延。
145.在本技术实施例中除了通过交换机运行并发写的控制逻辑之外,还可以通过交换机运行其它对plog的控制流程,下文将通过参考图10和图11描述避免读请求和删除请求的并发冲突的控制流程,通过参考图12描述避免写请求和只读设定请求的并发冲突的控制流程。
146.图10为本技术实施例提供的在计算机系统中读取数据的方法流程图,该方法可避免读请求与删除请求的并发冲突。
147.如图10所示,在步骤s1001,计算节点生成读请求1,该读请求1中包括待读数据对应的plog i和地址空间1。
148.例如,参考图1,计算节点c0可从用户终端接收对写请求1的写入数据(即数据1)的请求,之后,计算节点c0可响应于用户终端的请求生成读请求1。具体是,计算节点c0可基于预先记录的上述写请求1的写入地址生成读请求1,该读请求1中包括plod i和地址空间1,该地址空间1例如包括地址空间1的起始地址和地址空间1的长度。
149.在步骤s1002,计算节点向交换机发送读请求1。
150.如上文所述,例如,plog i与交换机st0相对应,因此,计算节点c0将读请求1发送给交换机st0。
151.在步骤s1003,交换机确定plog i可读。
152.参考上文对表1的描述,在交换机st0中记录有对应的各个plog的元数据,该元数据中包括plog的状态,所述状态例如包括可读写状态、只读状态和删除中状态。也就是说,交换机st0可通过在本地记录的plog i的元数据中查询plog i的状态,从而确定plog i是
否可读。如果plog i的状态为可读写状态或只读状态,则plog i可读,可继续进行图10中后续的步骤s1004~s1010。如果plog i的状态为删除中状态,则plog i不可读,从而交换机st0将阻塞该读请求1,或者将plog i为删除中状态的信息返回给计算节点c0。
153.在步骤s1004,交换机根据读请求1更新正在执行的访问plog i的读请求的信息。
154.在交换机中,会记录正在执行的访问plog i的读请求的信息,交换机会在接收到读请求时和完成读请求时更新所述正在执行的访问plog i的读请求的信息。通过记录正在执行的访问plog i的读请求的信息,在交换机还没有对访问plog i的读请求处理完成时,所述交换机接收到其它计算节点发送对plog i的删除请求时,交换机可基于正在执行的访问plog i的读请求的信息阻塞该删除请求。
155.具体是,所述正在执行的访问plog i的读请求的信息为所述交换机正在执行的访问plog i的读请求的数量,用变量a表示,在交换机在接收到读请求1之后,就对变量a的值加1,每完成一个读请求,则对变量a的值减1。
156.在步骤s1005,交换机确定存储空间中与地址空间1对应的地址空间2。该步骤可参考上文对步骤s309的描述,在此不再赘述。
157.在步骤s1006,交换机向存储节点发送对地址空间2的读请求2。该读请求2中包括地址空间2的信息,例如,包括地址空间2的起始地址和地址空间2的长度。
158.在步骤s1007,存储节点在接收到读请求2之后,根据读请求2对地址空间2进行读取。
159.在步骤s1008,存储节点向交换机返回读取的数据(即上述数据1)。
160.在步骤s1009,交换机更新正在执行的访问plog i的读请求的信息。
161.交换机st0在接收到从存储节点返回的读请求2之后,即表示在存储节点中对地址空间2的读取操作已经完成,则更新正在执行的访问plog i的读请求的信息,即交换机st0可对变量a的值减1。
162.在步骤s1010,交换机向计算节点返回读取的数据。
163.交换机st0可将读取的数据1返回给计算节点c0,从而计算节点c0可将数据1返回给用户终端。
164.图11为本技术实施例提供的在计算机系统中删除数据的方法流程图,该方法可避免读请求与删除请求的并发冲突。
165.如图11所示,在步骤s1101,计算节点向交换机发送对plog i的删除请求。
166.在一种实现方式中,计算节点c0中运行了多个上层应用,每个应用各自申请plog以用于存储该应用中产生的数据,也就是说,在该情况中,plog仅与一个应用相对应。应用的各个plog根据应用中的设定和其中记录的数据的类型而具有不同的生命周期。例如,plog i用于记录用户的浏览历史,并且在应用中设定将该浏览历史保持一周的时间,也就是说,plog i的生命周期为一周,在一周后将进行对plog i的删除。从而,在计算节点c0中,当plog i的生命周期结束之后,可向交换机st0发送对plog i的删除请求。
167.另外,计算节点也可以根据用户的删除操作产生对plog i的删除请求。
168.在步骤s1102,交换机在接收到对plog i的删除请求之后确定没有正在进行的对plog i的读请求。
169.交换机st0在接收到对plog i的删除请求之后,需要确定目前是否有正在进行的
对plog i的读请求,如目前存在正在进行的对plog i的读请求,则暂停执行该删除请求。在暂停执行删除请求之后,例如,可继续轮询确定是否有正在进行的读请求,即,轮询读取上述变量a的值,以确定变量a的值是否变为0,直到确定变量a的值为零(即确定没有正在进行的读请求)之后,再继续执行图11中的后续步骤,从而不会与正在执行的读请求产生冲突。
170.在步骤s1103,交换机记录plog i为删除中状态。
171.交换机st0在确定没有正在进行的对plog i的读请求之后,可在表1所示的plog i的元数据中将plog i的状态记录为删除中(delete)状态,以如上文所述阻塞后来的对plog i的读请求。
172.在步骤s1104,交换机确定plog i对应的存储空间。
173.交换机st0可基于plog i的元数据确定plog i对应的存储节点、以及各个存储节点中与plog i对应的存储空间。具体是,可通过确定各个存储节点中与plog i对应的存储空间的起始地址及该存储空间的大小,从而确定各个存储节点中与plog i对应的存储空间。
174.在步骤s1105,交换机向存储节点发送对所述存储空间的删除请求。
175.交换机st0向plog i对应的存储节点s0、s1和s2分别发送对plog i对应的存储空间的删除请求。该删除请求中例如包括存储节点s0、s1和s2中各个对应存储空间的起始地址和该存储空间的大小。
176.在步骤s1106,存储节点删除所述存储空间。
177.存储节点s0、s1和s2在分别接收到所述删除请求之后,各自进行对该存储空间的删除。例如,在存储节点s0中,基于删除请求中的存储空间的起始地址和大小确定该存储空间,删除该存储空间中已经存入的数据,并取消该存储空间已分配的记录,从而使得该存储空间可用于重新分配给其它plog。
178.在步骤s1107,存储节点返回删除成功信息。
179.存储节点s0、s1和s2在分别完成对所述存储空间的删除之后,分别向交换机st0返回删除成功信息。
180.在步骤s1108,交换机删除plog i的信息。
181.交换机st0基于plog i的元数据中记录的plog i对应的存储节点的信息,在确定存储节点s0、s1和s2都返回删除成功信息之后,可以在表1中删除对plog i的元数据的记录,从而完成对plog i的删除。
182.在步骤s1109,交换机向计算节点返回删除成功信息。
183.交换机st0在删除plog i的元数据之后,向计算节点c0返回删除成功信息,从而,计算节点c0可删除存储的plog i的相关信息。
184.这样,所述中间设备在接收到所述计算节点发送的对plogi的删除请求后,在所述plogi没有冲突的情况下,例如,没有访问所述plogi的读请求时,将所述plogi的状态设置为删除中状态,并指示所述存储节点删除所述逻辑存储空间对应的物理存储空间。
185.图12为本技术实施例提供的在计算机系统中设定数据只读的方法流程图,该方法可避免只读设定请求和写请求的并发冲突。
186.如图12所示,首先,在步骤s1201,计算节点向交换机发送对plog i的只读设定请求。
187.例如,在如图6所示对plog i进行写操作时,假设交换机st0在执行步骤s603发送对地址空间2的写请求2之后,由于存储节点出现异常等原因,交换机st0一直未从存储节点接收到写请求2的完成信息,因此也没有向计算节点c0返回写请求1完成信息。在该情况中,计算节点c0在预设时间内未接收到写请求1的完成信息之后,可确定写请求1执行失败,并向交换机st0发送对plog i的只读设定请求。
188.在步骤s1202,交换机确定没有正在进行的对plog i的写请求。
189.交换机st0在接收到对plog i的只读设定请求之后,需要首先确定当前有没有正在执行的对plog i的写请求,如果存在该写请求,只读设定请求与该写请求存在冲突,交换机st0暂停对该只读设定请求的执行。并且,在确定存在正在执行的对plog i写请求之后,交换机st0可继续轮询确定有没有正在执行的写请求,直到确定没有之后,再进行该只读设定请求。
190.具体是,与上文类似地,交换机st0可以在每次开始执行由计算节点发送的对plog i的写请求(例如图6中的写请求1)之后,根据写请求1更新正在执行的访问plog i的写请求的信息。例如,所述正在执行的访问plog i的写请求的信息为所述交换机正在执行的访问plog i的写请求的数量,用变量b表示,在交换机在接收到写请求1之后,就对变量b的值加1,每完成一个写请求,则对变量b的值减1。从而,交换机st0可基于变量b的值确定当前是否存在正在进行的对plog i的写请求,如果变量b的值为0,则可确定当前没有正在进行的对plog i的写请求。
191.在步骤s1203,交换机将plog i的状态修改为只读状态。
192.交换机st0在确定当前没有正在执行的对plog i的写请求之后,在plog i的元数据中将plog i的状态修改为只读状态。从而,当交换机st0后续接收到对plog i的写请求时,可基于plog i的只读状态阻塞该写请求。
193.在步骤s1204,交换机向计算节点返回只读设定成功信息。
194.这样,当中间设备在接收到所述计算节点发送的对plogi的只读设定请求后,在所述plogi没有冲突的情况下,例如,没有访问所述plogi的写请求时,则将所述plogi的状态设置为只读状态。
195.参考上文对图10-图12所示方法的描述可见,交换机通过维护plog的状态信息和io信息,可向各个计算节点提供一致的plog信息,并可基于该一致的信息进行并发逻辑控制。
196.在本技术实施例中,将原来由计算节点或存储节点运行的控制逻辑卸载到作为网络汇集点的可编程中间设备上,计算节点在写入数据的过程中,只需要与交换机进行一次通信,就可以对存储节点写入数据,有效降低了计算节点与交换机之间的通信次数,减少了计算节点的负载,且减少了数据写入的时延,提升了访问效率。
197.图13为本技术实施例提供的一种数据处理装置1300的结构示意图,所述装置1300部署于中间设备中,所述中间设备连接计算节点及存储节点,所述计算节点上运行业务,所述存储节点上存储所述业务的数据;所述装置用于执行上文参考图2~图12所述的数据处理方法,所述装置1300包括:
198.接收单元131,用于接收所述计算节点发送的对所述业务的数据的第一写请求;
199.确定单元132,用于确定将所述第一写请求中的待写数据写入所述存储节点的第
一地址;及
200.写入单元133,用于请求所述存储节点将所述待写数据写入所述第一地址。
201.在一种实现方式中,所述第一写请求访问所述业务的数据对应的逻辑存储空间,所述中间设备保存所述逻辑存储空间的元数据,所述逻辑存储空间的元数据包括所述逻辑存储空间的标识,所述逻辑存储空间的地址信息,以及所述逻辑存储空间对应的物理存储空间的地址信息,所述物理存储空间属于所述存储节点中的空间,所述第一地址为所述物理存储空间中的地址。
202.在一种实现方式中,所述确定单元132还用于:为所述第一写请求在所述逻辑存储空间中分配第二地址;根据所述逻辑存储空间的元数据在所述逻辑存储空间对应的物理存储空间中确定写入所述待写数据的第一地址。
203.在一种实现方式中,所述接收单元131还用于接收所述存储节点发送的用于通知所述待写数据已经写入完成的通知消息;所述装置1300还包括通知单元134,用于在确定在所述第一写请求之前接收的针对所述逻辑存储空间的其它写请求已完成时,通知所述计算节点所述第一写请求已完成。
204.在一种实现方式中,所述装置1300还包括:分配单元135,用于根据从计算节点接收的所述逻辑存储空间的信息,请求所述存储节点为所述逻辑存储空间分配物理存储空间。
205.在一种实现方式中,所述确定单元132用于从所述逻辑存储空间的未分配空间中按照地址从小到大的顺序为所述第一写请求分配所述第二地址。
206.在一种实现方式中,所述存储节点包括第一存储节点和第二存储节点,所述第二地址对应所述第一存储节点中写入所述待写数据的第一地址,及所述第二存储节点中写入所述待写数据的第一地址,所述写入单元133包括:第一写入子单元1331,用于请求所述第一存储节点将所述待写数据写入所述第一存储节点中写入所述待写数据的第一地址;第二写入子单元1332,用于请求所述第二存储节点将所述待写数据写入所述第二存储节点中写入所述待写数据的第一地址。
207.在一种实现方式中,所述装置1300还包括冲突处理单元136,用于在从所述计算节点接收对所述存储空间的只读设定请求时,在确定所述逻辑存储空间没有冲突的情况下,将所述存储空间的状态设置为只读状态。
208.在一种实现方式中,所述装置1300还包括冲突处理单元136,用于在从所述计算节点接收对所述存储空间的删除请求时,在确定所述逻辑存储空间没有冲突的情况中,将所述逻辑存储空间的状态设置为删除中状态,并请求所述存储节点删除所述逻辑存储空间对应的物理存储空间。
209.在一种实现方式中,所述装置1300还包括:获取单元137,用于在接收所述计算节点发送的第一写请求之后,获取所述第一写请求中的待写数据的n个分片,所述写入单元133用于分别请求n个存储节点分别将所述n个分片写入所述n个存储节点的第一地址。
210.图14为本技术实施例提供的一种中间设备1400的结构示意图。如图14所示,中间设备1400包括存储单元141和处理单元142,所述存储单元141中存储有可执行代码,所述处理单元142执行所述可执行代码时,实现上文参考图2~图12所述的数据处理方法。
211.图15为本技术实施例提供的一种中间设备1500的结构示意图。如图15所示,中间
设备1500包括:通信接口151,用于与存储节点及计算节点进行数据传输;处理单元152,用于对所述通信接口接收的数据进行处理,以执行上文参考图2~图12所述的数据处理方法。
212.可以理解,上文所述计算节点和存储节点可以为物理服务器,也可以为云服务器(如虚拟服务器)。图16为根据本技术实施例的云服务系统1600的示意图。参见图16,所述系统1600包括:计算设备1601、存储设备1602和中间设备1603。所述计算设备1601包括硬件层16016和运行在硬件层16016之上的虚拟机监控器(vmm)16011,以及多个虚拟机(vmi)16012。任一所述虚拟机16012可以作为云服务系统1600的一个虚拟的计算节点。所述存储设备1602与计算设备1601类似地包括硬件层和运行在硬件层之上的虚拟机监控器(vmm),以及多个虚拟机(vmj),任一所述虚拟机可以作为云服务系统1600的一个虚拟的存储节点。下文将详细描述计算设备1601的组成作为示例。
213.具体的,虚拟机16012是通过虚拟机软件在公共硬件资源上模拟出的虚拟的计算机(服务器),虚拟机上可以安装操作系统和应用程序,虚拟机还可访问网络资源。对于在虚拟机中运行的应用程序而言,虚拟机就像是在真正的计算机中进行工作。
214.硬件层16016是虚拟化环境运行的硬件平台,可以由一个或多个物理主机的硬件资源抽象得到的。其中,硬件层可包括多种硬件,例如,硬件层16016包括处理器16014(例如cpu)和存储器16015,还可以包括网卡(即nic)16013、高速/低速输入/输出(i/o,input/output)设备,及具有特定处理功能的其它设备。其中,存储器16015可以为易失性存储器(volatile memory),例如随机存取存储器(random-access memory,ram)、动态随机存取存储器(dynamic random-access memory,dram);所述存储器16015也可以为非易失性存储器(non-volatile memory),例如只读存储器(read-only memory,rom),快闪存储器(flash memory),硬盘(hard disk drive,hdd)、固态硬盘(solid-state drive,ssd)、存储级内存(storage class memory,scm)等;所述存储器16015还可以包括上述种类的存储器的组合。虚拟机16012基于vmm 16011,以及硬件层16016提供的硬件资源,运行可执行程序,以实现上述实施例中由计算节点执行的方法步骤。为了简洁,在此不再赘述。
215.需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。
216.本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
217.以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。