一种多网络连接应用的资源分配方法、系统及相关装置与流程

文档序号:22626699发布日期:2020-10-23 19:35阅读:214来源:国知局
一种多网络连接应用的资源分配方法、系统及相关装置与流程

本申请涉及服务器领域,特别涉及一种多网络连接应用的资源分配方法、系统及相关装置。



背景技术:

网络编程模型的演进一直是与其所支持的业务的模型紧密相关的。当系统中各个节点所处理的连接数迅速膨胀但还处于可控的规模的情况下,用一个线程来处理一个连接的模式使用主线程处理新建连接并分配一个新的线程给这个新的连接使用,连接之间互不干扰。到了需要处理c10k问题的时候,网络连接数及网络性能已经成了所有系统都不能回避的问题,一个线程来处理一个连接的模式已经无法满足条件,应用需要为每个连接分配一个工作者线程,大量的连接就需要大量的工作者线程,而主机cpu资源是有限的,大量工作者线程的频繁切换会将cpu占满,上下文切换也很消耗资源,系统性能会急剧下降,因此reactor模式应运而生。

reactor模式的基础是io复用,不同的操作系统的有不同的实现组件。reactor模式解决的就是通过建立一个工作者线程池,将所有的连接分配到工作者线程池的不同工作者线程中去处理,减少了工作者线程的数量,减少了cpu资源的使用,减少了工作者线程之间切换的几率,从而有望维持系统的性能在连接数较大时不致急剧下降。reactor模式自身的发展也经历了单线程模式、工作者线程池模式以及多reactor的工作者线程模式等三种模式。

目前,基本上所有的大型项目都是用多reactor的工作者线程模式,其对reactor模式进行改造,拥有reactor模式的所有优点,并且解决了经典reactor模式无法解决的在应用负载较大时新连接无法及时建立的问题。

reactor模式及其变种都没有解决将连接“均衡地”分配到所有工作者线程的问题。很多系统是采用将所有的工作者线程都承载相同数量的连接的方法,却并没有考虑单个工作者线程所承载的所有连接各自的数据量及其之间的业务特性,不同连接拥有不同的数据量、不同的业务处理逻辑,耗时较长的连接可能占据更多的处理时间片,其他连接则一直处于饥饿状态,延时增加,吞吐量下降,系统整体性能下降。



技术实现要素:

本申请的目的是提供及一种多网络连接应用的资源分配方法、系统、计算机可读存储介质和服务器,能够调节业务与工作者线程的连接关系,确保系统性能良好。

为解决上述技术问题,本申请提供一种多网络连接应用的资源分配方法,具体技术方案如下:

获取各业务的消息数据流量;

确定各所述业务的数据流量占总数据流量的百分比;

根据业务标识字段对所述业务分类确定各所述业务的业务类型,并根据所述业务类型为各所述业务分配对应的业务负载和对应的业务优先级;

以所述百分比、所述业务负载和所述业务优先级为参数计算得到每个业务对应的状态因子;所述状态因子包括负载因子和优先级因子;

根据所述状态因子对所述业务进行工作者线程池分配。

可选的,获取各业务的消息数据流量之后,还包括:

在各所述业务的消息包添加业务标识字段,以便执行对所述业务按照业务标识分类的步骤。

可选的,若所述工作者线程池包括三组线程池,则根据所述状态因子对所述业务进行工作者线程池分配包括:

将所述负载因子大于第一预设值、所述优先级因子大于第二预设值的业务分配至第一组工作者线程池;

将所述负载因子大于第一预设值、所述优先级因子小于第二预设值的业务分配至第二组工作者线程池;

将剩余业务均分配至第三组工作者线程池。

可选的,还包括:

将所述优先级因子作为状态因子值;

则根据所述状态因子对所述业务进行资源分配包括:

根据所述状态因子对高性能业务进行资源分配;

其中,所述高性能业务为对所述状态因子值以递减顺序排序后的前预设数量的业务。

本申请还提供一种多网络连接应用的资源分配系统,包括:

获取模块,用于获取各业务的消息数据流量;

分类模块,用于确定各所述业务的数据流量占总数据流量的百分比;

分配模块,用于根据所述业务类型为各所述业务分配对应的业务负载和对应的业务优先级;

参数计算模块,用于以所述百分比、所述业务负载和所述业务优先级为参数计算得到每个业务对应的状态因子;所述状态因子包括负载因子和优先级因子;

资源分配模块,用于根据所述状态因子对所述业务进行工作者线程池分配。

可选的,还包括:

标识模块,用于获取各业务的消息数据流量之后,在各所述业务的消息包添加业务标识字段。

可选的,若所述工作者线程池包括三组线程池,则所述资源分配模块包括:

第一分配单元,用于将所述负载因子大于第一预设值、所述优先级因子大于第二预设值的业务分配至第一组工作者线程池;

第二分配单元,用于将所述负载因子大于第一预设值、所述优先级因子小于第二预设值的业务分配至第二组工作者线程池;

第三分配单元,用于将剩余业务均分配至第三组工作者线程池。

可选的,还包括:

性能计算模块,用于将所述优先级因子作为状态因子值;

则所述资源分配模块为根据所述状态因子值对高性能业务进行资源分配的模块;

其中,所述高性能业务为对所述状态因子值以递减顺序排序后的前预设数量的业务。

本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的方法的步骤。

本申请还提供一种服务器,包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时实现如上所述的方法的步骤。

本申请提供一种多网络连接应用的资源分配方法,包括:获取各业务的消息数据流量;确定各所述业务的数据流量占总数据流量的百分比;根据业务标识字段对所述业务分类确定各所述业务的业务类型,并根据所述业务类型为各所述业务分配对应的业务负载和对应的业务优先级;以所述百分比、所述业务负载和所述业务优先级为参数计算得到每个业务对应的状态因子;所述状态因子包括负载因子和优先级因子;根据所述状态因子对所述业务进行工作者线程池分配。

本申请实时采集系统运行参数,引入了连接中数据流量及其业务类型,以这些参数为依据,实时调整网络连接与计算资源的对应关系,保证系统总是占有最少的计算资源,同时保证不同业务被处理时满足业务的时效性要求。

本申请还提供一种多网络连接应用的资源分配系统、计算机可读存储介质和服务器,具有上述有益效果,此处不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例所提供的一种多网络连接应用的资源分配方法的流程图;

图2为本申请实施例所提供的一种多网络连接应用的资源分配系统结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参考图1,图1为本申请实施例所提供的一种多网络连接应用的资源分配方法的流程图,该方法包括:

s101:获取各业务的消息数据流量;

s102:确定各所述业务的数据流量占总数据流量的百分比;

s103:根据业务标识字段对所述业务分类确定各所述业务的业务类型,并根据所述业务类型为各所述业务分配对应的业务负载和对应的业务优先级;

s104:以百分比、业务负载和业务优先级为参数计算得到每个业务对应的状态因子;

s105:根据状态因子对业务进行工作者线程池分配。

本申请实施例可以在多reactor的工作者线程模式的基础上,增加一个调度用的工作者调度线程,并通过工作者调度线程执行上文所述的各步骤。

具体的,首先需要获取各业务的消息数据流量,可以在各业务对应连接的消息包添加业务标识字段,每个连接增加业务标识及数据流量采样功能,单位时间片内的不同业务的数据流量占比发送给工作者调度线程,工作者调度线程实时分析所有连接当前时间片内的总流量以及不同业务占比情况,

此后将单位时间片内采集的所有消息按照业务标识归类,计算每个业务的数据流量占采样的总消息数据流量的百分比。总消息数据流量显然即所有业务的消息数据流量之和。

可以用{b1→p1,b2→p2,……,bm→pm}表示单位时间内采样的业务bm对应的数据流量百分比pm。当然,这种表达形式仅用于表示业务bm与数据流量百分比pm之间在本步骤执行时的映射关系。

步骤s103需要确定当前系统中各业务的业务类型,并根据业务的业务类型为其分配业务负载以及业务优先级,比如{b1→(l1,pri1),b2→(l2,pri2),……,bm→(lm,prim)}表示业务bm对应的业务负载lm以及业务优先级prim。由于不同的业务可能业务类型相同,因此在分配业务负载和优先级时按照各业务对应的业务类型进行分配,对于同一类型的业务分配相同或相近的业务负载和优先级。

以(bm,pm,lm,prim)参数为每个连接计算一个状态因子{conn(m)→(clm,cprim)},表示业务n对应的连接conn(m)当前的负载因子为clm以及优先级因子cprim。需要注意的是,负载因子和优先级因子中的“m”均为业务代号。下文对于如何计算得到状态因子进行说明:

计算状态因子时需要获取各业务的吞吐量iopsm对应的时延tm,作为一种优选执行方式,可以在步骤s101中与获取各业务的消息数据流量的同步执行。则获取吞吐量iopsm及总时延tm后可以表示为:

{b1→{iops1,t1},b2→{iops2,t2},……,bm→{iopsm,tm}}。

根据iopsm和tm计算业务的平均时延tam:

得到各业务的平均时延后,确认操作数,操作数为:

{b1→{ta1,p1,iops1},b2→{ta2,p2,iops2,…,bm→{tam,pm,iopsm}};

首先比较不同业务的平均时延tam,较大的平均时延tam对应的业务拥有较大的负载因子clm,在平均时延tam相同的情况下比较数据流量百分比pm,较大的数据流量百分比pm对应的业务拥有较大的负载因子clm,在数据流量百分比pm相同的情况下比较吞吐量iopsm,较小的吞吐量iopsm对应的业务拥有较大的负载因子clm。需要注意的是,不同的负载因子clm仅表示不同业务之间的负载相对大小,不作为负载的精确衡量。通过上述过程可以确认各业务的负载因子clm。

根据各业务的负载因子clm结果以及{b1->(l1,pri1),b2->(l2,pri2),……,bm->(lm,prim)}得到b1->(cl1,pri1,l1),b2->(cl1,pri2,l2),……,bm->(clm,prim,lm)},首先比较不同业务的负载因子clm,较大的负载因子clm对应的业务拥有较大的负载因子cprim,在clm相同的情况下比较业务优先级prim,较小的业务优先级prim对应的业务拥有较大的负载因子cprim,在业务优先级prim相同的情况下比较业务负载lm,较大的业务负载lm对应的业务拥有较大的负载因子cprim,至此可以以cprim的值为状态因子值,调整状态因子值最大的前n个业务的资源分配。状态因子的值越大,表示其对系统的性能影响越大。

上文所公开的一种确定状态因子的过程仅为本实施例提供的一种可行过程,本对于技术人员还可以根据上文所描述的过程,利用业务的其他参数或相同参数采用不同的生成过程,得到具有相同或相类似作用的状态因子或其他参数,均应在本申请的保护范围内。

得到状态因子后,即可根据状态因子进行工作者线程池分配。在此对于如何根据状态因子进行资源分配不做限定,优选的,本实施例在此提供一种分配方式,若工作者线程池包括三组线程池,其对应的资源分配的具体步骤可以如下:

将负载因子大于第一预设值、优先级因子大于第二预设值的业务分配至第一组工作者线程池;

将负载因子大于第一预设值、优先级因子小于第二预设值的业务分配至第二组工作者线程池;

将剩余业务均分配至第三组工作者线程池。

每个连接根据{conn(n)→(clm,cprim)}的实时值,在3组工作者线程池中调整。则实际上本实施例公开的资源分配方法为不断循环动态调整的资源分配方式。

本申请实施例实时采集系统运行参数,引入了连接中数据流量及其业务类型,以这些参数为依据,实时调整网络连接与计算资源的对应关系,保证系统总是占有最少的计算资源,同时保证不同业务被处理时满足业务的时效性要求。

基于上述实施例,作为优选的实施例,还可以包括:

将所述优先级因子作为状态因子值;

则执行步骤s105时可以根据状态因子对高性能业务进行资源分配;

其中,高性能业务为对状态因子值以递减顺序排序后的前预设数量的业务。换句话说,在将优先级因子作为状态因子值,由于基本不存在bm,pm,lm,prim)参数均相同的业务,即各业务的状态因子值均不相同,因此可以对状态因子值排序,取前n个状态因子值的业务进行资源分配。n即为预设数量。

本实施例旨在对当前系统性能影响最大的前预设数量个连接将进行调整。当然,在此对于预设数量不做具体限定。具体的,可以先根据第二百分比确定各业务对系统的性能影响大小。鉴于部分业务只是临时发生且对系统的性能的影响是暂时的,也就是系统整体的业务负载是随时间波动的,所以不是对所有的连接都进行调整,以防止因为大量的临时业务造成工作者调度线程总是在进行无效的调整,比如当前时间片0将连接a从工作者线程1调整到工作者线程3,在下一个时间片1造成连接a被调整的临时事务结束,时间片2又产生其他类型的临时事务,导致在时间片3中连接a从工作者线程3调整到工作者线程1,因为连接在不同工作者线程之间调整同样耗费较大资源,所以只调整性能占比较高的高性能业务,而并非针对所有业务进行调整。

下面对本申请实施例提供的一种多网络连接应用的资源分配系统进行介绍,下文描述的资源分配系统与上文描述的一种多网络连接应用的资源分配方法可相互对应参照。

参见图2,图2为本申请实施例所提供的一种多网络连接应用的资源分配系统结构示意图,本申请还提供一种多网络连接应用的资源分配系统,包括:

获取模块100,用于获取各业务的消息数据流量;

分类模块200,用于确定各所述业务的数据流量占总数据流量的百分比;

分配模块300,用于根据业务标识字段对所述业务分类确定各所述业务的业务类型,根据所述业务类型为各所述业务分配对应的业务负载和对应的业务优先级;

参数计算模块400,用于以百分比、业务负载和业务优先级为参数计算得到每个业务对应的状态因子;状态因子包括负载因子和优先级因子;

资源分配模块500,用于根据状态因子对业务进行工作者线程池分配。

基于上述实施例,作为优选的实施例:

标识模块,用于获取各业务的消息数据流量之后,在各业务的消息包添加业务标识字段。

基于上述实施例,作为优选的实施例,若工作者线程池包括三组线程池,则资源分配模块包括:

第一分配单元,用于将负载因子大于第一预设值、优先级因子大于第二预设值的业务分配至第一组工作者线程池;

第二分配单元,用于将负载因子大于第一预设值、优先级因子小于第二预设值的业务分配至第二组工作者线程池;

第三分配单元,用于将剩余业务均分配至第三组工作者线程池。

基于上述实施例,作为优选的实施例,还包括:

性能计算模块,用于将所述优先级因子作为状态因子值;

则所述资源分配模块为根据所述状态因子值对高性能业务进行资源分配的模块;

其中,所述高性能业务为对所述状态因子值以递减顺序排序后的前预设数量的业务。

本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本申请还提供了一种服务器,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然所述服务器还可以包括各种网络接口,电源等组件。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例提供的系统而言,由于其与实施例提供的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1