数据分流方法及分流器的制造方法_3

文档序号:8415537阅读:来源:国知局
符对应的线程确定为该数据包所属的数据流对应的线程。
[0054]可选地,数据包所属的传输层通信协议为面向连接的通信协议时,则根据图3所示的分流表确定数据包所属的数据流对应的线程,如图5所示,根据图3所示的分流表确定数据包所属的数据流对应的线程的过程包括以下步骤:
[0055]步骤S501,分流器在数据包所属的面向连接的传输层通信协议对应的第一分流表中的四元组与线程标示符的对应关系中,查找该数据包的四元组对应的线程标示符。
[0056]在图3所示的分流表中的第一分流表中查找数据包的四元组对应的线程标识符。若第一分流表中存在数据包的四元组对应的线程标示符,则执行步骤S502。若第一分流表中不存在数据包的四元组对应的线程标示符,则执行步骤S503和步骤S504。
[0057]步骤S502,若第一分流表中存在数据包的四元组对应的线程标识符,则分流器将数据包的四元组对应的线程标示符对应的线程确定为数据包所属的数据流对应的线程。
[0058]由图3所示的分流表中的第一分流表可知一组源IP地址,源端口,目的IP地址和目的端口只对应一个线程标识符。因此,在确定第一分流表中存在该数据包的四元组只对应的线程标识符后,就直接将该线程标示符对应的线程确定为该数据包所属的数据流对应的线程。
[0059]步骤S503,若第一分流表中不存在该数据包的四元组对应的线程标示符,则分流器在该数据包所属的面向连接的传输层通信协议对应的第二分流表中的目的IP地址和目的端口与线程标示符的对应关系中,查找该数据包的目的IP地址和目的端口对应的线程标示符。
[0060]步骤S504,分流器将数据包的目的IP地址和目的端口对应的线程标识符对应的线程中负载最小的线程确定为该数据包所属的数据流对应的线程。
[0061]从图3所示的分流表可知第二分流表中的每个线程标识符都对应有该线程标识符对应的线程的负载。如果在图4所示的分流表中的第二分流表中,该数据包的目的IP地址和目的端口只对应一个线程标识符,则直接将该线程标示符对应的线程确定为该数据包所属的数据流对应的线程。如果在图3所示的分流表中的第二分流表中,该数据包的目的IP地址和目的端口对应多个线程标识符,则将多个线程标识符对应的线程中负载最小的线程确定为该数据包所属的数据流对应的线程,以实现线程的负载均衡,从而使得多核处理器负载均衡。
[0062]步骤S105,分流器将该数据包发送至该数据包所属的数据流对应的线程的缓冲队列,以使该数据流对应的线程从该缓冲队列获取数据包。
[0063]在分流器根据分流表确认该数据包所属的数据流对应的线程之后,将该数据包发送至该数据包所属的数据流对应的线程的缓冲队列。然后该线程直接从其对应的缓冲队列获取数据包,因此数据包不会被多个线程共享,可避免线程间互斥和同步开销以及核心间cache失效。
[0064]另外,本发明实施例一提供的数据分流方法还可以包括以下步骤:
[0065]根据线程的状态更新分流表。
[0066]具体的,对于图2所示的分流表,当有线程建立连接时,将该建立连接的线程对应的线程标示符和该线程对应的目的IP地址和目的端口添加到分流表中。当分流表中的线程标示符对应的线程从连接状态变为空闲状态(本实施例中的空闲状态是指线程未关闭的情况下,线程的连接状态关闭,或线程的连接状态异常中断)时,将该从连接状态变为空闲状态的线程对应的线程标识符及该线程对应的目的IP地址和目的端口从分流表中删除。
[0067]对于图3所示的分流表,当第一分流表中的线程标示符对应的线程从连接状态变为监听状态时,将第一分流表中的该线程的线程标示符及该线程对应的源IP地址,源端口、目的IP地址和目的端口的删除,并将该线程的线程标示符、该线程对应的目的IP地址和目的端口及该线程的负载添加到第二分流表中。当第二分流表中的线程标示符对应的线程从监听状态变为连接状态时,将第二分流表中的该线程的线程标示符、该线程对应的目的IP地址和目的端口及该线程的负载删除,并将该线程的线程标示符及该线程对应的源IP地址,源端口、目的IP地址和目的端口添加到第一分流表中。当有线程从空闲状态变为监听状态时,将该从空闲状态变为监听状态的线程对应的线程标示符、该线程对应的目的IP地址和目的端口及该线程的负载添加到第二分流表中。当第一分流表或第二分流表中的线程标示符对应的线程变为空闲状态时,将该变为空闲状态线程的线程标示符及该线程对应的源IP地址,源端口、目的IP地址和目的端口从第一分流表删除,或将该变为空闲状态线程对应的线程标示符,该线程对应的目的IP地址和目的端口及该线程的负载从第二分流表中删除。
[0068]利用本发明实施例一提供的数据分流方法,分流器以线程为分流粒度,并且不同的传输层通信协议对应不同的分流表,分流器根据数据包所属的传输层通信协议对应的分流表将数据包分配到该数据包所属的数据流对应的线程的缓冲队列,以使线程从该线程对应的缓冲队列中获取数据包。由于每个线程都有其独立的缓冲队列,因此数据包和数据包的连接信息不会被多个线程共享,可避免线程间互斥和同步开销以及核心间cache失效。并且针对面向连接的传输层通信协议实现了多个线程对同一个端口进行监听,可有效均衡多个核心之间的负载,从而提高了多核处理器的处理能力。
[0069]下面以图6为例详细说明本发明实施例二提供的一种分流器,图6为本发明实施例二提供的一种分流器的结构示意图。该分流器应用于数据分流系统中,用以实现本发明实施例一提供的数据分流方法。该数据分流系统还包括存储器和用于处理数据的多个线程,每个线程对应一个缓冲队列。其中,存储器用于传输层通信协议和分流表的对应关系及每个传输层通信协议对应的分流表,每个分流表中设置有数据流的标识信息和线程的对应关系。该存储器可以为包含高速RAM存储器,也可以还包括非易失性存储器,例如至少一个磁盘存储器。
[0070]如图6所示,该分流器包括:解析单元610,第一获取单元620、第二获取单元630,确定单元640和发送单元650。
[0071]解析单元610用于对所接收的数据包进行解析确定该数据包所属的传输层通信协议。
[0072]分流器在接收到数据包之后,若该数据包是完整的数据包或完整的数据包的第一个分片,则解析单元610从数据包头部可以获知该数据包所属的传输层通信协议。若该数据包是完整的数据包的分片且不是第一个分片时,则解析单元610根据该数据包的IP头查找该完整的数据包的第一个分片,如果分流器还没有接收到该完整的数据包的第一个分片,则需要等待至分流器接收到该完整的数据包的第一个分片。解析单元610在查找到该完整的数据包的第一个分片后,从该第一个分片头部获知该数据包所属的通信协议。
[0073]其中,传输层通信协议分为两种,一种是面向非连接的传输层通信协议,另一种是面向连接的传输层通信协议。面向非连接的传输层通信协议可以具体为UDP,面向非连接的传输层通信协议可以具体为TCP和SCTP。
[0074]第一获取单元620用于从该数据包中,获取与确定的传输层通信协议对应的数据包所属的数据流的标识信息,该数据流的标识信息用于区分数据包所属的数据流。
[0075]如果数据包所属的传输层通信协议为面向非连接的传输层通信协议,则数据流的标识信息为该数据包的二元组,二元组包括:数据包的目的IP地址和目的端口,那么第一获取单元620从该数据包中获取该数据包的二元组。
[0076]如果数据包所属的传输层通信协议为面向连接的传输层通信协议,则数据流的标识信息为该数据包的四元组,四元组包括:数据包的源IP地址、源端口、目的IP地址和目的端口,那么第一获取单元620从该数据包中获取该数据包的四元组。
[0077]第二获取单元630用于根据传输层通信协议和分流表的对应关系,从存储器中获取该数据包所属的传输层通信协
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1