一种流量控制方法和系统转让专利

申请号 : CN202111237251.8

文献号 : CN113676417B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨海峰殷德明

申请人 : 北京安华金和科技有限公司

摘要 :

本申请公开了一种流量控制方法和系统,该方法包括:获取数据包,并将获取到的数据包按照获取时间进行缓存;与数据包处理服务协商发送数据包的速率;根据协商得到的速率确定每秒向数据包处理服务发送数据包的量;根据每秒发送数据包的量向数据包处理服务发送被缓存的数据包,其中,每秒被分割为多个时间间隔,多个时间间隔分为发送时间间隔和睡眠时间间隔,在发送时间间隔内发送数据包,在睡眠时间间隔内不发送数据包;按照数据包进入缓存的时间采用先入先出来的顺序发送数据包。通过本申请解决了现有技术中无法控制用于处理数据包的服务的流量所导致的问题,从而控制了处理服务接收到的流量,保证了处理服务的正常进行。

权利要求 :

1.一种流量控制方法,其特征在于,应用到数据库审计中,数据包处理服务用于对所述数据包进行审计,包括:

获取数据包,并将获取到的数据包按照获取时间进行缓存,其中,抓取数据库客户端和数据库服务器之间的数据包;在审计服务所在的服务器为审计服务设置有缓存空间,在审计服务所在的服务器的缓存空间未满的情况下,用于发送抓取数据包的主服务将抓取到的数据包均实时发送给所述审计服务,在审计服务所在的服务器的缓存空间已经满了的情况下,所述审计服务向所述主服务发送审计服务所在服务器的缓存空间已满的指示消息,所述主服务在接收到所述指示消息之后,将抓取到的数据按照时间进行缓存;

与数据包处理服务协商发送数据包的速率,其中,发送数据包的速率为向所述数据包处理服务发送数据包的速率;

根据协商得到的所述速率确定每秒向所述数据包处理服务发送数据包的量;

根据确定的每秒发送数据包的量向所述数据包处理服务发送被缓存的数据包,其中,所述每秒被分割为多个时间间隔,所述多个时间间隔分为发送时间间隔和睡眠时间间隔,在发送时间间隔内发送所述数据包,在睡眠时间间隔内不发送所述数据包;按照所述数据包进入所述缓存的时间采用先入先出来的顺序发送数据包。

2.根据权利要求1所述的方法,其特征在于,根据所述每秒发送数据包的量向所述数据包处理服务发送被缓存的数据包包括:获取所述每秒内的发送时间间隔的数量;

根据每秒发送数据包的量确定该秒内每个发送时间间隔内需要发送的数据包的量;

在到达每个发送时间间隔时按照该时间间隔内需要发送的数据包的量发送数据包。

3.根据权利要求2所述的方法,其特征在于,还包括:在需要发送的数据包的量已经在该发送时间间隔内发送完毕的情况下,等待该发送时间间隔结束。

4.根据权利要求1所述的方法,其特征在于:预先设置时钟计算线程,其中,所述时钟计算线程用于计算时间;

在所述时钟计算线程通过计算确定到达发送时间间隔时,唤醒数据包发送线程发送数据包。

5.一种流量控制系统,其特征在于,应用到数据库审计中,数据包处理服务用于对所述数据包进行审计,包括:

缓存模块,用于获取数据包,并将获取到的数据包按照获取时间进行缓存,其中,抓取数据库客户端和数据库服务器之间的数据包;在审计服务所在的服务器为审计服务设置有缓存空间,在审计服务所在的服务器的缓存空间未满的情况下,用于发送抓取数据包的主服务将抓取到的数据包均实时发送给所述审计服务,在审计服务所在的服务器的缓存空间已经满了的情况下,所述审计服务向所述主服务发送审计服务所在服务器的缓存空间已满的指示消息,所述主服务在接收到所述指示消息之后,将抓取到的数据按照时间进行缓存;

协商模块,用于与数据包处理服务协商发送数据包的速率,其中,发送数据包的速率为向所述数据包处理服务发送数据包的速率;

确定模块,用于根据协商得到的所述速率确定每秒向所述数据包处理服务发送数据包的量;

发送模块,用于根据所述确定模块确定的每秒发送数据包的量向所述数据包处理服务发送被缓存的数据包,其中,所述每秒被分割为多个时间间隔,所述多个时间间隔分为发送时间间隔和睡眠时间间隔,在发送时间间隔内发送所述数据包,在睡眠时间间隔内不发送所述数据包;按照所述数据包进入所述缓存的时间采用先入先出来的顺序发送数据包。

6.根据权利要求5所述的系统,其特征在于,所述发送模块用于:获取所述每秒内的发送时间间隔的数量;

根据每秒发送数据包的量确定该秒内每个发送时间间隔内需要发送的数据包的量;

在到达每个发送时间间隔时按照该时间间隔内需要发送的数据包的量发送数据包。

7.根据权利要求6所述的系统,其特征在于,所述发送模块还用于:在需要发送的数据包的量已经在该发送时间间隔内发送完毕的情况下,等待该发送时间间隔结束。

8.根据权利要求5所述的系统,其特征在于,还包括:唤醒模块,用于预先设置时钟计算线程,其中,所述时钟计算线程用于计算时间;在所述时钟计算线程通过计算确定到达发送时间间隔时,唤醒数据包发送线程发送数据包。

说明书 :

一种流量控制方法和系统

技术领域

[0001] 本申请涉及到数据处理领域,具体而言,涉及一种流量控制方法和系统。

背景技术

[0002] 有这样的一种场景,A服务向B服务发送数据包,B服务用来处理数据包,此时A发送速率过快会给B服务处理带来压力,从而倒是B服务出现问题。
[0003] 例如,在对数据库进行审计的时候,一般是在数据库上设置主服务进行数据包的抓取,在抓取到数据包之后,这些数据包要发送给审计服务进行审计。
[0004] 在进行审计的时候,如果数据库流量增加,会造成发往审计服务的数据包数量增加。由于审计服务的审计能力是有限的,此时数据库流量的增加会造成审计服务承担比较
的审计压力,有可能会导致审计服务出现问题。

发明内容

[0005] 本申请实施例提供了一种流量控制方法和系统,以至少解决现有技术中无法控制用于处理数据包的服务的流量所导致的问题。
[0006] 根据本申请的一个方面,提供了一种流量控制方法,包括:获取数据包,并将获取到的数据包按照获取时间进行缓存;与数据包处理服务协商发送数据包的速率,其中,发送
数据包的速率为向所述数据包处理服务发送数据包的速率;根据协商得到的所述速率确定
每秒向所述数据包处理服务发送数据包的量;根据所述每秒发送数据包的量向所述数据包
处理服务发送被缓存的数据包,其中,所述每秒被分割为多个时间间隔,所述多个时间间隔
分为发送时间间隔和睡眠时间间隔,在发送时间间隔内发送所述数据包,在睡眠时间间隔
内不发送所述数据包;按照所述数据包进入所述缓存的时间采用先入先出来的顺序发送数
据包。
[0007] 进一步地,根据所述每秒发送数据包的量向所述数据包处理服务发送被缓存的数据包包括:获取所述每秒内的发送时间间隔的数量;根据每秒发送数据包的量确定该秒内
每个发送时间间隔内需要发送的数据包的量;在到达每个发送时间间隔时按照该时间间隔
内需要发送的数据包的量发送数据包。
[0008] 进一步地,还包括:在需要发送的数据包的量已经在该发送时间间隔内发送完毕的情况下,等待该发送时间间隔结束。
[0009] 进一步地,预先设置时钟计算线程,其中,所述时钟计算线程用于计算时间;在所述时钟计算线程通过计算确定到达发送时间间隔时,唤醒数据包发送线程发送数据包。
[0010] 进一步地,获取所述数据包包括:抓取数据库客户端和数据库服务器之间的数据包,其中,所述数据包处理服务用于对所述数据包进行审计。
[0011] 根据本申请的另一个方面,还提供了一种流量控制系统,包括:缓存模块,用于获取数据包,并将获取到的数据包按照获取时间进行缓存;协商模块,用于与数据包处理服务
协商发送数据包的速率,其中,发送数据包的速率为向所述数据包处理服务发送数据包的
速率;确定模块,用于根据协商得到的所述速率确定每秒向所述数据包处理服务发送数据
包的量;发送模块,用于根据所述每秒发送数据包的量向所述数据包处理服务发送被缓存
的数据包,其中,所述每秒被分割为多个时间间隔,所述多个时间间隔分为发送时间间隔和
睡眠时间间隔,在发送时间间隔内发送所述数据包,在睡眠时间间隔内不发送所述数据包;
按照所述数据包进入所述缓存的时间采用先入先出来的顺序发送数据包。
[0012] 进一步地,所述发送模块用于:获取所述每秒内的发送时间间隔的数量;根据每秒发送数据包的量确定该秒内每个发送时间间隔内需要发送的数据包的量;在到达每个发送
时间间隔时按照该时间间隔内需要发送的数据包的量发送数据包。
[0013] 进一步地,所述发送模块还用于:在需要发送的数据包的量已经在该发送时间间隔内发送完毕的情况下,等待该发送时间间隔结束。
[0014] 进一步地,还包括:唤醒模块,用于预先设置时钟计算线程,其中,所述时钟计算线程用于计算时间;在所述时钟计算线程通过计算确定到达发送时间间隔时,唤醒数据包发
送线程发送数据包。
[0015] 进一步地,所述缓存模块用于:抓取数据库客户端和数据库服务器之间的数据包,其中,所述数据包处理服务用于对所述数据包进行审计。
[0016] 在本申请实施例中,采用了获取数据包,并将获取到的数据包按照获取时间进行缓存;与数据包处理服务协商发送数据包的速率,其中,发送数据包的速率为向所述数据包
处理服务发送数据包的速率;根据协商得到的所述速率确定每秒向所述数据包处理服务发
送数据包的量;根据所述每秒发送数据包的量向所述数据包处理服务发送被缓存的数据
包,其中,所述每秒被分割为多个时间间隔,所述多个时间间隔分为发送时间间隔和睡眠时
间间隔,在发送时间间隔内发送所述数据包,在睡眠时间间隔内不发送所述数据包;按照所
述数据包进入所述缓存的时间采用先入先出来的顺序发送数据包。通过本申请解决了现有
技术中无法控制用于处理数据包的服务的流量所导致的问题,从而控制了处理服务接收到
的流量,保证了处理服务的正常进行。

附图说明

[0017] 构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0018] 图1是根据本申请实施例的流量控制方法的流程图;
[0019] 图2是根据本申请实施例的控制数据库审计服务流量的方法的流程图。

具体实施方式

[0020] 需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
[0021] 需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不
同于此处的顺序执行所示出或描述的步骤。
[0022] 在本实施例中提供了一种流量控制方法,图1是根据本申请实施例的流量控制方法的流程图,如图1所示,该方法包括如下步骤:
[0023] 步骤S102,获取数据包,并将获取到的数据包按照获取时间进行缓存;
[0024] 步骤S104,与数据包处理服务协商发送数据包的速率,其中,发送数据包的速率为向所述数据包处理服务发送数据包的速率;
[0025] 步骤S106,根据协商得到的所述速率确定每秒向所述数据包处理服务发送数据包的量;
[0026] 步骤S108,根据所述每秒发送数据包的量向所述数据包处理服务发送被缓存的数据包,其中,所述每秒被分割为多个时间间隔,所述多个时间间隔分为发送时间间隔和睡眠
时间间隔,在发送时间间隔内发送所述数据包,在睡眠时间间隔内不发送所述数据包;按照
所述数据包进入所述缓存的时间采用先入先出来的顺序发送数据包。
[0027] 在该步骤中,可以获取所述每秒内的发送时间间隔的数量;根据每秒发送数据包的量确定该秒内每个发送时间间隔内需要发送的数据包的量;在到达每个发送时间间隔时
按照该时间间隔内需要发送的数据包的量发送数据包。在需要发送的数据包的量已经在该
发送时间间隔内发送完毕的情况下,等待该发送时间间隔结束。
[0028] 为了更好的进行发送,还可以预先设置时钟计算线程,其中,所述时钟计算线程用于计算时间;在所述时钟计算线程通过计算确定到达发送时间间隔时,唤醒数据包发送线
程发送数据包。
[0029] 通过上述步骤解决了现有技术中无法控制用于处理数据包的服务的流量所导致的问题,从而控制了处理服务接收到的流量,保证了处理服务的正常进行。
[0030] 在一个可选的实施方式中,可以采用如下步骤来处理数据包:
[0031] 1、抓取程序抓取客户端和数据库之间的数据包。在该步骤中抓取方为第三方,不影响客户端和数据库之间的数据通讯,抓取方法可能有从网卡抓包、本地socker抓包、本地
namepipe抓包等。
[0032] 2、将抓取的数据包按照抓取时间进行缓存。在该步骤中需要将数据包缓存,否则直接发送会造成发送的速度进行波动,因为客户端和数据库之间的流量速度和大小不稳
定。
[0033] 3、与审计服务器协商发送的速率。这里需要从审计服务器获取到准确的速度上限,审计服务器可以根据自己的处理能力来确定速率。
[0034] 4、通过计算TCP/IP协议包头大小来计算每次发送的数据量。在该步骤中,因为发送数据包需要在数据包的前面加上TCP/IP的包头信息,这部分包头信息有一定的长度,需
要计算到数据的总量里面;并且由于包头的长度与发包的个数有关系,所以这部分需要根
据获取到的审计能力,动态计算发包的数量和大小。
[0035] 5、将1s分为多个时间间隔,计算每个时间间隔发送的数据量。因为发送数据包需要分为发送时间和睡眠时间,这段时间如果以秒为间隔就会造成流量监控上的波动;所以
这里需要将1s分割很多个更小的时间段来计算,这样让流量在1s的范围里是匀速的。
[0036] 6、在1个时间间隔发送完成预期的数量后,等待该时间间隔过完。
[0037] 7、依赖稳定的时钟计算线程,定时唤醒发包的线程开始工作。在分为多个时间间隔后,需要毫秒级的时间间隔计算,所以这里需要一个稳定准确的时钟计算线程,做定期唤
醒发包线程开始工作。
[0038] 上述步骤不仅可用于审计数据上的流量限速,还可扩展到各种通讯设备之间进行流量限速的功能,只要把计算的协议修改为对应的通讯设备之间使用的协议即可,在此不
再一一赘述。
[0039] 上述实施例可以应用到数据库审计中,此时,抓取数据库客户端和数据库服务器之间的数据包,其中,所述数据包处理服务用于对所述数据包进行审计(也称为审计服务或
者审计服务器)。下面结合一个数据库审计服务流量控制的可选实施例进行详细说明。
[0040] 在本实施例中提供了一种控制数据库审计服务流量的方法,图2是根据本申请实施例的控制数据库审计服务流量的方法的流程图,如图2所示,该流程包括如下步骤:
[0041] 步骤S202,抓取数据库客户端与数据库之间交互的数据包;
[0042] 步骤S204,将抓取到的数据包按照抓取时间进行缓存;
[0043] 步骤S206,与审计服务器(或称为审计服务)协商发送包的速率,其中,所述审计服务器可以根据审计数据包的审计能力来确定发送包的速率,其中,所述审计能力用于表示
所述审计服务器每秒能够审计的第一字节数,所述审计服务用于对接收到的数据包进行审
计;
[0044] 在一个可以选择增加的实施方式中,在审计服务所在的服务器也为审计服务设置有缓存空间,在审计服务所在的服务器的缓存空间未满的情况下,用于发送抓取数据包的
主服务将抓取到的数据包均实时发送给所述审计服务,在审计服务的缓存已经满了的情况
下,所述审计服务向所述主服务发送审计服务所在服务器的缓存已满的指示消息,所述主
服务在接收到所述指示消息之后,将抓取到的数据按照时间进行缓存,按照与审计服务协
商的速率发送数据包。
[0045] 如果仅在主服务所在的服务器设置了缓存,直接将抓取到的数据包进行缓存。
[0046] 所述主服务所在缓存已满的情况下,所述主服务将再接收到的数据包按照时间顺序进行命名并保存在所述主服务所在服务器预先开辟的硬盘存储空间上,所述缓存保存在
内存中。在所述缓存存在空间的情况下,从所述硬盘上读取数据包放入缓存中。这样可以解
决主服务缓存已满的问题。
[0047] 在另一个可选的实施方式中,所述主服务设置的缓存是根据所述数据库历史上的数据处理情况来进行配置的,如果出现缓存已满的情况,说明该数据库的处理负荷出现过
大的情况,所述主服务向预先配置的联系方式发送警告信息,其中,所述警告信息用于指示
所述缓存已满,并且该数据库处理负荷超出阈值。
[0048] 步骤S208,根据所述速率确定每秒向所述审计服务发送不超过所述第一字节数的数据包;其中,按照所述数据包进入所述缓存的时间采用先入先出来的顺序发送数据包。
[0049] 通过上述步骤解决了现有技术中无法控制审计服务的流量所导致的问题,从而控制审计服务接收到的流量,保证了审计服务的正常进行。
[0050] 所述方法步骤可以由主服务执行,其中,所述主服务驻留在所述数据库所在服务器上,所述主服务用于抓取数据包并将抓取到的数据包发送至所述审计服务进行审计。
[0051] 主服务可以根据审计服务进行通信,例如,所述主服务可以向所述审计服务发送询问消息,其中,所述询问消息用于指示所述审计服务回复所述审计服务的可接受的发送
速率;所述审计服务向所述主服务发送响应消息,其中,所述响应消息中携带有所述发送速
率。
[0052] 审计服务的可接受的发送速率是动态变化的,作为一个可选的实施方式,所述审计服务获取最后一次向所述主服务发送的所述响应消息中携带的第一可接受的发送速率;
在所述第一可接受的发送速率发生变化时,所述审计服务向所述主服务发送变化后的第二
可接受的发送速率。在该可选实施方式中,所述主服务根据所述第二可接受的发送速率向
所述审计服务每秒发送不超过所述第二可接受的发送速率对应的第二字节数的数据包。
[0053] 在另一个可选的实施方式中,为了更加精确的控制向审计服务发送的数据包的流量。所述主服务获取抓取到的数据包协议,根据所述数据包的协议对每个数据包进行分析,
从所述每个数据包中抓取到有效的载荷,将该数据包中的协议控制部分删除,将抓取到的
有效载荷保存在缓存中。
[0054] 在向审计服务发送数据包的时候,根据发送数据包所使用的协议,获取使用该协议需要增加的控制部分的第三字节数,使用所述第一字节数减去所述第三字节数,得到第
四字节数,从所述缓存总提取小于所述第四字节数的有效的载荷,将控制部分和提取到的
有效的载荷构建成数据包,将构建好的数据包发送至所述审计服务。这样每秒就发一个数
据包,计算比较容易计算。
[0055] 在另一个可选实施方式中,获取所述主服务和所述审计服务之间的网络带宽的可用值,根据所述可用值确定每秒发送的数据包的第一数量,使用所述第一数量乘以所述第
三字节数得到乘积,然后使用第一字节数减去乘积得到第四字节数,使用所述所述第四字
节数除以所述第一数量,就可以得到每个数据包的有效载荷量,然后从缓存中获取每个数
据包的有效载荷量,构建出第一数量的数据包。
[0056] 在本实施例中,由驻留在数据库的主服务进行数据包的抓取,然后将抓取到的数据包放到缓冲中,进行计算,确定每秒的发送量。每秒的发送量按照审计服务的可接受的发
送速率来计算。这样可以避免进行包聚合。为了计算的更加精确,可以获取抓取到的数据包
的协议,如果是TCP协议,则获取TCP数据层的协议栈封装,将封装的字节数计算出来,这样
可以做到精确计算。
[0057] 在本实施例中,提供一种电子装置,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行以上实施例中的方法。
[0058] 上述程序可以运行在处理器中,或者也可以存储在存储器中(或称为计算机可读介质),计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或
技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计
算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动
态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可
擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器 
(CD‑ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他
磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文
中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据
信号和载波。
[0059] 这些计算机程序也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他
可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方
框或多个方框中指定的功能的步骤,对应与不同的步骤可以通过不同的模块来实现。
[0060] 该本实施例中就提供了这样的一种装置和系统。该系统包括:流量控制系统,包括:缓存模块,用于获取数据包,并将获取到的数据包按照获取时间进行缓存;协商模块,用
于与数据包处理服务协商发送数据包的速率,其中,发送数据包的速率为向所述数据包处
理服务发送数据包的速率;确定模块,用于根据协商得到的所述速率确定每秒向所述数据
包处理服务发送数据包的量;发送模块,用于根据所述每秒发送数据包的量向所述数据包
处理服务发送被缓存的数据包,其中,所述每秒被分割为多个时间间隔,所述多个时间间隔
分为发送时间间隔和睡眠时间间隔,在发送时间间隔内发送所述数据包,在睡眠时间间隔
内不发送所述数据包;按照所述数据包进入所述缓存的时间采用先入先出来的顺序发送数
据包。
[0061] 该系统或者装置用于实现上述的实施例中的方法的功能,该系统或者装置中的每个模块与方法中的每个步骤相对应,已经在方法中进行过说明的,在此不再赘述。
[0062] 例如,所述发送模块用于:获取所述每秒内的发送时间间隔的数量;根据每秒发送数据包的量确定该秒内每个发送时间间隔内需要发送的数据包的量;在到达每个发送时间
间隔时按照该时间间隔内需要发送的数据包的量发送数据包。可选地,所述发送模块还用
于:在需要发送的数据包的量已经在该发送时间间隔内发送完毕的情况下,等待该发送时
间间隔结束。
[0063] 又例如,所述系统还可以包括:唤醒模块,用于预先设置时钟计算线程,其中,所述时钟计算线程用于计算时间;在所述时钟计算线程通过计算确定到达发送时间间隔时,唤
醒数据包发送线程发送数据包。
[0064] 又例如,所述缓存模块用于:抓取数据库客户端和数据库服务器之间的数据包,其中,所述数据包处理服务用于对所述数据包进行审计。
[0065] 在本实施例中,由驻留在数据库的主服务进行数据包的抓取,然后将抓取到的数据包放到缓冲中,进行计算,确定每秒的发送量。每秒的发送量按照审计服务的能力来计
算。这样可以避免进行包聚合。为了计算的更加精确,可以获取抓取到的数据包的协议,如
果是TCP协议,则获取TCP数据层的协议栈封装,将封装的字节数计算出来,这样可以做到精
确计算。
[0066] 以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、
改进等,均应包含在本申请的权利要求范围之内。