基于UDP的数据传输方法及系统与流程

文档序号:15594428发布日期:2018-10-02 19:20阅读:490来源:国知局

本发明涉及计算机技术领域,尤其涉及一种基于udp的数据传输方法及系统。



背景技术:

分布式计算是当前大数据环境下非常普遍的计算方式,它集成了多计算机的资源优势,将大型的计算任务进行切割并分配给不同的子计算单元完成相应的子计算任务,最后将各个子计算结果进行合并得到最终的结果。分布式计算中一个非常重要的特性就是可靠性和容错性,即当某个计算单元失效时(不论是计算单元宕机还是网络不通),分布式计算系统的协调管理服务器需要准确地检测到各个计算单元是否失效,若某个计算单元失效,则重新分配相应的子计算任务给其他的空闲且存活的计算单元。可靠性和容错性主要是通过可靠的网络协议的心跳数据包检测对端是否存活。

现有技术中,通常采用传输控制协议(transmissioncontrolprotocol,tcp)实现协调管理服务器和客户端之间的数据传输,以及协调管理服务器和计算单元之间的数据传输。而用户数据报协议(userdataprotocol,udp)是非连接的协议,传输数据之前源端和终端不建立连接,udp使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表,因此,分布式计算系统中通常不采用udp进行数据传输。

但是由于tcp在传输的可靠性、流量控制和拥塞控制上面做了大量的工作,导致其过于复杂,且tcp及其参数往往集成在操作系统中,普通的用户难以根据不同的业务场景进行定制和修改。而且tcp的超时重传的特性,在大部分的操作系统中初始的重传间隔为1.5秒,采用的是指数退避算法,每次重传之后超时的时间增加一倍,一直到75秒,尝试9次后断开连接,即除非一方主动断开,否则因网络的问题导致的连接问题需要大约12分钟才能被真正检测到,这在网络环境相对较差的环境下会导致大量的带宽浪费。



技术实现要素:

本发明的目的是提供一种基于udp的数据传输方法及系统,解决了现有的分布式计算系统中集成的tcp过于复杂,并且难以针对不同的应用进行定制,以及数据传输时延大、效率低和带宽浪费严重的技术问题。

为了解决上述技术问题,一方面,本发明提供一种基于udp的数据传输方法,包括:

基于udp接收客户端发送的数据包,所述数据包中至少包含计算任务;

将所述计算任务分解成多个子任务,并将每个子任务发送给不同的计算单元进行计算;

接收每个子任务的计算结果,并将每个子任务的计算结果合并成最终结果;

将所述最终结果发送给所述客户端。

进一步地,所述基于udp接收客户端发送的数据包,具体为:

基于udp接收客户端发送的数据包,并获取所述客户端的地址;

相应地,所述将所述最终结果发送给所述客户端,具体为:

根据所述客户端的地址,将所述最终结果发送给所述客户端。

进一步地,所述基于udp接收客户端发送的数据包之前,还包括:

向所述客户端发送初始化信息,所述初始化信息中至少包含为所述客户端分配的连接编号,以及与所述连接编号一一映射的所述客户端的地址,以使得所述客户端在发送所述数据包时,发送所述地址,所述地址用于识别所述客户端。

进一步地,所述基于udp接收客户端发送的数据包之后,还包括:

根据发送序号,向所述客户端发送ack信息,所述ack信息用于指示确认收到所述数据包,并指示所述客户端将其发送窗口中的所述数据包移除,其中,所述发送序号包含于所述数据包中,所述发送序号用于识别所述数据包。

进一步地,所述基于udp接收客户端发送的数据包之后,还包括:

若判断所述数据包损坏,则丢弃所述数据包,并等待所述客户端重新发送所述数据包。

进一步地,所述方法还包括:

接收所述客户端按照第一预设周期发送的第一心跳信息,所述第一心跳信息用于指示所述客户端处于正常状态;

若判断获知在预设的第一最大无心跳周期内未接收到所述客户端发送的任何数据,则断开与所述客户端的连接。

进一步地,所述方法还包括:

接收所述计算单元按照第二预设周期发送的第二心跳信息,所述第二心跳信息用于指示所述计算单元处于正常状态;

若判断获知在预设的第二最大无心跳周期内未接收到所述计算单元发送的任何数据,则断开与所述计算单元的连接。

另一方面,本发明提供一种基于udp的数据传输系统,包括:

第一接收模块,用于基于udp接收客户端发送的数据包,所述数据包中至少包含计算请求信息和计算任务;

第一发送模块,用于根据所述计算请求信息,将所述计算任务分解成多个子任务,并将每个子任务发送给不同的计算单元进行计算;

第二接收模块,用于接收每个子任务的计算结果,并将每个子任务的计算结果合并成最终结果;

第二发送模块,用于将所述最终结果发送给所述客户端。

再一方面,本发明提供一种用于基于udp的数据传输方法的电子设备,包括:

存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述的方法。

又一方面,本发明提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述的方法。

又一方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法。

本发明提供的基于udp的数据传输方法及系统,通过在udp的基础上制定可靠的应用层协议,实现了数据传输的可靠性和容错性,并且通过上层的分布式计算层实现数据的分布式计算,具有很强的适应性,可以根据网络的情况来调整重传机制的参数,此外,应用层协议和分布式计算层的实现完全独立,即上层的分布式计算层改变时,只需要修改对应的计算逻辑,完全不影响应用层协议的实现,大大加强了系统的可扩展性和可移植性。

附图说明

图1为依照本发明实施例的基于udp的数据传输方法的示意图;

图2为依照本发明实施例的分布式计算实现层的流程图;

图3为依照本发明实施例的server和client进行初始化的流程图;

图4为依照本发明实施例的协议层发送消息和发送窗口移动过程示意图;

图5为依照本发明实施例的协议层接收消息和接收窗口移动过程示意图;

图6为依照本发明实施例的协议层epoch重发未ack的消息以及心跳消息的流程图;

图7为依照本发明实施例的协议层epoch重发未ack的消息以及心跳消息的流程图;

图8为依照本发明实施例的基于udp的数据传输系统的示意图;

图9为本发明实施例提供的用于基于udp的数据传输方法的电子设备的结构示意图。

具体实施方式

为了使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为依照本发明实施例的基于udp的数据传输方法的示意图,如图1所示,本发明实施例提供一种基于udp的数据传输方法,包括:

步骤s10、基于udp接收客户端发送的数据包,所述数据包中至少包含计算任务;

步骤s20、将所述计算任务分解成多个子任务,并将每个子任务发送给不同的计算单元进行计算;

步骤s30、接收每个子任务的计算结果,并将每个子任务的计算结果合并成最终结果;

步骤s40、将所述最终结果发送给所述客户端。

具体的,本发明实施例在udp的基础上,制定可靠的应用层协议实现了带容错功能的分布式计算系统,系统中的节点分为协调管理服务器server、客户端client和计算单元worker三种。下面详细介绍三种节点的具体功能以及协同工作的方式。

图2为依照本发明实施例的分布式计算实现层的流程图,如图2所示,client节点是分布式计算层中的发起计算请求的节点。client节点启动时会连接到对应的server节点,然后两者的应用层协议进行握手和参数的协商。当协商完成之后,client节点通过下层的应用层协议提供的write()方法向server节点发送计算的请求,然后使用read()方法读取server节点返回的计算结果。

worker节点是分布式计算层中的计算单元,负责接收server切分的子计算任务,并完成子计算任务的计算,将计算结果返回给server节点。worker节点和client节点类似,都是在启动时和server节点建立连接并进行握手,之后和server节点进行通信。

server节点是分布式计算层中负责协调client和worker以及计算切分、结果合并的节点。当server节点启动后,首先执行下层协议层初始化的操作,然后监听特定的端口并等待client节点或者worker节点的连接。当client节点或者worker节点连接到server节点时,server节点和连接的节点进行参数的协商并根据连接编号connid和节点的类型记录相应的映射关系(例如初始化client节点的映射以及空闲worker节点的映射),便于后面的计算分配和容错。

当上层的分布式计算层中同时包含了server、client以及worker三种类型的节点时,该分布式计算系统就可以正确的接收client端的计算请求并完成计算的分割、分配和合并,由于下层的应用层协议保证了数据包的有序、不重复以及不丢失的特性,因此上层的节点只需要关注数据包的发送、接收和处理逻辑即可。具体的过程如下:

client节点使用应用层协议提供的write()方法,通过udp向server节点发送需要计算的数据包,数据包中至少包含计算任务。

server节点接收到数据包后根据自定义的拆分算法,将大的计算任务拆分为若干个小的子计算任务,然后记录该client完整的计算任务和拆分的子计算任务,便于后面的合并和结果的返回,接着server节点从空闲的worker列表中按序筛选出和拆分的子计算任务个数相同的worker节点数量,并使用write()方法将子计算任务分别发送给对应的worker节点并记录分配信息。如果空闲的worker数量小于拆分的子计算任务数量,则server会将多出的子计算任务加入到任务队列中,当出现了空闲的worker后再进行分配。

worker通过下层协议提供的read()方法获取server分配的子计算任务,之后完成子计算任务的计算,并通过write()方法将子计算任务的计算结果返回给server节点。

server节点接收到各个worker返回子计算任务的计算结果后,根据之前记录的拆分信息进行结果的合并,得到最终结果。当一个client的所有子计算任务完成后,server将最终结果使用write()方法发送给对应的client,并清除server端维护的拆分信息。最后,server将该worker重新标记为空闲状态,用于分配处理其他的子计算任务。

本发明提供的基于udp的数据传输方法,通过在udp的基础上制定可靠的应用层协议,实现了数据传输的可靠性和容错性,并且通过上层的分布式计算层实现数据的分布式计算,具有很强的适应性,可以根据网络的情况来调整重传机制的参数,此外,应用层协议和分布式计算层的实现完全独立,即上层的分布式计算层改变时,只需要修改对应的计算逻辑,完全不影响应用层协议的实现,大大加强了系统的可扩展性和可移植性。

在上述实施例的基础上,进一步地,所述基于udp接收客户端发送的数据包,具体为:

基于udp接收客户端发送的数据包,并获取所述客户端的地址;

相应地,所述将所述最终结果发送给所述客户端,具体为:

根据所述客户端的地址,将所述最终结果发送给所述客户端。

进一步地,所述基于udp接收客户端发送的数据包之前,还包括:

向所述客户端发送初始化信息,所述初始化信息中至少包含为所述客户端分配的连接编号,以及与所述连接编号一一映射的所述客户端的地址,以使得所述客户端在发送所述数据包时携带所述连接编号,所述地址用于识别所述客户端。

具体的,在server和client进行数据传输之前需server和client进行握手,即,client和server进行初始化和协商,详细步骤如下:

client和server初始化和协商的详细步骤如下:

图3为依照本发明实施例的server和client进行初始化的流程图,如图3所示,首先server启动,初始化为客户端分配的连接编号,初始connid为0,client尝试和server节点进行握手,协商的内容包括发送窗口和接收窗口的大小windowsize(发送窗口和接收窗口的大小相同),每个心跳检测和数据包重发的周期epoch的时间长度epochduration以及最大无心跳周期epochlimit。

server会对每个和自身连接的client分配一个唯一的连接编号connid,该connid用来唯一标识该连接(即标识该client),每次分配后server端维护的connid会加1;当某个client和server的连接断开后,该connid不会被回收重新利用。最后,由于该应用层协议底层基于的是无连接的udp协议,因此server需要记录每个连接的client的地址addr和分配的connid之间的映射关系map<connid,addr>,便于后续server发送数据包时指定发送的地址。

例如,server为某个client分配了唯一的连接编号为0,该connid用来唯一标识该连接,之后上层的分布式计算层通过该connid来指定发送的client,每次分配后server端维护的connid会自动增加,给前一个client分配了connid为0的连接编号后,server维护的connid变为1,下一个连接到server的client的connid为1。

client端分别初始化数据包的发送序号wseq和接收序号rseq均为0,分别代表下一个待发送和下一个待接收的数据包的序号,该序号配合发送窗口和接收窗口来保证数据包的有序和不重复的发送和处理。server为每个连接的client分配独立的发送和接收数据包的序号wseq、rseq以及不同的发送窗口和接收窗口,不同client之间的发送序号、接收序号和窗口之间相互独立。当完成了上面的步骤后,client和server在应用层上建立了连接。之后应用层接收上层分布式计算层的具体数据信息并封装为带wseq的数据包发送给对端(如果是server端还需要指定具体client端的地址);当从对端接收到的数据包时,client和server进行具体数据信息的抽离,并按rseq的顺序交付给上层的分布式计算层,保证了数据包的有序性和可靠性。

本发明提供的基于udp的数据传输方法,通过在udp的基础上制定可靠的应用层协议,实现了数据传输的可靠性和容错性,并且通过上层的分布式计算层实现数据的分布式计算,具有很强的适应性,可以根据网络的情况来调整重传机制的参数,此外,应用层协议和分布式计算层的实现完全独立,即上层的分布式计算层改变时,只需要修改对应的计算逻辑,完全不影响应用层协议的实现,大大加强了系统的可扩展性和可移植性。

在以上各实施例的基础上,进一步地,所述基于udp接收客户端发送的数据包之后,还包括:

根据发送序号,向所述客户端发送ack信息,所述ack信息用于指示确认收到所述数据包,并指示所述客户端将其发送窗口中的所述数据包移除,其中,所述发送序号包含于所述数据包中,所述发送序号用于识别所述数据包。

进一步地,所述基于udp接收客户端发送的数据包之后,还包括:

若判断所述数据包损坏,则丢弃所述数据包,并等待所述客户端重新发送所述数据包。

具体的,client和server构成一个全双工的通信系统,两端都有各自的发送、接收序号以及发送窗口和接收窗口,发送的过程基本相同。

下面以server接收client通过udp发送的数据包为例,详细说明client发送数据包的过程。

当client的应用层协议从上层的分布式计算层的write()方法接收到了具体的数据后,将其封装为带发送序号wseq的数据包,然后将数据包放入发送窗口队列中,通过udp发送给server。

由于发送窗口的大小为握手时协商好的windowsize,因此初始状态下能够发送的数据包的发送序号范围为[0,windowsize–1]。即当发送窗口中数据包的发送序号在发送范围内时,该数据包可以发送,否则需要等待前面的数据包被确认接收后,发送窗口向右移动并将后面wseq较大的数据包加入发送范围后才能发送。

图4为依照本发明实施例的协议层发送消息和发送窗口移动过程示意图,如图4所示,例如,client的应用层协议从上层的分布式计算层的write()方法接收到了5个数据包(黑色代表有数据,下同)。由于握手参数协商得到的windowsize为4,因此发送窗口中最多能发送的数据包数量为4,即初始状态下只有wseq为0、1、2、3共计4个数据包能够发送,而wseq为4的数据包不能发送。

当server端接收到完整的wseq为0的数据包时,server端向client发送wseq为0的数据包对应的ack消息ack(0),当client端接收到server端发送的ack消息ack(0),代表server已经收到wseq为0的数据包。此时,client可以将发送窗口中wseq为0的数据包移除。由于移除的数据的发送序号是发送窗口的起始序号,因此该发送窗口右移,右移后将wseq为4的数据包也包含在发送范围内,此时client发送wseq为4的数据包。

当server端接收到的wseq为0的数据包有损坏的情况时,则丢弃该数据包,并等待客户端重新发送该数据包。

需要注意的是,如果是别的数据包的ack消息先到达,例如ack(1),此时移除发送窗口中wseq为1的消息后,不能将窗口右移,只有收到wseq为0的数据包ack消息ack(0)时,才右移。

由于server端可能连接了多个client,因此server需要为每个连接的client分配单独的连接序号和窗口来保证不同的client之间的数据不会相互干扰。此外,当server上层的分布式计算层发送数据包时,需要指定client的连接编号,即connid,这样下层的协议才能够向具体的client发送数据包。

由于该应用层协议底层的传输层的协议是udp,因此应用层接收到的udp数据包可能是乱序的,不能直接将udp数据包交付给上层的分布式计算层。此处使用rseq和接收窗口来对接收到的udp数据包进行顺序的调整。

下面以server向client发送包含计算结果的数据包,并通过udp发送的数据包为例,详细说明client接收数据包的过程。

当接收端server接收到普通数据包时,由于client初始的发送序号范围为[0,windowsize–1],而发送窗口大小和接收窗口大小是相同的,因此在接收端server,接收窗口初始的接收范围序号也为[0,windowsize–1],即当数据包的发送序号在这个范围内时,接收端server需要将该wseq为0的数据包放入到接收窗口内,并发送ack(0)消息给发送端client,代表server已经收到wseq为0的数据包。此时,client的发送窗口中维护的wseq分别为1、2、3、4。小于该窗口的最小发送序号的数据包代表已经接收过的数据包,接受端丢弃该数据包并再次发送对应的ack给对端。大于该窗口最大发送序号的数据包不会出现,因为只有当接收窗口右移并发送ack消息后,发送端的发送窗口才会右移并发送新的数据包。rseq代表当前待交付给分布式计算层的数据包,每次上层使用read()方法读取一个有序的数据包后,该rseq会递增;如果上层使用read()方法读取数据包时rseq对应的数据包不存在,则上层会在read()方法处阻塞。

如果应用层接收到的数据包是接收窗口起始的序号,则需要将接收窗口右移并发送对应的ack消息;如果数据包的发送序号不是起始序号,不需要右移接收窗口。

当client接收到的消息是ack消息时,将发送窗口内对应的发送序号的数据包移除即可,如果移除的是发送窗口起始序号的数据包,则将发送窗口右移,并发送新加入发送窗口范围的已缓存数据包。

在上面接收步骤的基础上,接收端的分布式计算层可以保证通过read()方法从应用层协议中获取的数据包一定是有序的。

图5为依照本发明实施例的协议层接收消息和接收窗口移动过程示意图,如图5所示,client的接收窗口维护了当前待接收的消息的序号,分别为1、2、3、4,这说明序号为0的消息已经被上层的分布式计算层读取。

当client端接收到wseq为0的消息时,说明该消息是已经被读取的重复消息(可能是client端发送的ack(0)消息丢失导致server端的重发),此时client端丢弃该消息并再次发送对应的ack(0)给server。

当client端接收到wseq为1的消息时,由于该消息在接收窗口的范围内,因此client端选择将该消息放在接收窗口的对应位置(例如图5中黑色的部分)。当分布式计算的实现层使用read()方法读取时,协议层将序号为1的消息返回,并将rseq加1,代表之后需要返回的是序号为2的消息,最后将接收窗口右移,即之后接收序号范围在2到5之间的消息。

需要注意的是,如果client端的接收窗口序号范围为1-4时接收到了wseq为2的消息,此时也需要将该消息放入到接收窗口,当上层使用read()方法尝试读取消息时,该方法阻塞。这是因为此时的接收端rseq为1,需要读取wseq为1的消息,而符合条件的消息还未到达。

本发明提供的基于udp的数据传输方法,通过在udp的基础上制定可靠的应用层协议,实现了数据传输的可靠性和容错性,并且通过上层的分布式计算层实现数据的分布式计算,具有很强的适应性,可以根据网络的情况来调整重传机制的参数,此外,应用层协议和分布式计算层的实现完全独立,即上层的分布式计算层改变时,只需要修改对应的计算逻辑,完全不影响应用层协议的实现,大大加强了系统的可扩展性和可移植性。

在以上各实施例的基础上,进一步地,所述方法还包括:

接收所述客户端按照第一预设周期发送的第一心跳信息,所述第一心跳信息用于指示所述客户端处于正常状态;

若判断获知在预设的第一最大无心跳周期内未接收到所述客户端发送的任何数据,则断开与所述客户端的连接。

进一步地,所述方法还包括:

接收所述计算单元按照第二预设周期发送的第二心跳信息,所述第二心跳信息用于指示所述计算单元处于正常状态;

若判断获知在预设的第二最大无心跳周期内未接收到所述计算单元发送的任何数据,则断开与所述计算单元的连接。

具体的,由于udp不能保证可靠性,即udp数据包在传输的过程中可能会被丢弃,因此如果没有重传机制的话,接收端可能无法接收到完整的消息,而发送端也会因为收不到对应的ack消息而一直无法发送新的消息,因此需要引入重传的机制。此外,由于在分布式系统中,计算单元的失效情况非常普遍,因此server和client都需要定期通过心跳信息去检测对端是否存活。针对上面的情况,应用层协议的实现引入了时间周期epoch,当每一个epoch结束时定时器触发指定的方法,该方法负责发送心跳消息以及重传发送窗口内未被ack的消息。

每个epoch结束时操作的具体步骤如下:

当epoch定时器按照协商的epoch周期触发时调用指定的方法。在该方法中,首先判断该epoch内该client(或者server)是否接收到了对端的普通数据包或者是ack消息。

如果该epoch内未接收对端发送的任何消息,到则将自身维护的nomsgepoch加1,代表有连续nomsgepoch个周期没有收到消息。当有连续的超过epochlimit个周期没有心跳数据时,client端认为和server端断开连接,然后向接收窗口中加入一个代表错误的消息;如果是server端检测到和client端的连接丢失,则清空server维护的该client相关的信息,包括地址addr、发送窗口和接收窗口,之后同样向server的接收窗口中加入一个代表该client错误的消息。在连接丢失后,read()方法按照接收窗口中消息存储的顺序读取消息。

如果该epoch内有消息,则client将nomsgepoch清0(server同理),然后将自身发送窗口内未ack的消息重新发送给server,最后发送client端接收到的最新消息的ack消息。其中后者的意义是在发送窗口所有的消息都接收到了对应ack消息且无新的消息发送时作为心跳消息,防止连接的丢失。而server端需要遍历每一个连接到自身的client,并执行和client相同操作。

在重发和心跳机制的基础上,应用层协议可以保证即使消息在传输的过程中丢失,发送端也能通过重发机制保证消息的完整性。此外,心跳机制能够保证应用层协议能够检测到对端的失效,从而为上层的分布式计算实现层提供容错功能。

图6为依照本发明实施例的协议层epoch重发未ack的消息以及心跳消息的流程图,如图6所示,server端的发送窗口中有wseq为2、4、5的消息未被ack,而接收窗口中最新的消息为seq为4的消息。

由于发送窗口的范围为1-4,因此在该epoch结束后,server端触发的方法只会对wseq为2和4的消息进行重传。wseq为5的消息不在窗口范围内,因此不进行重传。此外,由于接收窗口中最新的接收消息为4,因此server使用ack(4)作为心跳消息发送给client端。

由于在分布式计算环境中,节点的失效非常常见,因此分布式计算系统的检错和容错机制对于可靠的计算来说非常重要,下面介绍本发明的分布式计算层的检错和容错机制的具体步骤:

当分布式计算的计算单元的协议层检测到对端节点失效时,会向对应的接收窗口中加入一条代表错误的消息(server节点插入的错误消息需要标识具体的对端节点的编号),当上层的实现层通过read()方法获取到错误的消息时,就能进行处理。

当client节点或者worker节点从read()方法中获取到错误消息时,采取的方法是断开和server节点的连接并关闭。

当server节点从read()方法中获取到错误信息时,根据对端节点的编号可以获知节点的具体类型。如果失效的是client节点,则server节点采取的方式是丢弃和该client相关的信息,例如节点编号到地址的映射关系以及子计算的拆分信息和已有的子计算的结果。此外,当worker返回了失效的client的计算结果时,server直接选择丢弃该结果。当失效的节点是worker时,server根据维护的子计算分配的信息将对应的子计算重新分配给空闲的worker节点,如果此时没有worker空闲,则将子计算加入任务队列,等待空闲的worker节点。

图7为依照本发明实施例的协议层epoch重发未ack的消息以及心跳消息的流程图,如图7所示,节点失效指的是当节点连续epochlimit个周期内没有收到对端的任何消息时,节点认为对端节点失效。由于worker节点失效时采取的方法和client相同,因此此处将两者合并。

当client检测到对端节点失效后,协议层将代表错误的消息加入到接收窗口。由于节点失效后read()方法读取接收窗口的方式为按照窗口顺序(即不一定按照rseq连续),因此按照图6的标识,第三次read()调用即能读取到错误消息,此时client节点采取的方式是断开和server节点的连接并关闭。

当server检测到对端节点失效后,协议层将代表错误的消息加入到接收窗口,错误消息中还包括了失效节点的连接标识connid。和client相同,server也能通过3次read()方法读取到该连接的错误消息。此时server根据该connid以及自身维护的对端节点的类型信息判断出失效节点的类型。

当失效节点为client时,server选择清除该client所有的信息以及返回的子计算的结果,并丢弃之后worker返回的该节点的子计算结果。当失效的节点为worker时,server根据自身维护的子计算的分配信息将该worker的子计算分配给当前空闲的worker节点,保证了分布式计算的可靠性。

本发明提供的基于udp的数据传输方法,通过在udp的基础上制定可靠的应用层协议,实现了数据传输的可靠性和容错性,并且通过上层的分布式计算层实现数据的分布式计算,具有很强的适应性,可以根据网络的情况来调整重传机制的参数,此外,应用层协议和分布式计算层的实现完全独立,即上层的分布式计算层改变时,只需要修改对应的计算逻辑,完全不影响应用层协议的实现,大大加强了系统的可扩展性和可移植性。

图8为依照本发明实施例的基于udp的数据传输系统的示意图,如图8所示,本发明实施例提供一种基于udp的数据传输系统,包括第一接收模块10、第一发送模块20、第二接收模块30和第二发送模块40,其中,

第一接收模块10用于基于udp接收客户端发送的数据包,所述数据包中至少包含计算请求信息和计算任务;

第一发送模块20用于根据所述计算请求信息,将所述计算任务分解成多个子任务,并将每个子任务发送给不同的计算单元进行计算;

第二接收模块30用于接收每个子任务的计算结果,并将每个子任务的计算结果合并成最终结果;

第二发送模块40用于将所述最终结果发送给所述客户端。

本发明实施例提供一种基于udp的数据传输系统,用于完成上述实施例中所述的方法,通过本实施例提供的数据传输系统完成上述实施例中所述的方法的具体步骤与上述实施例相同,此处不再赘述。

本发明提供的基于udp的数据传输系统,通过在udp的基础上制定可靠的应用层协议,实现了数据传输的可靠性和容错性,并且通过上层的分布式计算层实现数据的分布式计算,具有很强的适应性,可以根据网络的情况来调整重传机制的参数,此外,应用层协议和分布式计算层的实现完全独立,即上层的分布式计算层改变时,只需要修改对应的计算逻辑,完全不影响应用层协议的实现,大大加强了系统的可扩展性和可移植性。

图9为本发明实施例提供的用于基于udp的数据传输方法的电子设备的结构示意图,如图9所示,所述设备包括:处理器801、存储器802和总线803;

其中,处理器801和存储器802通过所述总线803完成相互间的通信;

处理器801用于调用存储器802中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:

基于udp接收客户端发送的数据包,所述数据包中至少包含计算任务;

将所述计算任务分解成多个子任务,并将每个子任务发送给不同的计算单元进行计算;

接收每个子任务的计算结果,并将每个子任务的计算结果合并成最终结果;

将所述最终结果发送给所述客户端。

本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:

基于udp接收客户端发送的数据包,所述数据包中至少包含计算任务;

将所述计算任务分解成多个子任务,并将每个子任务发送给不同的计算单元进行计算;

接收每个子任务的计算结果,并将每个子任务的计算结果合并成最终结果;

将所述最终结果发送给所述客户端。

本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:

基于udp接收客户端发送的数据包,所述数据包中至少包含计算任务;

将所述计算任务分解成多个子任务,并将每个子任务发送给不同的计算单元进行计算;

接收每个子任务的计算结果,并将每个子任务的计算结果合并成最终结果;

将所述最终结果发送给所述客户端。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的装置及设备等实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1