并行化的网络聚合修复方法、系统和设备

文档序号:33000208发布日期:2023-01-18 01:01阅读:27来源:国知局
并行化的网络聚合修复方法、系统和设备

1.本发明属于纠删码存储系统的数据块修复技术领域,涉及一种并行化的网络聚合修复方法、系统和设备。


背景技术:

2.纠删码(ec)是一种低成本的容错机制,被许多分布式存储系统(dss)广泛采用,与基于复制的容错设计相比,基于纠删码的容错方案为分布式存储系统节省了大量的空间开销。当基于纠删码的dss遇到节点故障时,修复失效的存储块(称为降级读)需要从其他存储节点检索许多相关的存储块,这导致巨大的广播流量。未解决该难题,本领域中主要是利用部分参与的存储节点聚合其他节点上相关的存储块,从而减少发送数据的总量。
3.基于此,传统的修复工作可以大致分为两类,即块级别的调度方案和流水线方案,前者侧重于调度何时以及在何处使用incast树调度相关存储块,以避免潜在的网络瓶颈;后者则是将一些中间节点上的多个小块单元聚合为一个单元,然后将它们发送到下一跳,以避免入口链路瓶颈的问题。随着研究的深入,可编程交换机和网络内计算技术的出现,也给纠删码存储系统中失效修复的策略改进提供了新的契机,基于此已出现了构建多个并行的树状流水线来提高修复性能,同时利用路由路径上的中间节点(如交换机或服务器)来聚合相关数据,以避免incast传输等网内聚合的修复技术。然而,在实现本发明的过程中,发明人发现前述传统的修复技术仍然存在着修复性能不足的技术问题。


技术实现要素:

4.针对上述传统方法中存在的问题,本发明提出了一种能够大幅提高失效存储块修复性能的并行化的网络聚合修复方法、一种并行化的网络聚合修复系统、一种计算机设备和一种计算机可读存储介质。
5.为了实现上述目的,本发明实施例采用以下技术方案:
6.一方面,提供一种并行化的网络聚合修复方法,包括步骤:
7.帮助器将相关存储块拆分为多个子块并分别分配给相应的多条树形流水线对应的发送队列;每条树形流水线均采用专属标识号和自身的传输吞吐量进行标识;
8.根据树形流水线的传输吞吐量,将相应发送队列中的子块打包成相应acp报文后发送至下一节点;acp报文携带子块处理标识、子块相应的树形流水线的专属标识号以及为子块分配的序列号,子块处理标识包括聚合标识或转发标识;
9.下一节点根据子块处理标识、子块相应的树形流水线的专属标识号以及序列号,对acp报文进行聚合处理后送往后续节点或将acp报文转发至后续节点;
10.当帮助器完成相关存储块的传输时,在各树形流水线的末端收集数据的请求者根据各专属标识号,将收到的所有acp报文解包成各子块后生成修复块;
11.请求者利用修复块修复失效存储块。
12.另一方面,还提供一种并行化的网络聚合修复系统,包括帮助器、中间各节点和请
求者,在收到协调器的修复指令后,帮助器将相关存储块拆分为多个子块并分别分配给相应的多条树形流水线对应的发送队列;每条树形流水线均采用专属标识号和自身的传输吞吐量进行标识;
13.根据树形流水线的传输吞吐量,帮助器将相应发送队列中的子块打包成相应acp报文后发送至下一节点;acp报文携带子块处理标识、子块相应的树形流水线的专属标识号以及为子块分配的序列号,子块处理标识包括聚合标识或转发标识;
14.下一节点根据子块处理标识、子块相应的树形流水线的专属标识号以及序列号,对acp报文进行聚合处理后送往后续节点或将acp报文转发至后续节点;
15.当帮助器完成相关存储块的传输时,在各树形流水线的末端收集数据的请求者根据各专属标识号,将收到的所有acp报文解包成各子块后生成修复块,请求者利用修复块修复失效存储块。
16.又一方面,还提供一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述的并行化的网络聚合修复方法的步骤。
17.再一方面,还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的并行化的网络聚合修复方法的步骤。
18.上述技术方案中的一个技术方案具有如下优点和有益效果:
19.上述并行化的网络聚合修复方法、系统和设备,对于提供相关存储块的各帮助器,通过帮助器将相关存储块拆分为多个子块后采用paint构建的多个并行树状流水线进行并行传输,在传输过程中每个子块都以acp报文的数据包形式传输,由于每个树状流水线都有其专属标识号,因此每个acp报文中也相应携带了子块来自的树状流水线的专属标识号,并且每个acp报文中携带了子块处理标识以区分该acp报文是需要进行子块数据聚合后再传输的信息包,还是不需要聚合而直接转发的普通信息包,同时每个acp报文中还携带了为子块分配的序列号。
20.因此,对于树状流水线上的任意节点而言,在收到前一节点传来的acp报文后,紧邻前一节点的下一节点均可首先根据acp报文中携带的子块处理标识来区分该acp报文是需要聚合后传输的信息包,还是直接转发的信息包,如果是需要聚合后传输的信息包则根据acp报文中携带的专属标识号以及序列号,该下一节点将收到的来自相同树状流水线且序列号相同的acp报文聚合后再送往后续节点,否则直接将acp报文直接转发后续节点。请求者在各树形流水线的末端收集数据,当所有帮助器完成相关存储块的传输时,请求者根据专属标识号组装接收到的所有子块,从而重新生成修复块以完成失效存储块的修复。
21.相比于传统技术,上述方案利用paint通过构建多个并行的树状流水线来提高修复性能,同时利用路由路径上的中间节点(如交换机或服务器)来聚合相关数据,以避免incast传输,在此基础上,提出来聚合控制协议acp来管理不同修复流水线,解决并行网络修复所面临的报文识别、可靠性和速率控制等问题,从而达到大幅提高失效存储块修复性能的目的。
附图说明
22.为了更清楚地说明本技术实施例或传统技术中的技术方案,下面将对实施例或传统技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本
申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
23.图1为纠删码编码过程示意图;
24.图2为一个实施例中并行化的网络聚合修复方法的流程示意图;
25.图3为另一个实施例中并行化的网络聚合修复方法的流程示意图;
26.图4为一个实施例中paint修复网络的概览示意图;
27.图5为一个实施例中acp报文的组成示意图;
28.图6为一个实施例中待修复失效存储块的示例示意图;
29.图7为一个实施例中失效存储块的修复示例示意图;
30.图8为一个实施例中在可编程交换机上部署网内聚合的示例示意图;
31.图9为一个实施例中paint两条并行化流水线的性能示意图,其中,(a)为每批发送的报文数量与流水线吞吐量的曲线,(b)为每批发送的报文数量与修复时间的曲线;
32.图10为一个实施例中paint和sp方法对比示意图,其中,(a)为每批发送的报文数量与吞吐量的曲线,(b)为为每批发送的报文数量与修复时间的曲线;
33.图11为一个实施例中不同块大小设置下的修复时间对比示意图;
34.图12为一个实施例中并行化的网络聚合修复系统的模块结构示意图。
具体实施方式
35.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
36.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中在本技术的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本技术。
37.需要说明的是,在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置展示该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。
38.本领域技术人员可以理解,本文所描述的实施例可以与其它实施例相结合。在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
39.incast传输不仅造成了沉重的网络负担,而且修复延迟大。当目的节点同时接收来自多个源的流量时,其入口链路可能成为网络瓶颈。因此,传输过程可能会引入显著的网络延迟,并拖累修复性能。未解决这些难题,本领域中已有的修复方法主要有部分并行修复机制(ppr)、修复流水线(rp)、修复树(rt)以及采用多个并行的树状流水线的修复方法(paint)等。
40.其中,可编程交换机的兴起为传统的存储转发网络提供了强大的计算和缓存能力。网络内聚合用于分布式搜索、机器学习、虚拟网络功能以及其他功能正在可编程交换机上逐步探索,以实现有效的数据约减。在dss中使用可编程交换机帮助进行失效存储块修复,当出现降级读时,可以在路径上的可编程交换机上聚合修复流量,从而有效地减少带宽
消耗,因此这种修复模式称为网内修复。此外,并行化还可以为失效存储块修复提供显著的性能改进,因为仓库集群和数据中心中的任意一对服务器之间通常有多条并行且相等的路径。修复操作可以进一步分解为多个管道并在不同的路由路径上并行执行。这种并行修复模式可以充分利用可用带宽,以减少降级读的延迟并确保服务质量,减小集群受到大量流量的影响。然而到目前为止,关于此类的设计研究还很少。
41.在纠删码存储系统中,文件通常被存储为固定大小的块,这是基本的读写单元。通常,在(k,m)纠删码存储系统中,一个条带上的每k个原始的数据块被编码在一起以产生m个冗余块。这k个原始块来自源文件称为数据块,而m个冗余块则称为校验块,主要用于容错。在同一条带上的k+m个块以分布式的方式存储在k+m个节点上。每个块可以通过解码该条带上任意k个块重新生成,因此,系统可以容忍高达m个节点故障而不丢失数据。
42.当前广泛使用的纠删码满足线性特性,包括rs编码、lrc编码、msr码和mbr码等。具体地说,将k个相关块表示为b1,b2,

,bk。在同一条带上的任何一个块b
*
可以由k个块的线性组合来计算,表示为其中αi是块bi对应的解码系数,加法和乘法是基于有限域上的伽罗华域算法。在实际部署中,块的编码和解码是在小的编码单元上执行的,以获得更好的性能,称为词组(word)。一个词组的大小可以是多个比特位,例如8位或16位。每个块对应位置的词组被编码在一起,形成一个编码组。不同编码组的编码和解码是相互独立的,如图1所示。因此,在修复失效存储块时,系统可以在接收到每个块的一小部分后进行词组级别的解码操作,而不是等待整个块被接收,这也是流水线修复方案的理论基础。
43.在研究中,发明人发现采用多个并行的最小最宽有向斯坦纳树(minimum-widestdirected steiner tree,mwdst)的paint修复方法,虽然其提高了修复纠删码存储系统时的修复吞吐量,并利用了传输路径上的可编程交换机节点实现数据的网络内聚合,降低了传输代价,但在实际应用中,仍有一些关键挑战需要解决:例如不同的管道可能会相互冲突,需要精心设计来建造和协调它们;路由算法非常耗时,为并行网络内修复生成路由路径是一类np困难的问题,即使只构建一个管道;与服务器不同的是,可编程交换机具有自己的计算逻辑和体系结构,需要精心设计才能实现相关数据的缓存和聚合,同时还需要处理诸如丢包和无序等网络错误。为应对这些挑战,就需要设计一种新的修复控制方法来控制网络内的修复过程,使基于paint修复方法所进行的失效存储块修复性能得到进一步的显著提升。
44.综上,本技术的设计思路是基于paint的并行化网络聚合修复方案,利用其在纠删码存储系统中失效块修复,通过构建多个并行的树状流水线来提高修复性能,同时利用路由路径上的中间节点(如交换机或服务器)来聚合相关数据,以避免incast传输之外,设计了新的聚合控制方式
‑‑
(aggregation control protocol,acp),可称为聚合控制协议。通过acp解决并行网络修复所面临的报文识别、可靠性和速率控制等问题,实现进一步地显著提高失效存储块修复性能的目的。
45.下面将结合本发明实施例图中的附图,对本发明实施方式进行详细说明。
46.请参阅图2,在一个实施例中,本技术实施例提供了一种并行化的网络聚合修复方法,包括如下处理步骤s12至s20:
47.s12,帮助器将相关存储块拆分为多个子块并分别分配给相应的多条树形流水线
对应的发送队列;每条树形流水线均采用专属标识号和自身的传输吞吐量进行标识。
48.可以理解,帮助器是指网络中能够提供用于修复失效节点中失效存储块的相关存储块的网络存储节点,在网络中可以有多个帮助器。多条树形流水线可以预先计算确定,其路由路径的具体计算实现方式可以参见paint修复方法中多条并行的树状(形)流水线的计算实现方式同理理解,区别是在本技术中,多条并行的树状流水线还分配了其各自专属的专属标识号(也称流水线id),每条树状流水线可以由一个流水线id和它的传输吞吐量来标识。
49.具体的,对于每一个帮助器而言,帮助器会对其相关存储块进行编码并将其拆分为多个子块,这些子块(每个子块包含多个纠删码编码词组)被分配给每个流水线对应的发送队列,例如对于第i个帮助器,其根据本地块bi的编码系数αi计算一个编码块α
ibi
。假设总共有λ条树状流水线,第j条树状流水线的吞吐量记为sj。因此,每个帮助器将其存储的块α
ibi
分割为λ个子块,每个子块分配给一条树形流水线。
50.s14,根据树形流水线的传输吞吐量,将相应发送队列中的子块打包成相应acp报文后发送至下一节点;acp报文携带子块处理标识、子块相应的树形流水线的专属标识号以及为子块分配的序列号,子块处理标识包括聚合标识或转发标识。
51.可以理解,发送队列和帮助器中的流水线id之间是一一对应的,每个发送队列以相应流水线预测的传输吞吐量发送数据。为了避免出现掉队者拖累整个修复速度,应当保持各树形流水线的完成时间一致,为此,需要根据各树形流水线的传输吞吐量来协调传输的数据量。因此,对于大小为m的相关存储块,分配给第j个树形流水线的子块的大小为mj:
[0052][0053]
其中,si表示第j条树状流水线上第i个节点的吞吐量。例如,以sjmbps的速度发送第j个子块,该子块可以由聚合控制协议(acp)控制。这些子块被打包到acp报文中进行传输。每个acp报文的有效载荷由子块中的多个纠删码编码词组组成。因此,来自具有相同流水线id的不同帮助器的数据包(也即acp报文)可以被聚合,只要这些数据包在块的相同位置。在每个acp报文的头部,记录了子块的序列号和子块对应的流水线id。由于树形流水线的路由路径是预先计算出来的,因此进行数据聚合的中间节点也是预先确定的。因此,当子块的序列号和流水线id相同的acp报文经过同一个节点时,该节点可将这些acp报文执行异或操作进行聚合,然后将聚合后的acp报文沿指定路径发送到下一节点。对于不需要聚合的acp报文,该节点直接通过链路共享进行转发和传输。
[0054]
而对于acp报文是需要聚合的数据包还是不需要聚合的普通数据包,则由acp报文携带的子块处理标识来标记,如acp报文携带的是聚合标识,即说在当前节点上收到的该acp报文是一个需要聚合的数据包,如acp报文携带的是转发标识,即说在当前节点上收到的该acp报文是一个不需要聚合的普通数据包。子块的序列号可由聚合控制协议acp自动为子块分配,在正常传输中,接收端接收到是序列号连续的数据包,如此,即使有少量的acp报文发生乱序,接收端也可以根据子块的序列号恢复acp报文的乱序问题。
[0055]
s16,下一节点根据子块处理标识、子块相应的树形流水线的专属标识号以及序列号,对acp报文进行聚合处理后送往后续节点或将acp报文转发至后续节点。
[0056]
可以理解,在树形流水线的路由路径上传输的下一节点在收到其前一节点传来的acp报文后,可以首先根据该acp报文的子块处理标识确定该acp报文是否需要进行聚合,如果需要聚合,那么该下一节点会将收到的与该acp报文拥有相同序列号和流水线id的其他acp报文进行聚合后,再将聚合后的新acp报文送往后续节点。如果不需要聚合,那么该下一节点会直接通过链路共享进行转发和传输给后续节点。
[0057]
s18,当帮助器完成相关存储块的传输时,在各树形流水线的末端收集数据的请求者根据各专属标识号,将收到的所有acp报文解包成各子块后生成修复块;
[0058]
s20,请求者利用修复块修复失效存储块。
[0059]
可以理解,请求者在各树形流水线的末端负责收集数据,以修复失效节点上的失效存储块。当各帮助器完成其相关存储块的传输时,请求者根据流水线id组装对接收到acp报文解包后的子块,从而重新生成于失效存储块相同的修复块b
*

[0060]
上述并行化的网络聚合修复方法,对于提供相关存储块的各帮助器,通过帮助器将相关存储块拆分为多个子块后采用paint构建的多个并行树状流水线进行并行传输,在传输过程中每个子块都以acp报文的数据包形式传输,由于每个树状流水线都有其专属标识号,因此每个acp报文中也相应携带了子块来自的树状流水线的专属标识号,并且每个acp报文中携带了子块处理标识以区分该acp报文是需要进行子块数据聚合后再传输的信息包,还是不需要聚合而直接转发的普通信息包,同时每个acp报文中还携带了为子块分配的序列号。
[0061]
因此,对于树状流水线上的任意节点而言,在收到前一节点传来的acp报文后,紧邻前一节点的下一节点均可首先根据acp报文中携带的子块处理标识来区分该acp报文是需要聚合后传输的信息包,还是直接转发的信息包,如果是需要聚合后传输的信息包则根据acp报文中携带的专属标识号以及序列号,该下一节点将收到的来自相同树状流水线且序列号相同的acp报文聚合后再送往后续节点,否则直接将acp报文直接转发后续节点。请求者在各树形流水线的末端收集数据,当所有帮助器完成相关存储块的传输时,请求者根据专属标识号组装接收到的所有子块,从而重新生成修复块以完成失效存储块的修复。
[0062]
相比于传统技术,上述方案利用paint通过构建多个并行的树状流水线来提高修复性能,同时利用路由路径上的中间节点(如交换机或服务器)来聚合相关数据,以避免incast传输,在此基础上,提出来聚合控制协议(acp)来管理不同修复流水线,解决并行网络修复所面临的报文识别、可靠性和速率控制等问题,从而达到大幅提高失效存储块修复性能的目的。
[0063]
在一个实施例中,如图3和图4所示,关于上述步骤s12之前,具体还可以包括如下处理步骤s08至s11:
[0064]
s08,触发降级读时,请求者向协调器发送修复请求;
[0065]
s09,协调器收到修复请求后查询本地元数据并将相关帮助器的信息发送给网络控制器;
[0066]
s10,网络控制器根据相关帮助器的信息计算多条并行的树状流水线的路由路径并预测路径的传输吞吐量;
[0067]
s11,网络控制器为每条树状流水线分配专属标识号后,将并行的各条树状流水线的信息通过协调器发送给各相关帮助器,同时向并行的各树状流水线的路由路径上涉及的
相关节点传递流规则信息。
[0068]
可以理解,如图4所示,是一个paint修复网络的概览示意图,当读取某个失效块而触发降级读操作时,请求者向网络中的协调器(可以是网络中的一台辅助管理服务器)发送一个修复请求来修复失效节点上的失效存储块。当协调器接收到修复请求时,会查询本地元数据并将相关帮助器的信息发送给网络控制器(可以是网络中的一台主管理服务器)。相关帮助器的信息可以是能够提供相关存储块的各帮助器的地址及其存储的相关存储块等信息。
[0069]
根据当前收到的网络信息,网络控制器计算多个树形流水线的路由路径并预测其传输吞吐量。路由路径的计算方法可以是分别计算多个并行的斯坦纳树获得,具体可参见传统paint修复方法中多条并行的树形流水线的计算实现方式同理理解。每个树形流水线由一个流水线id号及其预测的传输吞吐量来标识。然后,网络控制器会把计算得到各树形流水线的相关信息通过协调器发送给相应的各帮助器,同时,网络控制器向网络中涉及的相关节点传递相关的流规则信息,该流规则信息包括节点上的数据处理(如聚合或转发等)规则信息、数据形式(如子块以acp报文的形式打包传输)信息和涉及的路由路径信息等,该流规则信息告知相关节点涉及的路由路径以及所需进行的数据处理操作等。
[0070]
通过上述协调步骤,可以在触发降级读时,高效确定相关帮助器并计算得到多条分配有专属标识号的并行树状流水线,为后续修复处理快速做好准备。
[0071]
在一个实施例中,如图5所示,acp报文包括udp报文头、magic字段、pipeid字段、blockid字段和payload字段,magic字段用于记录聚合标识或转发标识,聚合标识用于向节点指示当前acp报文为需要聚合的信息包,转发标识用于向节点指示当前acp报文为直接转发的普通信息包。pipeid字段用于记录子块相应的树形流水线的专属标识号,blockid字段用于记录为子块分配的序列号,payload字段用于记录子块的数据。
[0072]
可以理解,提出的聚合控制协议(acp),让paint完成流水线式的网络内聚合。本技术提出的acp协议是传统udp协议的扩展。选择udp协议而不是tcp协议的主要原因是tcp面向可靠连接,但在进行网内聚合时,需要对部分报文进行聚合。因此,在使用tcp协议时,客户端会认为自己的报文丢失,从而可能不断地触发重传,使得修复过程进入一个无限循环。相比之下,udp协议不受这些约束并且是相对可扩展的。
[0073]
然而,发明人在实践中研究发现udp协议只负责传输数据,不能保证传输的可靠性。因此,在实际应用中部署网络内聚合时需要进一步解决以下三个挑战:其一是识别。网络中普通报文会干扰聚合进程,中间节点应该识别并确定哪些数据包(也称信息包)需要被聚合,哪些数据包则是不需要聚合的普通报文。此外,由于纠删码本身的编码特性,只有同一编码组中的相关数据可以聚合,而不同编码组中的数据是不相关而不应聚合的。这需要中间节点在进行网络内聚合之前识别哪些包是相关的,哪些包是不相关的,否则,不相关的数据包可能会聚合在一起而导致错误的块。
[0074]
其二是可靠性。udp协议不能保证传输的可靠性,因此,当一些信息包丢失或乱序时,请求者可能会生成带有错误的存储块,这可能会给存储系统带来灾难。
[0075]
其三是速率控制。udp协议不能控制发送速率。然而,纠删码存储系统中的块通常是相对较大的大小(例如,hdfs默认为64mb)。如果没有有效的速率控制,很容易导致收发队列溢出,造成持续性的丢包。
[0076]
为了解决上述挑战,本技术的acp报文扩展了传统的udp包。一个标准的acp报文如图5所示。在udp报文头(即既有的udp header)后面,增加三个字段。其中,magic字段由一个唯一的比特序列组成,记录聚合标识或转发标识,用于区分网络中要聚合的信息包和普通信息包。pipeid字段记录了子块相应的树形流水线的专属标识号,用于标记数据包属于哪个树形流水线,这是基于paint采用多个并行树形流水线来修复失效块的缘故。blockid字段进一步标识每个包的序列号,序列号可以循环的方式编号,最大值取决于中间节点的数量。在当前的实现中,其中一种实现示例是将magic字段设置为16位,pipeid字段设置为8位,而blockid字段设置为16位,在不同应用场景中,还可以根据实际需要选择设置其他位大小。在acp报文的末尾是payload字段,存储来自帮助器的存储块的数据,该字段的大小可以根据不同的网络条件进行调整,但应是纠删码编码词组大小的整数倍,例如在当前的实现中,payload字段的大小可被设置为8kb。
[0077]
解决识别问题:要修复一个失效存储块,网络控制器首先根据网络信息计算路由路径,网络信息由多个有向斯坦纳树(dst)组成。每个dst都是用唯一流水线id标记的独立树形流水线的路由路径。然后,网络控制器将信息传递给网络中的相关节点。对于选择作为帮助器的存储节点,其将相关存储块分成多个子块并分别通过每个树形流水线传输。通过每个树形流水线的数据包在其pipeid字段中使用流水线id标记。
[0078]
如图6所示,是一个待修复失效存储块的示例示意图,h1、h2和h3是存储相应的相关存储块(b1、b2和b3)的节点,作为帮助器;h5是请求者;s1至s7是可编程交换机。假设主机h4发生降级读的故障,请求者h5需要修复h4上的失效存储块b4。
[0079]
如图7所示,是一个失效存储块的修复示例示意图,修复过程被拆分成两条并发树形流水线,其中流水线1的预测吞吐量是14mbps,流水线2的预测吞吐量是8mbps,假设块大小是8mb。
[0080]
树形流水线中涉及的其他节点可分为两类,一类是转发节点,只对收到的acp报文按照匹配动作表进行转发。acp报文的转发是通过识别报文的magic字段和pipeid字段来完成的。另一类称为聚合节点,网络控制器指定其(聚合节点)子节点的数量,也就是说,每个树形流水线需要在这些节点上聚合多少个包。以图6为例,其一种可行的修复路径可以被构建为图7的示例,可编程交换机s3是一个聚合节点,其应该聚合来自管道1的2个子节点和管道2的2个子节点的数据包。
[0081]
通过上述acp报文的设计,可以有效解决识别问题。
[0082]
在一个实施例中,关于上述步骤s16中,对acp报文进行聚合处理后送往后续节点的过程,具体可以包括如下处理:
[0083]
下一节点在收到一个具有新的序列号的acp报文时,对acp报文进行临时存储;
[0084]
当具有相同树形流水线的专属标识号和序列号的acp报文的临时存储数量达到设定值时,下一节点将临时存储的各acp报文聚合后送往后续节点。
[0085]
可以理解,每次下一节点(如图5中的可编程交换机s3)接收到一个具有新的blockid字段的acp报文时,可编程交换机s3应临时存储该acp报文的数据,并等待具有相同pipeid字段和blockid字段的其他报文。当此类acp报文的临时存储数量达到指定的设定值时,就可以将这些报文聚合并转发给后续的再下一个节点,其中,该指定的设定值可以根据实际需要为中间节点设置。
[0086]
通过上述处理,即可有效且可靠地实现中间节点上对需要聚合的acp报文的网络内聚合控制。
[0087]
在一个实施例中,上述并行化的网络聚合修复方法,进一步的还可以包括如下处理步骤:
[0088]
接收方在收到设定数量的acp报文后,发送多条确认消息通知所有发送方;接收方为请求者,发送方为各帮助器;
[0089]
各发送方收到确认消息后,继续发送下一批设定数量的acp报文。
[0090]
可以理解,acp协议通过在数据包中设置magic字段、pipeid字段和blockid字段来解决识别问题。为了进一步解决剩下的两个挑战,acp协议在应用层也制定了一些规范。如上所述,acp报文的blockid字段为每个报文标记了一个序列号。正常情况下,当网络中没有丢包和乱序时,接收方应该接收到blockid字段中数字为连续的数据包。即使有少量的报文发生乱序,接收方也可以根据blockid字段恢复报文的乱序。
[0091]
但是,当许多报文发生错误甚至丢失时,仅靠acp报文中的信息已无法解决该问题。为此,acp协议在应用层引入了与tcp协议类似的确认机制。即接收方在收到设定数量的报文后,发送多条确认消息(即ack消息),通知所有发送方。然后,这些发送方再继续发送下一批数据包。每批数据包中的包数(可表示为τ)可根据网络延迟和包丢失情况动态调整,也可以采用固定值。如此,收发双方就可以实现动态速率控制。具体来说,τ的值应小于或等于blockid字段的最大值,如此,通过上述处理步骤,当多报文出现乱序时,接收端可以根据报文的blockid字段准确恢复报文的乱序。
[0092]
在一个实施例中,上述并行化的网络聚合修复方法,进一步的还可以包括如下处理步骤:
[0093]
当接收方在设定时长没有收到设定数量的acp报文时,触发计时器超时并指示所有发送方重新发送设定数量的acp报文;
[0094]
每个发送方在重新发送acp报文前,分别通过相应树形流水线发送一个特定acp报文;特定acp报文用于指示相应树形流水线上的中间节点清除此前存储的acp报文;
[0095]
接收方接收到每个发送方的特定acp报文后,分别向每个发送方返回确认消息;
[0096]
每个发送方收到确认消息后,重新传输前一批设定数量的acp报文。
[0097]
可以理解,当有一段时间(即设定时长)没有收到τ个包时,接收方触发一个计时器超时并要求所有发送方重新发送τ个包。需要注意的是,在网络内聚合的情况下,重传操作并不简单地等同于传统的报文重传。原因是网络中的中间节点会保留先前数据包的数据,而会导致聚合错误。为了避免这种情况的发生,中间节点应在重传数据包之前清除自己存储的数据。设定时长可以根据网络内聚合修复的实际需要灵活设置。
[0098]
具体的,本实施例提供的解决方案是每个发送方在重传数据之前通过相应每条树形流水线发送一个特殊的acp包,也即特定acp报文。此特定acp报文的magic字段和pipeid字段与树形流水线上的其他包相同,不同的是,blockid字段中的所有位都是1并且payload字段中没有负载信息。当一个中间节点接收到特定acp报文时,该节点会自动清除此前存储的数据包的数据。接收方从每个发送方接收到这些特定acp报文后,向每个发送方返回一个ack消息。然后,这些发送方恢复到前一批数据包的起点并重新传输前一批数据包。
[0099]
通过上述处理步骤,可以更有效地处理包无序甚至包丢失的问题,从而更好的保
证了修复过程的可靠性。
[0100]
在一个实施例中,在每个可编程交换机中预置有寄存器数组idx、寄存器数组data和寄存器数组cnt,寄存器数组idx用于存储每个acp报文的blockid字段,寄存器数组data用于存储每个acp报文的payload字段,寄存器数组cnt用于计算每个blockid值的异或次数。
[0101]
可以理解,本实施例中,还介绍了在可编程交换机上的具体部署实现。用可编程交换机实现paint来聚合整个网络中的相关数据包,其中可选择p4语言来实现聚合过程。当acp报文到达可编程交换机时,可编程交换机将对其进行解析并根据匹配动作表,通过匹配报文头来执行一系列动作。由于有些acp报文需要在可编程交换机上进行聚合,所以先到达的acp报文需要临时存储,等待其相关的acp报文,为了实现这一点,可使用p4可编程开关的register寄存器数组来缓存数据,即这些数据包的有效载荷字段。当这些数据包的相关数据包到达时,可编程交换机对所有相关数据包的有效负载字段执行异或操作进行聚合。在聚合所有相关数据包之后,register寄存器数组中的数据被写入最后到达的acp报文的payload字段,然后将该acp报文发送到下一个节点。如此,可以通过可编程交换机聚合来消除网络上的incast流量,从而提高修复性能。
[0102]
实现细节如图8所示。在可编程交换机中为每个流水线预先设置了三种类型的register寄存器数组,分别命名为寄存器数组idx、寄存器数组data和寄存器数组cnt。这三个数组中的存储桶的数量是相同并且一一对应的。寄存器数组idx主要用于存储每个包的blockid字段。数组data用于存储数据包的payload字段,而数组cnt用于计算每个blockid值的异或次数。在一些实施方式中,发明人发现寄存器数组中每个桶的大小被系统限制为2048位,因此,为了存储数据包的payload字段,寄存器数组data的每个桶由多个寄存器数组共同组成。
[0103]
在每个包到达可编程交换机后,可编程交换机首先解析报文。然后,根据报文的magic字段确定是否为需要聚合的报文。如果是需要聚合的报文,则根据报文的pipeid字段和blockid字段进一步更新多个寄存器数组,否则报文按照常规流表进行转发。
[0104]
如图8所示的右侧展示了简化的p4语言伪代码示例,以详细描述具体实现过程。伪代码示例的第1-4行用于确定是否需要聚合到达的数据包,其中magic是匹配acp报文的唯一值。如果magic字段的值等于magic(第4行),那么可编程交换机将根据报文的pipeid字段执行操作来处理数据包(第5-8行)。
[0105]
对于属于某个树形流水线的数据包,可编程交换机查询其对应的寄存器数组idx,以确定数据存储在哪个桶(第10行)。如果找不到blockid的值,函数findid()返回一个空桶的位置并在那里写入blockid的值。可编程交换机根据位置信息(第11行)读取寄存器数组tmp中的数据data并确定它是否为空,若否,则可编程交换机对tmp和payload执行异或操作(第12-13行)。反之,则payload的值将直接传递给tmp(第14-15行)。然后,可编程交换机更新数组data(第16行)和cnt(第17-19行)。
[0106]
在更新寄存器数组之后,可编程交换机检查数据是否应该被转发。如果t_cnt的值不等于它的子节点数,则可编程交换机不执行任何操作;反之聚合的数据应该发送到下一个节点,为此首先更新包的payload字段(第1行),并初始化寄存器数组上的相应位置(第2-4行)。然后,更新的数据包通过函数set_forward_upper()(第5行)转发到下一个节点。这
样的聚合过程在可编程交换机上以线性速率发生,而第二代p4可编程以太网交换机asic,intel(r)tofino(tm)2,提供高达12.8tb/s的吞吐量。因此,可编程交换机上的聚合操作几乎不构成流水线的吞吐量瓶颈。
[0107]
通过上述可编程交换机的部署实现,更好地保证了并行化的网络聚合修复的性能提升。
[0108]
在一个实施例中,为了更便于直观说明与理解上述并行化的网络聚合修复方法,提供了其中一些实验示例。需要说明的是,本实施例中提供的实验示例并非是对本技术上述方法的限定,而是用于辅助理解上述方法的有益效果的示例。
[0109]
由于p4可编程交换机的设备限制,原型系统的实现是基于mininet创建的一个现实的虚拟网络。这样的网络运行真正的内核、交换机和应用程序代码。因此,原型系统的代码可以很容易地迁移到一个真实的物理网络中。为了模拟可编程交换机的行为,用bmv2交换机替换mininet默认的open vswitch软件交换机,bmv2交换机用于实现p4程序指定的报文处理行为。
[0110]
为了验证原型系统的可行性,按照图6中的示例构建网络,该网络由7个可编程交换机和5个主机组成,并根据实例设置了各链路的带宽。此外,网络中还有一个网络控制器,其可以直接与可编程交换机和主机交互,管理失效块的修复过程。使用jerasure库来构建一个基于纠删码的存储系统,其采用基本rs编码,参数k=3,m=1。默认的块大小为8mb。协调器运行在主机h5上,其余主机为存储服务器。在实验之前,将4个存储块均匀分布在主机h1至h4上。然后,断开主机h4和交换机s6的连接来模拟故障。在主机h5上,尝试读取存储在主机h4上的块。由于主机h4是离线的,系统将检测到所需的块是不可访问的并触发降级读。因此,协调器根据预定义的修复方法启动失效块的修复操作。
[0111]
考虑以下两种与上述基于paint的修复方法比较。第一种是常规修复方法,表示为cr,是许多纠删码存储系统的默认修复方法。当一个块失效时,cr从可用的存储节点集合中随机选择k个作为帮助器,然后将相应的k个块传输给请求者。在实验中,使用最短路径为cr路由这些块。第二种是单流水线的paint修复方法,表示为sp,该方法与paint一样,采用网内聚合修复失效块,中间节点聚合相关数据。不同的是sp方法只构建一个流水线,而paint可以构建多个并行流水线。
[0112]
如图7所示,paint将以并行的方式生成两个独立的流水线来修复失效的块。为了验证系统的有效性,首先对两个流水线的性能进行了评估。吞吐量和修复时间分别如图9(a)和图9(b)所示,横坐标表示每批发送的报文数量,pipe表示流水线。图9(a)显示了paint的两个流水线的吞吐量,随着每批发送的包数(即τ的值)的增加,两个流水线的吞吐量呈上升趋势。这是因为acp协议命令发送方等待ack报文,然后再发送下一批报文。
[0113]
当每批处理的数据包数量较少时,等待时间会增加。这导致发送方在整个过程中有很长的空闲时间,降低了带宽利用的效率。当τ=50时,流水线1的吞吐量达到最大11.76mbps,而流水线2的吞吐量为7.14mbps。然而,当τ的值超过50时,流水线1的吞吐量下降。发送速率过高会导致交换机性能下降,从而导致丢包。类似的影响可以在图9(b)中看到。两流水线的修复时间一开始是紧密耦合的,这符合系统的预期。此后,当τ超过60时,修复时间不再耦合,因为两个流水线的包不再被及时处理。
[0114]
然而,分析发现两个流水线的吞吐量没有达到理论值,即14mbps和8mbps。实际吞
吐量和理论值之间存在比较明显的差距,这主要是由于bmv2交换机的性能问题,其不能为聚合提供高吞吐量。为了验证这一点,将单个流水线(即sp方法)的吞吐量与paint的流水线1的吞吐量进行比较,因为两者具有相同的路由路径。结果如图所示10(a),可以看出,当网络只处理一个流水线时,吞吐量要高于两个并行流水线。例如,当τ=70时,sp的吞吐量可以达到13.54mbps,而流水线1的吞吐量只有10.67mbps。这验证了前述对bmv2交换机性能的假设。此外,bmv2交换机的官方文档还指出,bmv2交换机不是一个生产级的软件交换机,其的吞吐量受各种外部因素的影响。尽管如此,sp方法验证了acp协议可以使吞吐量接近14mbps的理论值。因此,当运行在物理可编程交换机上时,可以确信acp协议能够实现所需的修复吞吐量。
[0115]
受实验条件的限制,paint在单流水线的吞吐量上较差。尽管如此,与sp方法相比,基于paint的上述并行化的网络聚合修复方法在修复性能上仍有显著优势。如图10(b)所示,基于paint的上述并行化的网络聚合修复方法的修复时间低于sp方法,至少3.5秒,这表明并行可以加速修复过程。进一步设置不同的区块大小,并将sp、基于paint的上述并行化的网络聚合修复方法与常规修复方法(cr)进行比较。如图11显示了τ=50时三种修复方法的修复时间。sp通过网络内聚合,可以比cr减少大约一半的修复时间。在此基础上,基于paint的上述并行化的网络聚合修复方法通过并行修复模式更进一步减少修复时间,几乎是cr的1/3。
[0116]
应该理解的是,虽然图2和图3流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且图2和图3的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0117]
请参阅图12,在一个实施例中,提供一种并行化的网络聚合修复系统100,包括帮助器11、中间各节点12、请求者13和协调器14。在收到协调器14的修复指令后,帮助器11将相关存储块拆分为多个子块并分别分配给相应的多条树形流水线对应的发送队列;每条树形流水线均采用专属标识号和自身的传输吞吐量进行标识。
[0118]
根据树形流水线的传输吞吐量,帮助器11将相应发送队列中的子块打包成相应acp报文后发送至下一节点12;acp报文携带子块处理标识、子块相应的树形流水线的专属标识号以及为子块分配的序列号,子块处理标识包括聚合标识或转发标识。下一节点12根据子块处理标识、子块相应的树形流水线的专属标识号以及序列号,对acp报文进行聚合处理后送往后续节点12或将acp报文转发至后续节点12。当帮助器11完成相关存储块的传输时,在各树形流水线的末端收集数据的请求者13根据各专属标识号,将收到的所有acp报文解包成各子块后生成修复块,请求者13利用修复块修复失效存储块。
[0119]
上述并行化的网络聚合修复系统100,对于提供相关存储块的各帮助器11,通过帮助器11将相关存储块拆分为多个子块后采用paint构建的多个并行树状流水线进行并行传输,在传输过程中每个子块都以acp报文的数据包形式传输,由于每个树状流水线都有其专属标识号,因此每个acp报文中也相应携带了子块来自的树状流水线的专属标识号,并且每
个acp报文中携带了子块处理标识以区分该acp报文是需要进行子块数据聚合后再传输的信息包,还是不需要聚合而直接转发的普通信息包,同时每个acp报文中还携带了为子块分配的序列号。
[0120]
因此,对于树状流水线上的任意节点12而言,在收到前一节点12传来的acp报文后,紧邻前一节点12的下一节点12均可首先根据acp报文中携带的子块处理标识来区分该acp报文是需要聚合后传输的信息包,还是直接转发的信息包,如果是需要聚合后传输的信息包则根据acp报文中携带的专属标识号以及序列号,该下一节点12将收到的来自相同树状流水线且序列号相同的acp报文聚合后再送往后续节点12,否则直接将acp报文直接转发后续节点12。请求者13在各树形流水线的末端收集数据,当所有帮助器11完成相关存储块的传输时,请求者13根据专属标识号组装接收到的所有子块,从而重新生成修复块以完成失效存储块的修复。
[0121]
相比于传统技术,上述方案利用paint通过构建多个并行的树状流水线来提高修复性能,同时利用路由路径上的中间节点12(如交换机或服务器)来聚合相关数据,以避免incast传输,在此基础上,提出来聚合控制协议acp来管理不同修复流水线,解决并行网络修复所面临的报文识别、可靠性和速率控制等问题,从而达到大幅提高失效存储块修复性能的目的。
[0122]
在一个实施例中,上述并行化的网络聚合修复系统100还可以用于实现上述并行化的网络聚合修复方法各实施例中增加的步骤或者子步骤对应的功能。
[0123]
关于并行化的网络聚合修复系统100的具体限定,可以参见上文中并行化的网络聚合修复方法的相应限定,在此不再赘述。
[0124]
在一个实施例中,还提供一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现如下处理步骤:帮助器将相关存储块拆分为多个子块并分别分配给相应的多条树形流水线对应的发送队列;每条树形流水线均采用专属标识号和自身的传输吞吐量进行标识;根据树形流水线的传输吞吐量,将相应发送队列中的子块打包成相应acp报文后发送至下一节点;acp报文携带子块处理标识、子块相应的树形流水线的专属标识号以及为子块分配的序列号,子块处理标识包括聚合标识或转发标识;下一节点根据子块处理标识、子块相应的树形流水线的专属标识号以及序列号,对acp报文进行聚合处理后送往后续节点或将acp报文转发至后续节点;当帮助器完成相关存储块的传输时,在各树形流水线的末端收集数据的请求者根据各专属标识号,将收到的所有acp报文解包成各子块后生成修复块;请求者利用修复块修复失效存储块。
[0125]
可以理解,上述计算机设备除上述述及的存储器和处理器外,还包括其他本说明书未列出的软硬件组成部分,具体可以根据不同应用场景下的具体服务器和/或可编程交换机的型号确定,本说明书不再一一列出详述。
[0126]
在一个实施例中,处理器执行计算机程序时还可以实现上述并行化的网络聚合修复方法各实施例中增加的步骤或者子步骤。
[0127]
在一个实施例中,还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如下处理步骤:帮助器将相关存储块拆分为多个子块并分别分配给相应的多条树形流水线对应的发送队列;每条树形流水线均采用专属标识号和自身的传输吞吐量进行标识;根据树形流水线的传输吞吐量,将相应发送队列中的子块打包成相
应acp报文后发送至下一节点;acp报文携带子块处理标识、子块相应的树形流水线的专属标识号以及为子块分配的序列号,子块处理标识包括聚合标识或转发标识;下一节点根据子块处理标识、子块相应的树形流水线的专属标识号以及序列号,对acp报文进行聚合处理后送往后续节点或将acp报文转发至后续节点;当帮助器完成相关存储块的传输时,在各树形流水线的末端收集数据的请求者根据各专属标识号,将收到的所有acp报文解包成各子块后生成修复块;请求者利用修复块修复失效存储块。
[0128]
在一个实施例中,计算机程序被处理器执行时,还可以实现上述并行化的网络聚合修复方法各实施例中增加的步骤或者子步骤。
[0129]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线式动态随机存储器(rambus dram,简称rdram)以及接口动态随机存储器(drdram)等。
[0130]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0131]
以上实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可做出若干变形和改进,都属于本技术保护范围。因此本技术专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1