一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种控制流量的方法、装置、服务器及介质与流程

2022-11-23 14:33:28 来源:中国专利 TAG:


1.本技术涉及服务器领域,特别是涉及一种控制流量的方法、装置、服务器及介质。


背景技术:

2.samba多通道多线程是一种利用服务器信息块(server message block,smb)多通道特性,通过在客户端和服务端建立多个传输控制协议(transmission control protocol,tcp)连接,并将每个tcp连接处理单独放入一个工作线程的smb数据流处理系统。多个tcp连接可以保证网络带宽的最大化利用,多个通道线程可以保证服务端对每个通道接收的smb数据流进行并发处理。
3.当smb工作环境中出现若干客户端连续处理大文件读写时,流量相对容易达到网络带宽极限,此时更多的其他客户端访问就会出现明显卡顿。目前通用的服务质量(quality of service,qos)带宽方案是通过设置一个固定的控制阈值,来限制单个客户端的流量上限,如采用独占方式,独占方式则是设置固定额度的带宽只限定给一个或若干固定客户端用,设置完剩余的带宽分给其他客户端,这样如果固定额度的客户端未充分使用带宽,空闲的数据链路也无法分配给其他客户端用,导致多个smb客户端场景下的带宽无法充分利用,以及少数客户端占用大量带宽,剩余客户端无法正常使用smb共享服务的问题,即流量分配不均衡以及带宽的利用率低。
4.由此可见,如何实现流量的均衡分配以及提高带宽的利用率是本领域人员亟需解决的技术问题。


技术实现要素:

5.本技术的目的是提供一种控制流量的方法、装置、服务器及介质,用于实现流量的均衡分配以及提高带宽的利用率。
6.为解决上述技术问题,本技术提供一种控制流量的方法,包括:
7.获取物理链路的总带宽值以及所有客户端的smb通道总数;
8.根据所述总带宽值以及所述smb通道总数获取平均通道带宽值;
9.根据所述平均通道带宽值以及当前客户端的通道数获取当前所述客户端的平均总带宽值;
10.获取当前所述客户端的实际带宽值;
11.根据所述实际带宽值与所述平均总带宽值的关系控制流量的收发。
12.优选地,在所述获取当前所述客户端的实际带宽值之前,所述方法还包括:
13.在接收到所述客户端发起的通道连接的情况下,建立当前smb业务子进程与smb控制子进程之间的unix socket连接;
14.向当前所述smb业务子进程的epoll事件中添加当前socket句柄的响应处理接口;
15.在当前所述smb业务子进程接收到所述客户端发出的访问请求的情况下,将当前所述smb业务子进程的编号、当前所述通道的编号、请求的数据长度发送至所述smb控制子
进程。
16.优选地,在所述将当前所述smb业务子进程的编号、当前所述通道的编号、请求的数据长度发送至所述smb控制子进程之后,所述方法还包括:
17.在接收到所述smb业务子进程发起的所述unixsocket连接的情况下,建立socket句柄并向所述epoll事件中注册所述socket句柄;
18.根据所述socket句柄获取所述smb业务子进程对应的业务子进程编号;
19.根据所述业务子进程编号创建hash汇总表;
20.在接收到所述smb业务子进程发送的数据流量信息的情况下,解析所述数据流量信息以便获取当前所述smb业务子进程的进程编号、当前所述smb业务子进程的通道编号以及当前所述smb业务子进程的通道的各通道的数据流量信息;
21.根据当前所述smb业务子进程的进程编号在所述hash汇总表中查找对应的当前所述smb业务子进程节点;
22.将当前所述smb业务子进程的各所述通道的数据流量信息以链式结构追加到当前所述smb业务子进程节点上以形成新的hash汇总表;
23.对应地,所述获取当前所述客户端的实际带宽值包括:
24.按照固定频率遍历所述新的hash汇总表;
25.根据所述新的hash汇总表获取当前所述客户端的实际带宽值。
26.优选地,所述固定频率为1s,所述根据所述新的hash汇总表获取当前所述客户端的实际带宽值包括:
27.从所述新的hash汇总表中获取当前所述smb业务子进程的进程编号下的各通道对应的当前流量值以及当前流量值的上一次流量值;
28.根据所述当前流量值以及所述上一次流量值获取各所述通道的实际带宽值;
29.获取各所述通道的实际带宽值的和;
30.将各所述通道的实际带宽值的和作为当前所述客户端的所述实际带宽值。
31.优选地,所述根据所述实际带宽值与所述平均总带宽值的关系控制流量的收发包括:
32.在所述实际带宽值大于所述平均总带宽值的情况下,则设置反馈结果标记为拒绝接收所述流量的信号;将所述拒绝接收所述流量的信号反馈至所述smb业务子进程;向所述smb业务子进程的各所述通道的socket句柄均发送拒绝指令;根据所述拒绝指令控制所述smb业务子进程的各所述通道临时关闭所述流量的接收;
33.在所述实际带宽值小于所述平均总带宽值的情况下,则设置所述反馈结果标记为允许接收所述流量的信号;将所述允许接收所述流量的信号反馈至所述smb业务子进程;向所述smb业务子进程的各所述通道的所述socket句柄均发送允许指令;根据所述允许指令控制所述smb业务子进程的各所述通道正常接收所述流量。
34.优选地,在所述向所述smb业务子进程的各所述通道的socket句柄均发送拒绝指令之后,所述根据所述拒绝指令控制所述smb业务子进程的各所述通道临时关闭所述流量的接收之前,所述方法还包括:
35.获取所述通道的当前接收状态;
36.在所述当前接收状态为拒绝状态的情况下,忽略所述拒绝指令;
37.在所述当前接收状态为允许状态的情况下,则进入所述根据所述拒绝指令控制所述smb业务子进程的各所述通道临时关闭所述流量的接收的步骤;
38.对应地,在所述向所述smb业务子进程的各所述通道的所述socket句柄均发送允许指令之后,所述根据所述允许指令控制所述smb业务子进程的各所述通道正常接收所述流量之前,所述方法还包括:
39.获取所述通道的所述当前接收状态;
40.在所述当前接收状态为所述允许状态的情况下,忽略所述允许指令;
41.在所述当前接收状态为所述拒绝状态的情况下,则进入所述根据所述允许指令控制所述smb业务子进程的各所述通道正常接收所述流量的步骤。
42.优选地,在所述根据所述实际带宽值与所述平均总带宽值的关系控制流量的收发之后,所述方法还包括:
43.输出用于表征收发状态的提示信息。
44.为了解决上述技术问题,本技术还提供一种控制流量的装置,包括:
45.第一获取模块,用于获取物理链路的总带宽值以及所有客户端的smb通道总数;
46.第二获取模块,用于根据所述总带宽值以及所述smb通道总数获取平均通道带宽值;
47.第三获取模块,用于根据所述平均通道带宽值以及当前客户端的通道数获取当前所述客户端的平均总带宽值;
48.第四获取模块,用于获取当前所述客户端的实际带宽值;
49.控制模块,用于根据所述实际带宽值与所述平均总带宽值的关系控制流量的收发。
50.为了解决上述技术问题,本技术还提供一种服务器,包括:
51.存储器,用于存储计算机程序;
52.处理器,用于执行所述计算机程序时实现上述的控制流量的方法的步骤。
53.为了解决上述技术问题,本技术还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的控制流量的方法的步骤。
54.本技术所提供的控制流量的方法,包括:获取物理链路的总带宽值以及所有客户端的smb通道总数;根据总带宽值以及smb通道总数获取平均通道带宽值;根据平均通道带宽值以及当前客户端的通道数获取当前客户端的平均总带宽值;获取当前客户端的实际带宽值;根据实际带宽值与平均总带宽值的关系控制流量的收发。该方法中,根据物理链路的总带宽值和所有客户端的smb的通道总数得到了平均通道带宽值,使得所有smb通道之间做到带宽的平均分配;根据当前客户端的通道数为当前客户端分配带宽,使得当前客户端的带宽利用率能够尽可能达到一个相对平衡的状态,提高带宽的利用率;此外,根据实际带宽值与平均总带宽值的关系控制流量的收发,使得流量能够尽可能地被最大化利用。
55.此外,本技术还提供一种控制流量的装置、服务器以及计算机可读存储介质,与上述提到的控制流量的方法具有相同或相对应的技术特征,效果同上。
附图说明
56.为了更清楚地说明本技术实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
57.图1为本技术实施例提供的一种控制流量的方法的流程图;
58.图2为本技术的一实施例提供的控制流量的装置的结构图;
59.图3为本技术另一实施例提供的服务器的结构图;
60.图4为本技术实施例提供的一种smb业务子进程和smb控制子进程的子模块组成示意图;
61.图5为本技术实施例提供的一种自适应流量均衡的处理方法的流程图。
具体实施方式
62.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本技术保护范围。
63.本技术的核心是提供一种控制流量的方法、装置、服务器及介质,用于实现流量的均衡分配以及提高带宽的利用率。
64.samba多通道多线程是一种利用smb多通道特性,通过在客户端和服务端建立多个tcp连接,并将每个tcp连接处理单独放入一个工作线程的smb数据流处理系统。多个tcp连接可以保证网络带宽的最大化利用,多个通道线程可以保证服务端对每个通道接收的smb数据流进行并发处理。samba服务采用的是多进程架构,即一个主进程 多个业务子进程的工作模式,主进程用于监听445端口的smb连接,收到新的客户端连接时,采用fork接口创建出单独用于该客户端的子进程;除此之外也有其他文件变动通告、文件打印、透明故障服务等子进程分别用于执行各种具体的任务。
65.为了使本技术领域的人员更好地理解本技术方案,下面结合附图和具体实施方式对本技术作进一步的详细说明。图1为本技术实施例提供的一种控制流量的方法的流程图,如图1所示,该方法包括:
66.s10:获取物理链路的总带宽值以及所有客户端的smb通道总数。
67.本技术的流量控制方法主要应用于存储服务器。当客户端向存储服务器请求数据时,首先需要建立客户端与存储服务器之间的物理链路。物理链路的带宽指的是每一条链路每秒能够传输的比特数。当多个客户端向存储服务器请求数据时,通常需要建立多条物理链路,进而存储服务器通过物理链路向各客户端传输数据。客户端与服务端建立多个tcp连接,并将每个tcp连接处理单独放入一个工作线程的smb数据流处理系统。多个tcp连接可以保证网络带宽的最大化利用,多个通道线程可以保证服务端对每个通道接收的smb数据流进行并发处理。各客户端的smb通道数可能相同,也可能不同。为了能够尽可能地将流量均衡分配到各个通道上,需要先获取物理链路的总带宽值以及所有客户端的smb通道总数。
68.s11:根据总带宽值以及smb通道总数获取平均通道带宽值。
69.上述步骤中获得了物理链路的总带宽值以及所有客户端的smb通道总数,将物理
链路的总带宽值除以smb通道总数便可以获取到各通管的带宽值,即此处的平均通道带宽值。
70.s12:根据平均通道带宽值以及当前客户端的通道数获取当前客户端的平均总带宽值。
71.上述步骤中将总的带宽值平均分配到各个通道上。实际中,由于各个客户端建立的通道数可能不同,因此需要平均分得的带宽总量也不同。单个客户端不同通道的数据传输速率可能在平均通道带宽上下波动,为了避免单个客户端在不同处理通道下同时出现正向负向调节带来的不必要数据流震荡,这里以客户端所有通道带宽总值为单位进行决策。故而,将平均通道带宽值乘以当前客户端的通道数即可以获取到当前客户端的平均总带宽值。
72.s13:获取当前客户端的实际带宽值;
73.s14:根据实际带宽值与平均总带宽值的关系控制流量的收发。
74.上述步骤中获得了当前客户端的平均总带宽值,可以认为是理论上各客户端的带宽值。实际上,当前客户端本身存在实际的带宽值。如果实际带宽值已经大于计算出的平均总带宽值,则不需要再为当前客户端分配流量,当前客户端也不需要再接收存储服务器分配的流量;如果实际带宽值小于计算出的平均总带宽值,则可以为当前客户端分配流量,当前客户端也需要允许接收存储服务器分配的流量。
75.本实施例所提供的控制流量的方法,包括:获取物理链路的总带宽值以及所有客户端的smb通道总数;根据总带宽值以及smb通道总数获取平均通道带宽值;根据平均通道带宽值以及当前客户端的通道数获取当前客户端的平均总带宽值;获取当前客户端的实际带宽值;根据实际带宽值与平均总带宽值的关系控制流量的收发。该方法中,根据物理链路的总带宽值和所有客户端的smb的通道总数得到了平均通道带宽值,使得所有smb通道之间做到带宽的平均分配;根据当前客户端的通道数为当前客户端分配带宽,使得当前客户端的带宽利用率能够尽可能达到一个相对平衡的状态,提高带宽的利用率;此外,根据实际带宽值与平均总带宽值的关系控制流量的收发,使得流量能够尽可能地被最大化利用。
76.在实施中,客户端在向存储服务器发送请求之后,为了方便了解到各客户端的请求情况,优选的实施方式是,在获取当前客户端的实际带宽值之前,控制流量的方法还包括:
77.在接收到客户端发起的通道连接的情况下,建立当前smb业务子进程与smb控制子进程之间的unix socket连接;
78.向当前smb业务子进程的epoll事件中添加当前socket句柄的响应处理接口;
79.在当前smb业务子进程接收到客户端发出的访问请求的情况下,将当前smb业务子进程的编号、当前通道的编号、请求的数据长度发送至smb控制子进程。
80.统计并收集各个smb业务子进程的数据流量;smb业务子进程起来后,默认采用的是单一通道进行smb业务处理,如果windows客户端smb协议版本大于3.0,则客户端和服务端之间支持建立多个通道连接;当触发smb数据拷贝动作时,客户端自动发起新的smb通道连接,然后服务端smb业务子进程创建单独的线程处理该smb通道连接。
81.当出现一个新的通道连接时,流量信息收集模块自动发起一个到smb控制子进程的unix socket连接,连接成功向当前子进程的epoll事件中添加一个当前socket句柄的响
应处理接口。
82.当有smb业务访问请求时,每个通道单独接收客户端smb请求,根据接收到的smb请求报文大小,将smb业务进程编号(process identification,pid)、当前通道编号、以及当前通道的数据接收速率打包成单独的数据结构,然后发送给smb控制子进程。
83.本实施例所提供的客户端将请求发送至smb业务子进程,然后再由smb业务子进程将数据打包发送至smb控制子进程,通过对流量进行收集,能够了解到各客户端的请求情况。
84.上述步骤中smb业务子进程将流量信息进行收集,然后发送至smb控制子进程。同样地,smb控制子进程中为了获取到各客户端的请求情况,优选的实施方式是,在将当前smb业务子进程的编号、当前通道的编号、请求的数据长度发送至smb控制子进程之后,控制流量的方法还包括:
85.在接收到smb业务子进程发起的unix socket连接的情况下,建立socket句柄并向epoll事件中注册socket句柄;
86.根据socket句柄获取smb业务子进程对应的业务子进程编号;
87.根据业务子进程编号创建hash汇总表;
88.在接收到smb业务子进程发送的数据流量信息的情况下,解析数据流量信息以便获取当前smb业务子进程的进程编号、当前smb业务子进程的通道编号以及当前smb业务子进程的通道的各通道的数据流量信息;
89.根据当前smb业务子进程的进程编号在hash汇总表中查找对应的当前smb业务子进程节点;
90.将当前smb业务子进程的各通道的数据流量信息以链式结构追加到当前smb业务子进程节点上以形成新的hash汇总表;
91.对应地,获取当前客户端的实际带宽值包括:
92.按照固定频率遍历新的hash汇总表;
93.根据新的hash汇总表获取当前客户端的实际带宽值。
94.smb控制子进程在主进程初始化过程中直接启动,包含了一个unix socket子模块,unix socket子模块采用epoll循环监听各个unix socket连接,每当收到一个socket连接时,自动建立一个socket句柄,向epoll事件中注册该socket连接句柄,同时根据socket句柄获取到smb业务子进程的进程pid。socket关系建立之后,smb业务子进程相当于smb控制子进程的客户端进程,smb控制子进程将进程pid、进程socket句柄的映射关系以客户端子进程pid作为关键词,存储一个全局的hash汇总表中,以便最后向客户端子进程发送反馈结果时,根据进程号找到对应的socket句柄。当再次收到同一个客户端的多通道发起的socket连接时,以链式结构将新的socket句柄存放在当前客户端pid对应的数据结点下面。
95.当收到smb业务子进程发送的数据流量信息时,首先解析出其中的进程pid、进程通道编号channelid、数据流量值flowbytes,然后以进程pid为索引,在hash表中找到对应结点后,将各个通道的流量信息以链式结构追加到对应子进程pid的hash结点上,最终形成新的hash汇总表。
96.当获取当前客户端的实际带宽值时,可以遍历新的hash汇总表,根据新的hash汇总表中记录的流量信息便可以获取到当前客户端的实际带宽值。
97.本实施例所提供的在smb控制子进程中将客户端的请求信息汇总在hash表中,使得能够以客户端子进程pid为关键词,方便将各通道的流量信息进行汇总,以及在建立好hash表之后,方便后续向客户端子进程发送反馈结果时,根据pid找到对应的socket句柄,提高控制流量的效率。
98.利用上述步骤中建立的hash汇总表,根据hash汇总表便可以获取到当前客户端的实际带宽值。假设选取固定频率为1s,根据新的hash汇总表获取当前客户端的实际带宽值包括:
99.从新的hash汇总表中获取当前smb业务子进程的进程编号下的各通道对应的当前流量值以及当前流量值的上一次流量值;
100.根据当前流量值以及上一次流量值获取各通道的实际带宽值;
101.获取各通道的实际带宽值的和;
102.将各通道的实际带宽值的和作为当前客户端的实际带宽值。
103.实际中,可以采用定时器来获取当前客户端的实时带宽值。定时器子模块用于定期计算业务数据总流量值,由于不同smb请求报文的长度不同,为避免数据速率的频繁变动导致计算量的增加和控制过程的频繁切换,定时器子模块选择以1秒为单位汇总收集的smb数据量大小。对于遍历过程使用的每个pid每个通道的数据结点,都保存了上一次流量值last_val、当前流量值current_val,用当前流量值和上一次流量值计算差值,即可计算当前pid当前通道的带宽速率;当同一个pid数据结点下的所有通道都遍历完成后,即可计算当前pid对应的smb业务子进程的总带宽速率即为smb业务子进程实际总带宽。需要说明的是,由于当前流量值会不断地被各个通道unix socket连接发过来的新数据进行覆盖,因此累加过后,立即将当前流量值存放入上一次流量值字段。
104.本实施例所提供的获取当前客户端的实时带宽值的方式,每个定时器周期到来后,获取定时器子模块以遍历方式读取并累加各个hash结点上所有smb通道的数据流量值,由于定时器周期设置的1秒,此时,累加的结果就相当于当前客户端的实时带宽值,因此,能够方便、快速地获取到当前客户端的实时带宽值。
105.在实施中,根据实际带宽值与平均总带宽值的关系控制流量的收发包括:
106.在实际带宽值大于平均总带宽值的情况下,则设置反馈结果标记为拒绝接收流量的信号;将拒绝接收流量的信号反馈至smb业务子进程;向smb业务子进程的各通道的socket句柄均发送拒绝指令;根据拒绝指令控制smb业务子进程的各通道临时关闭流量的接收;
107.在实际带宽值小于平均总带宽值的情况下,则设置反馈结果标记为允许接收流量的信号;将允许接收流量的信号反馈至smb业务子进程;向smb业务子进程的各通道的socket句柄均发送允许指令;根据允许指令控制smb业务子进程的各通道正常接收流量。
108.本实施例所提供的根据实际带宽值与平均总带宽值的关系控制流量的收发的方法中,通过反馈结果、决策是否接收或拒绝流量,最终再根据决策结果再接收或拒绝流量,使得能够更加合理地控制流量的接收或拒绝。
109.实际中,在决策出允许或拒绝当前客户端接收流量的情况下,可能需要考虑通道的当前接收状态,进而合理地控制流量的接收或拒绝。因此,优选的实施方式是,在向smb业务子进程的各通道的socket句柄均发送拒绝指令之后,根据拒绝指令控制smb业务子进程
的各通道临时关闭流量的接收之前,控制流量的方法还包括:
110.获取通道的当前接收状态;
111.在当前接收状态为拒绝状态的情况下,忽略拒绝指令;
112.在当前接收状态为允许状态的情况下,则进入根据拒绝指令控制smb业务子进程的各通道临时关闭流量的接收的步骤;
113.对应地,在向smb业务子进程的各通道的socket句柄均发送允许指令之后,根据允许指令控制smb业务子进程的各通道正常接收流量之前,控制流量的方法还包括:
114.获取通道的当前接收状态;
115.在当前接收状态为允许状态的情况下,忽略允许指令;
116.在当前接收状态为拒绝状态的情况下,则进入根据允许指令控制smb业务子进程的各通道正常接收流量的步骤。
117.当smb通道建立完成之后,通道的当前状态可能是允许状态或拒绝状态。接收到smb控制子进程的反馈结果可能为允许或拒绝两种,因此,形成了四种组合调节。
118.a.当前接收状态为允许,收到允许信号,忽略该反馈结果;
119.b.当前接收状态为允许,收到拒绝信号,关闭该通道的业务套接字接收,此时整个连接未关闭,只是临时不会触发读取操作;
120.c.当前接收状态为拒绝,收到允许信号,开启该通道的业务套接字接收;
121.d.当前接收状态为拒绝,收到拒绝信号,忽略该反馈结果。
122.本实施例所提供的在收到反馈结果之后,考虑到通道的当前接收状态进行控制流量的收发,使得能够更加合理地实现对流量的控制。
123.在实施中,为了方便用户了解到流量的收发情况,优选的实施方式是,在根据实际带宽值与平均总带宽值的关系控制流量的收发之后,控制流量的方法还包括:
124.输出用于表征收发状态的提示信息。
125.对于提示信息的方式、内容、频率等不作限定,只要能提示到收发状态即可。优选地,对于允许接收和拒绝接收可以采用不同的提示方式等,以便于用户能够根据提示信息快速区分出流量的收发状态。
126.在上述实施例中,对于控制流量的方法进行了详细描述,本技术还提供控制流量的装置、服务器对应的实施例。需要说明的是,本技术从两个角度对装置部分的实施例进行描述,一种是基于功能模块的角度,另一种是基于硬件的角度。
127.图2为本技术的一实施例提供的控制流量的装置的结构图。本实施例基于功能模块的角度,包括:
128.第一获取模块10,用于获取物理链路的总带宽值以及所有客户端的smb通道总数;
129.第二获取模块11,用于根据总带宽值以及smb通道总数获取平均通道带宽值;
130.第三获取模块12,用于根据平均通道带宽值以及当前客户端的通道数获取当前客户端的平均总带宽值;
131.第四获取模块13,用于获取当前客户端的实际带宽值;
132.控制模块14,用于根据实际带宽值与平均总带宽值的关系控制流量的收发。
133.由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
134.本实施例所提供的控制流量的装置,通过第一获取模块获取物理链路的总带宽值以及所有客户端的smb通道总数;通过第二获取模块根据总带宽值以及smb通道总数获取平均通道带宽值;通过第三获取模块根据平均通道带宽值以及当前客户端的通道数获取当前客户端的平均总带宽值;通过第四获取模块获取当前客户端的实际带宽值;通过控制模块根据实际带宽值与平均总带宽值的关系控制流量的收发。该装置中,根据物理链路的总带宽值和所有客户端的smb的通道总数得到了平均通道带宽值,使得所有smb通道之间做到带宽的平均分配;根据当前客户端的通道数为当前客户端分配带宽,使得当前客户端的带宽利用率能够尽可能达到一个相对平衡的状态,提高带宽的利用率;此外,根据实际带宽值与平均总带宽值的关系控制流量的收发,使得流量能够尽可能地被最大化利用。
135.图3为本技术另一实施例提供的服务器的结构图。本实施例基于硬件角度,如图3所示,服务器包括:
136.存储器20,用于存储计算机程序;
137.处理器21,用于执行计算机程序时实现如上述实施例中所提到的控制流量的方法的步骤。
138.其中,处理器21可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器21可以采用数字信号处理器(digital signal processor,dsp)、现场可编程门阵列(field-programmable gate array,fpga)、可编程逻辑阵列(programmable logic array,pla)中的至少一种硬件形式来实现。处理器21也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(central processing unit,cpu);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器21可以集成有图形处理器(graphics processing unit,gpu),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器21还可以包括人工智能(artificial intelligence,ai)处理器,该ai处理器用于处理有关机器学习的计算操作。
139.存储器20可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器20还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器20至少用于存储以下计算机程序201,其中,该计算机程序被处理器21加载并执行之后,能够实现前述任一实施例公开的控制流量的方法的相关步骤。另外,存储器20所存储的资源还可以包括操作系统202和数据203等,存储方式可以是短暂存储或者永久存储。其中,操作系统202可以包括windows、unix、linux等。数据203可以包括但不限于上述所提到的控制流量的方法所涉及到的数据等。
140.在一些实施例中,服务器还可包括有显示屏22、输入输出接口23、通信接口24、电源25以及通信总线26。
141.本领域技术人员可以理解,图3中示出的结构并不构成对服务器的限定,可以包括比图示更多或更少的组件。
142.本技术实施例提供的服务器,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如下方法:控制流量的方法,效果同上。
143.最后,本技术还提供一种计算机可读存储介质对应的实施例。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述方法实施例中记载的步
骤。
144.可以理解的是,如果上述实施例中的方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
145.本技术提供的计算机可读存储介质包括上述提到的控制流量的方法,效果同上。
146.为了使本领域的技术人员更好的理解本技术的技术方案,下面结合附图4以及附图5对上述本技术作进一步的详细说明。图4为本技术实施例提供的一种smb业务子进程和smb控制子进程的子模块组成示意图。如图4所示,该示意图中包含smb控制子进程以及两个smb业务子进程。两个smb业务子进程分别为第一smb业务子进程以及第二业务子进程,smb业务子进程中包含smb业务信息收集模块1以及smb收发速率控制模块2;smb控制子进程中包含smb流量信息汇总模块3、hash汇总表、smb流量信息决策模块4、smb流量控制结果反馈模块5,hash汇总表可以方便smb流量信息决策模块4进行流量信息的决策。
147.从smb流量信息收集模块处理流程开始,涉及的操作步骤包含如下:
148.步骤一:存储结点上开启smb服务主进程,然后在主进程fork出smb控制子进程,在smb控制子进程开启unix socket套接字监听,监听的套接字文件路径为/var/run/smb/flow.socket;
149.步骤二:windows客户端挂载smb服务,smb服务主进程fork出smb业务子进程,此时业务子进程建立一个tcp连接通道;
150.步骤三:smb流量信息收集模块向smb控制子进程监听的套接字发起连接,连接成功后,向epoll事件中注册连接返回的套接字句柄;
151.步骤四:当smb业务子进程收到windows客户端发起的smb请求时,当成功读取完成一个smb请求后,计算读取的数据长度,然后将进程pid、通道编号channelid、和数据长度实时发给smb控制子进程;
152.步骤五:若windows客户端在数据读写过程发起了新的通道连接,则重复步骤二到四。
153.smb流量信息汇总模块位于smb控制子进程,一方面用于接受smb业务子进程各个通道的unix socket连接,另一方面用于汇总各个smb业务子进程的流量统计信息,具体处理步骤如下:
154.步骤一:当接收到smb业务子进程发起的unixsocket连接时,根据连接成功的socket句柄注册处理接口,并获取smb业务子进程的pid;
155.步骤二:以业务子进程pid作为关键词,将业务子进程作为一个单独的数据结点加入自身维护的hash汇总表;
156.步骤三:当收到某个业务子进程pid的流量传送请求时,从中解析进程pid、通道编号id、和接收的数据长度信息,然后将其累加到pid数据结点对应通道编号的链式子结点下。
157.步骤四:如果smb业务子进程有多个通道,则smb控制子进程在hash汇总表中给当前pid数据结点进一步添加多个通道结点,同时更新自身保存的全局smb通道总数;
158.当smb控制子进程起来时,除了监听指定本地路径文件的unix socket连接,同时启动一个1秒周期的定时器,用于执行smb流量信息决策模块的功能逻辑;
159.步骤一:流量信息决策模块每隔一个计数周期遍历hash汇总表,包含了双层循环遍历,外层循环用于遍历各个smb业务子进程对应的pid数据结点,内层循环用于遍历各个pid数据结点下的各个链式通道结点;
160.步骤二:当遍历到指定pid、指定通道的数据结点时,直接对数据结点当前的流量统计值进行累加,同时遍历过程记录并递增一个通道总个数;
161.a.对于遍历过程使用的每个pid每个通道的数据结点,都保存了上一次流量值last_val、当前流量值current_val,用当前流量值和上一次流量值计算差值,即可计算当前pid当前通道的带宽速率;
162.b.当同一个pid数据结点下的所有通道都遍历完成后,即可计算当前pid对应的smb业务子进程的总带宽速率;
163.c.由于当前流量值会不断地被各个通道unix socket连接发过来的新数据进行覆盖,因此累加过后,立即将当前流量值存放入上一次流量值字段;
164.d.根据物理链路的总带宽信息,除以通道总数,即可得到各个通道的最大允许平均带宽;平均通道带宽乘以对应pid数据结点的通道数,可以得到对应业务子进程的最大允许带宽;
165.步骤三:根据步骤二的b、d计算出的smb业务子进程实际总带宽和最大允许总带宽来决定如何向客户端反馈,如果实际总带宽大于最大允许总带宽,则设置反馈结果标记为拒绝信号;否则设置反馈结果为允许信号;
166.流量信息决策模块在遍历过程后,对于已经处理的每个pid结点,根据处理结果调用流量控制结果反馈模块发送至smb业务子进程。
167.步骤一:流量控制结果反馈模块判断每个pid结点的处理结果,若为允许信号,则向该pid结点下的所有通道的socket句柄均发送允许指令,指示当前smb业务子进程的各个通道都可以正常接收数据;
168.步骤二:若为拒绝信号,则向该pid结点下的所有通道的socket句柄均发送拒绝指令,指示smb业务子进程临时关闭数据接收;
169.smb收发速率控制模块通过调用epoll控制接口来设置业务套接字的工作模式;
170.步骤一:当smb通道建立完成之后,smb收发速率控制模块为该通道设置初始数据接收状态为允许;
171.步骤二:当收到来自控制子进程的反馈结果后,分为四种组合进行调节;
172.当前接收状态为允许,收到允许信号,忽略该反馈结果;
173.当前接收状态为允许,收到拒绝信号,关闭该通道的业务套接字接收,此时整个连接未关闭,只是临时不会触发读取操作;
174.当前接收状态为拒绝,收到允许信号,开启该通道的业务套接字接收;
175.当前接收状态为拒绝,收到拒绝信号,忽略该反馈结果。
176.图5为本技术实施例提供的一种自适应流量均衡的处理方法的流程图。
177.如图5所示,该方法包括:
178.s15:smb多通道建立;
179.s16:发起unix socket连接;
180.s17:发送pid、通道id、数据、流量;
181.s18:流量收集汇总;
182.s19:流量均值计算;
183.s20:smb业务控制。
184.由此可见,本实施例所提供的自适应流量均衡的处理方法,采用smb控制子进程和业务子进程分离的方式,在smb控制子进程的决策过程,对整个物理链路的最大带宽进行计算分配控制,以smb通道总数作为权值,不同客户端允许的最大带宽根据建立的smb通道总数决定;最终根据平均带宽结果和业务进程实际总带宽的结果采取不同的smb业务数据流接收模式,对存储节点上所有smb客户端的整体带宽使用起到一个自适应的均衡调整作用。
185.以上对本技术所提供的一种控制流量的方法、装置、服务器及介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以对本技术进行若干改进和修饰,这些改进和修饰也落入本技术权利要求的保护范围内。
186.还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献