一种建链报文的无锁处理系统及方法与流程

文档序号:25789630发布日期:2021-07-09 11:17阅读:97来源:国知局
一种建链报文的无锁处理系统及方法与流程

1.本发明涉及数据处理领域,尤其涉及一种建链报文的无锁处理系统及方法。


背景技术:

2.随着大数据时代的到来,各种数据以指数级增长,流量包数据越来越大,快速采集还原数据流成为发展趋势,现有技术中数据采集通常是使用的共享的tcp/ip协议栈,接收到流量包后先经链路层解析,解析完再用读锁的方式查询流表,查到流表后,进入应用层解析并发往数据库,当未读到流表时,需要tcp协议栈用写锁的方式去创建流表,创建流表后再进行应用层解析,再发往数据库。
3.现有技术中,当多线程同时进行数据采集时必须通过解锁和写锁的的方式与tcp/ip协议栈进行交互,交互复杂,且会导致数据采集的时候建链报文效率低,单线程处理时,因为流量包过大,超出协议栈处理能力,会出现丢包和报错等问题。


技术实现要素:

4.本发明提供了一种建链报文的无锁处理系统及方法的技术方案,旨在有效地改善乃至解决建链报文的效率低的问题,提升协议栈在数据采集的效率。
5.根据本发明,提供了一种建链报文的无锁处理系统,设置于处理器中;包括多个独立的处理单元,每个所述处理单元的输入端分别连接至网卡的输出端,每个所述处理单元的输出端分别连接至一数据库,每个所述处理单元的查询端分别连接至一流表查询单元;
6.每个所述处理单元用于承载一个处理线程,每个所述处理线程分别对应于一个协议栈;
7.则每个所述处理单元分别包括:
8.链路层解析模块,用于获取所述网卡输出的所述建链报文并进行解析,输出解析结果;
9.流表查询模块,连接所述链路层解析模块,用于根据所述解析结果,于所述流表查询单元中查询对应的流表信息,并输出查询结果;
10.应用层解析模块,连接所述流表查询模块,用于在所述查询结果为所述流表查询单元中存在对应的流表时,根据所述流表对所述建链报文进行应用层解析,并将最终解析结果汇总至所述数据库中进行保存。
11.进一步地,该无锁处理系统,其中,还包括一建表单元,分别连接每个所述处理单元以及所述流表查询单元,用于在所述查询结果为所述流表查询单元不存在对应的流表时,在所述流表查询单元中创建对应的流表。
12.进一步地,该无锁处理系统,其中,所述链路层解析模块解析得到的所述解析结果中包括所述建链报文的报文长度以及报文序号。
13.进一步地,该无锁处理系统,其中,所述流表查询模块采用无锁处理的方式对所述流表查询单元发起查询。
14.进一步地,该无锁处理系统,其中,所述建表单元采用无锁处理的方式在所述流表查询单元中建立对应的流表。
15.进一步地,该无锁处理系统,其中,所述建表单元为tcp协议栈。
16.进一步地,该无锁处理系统,其中,所有所述应用层解析模块输出的所述最终解析结果以聚合方式被送入至所述数据库中进行保存。
17.一种建链报文的无锁处理方法,应用于处理器;包括上述的无锁处理系统并包括:
18.步骤s1,将所述建链报文分别送入多个独立的处理线程中进行链路层解析;
19.步骤s2,分别根据链路层解析得到的解析结果查询是否存在对应的流表:
20.若否,则转向步骤s3;
21.若是,则转向步骤s4;
22.步骤s3,采用tcp协议栈创建对应的流表,随后转向步骤s4;
23.步骤s4,分别采用对应的流表对所述建链报文进行应用层解析;
24.步骤s5,将应用层解析得到的最终解析结果进行聚合后送入数据库中进行保存。
25.进一步地,该无锁处理方法,其中,所述步骤s2中,采用无锁处理的方式查询是否存在对应的流表。
26.进一步地,该无锁处理方法,其中,所述步骤s3中,采用无锁处理的方式创建对应的流表。
27.通过本发明提供的一种建链报文的无锁处理系统及方法,具有如下的有益效果:
28.1)简化协议栈交互形式;
29.2)提高建链报文的效率;
30.3)降低丢包以及报错的发生概率。
附图说明
31.构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及说明用于解释本发明,并不构成对本发明的不当限定,在附图中:
32.图1是现有技术中的建链报文处理流程图;
33.图2是本发明的较佳的实施例中,无锁处理系统的处理单元框图;
34.图3是本发明的较佳的实施例中,经过无锁处理的建链报文处理流程图;
35.图4是本发明的较佳的实施例中,无锁处理方法的流程图。
具体实施方式
36.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
37.需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
38.下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
39.现有技术中,当多线程同时进行数据采集时必须通过解锁和写锁的的方式与tcp/
ip协议栈进行交互,会导致数据采集的时候建链报文效率低下,单线程处理时,因为流量包过大,超出协议栈处理能力,会出现丢包和报错等问题。现有技术中协议栈的处理流程如图1中所示,网卡1接收建链报文,并送入处理单元2、处理单元5以及处理单元8,每个处理单元都承载一个独立的处理线程,处理单元2接收到网卡1发送的建链报文,进入链路层解析模块21中进行链路层解析并输出解析结果,将解析结果发送到流表查询模块22,进入流表查询单元3进行流表查询;同时处理单元5接收到网卡1发送的建链报文,进入链路层解析模块51中进行链路层解析并输出解析结果,将解析结果发送到流表查询模块52,进入流表查询单元3进行流表查询,同时处理单元8接收到网卡1发送的建链报文,进入链路层解析模块81中进行链路层解析并输出解析结果,将解析结果发送到流表查询模块82,进入流表查询单元3进行流表查询;当流表查询单元3中未查到所对应的流表,则进入建表单元4,通过建表单元4在流表查询单元3中建立相应的流表,并分别进入对应的处理单元2、处理单元5及处理单元8所对应的应用层解析模块23,应用层解析模块53及应用层解析模块83中作应用层解析,并输出最终的解析结果,以聚合方式送入数据库11中进行保存;当流表查询单元3中查到所对应的流表,进入对应的处理单元2、处理单元5及处理单元8所对应的应用层解析模块23,应用层解析模块53及应用层解析模块83中作应用层解析,并输出最终的解析结果,所有最终的解析结果以聚合方式送入数据库11中进行保存。
40.因此,本发明引一种建链报文的无锁处理系统,以解决现有技术中存在的问题。
41.在本实施例中提供了一种建链报文的无锁处理系统,设置于处理器中;包括多个独立的处理单元,每个处理单元的输入端分别连接至网卡1的输出端,每个处理单元的输出端分别连接至一数据库,每个处理单元的查询端分别连接至一流表查询单元;
42.每个处理单元用于承载一个处理线程,每个处理线程分别对应于一个协议栈;如图2中所示,则每个处理单元分别包括:
43.链路层解析模块21,用于获取网卡1输出的建链报文并进行解析,输出解析结果;
44.流表查询模块22,连接链路层解析模块21,用于根据解析结果,于流表查询单元3中查询对应的流表信息,并输出查询结果;
45.应用层解析模块23,连接流表查询模块22,用于在查询结果为流表查询单元3中存在对应的流表时,根据流表对建链报文进行应用层解析,并将最终解析结果汇总至数据库11中进行保存。
46.具体地,本实施例中,设置的处理器支持国产和进口的处理器,支持但不限于以下的cpu型号:cpu:ft

2000+(arm64)、cpu:ft

2000+(x86_64)及cpu:intel d1557(x86_64)。
47.具体地,本实施例中,处理单元包括多个链路层解析模块21、流表查询模块22及应用层解析模块23,各模块间相互独立且一一对应。
48.具体地,本实施例中,流表查询模块22为处理线程对流表查询单元3进行对应的流表查询。
49.本发明的较佳的实施例中,还包括一建表单元,分别连接每个处理单元以及流表查询单元,用于在查询结果为流表查询单元不存在对应的流表时,在流表查询单元中创建对应的流表。
50.具体地,本实施例中,
51.本发明的较佳的实施例中,链路层解析模块21解析得到的解析结果中包括建链报
文的报文长度以及报文序号。
52.本发明的较佳的实施例中,流表查询模块22采用无锁处理的方式对流表查询单元3发起查询。
53.具体地,本实施例中,采用无锁处理的方式对流表查询单元3发起查询为不需要采用读锁的方式,直接查询。
54.本发明的较佳的实施例中,建表单元4采用无锁处理的方式在流表查询单元3中建立对应的流表。
55.具体地,本实施例中,采用无锁处理的方式在流表查询单元3中建立对应的流表为不需要采用写锁的方式,直接建表。
56.本发明的较佳的实施例中,建表单元4为tcp协议栈。
57.具体地,本实施例中,当流表查询单元3不存在对应的流表时,处理线程通知tcp协议栈以无锁处理的方式建立所对应的流表。
58.本发明的较佳的实施例中,应用层解析模块23输出的最终解析结果以聚合方式被送入至数据库11中进行保存。
59.具体地,本实施例中,以tcp协议栈数量为3个为例,无锁处理系统的处理流程如图3中所示:网卡1接收建链报文,并送入处理单元2、处理单元5以及处理单元8,每个处理单元都承载一个独立的处理线程,处理单元2接收到网卡1发送的建链报文,进入链路层解析模块21中进行链路层解析并输出解析结果,将解析结果发送到流表查询模块22,进入流表查询单元3进行流表查询,当流表查询单元3中未查到所对应的流表,则进入建表单元4,通过建表单元4在流表查询单元3中建立相应的流表,进入处理单元2中所对应的应用层解析模块23作应用层解析,并输出最终的解析结果,同时处理单元5接收到网卡1发送的建链报文,进入链路层解析模块51中进行链路层解析并输出解析结果,将解析结果发送到流表查询模块52,进入流表查询单元6进行流表查询,当流表查询单元6中未查到所对应的流表,则进入建表单元7,通过建表单元7在流表查询单元6中建立相应的流表,进入处理单元5中所对应的应用层解析模块53作应用层解析,并输出最终的解析结果,同时处理单元8接收到网卡1发送的建链报文,进入链路层解析模块81中进行链路层解析并输出解析结果,将解析结果发送到流表查询模块82,进入流表查询单元9进行流表查询,当流表查询单元9中未查到所对应的流表,则进入建表单元10,通过建表单元10在流表查询单元9中建立相应的流表,进入处理单元8中所对应的应用层解析模块83作应用层解析,并输出最终的解析结果;当流表查询单元3中查到所对应的流表,进入对应的处理单元2中的应用层解析模块23中作应用层解析,并输出最终的解析结果,当流表查询单元6中查到所对应的流表,进入对应的处理单元5中的应用层解析模块53中作应用层解析,并输出最终的解析结果,当流表查询单元9中查到所对应的流表,进入对应的处理单元8中的应用层解析模块83中作应用层解析,并输出最终的解析结果,所有的最终的解析结果以聚合方式送入数据库11中进行保存。
60.具体地,本实施例中,以下文中的三个示例对本申请中无锁处理系统针对数据处理速度作出描述:
61.示例一:
62.cpu:intel d1557(x86_64);
63.操作系统:centos7.5;
64.流量模式:100万条http流量,首包长度:66字节;
65.流量处理线程个数:2个;
66.首包性能(pps):1.54m;
67.示例二:
68.cpu:ft

2000+(arm64);
69.操作系统:centos8.2;
70.流量模式:100万条http流量,首包长度:66字节;
71.流量处理线程个数:2个;
72.首包性能(pps):1.32m;
73.示例三:
74.cpu:ft

2000+(x86_64);
75.操作系统:centos8.2;
76.流量模式:2000万条tcp流量,首包长度:66字节;
77.流量处理线程个数:3个;
78.首包性能(pps):1.8m。
79.由上述示例可以得出,通过使用本申请中的无锁处理系统,针对不同流量处理线程,首包性能得到提升,且使用本申请中的无锁处理系统,非首包性能不受影响。
80.本发明的较佳的实施例中,还提供一种建链报文的无锁处理方法,应用于处理器;包括上述的无锁处理系统并如图4中所示,包括:
81.步骤s1,将建链报文分别送入多个独立的处理线程中进行链路层解析;
82.步骤s2,分别根据链路层解析得到的解析结果查询是否存在对应的流表:
83.若否,则转向步骤s3;
84.若是,则转向步骤s4;
85.步骤s3,采用tcp协议栈创建对应的流表,随后转向步骤s4;
86.步骤s4,分别采用对应的流表对建链报文进行应用层解析;
87.步骤s5,将应用层解析得到的最终解析结果进行聚合后送入数据库中进行保存。
88.本发明的较佳的实施例中,步骤s2中,采用无锁处理的方式查询是否存在对应的流表。
89.本发明的较佳的实施例中,步骤s3中,采用无锁处理的方式创建对应的流表。
90.关于该方法的更多实施细节,系统已经公开,本实施例不再赘述。
91.以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1