CN106411558A - 一种数据流量限制的方法及系统 - Google Patents
一种数据流量限制的方法及系统 Download PDFInfo
- Publication number
- CN106411558A CN106411558A CN201510491100.3A CN201510491100A CN106411558A CN 106411558 A CN106411558 A CN 106411558A CN 201510491100 A CN201510491100 A CN 201510491100A CN 106411558 A CN106411558 A CN 106411558A
- Authority
- CN
- China
- Prior art keywords
- subprocess
- bandwidth threshold
- maximum
- network packet
- socket
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请实施例提供了一种数据流量限制的方法及系统,其中所述方法包括:在应用层确定业务对象对应的一个或多个父进程对象;分别采用所述父进程对象创建一个或多个对应的子进程对象,并为所述一个或多个子进程对象分配最大输入输出I/O带宽阈值;当检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。本申请可以提高网络隔离的稳定性。
Description
本发明专利申请是以申请日为2015年7月27日、申请号为201510447139.5、名称为“一种数据流量限制的方法及系统”的中国发明专利申请为优先权基础提出的在后申请。
技术领域
本申请涉及数据处理技术领域,特别是涉及一种数据流量限制的方法,以及一种数据流量限制的系统。
背景技术
随着互联网技术的普及,产生的数据量也呈指数级增长,数据处理需要消耗的资源也日趋庞大,而在云计算平台大力发展的今天,资源的高效利用至关重要,要达到这一目标,资源隔离技术是其中重要一环。资源隔离是指为不同任务提供可独立使用的计算资源,以避免它们之间互相干扰。
现有的资源隔离技术中,基于进程的Cgroup(Control groups,控制族群)使用得比较广泛。Cgroup是Linux内核提供的一种可以隔离进程物理资源(如CPU,内存,IO等)的机制,Cgroup整合了现有的cpuset,Memory,net_cls等子系统,使得Cgroups适用于从单个进程的资源控制到实现操作系统层次的虚拟化等多种应用场景。
其中,net_cls子系统用于对单个进程进行网络带宽控制,它不会直接控制网络读写,而是使用等级识别符classid标记网络数据包,让linux流量控制程序Traffic Control(简称TC)识别Cgroup中任务生成的数据包以进行限流。
然而,net_cls使用前必须先配置linux cgroups和Traffic Control模块。在一些实验性的测试中,单纯的Cgroup网络隔离效果并不是很好,网络带宽使用波动较大,而且由于Cgroup是内核自带的模块,因此灵活性有天生的限制,不能很好的满足网络资源的多样化需求。
因此,目前需要本领域技术人员迫切解决的一个技术问题就是:如何提出一种适用性强的网络隔离方案,用以提高网络隔离的稳定性。
发明内容
本申请实施例所要解决的技术问题是提供一种数据流量限制的方法,用以提高网络隔离的稳定性。
相应的,本申请实施例还提供了一种数据流量限制的系统,用以保证上述方法的实现及应用。
为了解决上述问题,本申请实施例公开了一种数据流量限制的方法,所述的方法包括:
在应用层确定业务对象对应的一个或多个父进程对象;
分别采用所述父进程对象创建一个或多个对应的子进程对象,并为所述一个或多个子进程对象分配最大输入输出I/O带宽阈值;
当检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
优选地,所述子进程具有子进程标识,在所述当检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制的步骤之前,还包括:
采用所述父进程对象将所述子进程对象的子进程标识及对应的最大I/O带宽阈值发送至操作系统内核层,促使所述操作系统内核层创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
优选地,所述当检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制的步骤包括:
采用父进程对象预先创建socket描述符fd,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;
采用所述父进程对象将所述socket fd及对应的子进程对象的子进程标识发送至操作系统内核层,以及,采用所述父进程对象将所述socket fd发送至对应的子进程中;
当检测到所述子进程对象采用所述socket fd输入或输出网络数据包时,促使所述操作系统内核层完成如下操作:
所述操作系统内核层根据所述socket fd及对应的子进程对象的子进程标识,获得对应的socket结构体;
当所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
优选地,所述方法还包括:
自适应调整所述子进程对象的最大I/O带宽阈值,包括:
确定父层级的最大I/O带宽阈值,其中,所述父层级是在所述子进程对象的级别之上的对象,包括业务对象或物理机器;
若所述父层级所包含的所有子进程对象的最大I/O带宽阈值的总和大于所述父层级的最大I/O带宽阈值,则根据所述子进程对象的数量,计算每个子进程对象所分配的第一平均带宽阈值;
若所述子进程对象的最大I/O带宽阈值小于所述第一平均带宽阈值,则保持所述子进程对象的最大I/O带宽阈值不变;
若所述子进程对象的最大I/O带宽阈值大于所述第一平均带宽阈值,则计算第二平均带宽阈值,并将所述子进程对象的最大I/O带宽阈值调整为所述第二平均带宽阈值,其中,所述第二平均带宽阈值按照如下方式计算:(所述父层级的最大I/O带宽阈值-所有小于所述第一平均带宽阈值的子进程对象的最大I/O带宽阈值)/(大于所述第一平均带宽阈值的子进程对象的数量)。
本申请实施例还公开了一种数据流量限制的方法,所述的方法包括:
在操作系统内核层接收父进程对象发送的与一个或多个子进程对象对应的最大输入输出I/O带宽阈值,其中,所述父进程对象与业务对象关联,所述子进程对象是采用所述父进程对象创建的进程对象,所述最大I/O带宽阈值是所述父进程对象创建子进程对象时为所述子进程对象分配的带宽阈值;
当接收到所述子进程对象发送的输入或输出网络数据包时,依据所述子进程对象对应的最大I/O带宽阈值对所述网络数据包进行数据流量限制。
优选地,所述子进程具有子进程标识,在所述当接收到所述子进程对象发送的输入或输出网络数据包时,依据所述子进程对象对应的最大I/O带宽阈值对所述网络数据包进行数据流量限制的步骤之前,还包括:
创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
优选地,所述当接收到所述子进程对象发送的输入或输出网络数据包时,依据所述子进程对象对应的最大I/O带宽阈值对所述网络数据包进行数据流量限制的步骤的步骤包括:
接收父进程对象发送的预先创建的socket fd及对应的子进程对象的子进程标识,其中,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;
根据所述socket fd及对应的子进程对象的子进程标识,获取到对应的socket结构体;
接收子进程对象采用所述socket fd输入或输出的网络数据包;
当所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
优选地,所述基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制的步骤包括:
获取所述网络数据包的实际数据流量;
基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得对应的最大I/O带宽阈值;
若所述实际数据流量小于所述最大I/O带宽阈值,则按照所述实际数据流量进行所述网络数据包的传送;
若所述实际数据流量大于所述最大I/O带宽阈值,则按照所述最大I/O带宽阈值进行所述网络数据包的传送。
优选地,所述方法还包括:
若所述实际数据流量大于所述最大I/O带宽阈值,将所述实际数据流量中除所述最大I/O带宽阈值之外的剩余数据流量对应的数据,放置在预设大小的缓存区域中;
若所述缓存区域中存储的数据量大小为所述预设大小,则向所述子进程对象发出错误提示。
优选地,所述方法还包括:
若检测到所述子进程对象被删除,则删除对应的限流规则。
本申请实施例还公开了一种数据流量限制的系统,所述的系统包括:
父进程确定模块,用于在应用层确定业务对象对应的一个或多个父进程对象;
子进程创建模块,用于分别采用所述父进程对象创建一个或多个对应的子进程对象,并为所述一个或多个子进程对象分配最大输入输出I/O带宽阈值;
第一流量限制模块,用于在检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
优选地,所述子进程具有子进程标识,所述系统还包括:
信息发送模块,用于采用所述父进程对象将所述子进程对象的子进程标识及对应的最大I/O带宽阈值发送至操作系统内核层,促使所述操作系统内核层创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
优选地,所述第一流量限制模块包括:
描述符获取子模块,用于采用父进程对象预先创建socket描述符fd,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;;
描述符发送子模块,用于采用所述父进程对象将所述socket fd及对应的子进程对象的子进程标识发送至操作系统内核层,以及,采用所述父进程对象将所述socket fd发送至对应的子进程中,当检测到所述子进程对象采用所述socket fd输入或输出网络数据包时,促使所述操作系统内核层完成如下操作:
所述操作系统内核层根据所述socket fd及对应的子进程对象的子进程标识,获得对应的socket结构体;
当所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
优选地,所述系统还包括:
调整模块,用于自适应调整所述子进程对象的最大I/O带宽阈值;
所述调整模块进一步包括:
父层级阈值确定子模块,用于确定父层级的最大I/O带宽阈值,其中,所述父层级为在所述子进程对象的级别之上的对象,包括业务对象或物理机器;
平均值计算子模块,用于在所述父层级所包含的所有子进程对象的最大I/O带宽阈值的总和大于所述父层级的最大I/O带宽阈值时,根据所述子进程对象的数量,计算每个子进程对象所分配的第一平均带宽阈值;
阈值保持子模块,用于在所述子进程对象的最大I/O带宽阈值小于所述第一平均带宽阈值时,保持所述子进程对象的最大I/O带宽阈值不变;
阈值调整子模块,用于在所述子进程对象的最大I/O带宽阈值大于所述第一平均带宽阈值时,计算第二平均带宽阈值,并将所述子进程对象的最大I/O带宽阈值调整为所述第二平均带宽阈值,其中,所述第二平均带宽阈值按照如下方式计算:(所述父层级的最大I/O带宽阈值-所有小于所述第一平均带宽阈值的子进程对象的最大I/O带宽阈值)/(大于所述第一平均带宽阈值的子进程对象的数量)。
本申请实施例还公开了一种数据流量限制的系统,所述的系统包括:
阈值接收模块,用于在操作系统内核层接收父进程对象发送的与一个或多个子进程对象对应的最大输入输出I/O带宽阈值,其中,所述父进程对象与业务对象关联,所述子进程对象是采用所述父进程对象创建的进程对象,所述最大I/O带宽阈值是所述父进程对象创建子进程对象时为所述子进程对象分配的带宽阈值;
第二流量限制模块,用于在接收到所述子进程对象发送的输入或输出网络数据包时,依据所述子进程对象对应的最大I/O带宽阈值对所述网络数据包进行数据流量限制。
优选地,所述子进程具有子进程标识,所述系统还包括:
规则创建模块,用于创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
优选地,所述第二流量限制模块包括:
信息接收子模块,用于接收父进程对象发送的预先建立的socket fd及对应的子进程对象的子进程标识,其中,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;
Socket获取子模块,用于根据所述socket fd及对应的子进程对象的子进程标识,获取到对应的socket结构体;
标识添加子模块,用于接收子进程对象采用所述socket fd输入或输出的网络数据包,并在所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
限流子模块,用于基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
优选地,所述限流子模块包括:
实际流量获取单元,用于获取所述网络数据包的实际数据流量;
规则查找单元,用于基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得对应的最大I/O带宽阈值;
第一传送单元,用于在所述实际数据流量小于所述最大I/O带宽阈值时,按照所述实际数据流量进行所述网络数据包的传送;
第二传送单元,用于在所述实际数据流量大于所述最大I/O带宽阈值时,按照所述最大I/O带宽阈值进行所述网络数据包的传送。
优选地,所述系统还包括:
缓存模块,用于在所述实际数据流量大于所述最大I/O带宽阈值,将所述实际数据流量中除所述最大I/O带宽阈值之外的剩余数据流量对应的数据,放置在预设大小的缓存区域中;
错误提示发送模块,用于在所述缓存区域中存储的数据量大小为所述预设大小时,向所述子进程对象发出错误提示。
优选地,所述系统还包括:
规则删除模块,用于在检测到所述子进程对象被删除时,删除对应的限流规则。
与背景技术相比,本申请实施例包括以下优点:
在本申请实施例应用的分布式的多租户共享集群资源的环境下,当确定业务对象对应的一个或多个父进程对象,由父进程对象创建子进程对象来进行业务对象的处理,并为子进程对象分配最大I/O带宽阈值,使得同一台机器上的各个进程能够使用的最大网络输入输出带宽不能超过指定的阈值,否则会进行限流以控制在最大I/O带宽阈值范围内,来达到多进程网络隔离的目的,且不会对网络造成稳定性的影响,以满足不同业务对象的网络需求。
另外,本申请实施例采用可编程语言(例如C语言)实现,因此可以更容易集成到其他系统之中。
附图说明
图1是本申请的一种数据流量限制的方法实施例一的步骤流程图;
图2是本申请的一种数据流量限制的方法实施例一中的数据流量限制原理示意图;
图3是本申请的一种数据流量限制的方法实施例一中的多进程带宽分配示意图;
图4是本申请的一种数据流量限制的方法实施例二的步骤流程图;
图5是本申请的一种数据流量限制的方法实施例三的步骤流程图;
图6是本申请的一种数据流量限制的系统实施例一的结构框图;
图7是本申请的一种数据流量限制的系统实施例二的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参照图1,示出了本申请的一种数据流量限制的方法实施例一的步骤流程图,本申请实施例从应用层的角度加以说明,可以包括如下步骤:
步骤101,在应用层确定业务对象对应的一个或多个父进程对象;
在实际的业务场景中,大部分大型云计算平台一般部署在多数据中心,每个数据中心有多个集群,每个集群可以有若干台物理机器,每台物理机器可以运行不同的业务对象,即典型的集群多租户模式。
应用于本申请实施例,可以首先为业务对象决策出为其服务的一个或多个父进程对象,其中,父进程对象可以为操作系统预先创建好的进程,如守护进程,守护进程也就是通常说的Daemon进程,是Linux中的后台服务进程,它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
步骤102,分别采用所述父进程对象创建一个或多个对应的子进程对象,并为所述一个或多个子进程对象分配最大输入输出I/O带宽阈值;
参照图2所示的数据流量限制原理示意图,在确定父进程对象以后,父进程对象可以进一步调用预设API接口创建create一个或多个子进程对象进行业务对象的处理,并为创建的子进程对象配置最大I/O带宽阈值。其中,最大I/O带宽阈值是指,最大输出带宽阈值;或者,最大输入带宽阈值;或者,既包括最大输出带宽阈值,也包括最大输入带宽阈值。
具体来说,分配到一台物理机器的所有业务对象可以先分发到N个(N>0)常驻的系统daemon进程中,这些daemon进程作为父进程对象进一步创建m个(m>0)个子进程对象来运行业务对象的具体计算逻辑,其中,创建的所有子进程对象都具有对应的子进程标识,本申请实施例中子进程标识可以用SubPID表示。
由于子进程对象中执行的用户逻辑对于系统来说可能是透明的,出于安全和资源隔离的需要,父进程对象可以在创建每个子进程对象时分配最大输入输出I/O带宽阈值,即每个子进程的网络总带宽使用一定不会超过指定的分配额,以此来限制其网络资源使用。如图3的多进程带宽分配示意图所示,在一台物理机器上有两个业务,其中,业务1的一个父进程对象1创建了三个子进程对象,最大输入网络带宽分别指定为10M/s,40M/s,80M/s;最大输出网络带宽分别指定为40M/s,20M/s,50M/s,假如这台物理机器的最大输入输出带宽为1000M/s,则这三个子进程对象能够使用的网络带宽阈值就是指定的分配额。
需要说明的是,一个父进程对象理论上可以创建无数个子进程对象,只要数量在linux操作系统可以承受的范畴之内即可,父进程对象的主要功能是管理各个子进程对象的生命周期,如创建销毁子进程对象,分配网络带宽和监控每个子进程对象网络使用情况等。
在本申请实施例中,还可以包括如下步骤:
采用所述父进程对象将所述子进程对象的子进程标识及对应的最大I/O带宽阈值发送至操作系统内核层,促使所述操作系统内核层创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
具体来说,在本申请实施例中,父进程对象在创建子进程对象时,还可以将子进程对象的子进程标识SubPID及对应的最大I/O带宽阈值发送至操作系统内核层。在具体实现中,如图2所示,父进程对象每次创建一个子进程对象时,可以调用在操作系统应用层封装的API接口,如AddGroup(GroupInfo)接口,以通过GroupInfo将子进程对象的SubPID、对应的最大I/O带宽阈值等信息传送至操作系统内核层,促使操作系统内核层根据子进程对象的SubPID及对应的最大I/O带宽阈值创建对应的限流规则,关于操作系统内核层的具体处理方式将在下一实施例中加以详细说明。
步骤103,当检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
在本申请的一种优选实施例中,步骤103可以包括如下子步骤:
子步骤S11,采用父进程对象预先创建socket描述符fd,所述socketfd为所述子进程对象创建网络连接socket时所需的信息;
子步骤S12,采用所述父进程对象将所述socket fd及对应的子进程对象的子进程标识发送至操作系统内核层,以及,采用所述父进程对象将所述socket fd发送至对应的子进程中;
子步骤S13,当检测到所述子进程对象采用所述socket fd输入或输出网络数据包时,促使所述操作系统内核层完成如下操作:
所述操作系统内核层根据所述socket fd及对应的子进程对象的子进程标识,获得对应的socket结构体;
当所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
具体来说,父进程对象可以预先创建每个子进程对象创建网络连接socket时所需的socket fd,并调用另一个封装的API接口,如AddFd(subPID,fd),将该socket fd及对应的子进程对象的SubPID发送至操作系统内核层,同时,将该socket fd发送至对应的子进程中,当检测到子进程对象采用所述socket fd输入或输出网络数据包时,促使操作系统内核层完成如下操作:所述操作系统内核层根据所述socket fd及对应的子进程对象的SubPID,获得对应的socket结构体;当所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述SubPID;基于所述SubPID,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。关于操作系统内核层的上述操作将在下一实施例中进行详述。
在本申请实施例的一种优选实施例中,还可以包括如下步骤:
自适应调整所述子进程对象的最大I/O带宽阈值,具体可以包括如下子步骤:
子步骤S21,确定父层级的最大I/O带宽阈值,其中,所述父层级为在所述子进程对象的级别之上的对象,包括业务对象或物理机器;
本申请实施例设置的限流规则是有层级关系的,子层级的限流规则受到父层级的限流规则约束。其中,子层级可以为子进程对象,父层级可以为业务对象,或为,物理机器。
若父层级为物理机器,则父层级的最大I/O带宽阈值为该物理机器的总带宽。
若父层级为业务对象,则父层级的最大I/O带宽阈值为该业务对象的最大I/O带宽阈值,具体来说,在某些场景下,可能需要限定一个业务对象在一台物理机器上所有子进程对象所能使用的最大I/O带宽阈值,以防干扰其他业务对象的网络使用。在这种情况下,可以先采用相同的API创建一个父Group(父分组),指定业务对象能使用的最大I/O带宽阈值,然后创建该业务对象下的子进程对象,指定父Group的ID即可,那么该业务下的所有子进程将共享该业务对象指定的最大I/O带宽阈值。
根据指定的父层级的最大I/O带宽阈值的不同,调整得到的子进程对象的最大I/O带宽阈值也是不同的。例如,物理机器的总带宽为200M/s,然后设定了一个限流规则r1,最大输出带宽阈值为100M/s,之后又建立了两条限流规则r2、r3,设定的最大输出带宽阈值都为80M/s;如果r2、r3在创建的时候没有指定属于哪个父层级,那么和r1一样,父层级默认是物理机器,父层级的最大输出带宽阈值为200M/s;如果r2、r3创建的时候指定属于r1规则,那么r2和r3的父层级是r1,父层级的最大输出带宽阈值为100M/s。
子步骤S22,若所述父层级所包含的所有子进程对象的最大I/O带宽阈值的总和大于所述父层级的最大I/O带宽阈值,则根据所述子进程对象的数量,计算每个子进程对象所分配的第一平均带宽阈值;
在确定父层级的最大I/O带宽阈值以后,可以进一步判断该父层级所包含的所有子进程对象的最大I/O带宽阈值之和是否大于该父层级的最大I/O带宽阈值,如果判定结果为否定,则表示当前父层级的资源能够满足各子进程对象的最大I/O带宽阈值所需;如果判定结果为肯定,则表示当前父层级的资源不能够满足各子进程对象的最大I/O带宽阈值所需,此时进一步计算各子进程对象所占的平均带宽阈值(第一平均带宽阈值)。
例如,一台物理机器最大输出总带宽是100M/s,依次按顺序创建子进程对象1,2,3,4,5,分配的最大输出带宽依次是10M/s,20M/s,40M/s,80M/s,120M/s,由于五个子进程对象的最大输出带宽阈值之和(10M/s+20M/s+40M/s+80M/s+120M/s=270M/s),大于物理机器最大输出总带宽是100M/s,此时可以进一步计算每个子进程对象所占的第一平均带宽阈值为100/5=20M/s。
子步骤S23,若所述子进程对象的最大I/O带宽阈值小于所述第一平均带宽阈值,则保持所述子进程对象的最大I/O带宽阈值不变;
子步骤S24,若所述子进程对象的最大I/O带宽阈值大于所述第一平均带宽阈值,则计算第二平均带宽阈值,并将所述子进程对象的最大I/O带宽阈值调整为所述第二平均带宽阈值。
具体来说,对于最大I/O带宽阈值小于第一平均带宽阈值的子进程对象,可以保持其最大I/O带宽阈值不变,对于最大I/O带宽阈值大于第一平均带宽阈值的子进程对象,则进一步计算第二平均带宽阈值,其中,第二平均带宽阈值可以按照如下方式计算:(所述父层级的最大I/O带宽阈值-所有小于所述第一平均带宽阈值的子进程对象的最大I/O带宽阈值)/(大于所述第一平均带宽阈值的子进程对象的数量)。
例如,在上例中,对于依次创建子进程对象1,2,3,4,5,那么每次新创建一个子进程对象后,所有的进程能达到的最大输出带宽阈值自适应调整的过程为:
创建子进程对象1时,由于分配的最大输出带宽10M/s并没有超过物理机器最大输出总带宽是100M/s,则子进程对象1的最大输出带宽保持不变,为(10M/s);
继续创建子进程对象2,由于子进程对象1和子进程对象2的最大输出带宽总和(10+20=30M/s)没有超过物理机器最大输出总带宽是100M/s,则子进程对象1和子进程对象2的最大输出带宽保持不变,为(10M/s,20M/s);
继续创建子进程对象3,由于子进程对象1至子进程对象3的最大输出带宽总和(10+20+40=70M/s)没有超过物理机器最大输出总带宽是100M/s,则子进程对象1至子进程对象3的最大输出带宽保持不变,为(10M/s,20M/s,40M/s);
继续创建子进程对象4,由于子进程对象1至子进程对象4的最大输出带宽总和(10+20+40+80=150M/s)超过了物理机器最大输出总带宽是100M/s,则最大输出带宽小于或等于第一平均带宽阈值的子进程对象的最大输出带宽保持不变,即子进程对象1和子进程对象2的最大输出带宽保持不变,对于最大输出带宽大于第一平均带宽阈值的子进程对象的最大输出带宽,调整为第二平均带宽阈值,第二平均带宽阈值的计算方法为:(100-10-20)/2=35,即子进程1-4的调整后的最大输出带宽阈值为:(10M/s,20M/s,35M/s,35M/s);
继续创建子进程对象5,由于子进程对象1至子进程对象5的最大输出带宽总和(10+20+40+80+120=270M/s)超过了物理机器最大输出总带宽是100M/s,则最大输出带宽小于或等于第一平均带宽阈值的子进程对象的最大输出带宽保持不变,即子进程对象1和子进程对象2的最大输出带宽保持不变,对于最大输出带宽大于第一平均带宽阈值的子进程对象的最大输出带宽,调整为第二平均带宽阈值,第二平均带宽阈值的计算方法为:(100-10-20)/3=23,即子进程1-5的调整后的最大输出带宽阈值为:(10M/s,20M/s,23M/s,23M/s,23M/s)。
需要说明的是,在实际中,上述得到的每个子进程对象自适应调整结果可以有5%左右的微小波动误差,但总的来说所有进程都是在阈值范围内共享输出/输入带宽的。
通过上述自适应调整子进程对象的最大I/O带宽阈值,可以达到灵活且精准控制进程的最大输入输出带宽的目标。
需要说明的是,在本申请实施例中,操作系统可以采用可插拔的方式对于线上已经运行的进程进行升级,并且升级过程不会影响进程正常运行。在一种实施方式中,可以使用dlopen函数(其主要功能是打开一个动态链接库,并返回动态链接库的句柄)动态加载本申请实施例的代码,来升级进程,可使运行中的进程透明的加载和卸载本申请实施例的代码。
在本申请实施例应用的分布式的多租户共享集群资源的环境下,当确定业务对象对应的一个或多个父进程对象,由父进程对象创建子进程对象来进行业务对象的处理,并为子进程对象分配最大I/O带宽阈值,使得同一台机器上的各个进程能够使用的最大网络输入输出带宽不能超过指定的阈值,否则会进行限流以控制在最大I/O带宽阈值范围内,来达到多进程网络隔离的目的,且不会对网络造成稳定性的影响,以满足不同业务对象的网络需求。
另外,本申请实施例采用可编程语言(例如C语言)实现,因此可以更容易集成到其他系统之中。
参照图4,示出了本申请的一种数据流量限制的方法实施例二的步骤流程图,本申请实施例从操作系统内核层的角度加以说明,可以包括如下步骤:
步骤401,在操作系统内核层接收父进程对象发送的与一个或多个子进程对象对应的最大输入输出I/O带宽阈值;
应用于本申请实施例,父进程对象与业务对象关联,两者的关系为多对多的关系;子进程对象是采用父进程对象创建的进程对象,一个父进程对象可以创建一个或多个子进程对象;最大I/O带宽阈值是所述父进程对象创建子进程对象时为所述子进程对象分配的带宽阈值,其中,最大I/O带宽阈值是指,最大输出带宽阈值;或者,最大输入带宽阈值;或者,既包括最大输出带宽阈值,也包括最大输入带宽阈值。
具体来说,在确定业务对象的父进程对象以后,父进程对象可以进一步调用预设API接口创建create一个或多个子进程对象来进行业务对象的处理,并为创建的子进程对象配置最大I/O带宽阈值。
父进程对象每次创建一个子进程对象时,还可以调用在操作系统应用层封装的API接口,如AddGroup(GroupInfo)接口,以通过GroupInfo将子进程对象的SubPID、对应的最大I/O带宽阈值等信息传送至操作系统内核层。
在操作系统内核层,可以通过内核自带的流量控制器TrafficControl(简称TC)来接收父进程对象传送的子进程对象的SubPID、对应的最大I/O带宽阈值等信息。
操作系统内核层接收到来自应用层的信息以后,本申请实施例还可以包括如下步骤:
创建与所述子进程对象对应的限流规则。
具体来说,操作系统内核层可以在TC中根据子进程对象的子进程标识及对应的最大I/O带宽阈值创建与一条该子进程对象对应的限流规则,其中,该限流规则包括子进程对象的子进程标识及对应的最大I/O带宽阈值。
在实际中,在流量控制器TC中存储的限流规则可以采用机器全局唯一的规则ID进行标识,由于子进程对象的子进程标识也是全局唯一的,因此,可以将子进程对象的子进程标识作为规则ID,实际上是将TC的classid赋值为子进程标识。
在实际应用中,在一台物理机器上,不管有多少个父进程对象,以及每个父进程对象创建了多少个子进程对象,每个子进程对象在TC中对应的限流规则都是公平使用带宽的。然而,linux内核自带的TC可能存在如下缺陷:同一个父进程对象下的所有子进程对象对应的限流规则不能完全公平的共享父进程对象所设置的规则带宽,导致有些限流规则由于分配不到带宽而被饿死的情况,即带宽一直被其他限流规则占用。基于此,应用于本申请实施例,可以采用hotfix(hotfix是针对某一个具体的系统漏洞或安全问题而发布的专门解决该漏洞或安全问题的小程序,通常称为修补程序)技术修补该缺陷。
具体来说,可以采用hotfix技术对TC默认实现的HTB和SFQ队列进行了优化,使所有限流规则都可以平等的共享带宽。其中,HTB(Hierarchical Token Bucke,分层的令牌桶)队列是TC可分类队列的一种,主要配合TC进行流量控制;SFQ(Stochastic Fairness Queueing,随机公平队列)是公平队列算法家族中的一个简单实现,主要针对一个TCP会话或者UDP流,流量被分成相当多数量的FIFO(First Input First Outpu,先入先出)队列中,每个队列对应一个会话,数据按照简单轮转的方式发送,每个会话都按顺序得到发送机会,这种方式非常公平,保证了每一个会话都不会被其它会话所淹没。
步骤402,当接收到所述子进程对象发送的输入或输出网络数据包时,依据所述子进程对象对应的最大I/O带宽阈值对所述网络数据包进行数据流量限制。
当在操作系统内核层创建了与子进程对象关联的限流规则以后,接下来可以让子进程对象创建的所有网络流关联上在TC中创建的限流规则,从而使用该限流规则对网络流的数据流量进行限制。
在本申请实施例的一种优选实施例中,步骤402可以包括如下子步骤:
子步骤S31,接收父进程对象发送的预先创建的socket fd及对应的子进程对象的子进程标识,其中,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;
子步骤S32,根据所述socket fd及对应的子进程对象的子进程标识,获取到对应的socket结构体;
在具体实现中,父进程对象可以预先创建每个子进程对象创建网络连接socket时所需的socket fd,并调用另一个封装的API接口,如AddFd(subPID,fd),将该socket fd及对应的子进程对象的SubPID发送至操作系统内核层,当父进程对象调用AddFD(subPID,fd)时,这个接口可以通过linux系统提供的setsockopt方法,根据socket fd找到tcp连接在内核网络层对应的Sock结构,并给该Sock结构打上子进程标识的标签。
子步骤S33,接收子进程对象采用所述socket fd输入或输出的网络数据包;
子步骤S34,当所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
当子进程对象使用socket fd传送网络数据包时,网络数据包经过内核网络层协议栈socket结构体的时候,则为该网络数据包打上子进程标识的标签。
子步骤S35,基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
如图2所示,当添加SubPID的标签的网络数据包再经过TC时,则可以根据这个标签找到在TC中对应的限流规则来对网络数据包进行限流,也即查找与网络数据包中SubPID相同的限流规则,基于该限流规则中所限定的最大I/O带宽阈值对网络数据包进行数据流量限制。
在本申请实施例的一种优选实施例中,子步骤S35进一步可以包括如下子步骤:
子步骤S351,获取所述网络数据包的实际数据流量;
子步骤S352,基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得对应的最大I/O带宽阈值;
子步骤S353,若所述实际数据流量小于所述最大I/O带宽阈值,则按照所述实际数据流量进行所述网络数据包的传送;
子步骤S354,若所述实际数据流量大于所述最大I/O带宽阈值,则按照所述最大I/O带宽阈值进行所述网络数据包的传送。
在具体实现中,当网络数据包关联上限流规则以后,如果网络数据包的实际数据流量的速度没有超过限流规则中设定的最大I/O带宽阈值,那么该实际数据流量对当前网络数据通信基本没有影响,此时可以采用实际数据流量进行网络数据包的传送。
如果网络数据包的实际数据流量的速度超过限流规则中设定的最大I/O带宽阈值,则将网络数据包的流量限流在限流规则中设定的最大I/O带宽阈值。
在一种优选实施方式中,本申请实施例还可以包括如下步骤:
若所述实际数据流量大于所述最大I/O带宽阈值,将所述实际数据流量中除所述最大I/O带宽阈值之外的剩余数据流量对应的数据,放置在预设大小的缓存区域中;若所述缓存区域中存储的数据量大小为所述预设大小,则向所述子进程对象发出错误提示。
在具体实现中,如果子进程对象的实际数据流量超过最大I/O带宽阈值,则可以将超出部分的数据作为待发送网络数据包放置在预设大小的缓存区域buffer中,一旦实际数据流量降到最大I/O带宽阈值以下,则优先把buffer里面的数据发送出去。
如果实际数据流量持续超过设定的最大I/O带宽阈值,当缓存的待发送网络数据包超过了linux内核默认的缓存buffer的大小时,可以直接丢弃超出数据,并向子进程对象发出错误提示,该错误提示为提醒子进程该网络数据包发送失败的提示,这种情况下,子进程对象可以选择重发数据。
例如,linux内核默认的buffer为50M,某个子进程对象设定的最大输出带宽阈值为100M/s,一开始该子进程对象的实际数据流量没有超过100M/s,则没有有任何数据缓存到buffer中;若某一时刻该子进程对象的实际数据流量变成110M/s,那么由于限流规则的作用,流速最大达到100M/s,多出来的10M/s的数据则可以缓存到buffer中,若这种情况持续5s,10M/s*5s=50M,此时buffer的50M的容量存满,之后如果实际数据流量还继续超过阈值,那么多出来的数据就没有地方放了,内核可以直接丢弃。
在一种优选实施方式中,本申请实施例还可以包括如下步骤:
若检测到所述子进程对象被删除,则删除对应的限流规则。
在具体实现中,每创建一个子进程对象时,都在内核中创建了一条限流规则,但是内核能够容纳的限流规则的数量是有限的,因此,回收不用的限流规则所占的内存空间至关重要。
应用于本申请实施例,操作系统可以在应用层限定一个合理的最大规则数量,并在每个父进程对象中启动一个后台线程专门来销毁无用的限流规则,一种优选实施方式可以为:查询处于某一业务对象的所有现有的限流规则,如果某一个限流规则对应的子进程对象子进程标识不存在,则可以调用API销毁在内核中的该限流规则,通过这种方式来回收限流规则所占的资源,可以不用考虑子进程crash的情况,也能保证资源不泄露,提高系统性能。
在本申请实施例中,通过设置子进程对象的最大I/O带宽阈值来精准的控制每个进程的最大带宽使用,并且不会对网络造成稳定性的影响,在一台机器上的每个进程可以在阈值范围内公平稳定的共享网络带宽。
参照图5,示出了本申请的一种数据流量限制的方法实施例三的步骤流程图,本申请实施例结合图2说明应用层与操作系统内核层的交互过程,可以包括如下步骤:
步骤501,在应用层确定业务对象对应的一个或多个父进程对象;
步骤502,分别采用所述父进程对象创建一个或多个对应的子进程对象,并为所述一个或多个子进程对象分配最大I/O带宽阈值;
步骤503,所述父进程对象将所述子进程对象的子进程标识及对应的最大I/O带宽阈值发送至操作系统内核层;
步骤504,在操作系统内核层中,创建与所述子进程对象对应的限流规则;
步骤505,采用父进程对象预先创建socket描述符fd,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;
步骤506,采用所述父进程对象将所述socket fd及对应的子进程对象的子进程标识发送至操作系统内核层,以及,采用所述父进程对象将所述socket fd发送至对应的子进程中;;
步骤507,当检测到所述子进程对象采用所述socket fd输入或输出网络数据包时,操作系统内核层根据所述socket fd及对应的子进程对象的子进程标识,获取到对应的socket结构体;
步骤508,当所述网络数据包通过所述socket结构体时,操作系统内核层在所述网络数据包中添加所述子进程标识;
步骤509,基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制;
在本申请实施例的一种优选实施例中,所述509进一步可以包括如下子步骤:
子步骤S41,获取所述网络数据包的实际数据流量;
子步骤S42,基于所述子进程标识,查找与所述网络数据包相匹配的限流规则;
子步骤S43,若所述实际数据流量小于所述最大I/O带宽阈值,则按照所述实际数据流量进行所述网络数据包的传送;
子步骤S44,若所述实际数据流量大于所述最大I/O带宽阈值,则按照所述最大I/O带宽阈值进行所述网络数据包的传送。
应用于本申请实施例,子进程对象的最大I/O带宽阈值可以自适应调整。在一种实施方式中,自适应调整的过程如下:
A、确定父层级的最大I/O带宽阈值,其中,所述父层级为在所述子进程对象的级别之上的对象,包括业务对象或物理机器;
B、若所述父层级所包含的子进程对象的最大I/O带宽阈值的总和大于所述父层级的最大I/O带宽阈值,则根据所述子进程对象的数量,计算每个子进程对象所分配的第一平均带宽阈值;
C、若所述子进程对象的最大I/O带宽阈值小于所述第一平均带宽阈值,则保持所述子进程对象的最大I/O带宽阈值不变;
D、若所述子进程对象的最大I/O带宽阈值大于所述第一平均带宽阈值,则计算第二平均带宽阈值,并将所述子进程对象的最大I/O带宽阈值调整为所述第二平均带宽阈值。
步骤510,在操作系统内核层,若所述实际数据流量大于所述最大I/O带宽阈值,将所述实际数据流量中除所述最大I/O带宽阈值之外的剩余数据流量对应的数据,放置在预设大小的缓存区域中;
步骤511,若所述缓存区域中存储的数据量大小为所述预设大小,则向所述子进程对象发出错误提示;
步骤512,若检测到所述子进程对象被删除,则在操作系统内核中删除对应的限流规则。
对于图5的实施例而言,由于其与图1及图4的实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
参照图6,示出了本申请一种数据流量限制的系统实施例一的结构框图,具体可以包括如下模块:
父进程确定模块601,用于在应用层确定业务对象对应的一个或多个父进程对象;
子进程创建模块602,用于分别采用所述父进程对象创建一个或多个对应的子进程对象,并为所述一个或多个子进程对象分配最大输入输出I/O带宽阈值;
第一流量限制模块603,用于在检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
在本申请实施例的一种优选实施例中,所述子进程具有子进程标识,所述系统还包括:
信息发送模块,用于采用所述父进程对象将所述子进程对象的子进程标识及对应的最大I/O带宽阈值发送至操作系统内核层,促使所述操作系统内核层创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
在本申请实施例的一种优选实施例中,所述第一流量限制模块603可以包括如下子模块:
描述符获取子模块,用于采用父进程对象预先创建socket描述符fd,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;;
描述符发送子模块,用于采用所述父进程对象将所述socket fd及对应的子进程对象的子进程标识发送至操作系统内核层,以及,采用所述父进程对象将所述socket fd发送至对应的子进程中,当检测到所述子进程对象采用所述socket fd输入或输出网络数据包时,促使所述操作系统内核层完成如下操作:
所述操作系统内核层根据所述socket fd及对应的子进程对象的子进程标识,获得对应的socket结构体;
当所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
在本申请实施例的一种优选实施例中,所述系统还包括:
调整模块,用于自适应调整所述子进程对象的最大I/O带宽阈值;
所述调整模块进一步包括:
父层级阈值确定子模块,用于确定父层级的最大I/O带宽阈值,其中,所述父层级为在所述子进程对象的级别之上的对象,包括业务对象或物理机器;
平均值计算子模块,用于在所述父层级所包含的所有子进程对象的最大I/O带宽阈值的总和大于所述父层级的最大I/O带宽阈值时,根据所述子进程对象的数量,计算每个子进程对象所分配的第一平均带宽阈值;
阈值保持子模块,用于在所述子进程对象的最大I/O带宽阈值小于所述第一平均带宽阈值时,保持所述子进程对象的最大I/O带宽阈值不变;
阈值调整子模块,用于在所述子进程对象的最大I/O带宽阈值大于所述第一平均带宽阈值时,计算第二平均带宽阈值,并将所述子进程对象的最大I/O带宽阈值调整为所述第二平均带宽阈值,其中,所述第二平均带宽阈值按照如下方式计算:(所述父层级的最大I/O带宽阈值-所有小于所述第一平均带宽阈值的子进程对象的最大I/O带宽阈值)/(大于所述第一平均带宽阈值的子进程对象的数量)。
对于系统实施例而言,由于其与上述方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
参照图7,示出了本申请一种数据流量限制的系统实施例二的结构框图,具体可以包括如下模块:
阈值接收模块701,用于在操作系统内核层接收父进程对象发送的与一个或多个子进程对象对应的最大输入输出I/O带宽阈值,其中,所述父进程对象与业务对象关联,所述子进程对象是采用所述父进程对象创建的进程对象,所述最大I/O带宽阈值是所述父进程对象创建子进程对象时为所述子进程对象分配的带宽阈值;
第二流量限制模块702,用于在接收到所述子进程对象发送的输入或输出网络数据包时,依据所述子进程对象对应的最大I/O带宽阈值对所述网络数据包进行数据流量限制。
在本申请实施例的一种优选实施例中,所述子进程具有子进程标识,所述系统还包括:
规则创建模块,用于创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
在本申请实施例的一种优选实施例中,所述第二流量限制模块702进一步可以包括如下子模块:
信息接收子模块,用于接收父进程对象发送的预先建立的socket fd及对应的子进程对象的子进程标识,其中,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;
Socket获取子模块,用于根据所述socket fd及对应的子进程对象的子进程标识,获取到对应的socket结构体;
标识添加子模块,用于接收子进程对象采用所述socket fd输入或输出的网络数据包,并在所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
限流子模块,用于基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
在本申请实施例的一种优选实施例中,所述限流子模块进一步可以包括如下单元:
实际流量获取单元,用于获取所述网络数据包的实际数据流量;
规则查找单元,用于基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得对应的最大I/O带宽阈值;
第一传送单元,用于在所述实际数据流量小于所述最大I/O带宽阈值时,按照所述实际数据流量进行所述网络数据包的传送;
第二传送单元,用于在所述实际数据流量大于所述最大I/O带宽阈值时,按照所述最大I/O带宽阈值进行所述网络数据包的传送。
在本申请实施例的一种优选实施例中,所述系统还包括:
缓存模块,用于在所述实际数据流量大于所述最大I/O带宽阈值,将所述实际数据流量中除所述最大I/O带宽阈值之外的剩余数据流量对应的数据,放置在预设大小的缓存区域中;
错误提示发送模块,用于在所述缓存区域中存储的数据量大小为所述预设大小时,向所述子进程对象发出错误提示。
在本申请实施例的一种优选实施例中,所述系统还包括:
规则删除模块,用于在检测到所述子进程对象被删除时,删除对应的限流规则。
对于系统实施例而言,由于其与上述方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序操作指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序操作指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的操作指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序操作指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的操作指令产生包括操作指令装置的制造品,该操作指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序操作指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的操作指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种数据流量限制的方法及系统进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (20)
1.一种数据流量限制的方法,其特征在于,所述的方法包括:
在应用层确定业务对象对应的一个或多个父进程对象;
分别采用所述父进程对象创建一个或多个对应的子进程对象,并为所述一个或多个子进程对象分配最大输入输出I/O带宽阈值;
当检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
2.根据权利要求1所述的方法,其特征在于,所述子进程具有子进程标识,在所述当检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制的步骤之前,还包括:
采用所述父进程对象将所述子进程对象的子进程标识及对应的最大I/O带宽阈值发送至操作系统内核层,促使所述操作系统内核层创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
3.根据权利要求2所述的方法,其特征在于,所述当检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制的步骤包括:
采用父进程对象预先创建socket描述符fd,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;
采用所述父进程对象将所述socket fd及对应的子进程对象的子进程标识发送至操作系统内核层,以及,采用所述父进程对象将所述socket fd发送至对应的子进程中;
当检测到所述子进程对象采用所述socket fd输入或输出网络数据包时,促使所述操作系统内核层完成如下操作:
所述操作系统内核层根据所述socket fd及对应的子进程对象的子进程标识,获得对应的socket结构体;
当所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
4.根据权利要求1所述的方法,其特征在于,还包括:
自适应调整所述子进程对象的最大I/O带宽阈值,包括:
确定父层级的最大I/O带宽阈值,其中,所述父层级是在所述子进程对象的级别之上的对象,包括业务对象或物理机器;
若所述父层级所包含的所有子进程对象的最大I/O带宽阈值的总和大于所述父层级的最大I/O带宽阈值,则根据所述子进程对象的数量,计算每个子进程对象所分配的第一平均带宽阈值;
若所述子进程对象的最大I/O带宽阈值小于所述第一平均带宽阈值,则保持所述子进程对象的最大I/O带宽阈值不变;
若所述子进程对象的最大I/O带宽阈值大于所述第一平均带宽阈值,则计算第二平均带宽阈值,并将所述子进程对象的最大I/O带宽阈值调整为所述第二平均带宽阈值,其中,所述第二平均带宽阈值按照如下方式计算:(所述父层级的最大I/O带宽阈值-所有小于所述第一平均带宽阈值的子进程对象的最大I/O带宽阈值)/(大于所述第一平均带宽阈值的子进程对象的数量)。
5.一种数据流量限制的方法,其特征在于,所述的方法包括:
在操作系统内核层接收父进程对象发送的与一个或多个子进程对象对应的最大输入输出I/O带宽阈值,其中,所述父进程对象与业务对象关联,所述子进程对象是采用所述父进程对象创建的进程对象,所述最大I/O带宽阈值是所述父进程对象创建子进程对象时为所述子进程对象分配的带宽阈值;
当接收到所述子进程对象发送的输入或输出网络数据包时,依据所述子进程对象对应的最大I/O带宽阈值对所述网络数据包进行数据流量限制。
6.根据权利要求5所述的方法,其特征在于,所述子进程具有子进程标识,在所述当接收到所述子进程对象发送的输入或输出网络数据包时,依据所述子进程对象对应的最大I/O带宽阈值对所述网络数据包进行数据流量限制的步骤之前,还包括:
创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
7.根据权利要求6所述方法,其特征在于,所述当接收到所述子进程对象发送的输入或输出网络数据包时,依据所述子进程对象对应的最大I/O带宽阈值对所述网络数据包进行数据流量限制的步骤的步骤包括:
接收父进程对象发送的预先创建的socket fd及对应的子进程对象的子进程标识,其中,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;
根据所述socket fd及对应的子进程对象的子进程标识,获取到对应的socket结构体;
接收子进程对象采用所述socket fd输入或输出的网络数据包;
当所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
8.根据权利要求7所述的方法,其特征在于,所述基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制的步骤包括:
获取所述网络数据包的实际数据流量;
基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得对应的最大I/O带宽阈值;
若所述实际数据流量小于所述最大I/O带宽阈值,则按照所述实际数据流量进行所述网络数据包的传送;
若所述实际数据流量大于所述最大I/O带宽阈值,则按照所述最大I/O带宽阈值进行所述网络数据包的传送。
9.根据权利要求8所述的方法,其特征在于,还包括:
若所述实际数据流量大于所述最大I/O带宽阈值,将所述实际数据流量中除所述最大I/O带宽阈值之外的剩余数据流量对应的数据,放置在预设大小的缓存区域中;
若所述缓存区域中存储的数据量大小为所述预设大小,则向所述子进程对象发出错误提示。
10.根据权利要求6所述的方法,其特征在于,还包括:
若检测到所述子进程对象被删除,则删除对应的限流规则。
11.一种数据流量限制的系统,其特征在于,所述的系统包括:
父进程确定模块,用于在应用层确定业务对象对应的一个或多个父进程对象;
子进程创建模块,用于分别采用所述父进程对象创建一个或多个对应的子进程对象,并为所述一个或多个子进程对象分配最大输入输出I/O带宽阈值;
第一流量限制模块,用于在检测到所述子进程对象输入或输出网络数据包时,促使操作系统内核层依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
12.根据权利要求11所述的系统,其特征在于,所述子进程具有子进程标识,所述系统还包括:
信息发送模块,用于采用所述父进程对象将所述子进程对象的子进程标识及对应的最大I/O带宽阈值发送至操作系统内核层,促使所述操作系统内核层创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
13.根据权利要求12所述的系统,其特征在于,所述第一流量限制模块包括:
描述符获取子模块,用于采用父进程对象预先创建socket描述符fd,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;;
描述符发送子模块,用于采用所述父进程对象将所述socket fd及对应的子进程对象的子进程标识发送至操作系统内核层,以及,采用所述父进程对象将所述socket fd发送至对应的子进程中,当检测到所述子进程对象采用所述socket fd输入或输出网络数据包时,促使所述操作系统内核层完成如下操作:
所述操作系统内核层根据所述socket fd及对应的子进程对象的子进程标识,获得对应的socket结构体;
当所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
14.根据权利要求11所述的系统,其特征在于,还包括:
调整模块,用于自适应调整所述子进程对象的最大I/O带宽阈值;
所述调整模块进一步包括:
父层级阈值确定子模块,用于确定父层级的最大I/O带宽阈值,其中,所述父层级为在所述子进程对象的级别之上的对象,包括业务对象或物理机器;
平均值计算子模块,用于在所述父层级所包含的所有子进程对象的最大I/O带宽阈值的总和大于所述父层级的最大I/O带宽阈值时,根据所述子进程对象的数量,计算每个子进程对象所分配的第一平均带宽阈值;
阈值保持子模块,用于在所述子进程对象的最大I/O带宽阈值小于所述第一平均带宽阈值时,保持所述子进程对象的最大I/O带宽阈值不变;
阈值调整子模块,用于在所述子进程对象的最大I/O带宽阈值大于所述第一平均带宽阈值时,计算第二平均带宽阈值,并将所述子进程对象的最大I/O带宽阈值调整为所述第二平均带宽阈值,其中,所述第二平均带宽阈值按照如下方式计算:(所述父层级的最大I/O带宽阈值-所有小于所述第一平均带宽阈值的子进程对象的最大I/O带宽阈值)/(大于所述第一平均带宽阈值的子进程对象的数量)。
15.一种数据流量限制的系统,其特征在于,所述的系统包括:
阈值接收模块,用于在操作系统内核层接收父进程对象发送的与一个或多个子进程对象对应的最大输入输出I/O带宽阈值,其中,所述父进程对象与业务对象关联,所述子进程对象是采用所述父进程对象创建的进程对象,所述最大I/O带宽阈值是所述父进程对象创建子进程对象时为所述子进程对象分配的带宽阈值;
第二流量限制模块,用于在接收到所述子进程对象发送的输入或输出网络数据包时,依据所述子进程对象对应的最大I/O带宽阈值对所述网络数据包进行数据流量限制。
16.根据权利要求15所述的系统,其特征在于,所述子进程具有子进程标识,所述系统还包括:
规则创建模块,用于创建与所述子进程对象对应的限流规则,其中,所述限流规则包括所述子进程对象的子进程标识及对应的最大I/O带宽阈值。
17.根据权利要求16所述系统,其特征在于,所述第二流量限制模块包括:
信息接收子模块,用于接收父进程对象发送的预先建立的socket fd及对应的子进程对象的子进程标识,其中,所述socket fd为所述子进程对象创建网络连接socket时所需的信息;
Socket获取子模块,用于根据所述socket fd及对应的子进程对象的子进程标识,获取到对应的socket结构体;
标识添加子模块,用于接收子进程对象采用所述socket fd输入或输出的网络数据包,并在所述网络数据包通过所述socket结构体时,在所述网络数据包中添加所述子进程标识;
限流子模块,用于基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得所述子进程对象对应的最大I/O带宽阈值,并依据所述最大I/O带宽阈值对所述网络数据包进行数据流量限制。
18.根据权利要求17所述的系统,其特征在于,所述限流子模块包括:
实际流量获取单元,用于获取所述网络数据包的实际数据流量;
规则查找单元,用于基于所述子进程标识,查找与所述网络数据包相匹配的限流规则,获得对应的最大I/O带宽阈值;
第一传送单元,用于在所述实际数据流量小于所述最大I/O带宽阈值时,按照所述实际数据流量进行所述网络数据包的传送;
第二传送单元,用于在所述实际数据流量大于所述最大I/O带宽阈值时,按照所述最大I/O带宽阈值进行所述网络数据包的传送。
19.根据权利要求18所述的系统,其特征在于,还包括:
缓存模块,用于在所述实际数据流量大于所述最大I/O带宽阈值,将所述实际数据流量中除所述最大I/O带宽阈值之外的剩余数据流量对应的数据,放置在预设大小的缓存区域中;
错误提示发送模块,用于在所述缓存区域中存储的数据量大小为所述预设大小时,向所述子进程对象发出错误提示。
20.根据权利要求16所述的系统,其特征在于,还包括:
规则删除模块,用于在检测到所述子进程对象被删除时,删除对应的限流规则。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/092818 WO2017024965A1 (zh) | 2015-08-11 | 2016-08-02 | 一种数据流量限制的方法及系统 |
JP2018506868A JP6783850B2 (ja) | 2015-07-27 | 2016-08-02 | データトラフィックを制限するための方法及びシステム |
US15/891,281 US10560385B2 (en) | 2015-08-11 | 2018-02-07 | Method and system for controlling network data traffic in a hierarchical system |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510447139 | 2015-07-27 | ||
CN2015104471395 | 2015-07-27 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106411558A true CN106411558A (zh) | 2017-02-15 |
CN106411558B CN106411558B (zh) | 2020-02-21 |
Family
ID=58007994
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510491100.3A Active CN106411558B (zh) | 2015-07-27 | 2015-08-11 | 一种数据流量限制的方法及系统 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP6783850B2 (zh) |
CN (1) | CN106411558B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109462663A (zh) * | 2018-12-24 | 2019-03-12 | 出门问问信息科技有限公司 | 一种限制系统资源占用的方法、语音交互系统及存储介质 |
CN109756490A (zh) * | 2018-12-26 | 2019-05-14 | 新华三技术有限公司 | 一种mdc实现方法及装置 |
CN110971532A (zh) * | 2018-09-30 | 2020-04-07 | 阿里巴巴集团控股有限公司 | 一种网络资源管理方法、装置及设备 |
CN111277640A (zh) * | 2020-01-17 | 2020-06-12 | 平安科技(深圳)有限公司 | 用户请求处理方法、装置、系统、计算机设备和存储介质 |
CN111328021A (zh) * | 2018-12-14 | 2020-06-23 | 中国移动通信集团河南有限公司 | 一种面向物联网防控的超业务场景预警方法及系统 |
CN111722979A (zh) * | 2020-06-10 | 2020-09-29 | 北京百度网讯科技有限公司 | 质量监测方法、装置、服务器及存储介质 |
CN112783641A (zh) * | 2019-11-11 | 2021-05-11 | 马上消费金融股份有限公司 | 一种服务接口流控方法及装置 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111459774B (zh) * | 2019-01-21 | 2023-05-12 | 中国移动通信有限公司研究院 | 一种应用程序的流量的获取方法、装置、设备及存储介质 |
CN114006869A (zh) * | 2020-07-28 | 2022-02-01 | 阿里巴巴集团控股有限公司 | 流量控制方法、装置、电子设备及计算机可读存储介质 |
CN115712544B (zh) * | 2022-11-24 | 2024-04-12 | 杭州中电安科现代科技有限公司 | 一种监控系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101825991A (zh) * | 2009-03-05 | 2010-09-08 | 韩国电子通信研究院 | 使用范围带宽以控制盘输入/输出的方法和系统 |
CN103533032A (zh) * | 2013-09-26 | 2014-01-22 | 北京奇虎科技有限公司 | 带宽调节装置及方法 |
US20150078431A1 (en) * | 2007-10-15 | 2015-03-19 | Chih-Ta Star Sung | Method and apparatus of temporary image frame compression |
-
2015
- 2015-08-11 CN CN201510491100.3A patent/CN106411558B/zh active Active
-
2016
- 2016-08-02 JP JP2018506868A patent/JP6783850B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150078431A1 (en) * | 2007-10-15 | 2015-03-19 | Chih-Ta Star Sung | Method and apparatus of temporary image frame compression |
CN101825991A (zh) * | 2009-03-05 | 2010-09-08 | 韩国电子通信研究院 | 使用范围带宽以控制盘输入/输出的方法和系统 |
CN103533032A (zh) * | 2013-09-26 | 2014-01-22 | 北京奇虎科技有限公司 | 带宽调节装置及方法 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110971532A (zh) * | 2018-09-30 | 2020-04-07 | 阿里巴巴集团控股有限公司 | 一种网络资源管理方法、装置及设备 |
CN111328021A (zh) * | 2018-12-14 | 2020-06-23 | 中国移动通信集团河南有限公司 | 一种面向物联网防控的超业务场景预警方法及系统 |
CN111328021B (zh) * | 2018-12-14 | 2021-08-27 | 中国移动通信集团河南有限公司 | 一种面向物联网防控的超业务场景预警方法及系统 |
CN109462663A (zh) * | 2018-12-24 | 2019-03-12 | 出门问问信息科技有限公司 | 一种限制系统资源占用的方法、语音交互系统及存储介质 |
CN109462663B (zh) * | 2018-12-24 | 2022-04-15 | 出门问问创新科技有限公司 | 一种限制系统资源占用的方法、语音交互系统及存储介质 |
CN109756490A (zh) * | 2018-12-26 | 2019-05-14 | 新华三技术有限公司 | 一种mdc实现方法及装置 |
CN109756490B (zh) * | 2018-12-26 | 2021-09-21 | 新华三技术有限公司 | 一种mdc实现方法及装置 |
CN112783641A (zh) * | 2019-11-11 | 2021-05-11 | 马上消费金融股份有限公司 | 一种服务接口流控方法及装置 |
CN111277640A (zh) * | 2020-01-17 | 2020-06-12 | 平安科技(深圳)有限公司 | 用户请求处理方法、装置、系统、计算机设备和存储介质 |
CN111277640B (zh) * | 2020-01-17 | 2022-03-01 | 平安科技(深圳)有限公司 | 用户请求处理方法、装置、系统、计算机设备和存储介质 |
CN111722979A (zh) * | 2020-06-10 | 2020-09-29 | 北京百度网讯科技有限公司 | 质量监测方法、装置、服务器及存储介质 |
CN111722979B (zh) * | 2020-06-10 | 2024-02-13 | 北京百度网讯科技有限公司 | 质量监测方法、装置、服务器及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP6783850B2 (ja) | 2020-11-11 |
JP2018527668A (ja) | 2018-09-20 |
CN106411558B (zh) | 2020-02-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106411558A (zh) | 一种数据流量限制的方法及系统 | |
US10230591B2 (en) | Network resource governance in multi-tenant datacenters | |
US10541901B2 (en) | Methods, systems and computer readable media for optimizing placement of virtual network visibility components | |
Wang et al. | Microservice-oriented service placement for mobile edge computing in sustainable internet of vehicles | |
CN105335229A (zh) | 一种业务资源的调度方法和装置 | |
CN106130960B (zh) | 盗号行为的判断系统、负载调度方法和装置 | |
CN104092756A (zh) | 一种基于dht机制的云存储系统的资源动态分配方法 | |
CN112822050A (zh) | 用于部署网络切片的方法和装置 | |
CN108540405B (zh) | 网络资源迁移方法及装置 | |
Xu et al. | Stateful serverless application placement in MEC with function and state dependencies | |
WO2017024965A1 (zh) | 一种数据流量限制的方法及系统 | |
CN112073237B (zh) | 一种云边架构中大规模目标网络构建方法 | |
Zhang et al. | Efficient instance reuse approach for service function chain placement in mobile edge computing | |
CN104537045A (zh) | 一种基于分布式系统的业务分配方法及装置 | |
Liang et al. | An online algorithm for virtualized network function placement in mobile edge industrial Internet of Things | |
Fahad et al. | A multi‐queue priority‐based task scheduling algorithm in fog computing environment | |
Yu et al. | Toward efficient online scheduling for distributed machine learning systems | |
CN108093047B (zh) | 数据发送方法、装置、电子设备及中间件系统 | |
Masoumi et al. | Efficient Protected VNF Placement and MEC Location Selection for Dynamic Service Provisioning in 5G Networks | |
CN113722079B (zh) | 基于目标应用的任务调度分配方法、装置、设备及介质 | |
CN113992509B (zh) | Sdn网络业务配置下发方法、装置及存储介质 | |
CN106357704A (zh) | 一种基于开发环境的服务调用方法及装置 | |
CN114978998B (zh) | 一种流量控制方法、装置、终端及存储介质 | |
Midya et al. | An adaptive resource placement policy by optimizing live VM migration for ITS applications in vehicular cloud network | |
He et al. | QoS-Aware and Resource-Efficient Dynamic Slicing Mechanism for Internet of Things. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |