著录项信息
专利名称 | 一种基于负载自适应的云平台应用实例自动伸缩方法 |
申请号 | CN201410140537.8 | 申请日期 | 2014-04-10 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2014-07-09 | 公开/公告号 | CN103916396A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L29/06 | IPC分类号 | H;0;4;L;2;9;/;0;6;;;H;0;4;L;2;9;/;0;8查看分类表>
|
申请人 | 电子科技大学 | 申请人地址 | 四川省成都市高新区(西区)西源大道2006号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 电子科技大学 | 当前权利人 | 电子科技大学 |
发明人 | 陆鑫;李涛 |
代理机构 | 成都宏顺专利代理事务所(普通合伙) | 代理人 | 李顺德;王睿 |
摘要
本发明涉及云计算领域,具体的说是一种基于负载自适应的云平台应用实例自动伸缩方法。本发明的方法主要步骤为:通过实例负载监测组件从各个运行中的应用实例采集实时负载数据;通过应用负载分析组件对接收到的实例负载数据进行汇总计算确定该应用的运行负载,并结合该应用的用户访问请求量进行综合决策分析,确定是否对该应用进行实例伸缩控制;然后通过实例控制组件调用云平台API进行该应用的实例增减操作。本发明的有益效果为,首先解决了原生Cloud Foundry开源云平台使用人工方式伸缩应用实例问题,同时还解决了仅依据应用的用户访问请求量进行应用实例伸缩所带来的可能与实际情况不吻合问题。本发明尤其适用于Cloud Foundry开源云平台。
1.一种基于负载自适应的云平台应用实例自动伸缩方法,其特征在于,包括以下步骤:
a.通过实例负载监测代理组件实时采集云平台各应用实例的负载状态,并将当前时刻采集到的实例负载数据值与前一时刻记录的实例负载值进行对比得到该实例负载数据变化量,判断变化量是否超出预设的变化量阀值,若是,则将负载数据发送到应用负载分析组件并进入步骤b,若否,则重复步骤a;通过应用实例负载监测代理组件实时采集云平台每个应用实例的负载状态的具体方法为:
在每个应用实例运行节点中设置实例负载监测子模块定时对该节点上所有负载数据进行采集,所述负载数据至少包括CPU负载、内存负载、磁盘负载和网络负载;
b.应用负载分析组件接收实例负载监测组件发送的负载数据,将应用各实例负载数据汇总计算出该应用的运行负载,判断应用运行负载是否处于预设的负载上、下阀值之间,若是,表明应用负载正常,则不进行处理并回到步骤a,若否,则进一步判断应用运行负载数据是大于负载上阀值或是小于负载下阀值,若是大于负载上阀值,则标记该应用为重载状态,若是小于负载下阀值,则标记该应用为轻载状态;具体方法为:
b1.应用负载分析组件接收到应用的实例负载数据后,对该应用的运行负载进行计算,具体方法为:
假设应用的CPU负载为Lcpu、内存负载为Lmem、磁盘负载为Ldisk和网络负载为Lnet,计算公式分别为:
CPU负载 其中n是该应用实例个数,Ci是该应用的第i号实例对应的CPU
负载数据,
内存负载 其中n是该应用实例个数,Mi是该应用的第i号实例对应的内
存负载数据,
磁盘负载 其中n是该应用实例个数,Di是该应用的第i号实例对应的磁
盘负载数据,
网络负载 其中n是该应用实例个数,Ni是该应用的第i号实例对应的网
络负载数据;
b2.假设预设的各负载数据上阀值分别为:CPU负载上阀值Hcpu、内存负载上阀值Hmem、磁盘负载上阀值Hdisk、网络负载上阀值Hnet;各负载数据下阀值分别为:CPU负载下阀值Bcpu、内存负载下阀值Bmem、磁盘负载下阀值Bdisk、网络负载下阀值Bnet,根据步骤b1中所得到的应用运行负载数据,计算它在系统中的高负载比值RH和低负载比值RL:
RH=α*Lcpu/Hcpu+β*Lmem/Hmem+γ*Ldisk/Hdisk+δ*Lnet/Hnet,
RL=α*Lcpu/Bcpu+β*Lmem/Bmem+γ*Ldisk/Bdisk+δ*Lnet/Bnet,
其中,α,β,γ,δ,分别表示CPU负载、内存负载、磁盘负载和网络负载的权重比例值,α+β+γ+δ=1;
b3.判断该应用的高负载比值RH与1的大小,若RH>=1,则确定该应用运行处于重载状态,进入步骤c,若RH<1,则进入步骤b4;
b4.判断该应用的低负载比值RL与1的大小,若RL<=1,则确定该应用运行处于轻载状态,进入步骤c,若RL>1,则回到步骤a;
c.判断标记为重载状态/轻载状态的应用的变化趋势,具体为:判断标记为重载状态的应用运行负载是否保持重载,若是,则进入步骤d,若否,则回到步骤a;判断标记为轻载状态的应用负载是否保持轻载,若是,则进入步骤e,若否,则回到步骤a;
d.应用负载分析组件发送实例增加指令到应用实例伸缩控制组件,应用实例伸缩控制组件根据应用负载分析组件指令,调用云平台应用实例伸缩API为当前应用增加实例,回到步骤a;
e.应用负载分析组件发送实例减少指令到应用实例伸缩控制组件,应用实例伸缩控制组件根据应用负载分析组件指令,调用云平台应用实例伸缩API为当前应用减少实例,回到步骤a。
2.根据权利要求1所述的一种基于负载自适应的云平台应用实例自动伸缩方法,其特征在于,步骤c还包括以下步骤:
c1.判断标记为重载的应用负载的运行负载是否保持重载,具体方法为:从云平台获取单位时间内该应用的访问请求量visit,判断visitc2.判断标记为轻载的应用负载的运行负载是否保持轻载,具体方法为:从云平台获取单位时间内该应用实例的访问请求书visit,判断visit>=VL*N是否成立,若成立,则表示运行负载不会保持轻载并回到步骤a,若不成立,则表示运行负载会保持轻载并进入步骤c4,其中VL为使实例保持正常负载范围内单位时间最小请求数,N为应用当前实例数目;
c3.判断当前该应用的实例数是否小于平台允许应用的最大实例数NH,若是,则进入步骤d,若否,则反馈无法操作信息到平台;
c4.判断当前该应用的实例数是否大于平台允许应用的最小实例数NL,若是,则进入步骤e,若否,则反馈无法操作信息到平台。
一种基于负载自适应的云平台应用实例自动伸缩方法\n技术领域\n[0001] 本发明涉及云计算领域,具体的说是一种基于负载自适应的云平台应用实例自动伸缩方法。\n背景技术\n[0002] 云计算是一种服务的交付和使用模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。云计算基本特征为按需使用资源、资源可以动态扩展、应用弹性计算、通过网络以服务方式提供给用户。\n[0003] 弹性计算是云计算的基本特征之一,它是指用户应用根据实际业务或者计算需要,灵活地使用计算资源,真正实现按需使用、按需交付和按需付费。弹性计算主要通过云计算平台运行资源的垂直伸缩和水平伸缩来实现。资源垂直伸缩是在云计算平台中单个运行节点中增减资源,如给运行计算机增减CPU或内存;资源水平伸缩是指在云计算平台中,增加或减少运行节点数量,例如将应用的运行服务器由一台增加为三台。\n[0004] Cloud Foundry是VMware于2011年初推出的业界第一个开源PaaS云计算平台,它支持应用运行所需的多种框架、数据库服务、运行时环境,使开发人员能够在短时间内在云计算环境进行应用程序的部署和扩展,无需管理应用所依赖的基础架构运行环境。Cloud Foundry作为一种云计算平台软件,提供了基本的弹性计算功能。它具体通过控制云平台上各应用运行的实例数量来支持不同负载的弹性计算能力。当外界对应用的访问请求增多时,用户可通过调用云平台提供的实例增加命令,复制更多的应用实例,来增强应用的运行能力,满足云平台中应用的弹性计算。反之,当外界对应用的访问请求减少时,为避免资源浪费,则减少应用的运行实例个数,这样可以将节省下的资源用于其他应用的计算需求,从而实现平台计算资源的高效利用。\n[0005] 但原生的Cloud Foundry开源云平台对于应用弹性计算的支持有限,仅仅提供用户根据监测到的应用负载情况,手动更改应用实例数进行计算资源的水平伸缩能力处理。\n该平台提供的应用计算资源伸缩方式不能及时适应负载动态变化,其时效性不强,可能会造成应用一定时间内响应失效的情况;还可能因为用户手动设置数值不合理,造成平台资源浪费或不能满足应用需求;同时该方式对平台管理人员要求高,需要人工时刻关注各个应用负载状态,及时进行应用运行资源调整操作,这会耗费较多的人员精力,也增大管理难度。\n[0006] 为了改进Cloud Foundry开源云平台的应用弹性计算局限,一些云服务提供商在原生Cloud Foundry平台基础上实现了一定程度上的应用实例自动伸缩控制。其实现方法是在平台资源调度层中增加了应用实例自动伸缩模块,同时在平台中为各个应用定义一个实例伸缩规则,如根据应用的HTTP访问量评估应用负载状态,然后基于应用负载进行实例数伸缩处理。例如,若监测应用每秒收到的HTTP访问请求数大于100时,则在当前运行应用中增加一个实例;当HTTP访问量大于150时,又增加一个实例,以次类推,应用最多可以有10个实例。若监测应用每秒收到的HTTP访问请求数少于50时,则减少1个实例,应用最少为2个实例。现有改进技术方案是通过上述简单的应用负载判断方式来决定Cloud Foundry开源云平台的应用实例自动伸缩控制,从而实现云平台的基本弹性计算。\n[0007] 虽然现有的Cloud Foundry云平台应用实例伸缩技术方案提供了基本的应用实例自动伸缩控制策略方法,实现一定的应用弹性计算能力。但它们在技术实现上,只是简单地根据应用的用户访问请求量,判断其访问量负载范围,当负载超过阈值范围之外时,就自动增减一个实例。此种策略方法虽然简单,也实现了一定的平台应用弹性计算,但其对于应用实例伸缩控制是被动的、滞后的。需要强调,应用的用户访问请求量并不一定能完全反映出应用实际负载状况。因此,仅仅将应用的用户访问请求量作为应用实例伸缩依据是不充分的,在特定情况下,该方法并不能有效实现负载均衡和提高资源利用率。此外,当应用的访问量变化频繁时,简单的依据当前访问请求量决定增减应用的实例数,容易造成“应用访问抖动”开销。所谓应用访问抖动是指应用在短时间内频繁增减实例,如云平台刚刚根据应用的访问请求量,减少了一个应用实例,但下一时刻应用的访问请求量又突发增加,导致平台又立刻增加应用实例,带来平台系统较大开销。这种状况我们定义为“先减后增抖动”,还有一种就是“先增后减抖动”。由于在云平台中增减应用实例是一种耗时耗资源的操作,频繁地增减应用实例既会造成云平台系统的额外开销,也会导致应用响应处理能力降低。因此,目前的Cloud Foundry云平台应用实例伸缩技术方案仍具有较大的局限性。\n发明内容\n[0008] 本发明所要解决的问题,就是针对目前Cloud Foundry云平台存在的应用实例伸缩技术局限,提供一种能够负载自适应的云平台应用实例自动伸缩方法,实现云平台的应用弹性计算,并提高应用访问稳定性。\n[0009] 本发明解决上述技术问题所采用的技术方案是:一种基于负载自适应的云平台应用实例自动伸缩方法,其特征在于,包括以下步骤:\n[0010] a.通过实例负载监测代理组件实时采集云平台各应用实例的负载状态,并将当前时刻采集到的实例负载数据值与前一时刻记录的实例负载值进行对比得到该实例负载数据变化量,判断变化量是否超出预设的变化量阀值,若是,则将负载数据发送到应用负载分析组件并进入步骤b,若否,则重复步骤a;\n[0011] b.应用负载分析组件接收实例负载监测组件发送的负载数据,将应用各实例负载数据汇总计算出该应用的运行负载,判断应用运行负载是否处于预设的负载上、下阀值之间,若是,表明应用负载正常,则不进行处理并回到步骤a,若否,则进一步判断应用运行负载数据是大于负载上阀值或是小于负载下阀值,若是大于负载上阀值,则标记该应用为重载状态,若是小于负载下阀值,则标记该应用为轻载状态;\n[0012] c.判断标记为重载状态/轻载状态的应用的变化趋势,具体为:判断标记为重载状态的应用运行负载是否保持重载,若是,则进入步骤d,若否,则回到步骤a;判断标记为轻载状态的应用负载是否保持轻载,若是,则进入步骤e,若否,则回到步骤a;\n[0013] d.应用负载分析组件发送实例增加指令到应用实例伸缩控制组件,应用实例伸缩控制组件根据应用负载分析组件指令,调用云平台应用实例伸缩API为当前应用增加实例,回到步骤a;\n[0014] e.应用负载分析组件发送实例减少指令到应用实例伸缩控制组件,应用实例伸缩控制组件根据应用负载分析组件指令,调用云平台应用实例伸缩API为当前应用减少实例,回到步骤a。\n[0015] 具体的,步骤a中通过应用实例负载监测代理组件实时采集云平台每个应用实例的负载状态的具体方法为:\n[0016] 在每个应用实例运行节点中设置实例负载监测代理模块定时对该节点上所有负载数据进行采集,所述负载数据至少包括CPU负载、内存负载、磁盘负载和网络负载。\n[0017] 具体的,步骤b还包括以下步骤:\n[0018] b1.应用负载分析组件接收到应用的实例负载数据后,对该应用的运行负载进行计算,具体方法为:\n[0019] 假设应用的CPU负载为Lcpu、内存负载为Lmem、磁盘负载为Ldisk和网络负载为Lnet,计算公式分别为:\n[0020] CPU负载 其中n是该应用实例个数,Ci是该应用的第i号实例对应的\nCPU负载数据,\n[0021] 内存负载 其中n是该应用实例个数,Mi是该应用的第i号实例对应\n的内存负载数据,\n[0022] 磁盘负载 其中n是该应用实例个数,Di是该应用的第i号实例对应\n的磁盘负载数据,\n[0023] 网络负载 其中n是该应用实例个数,Ni是该应用的第i号实例对应\n的网络负载数据;\n[0024] b2.假设预设的各负载数据上阀值分别为:CPU负载上阀值Hcpu、内存负载上阀值Hmem、磁盘负载上阀值Hdisk、网络负载上阀值Hnet;各负载数据下阀值分别为:CPU负载下阀值Bcpu、内存负载下阀值Bmem、磁盘负载下阀值Bdisk、网络负载下阀值Bnet,根据步骤b1中所得到的应用运行负载数据,计算它在系统中的高负载比值RH和低负载比值RL:\n[0025] RH=α*Lcpu/Hcpu+β*Lmem/Hmem+γ*Ldisk/Hdisk+δ*Lnet/Hnet,\n[0026] RL=α*Lcpu/Bcpu+β*Lmem/Bmem+γ*Ldisk/Bdisk+δ*Lnet/Bnet,\n[0027] 其中,α,β,γ,δ,分别表示CPU负载、内存负载、磁盘负载和网络负载的权重比例值,α+β+γ+δ=1;\n[0028] b3.判断该应用的高负载比值RH与1的大小,若RH>=1,则确定该应用运行处于重载状态,进入步骤c,若RH<1,则进入步骤b4;\n[0029] b4.判断该应用的低负载比值RL与1的大小,若RL<=1,则确定该应用运行处于轻载状态,进入步骤c,若RL>1,则回到步骤a。\n[0030] 具体的,步骤c还包括以下步骤:\n[0031] c1.判断标记为重载的应用负载的运行负载是否保持重载,具体方法为:从云平台获取单位时间内该应用的访问请求量visit,判断visit=VL*N是否成立,若成立,则表示运行负载不会保持轻载并回到步骤a,若不成立,则表示运行负载会保持轻载并进入步骤c4,其中VL为使实例保持正常负载范围内单位时间最小请求数,N为应用当前实例数目;\n[0033] c3.判断当前该应用的实例数是否小于平台允许应用的最大实例数NH,若是,则进入步骤d,若否,则反馈无法操作信息到平台;\n[0034] c4.判断当前该应用的实例数是否大于平台允许应用的最小实例数NL,若是,则进入步骤e,若否,则反馈无法操作信息到平台。\n[0035] 本方案的优点在于,它不仅能满足平台应用实例的自动伸缩,还通过应用负载分析组件结合应用当前访问请求量,综合决策应用实例的自动伸缩处理。应用负载分析组件一旦接收到实例负载数据,就启动一次应用负载计算。它将当前同一应用的各个实例负载数据汇总计算,得到本应用运行负载,并根据设定的应用负载上、下阈值判断当前应用是否出现重载或轻载情况。若出现应用过载,并结合当前应用的用户访问请求量,进行应用实例伸缩决策分析处理,给出决策结果(增加实例、减少实例、暂不处理)。若分析决策结果为增加实例情况,应用负载分析组件发出指令给应用实例伸缩控制组件进行实例资源调度处理,并通过Cloud Foundry云平台提供API选定最适合应用实例创建的运行结点,然后创建该应用实例。若分析决策结果为减少实例情况,应用实例伸缩控制组件将选定当前负载最轻的实例进行关闭处理。若分析决策结果为减少暂不处理情况,应用实例伸缩控制组件不做处理。从而有效避免了可能的“应用访问抖动”开销,增加了平台的稳定性。\n[0036] 其中,应用实例伸缩控制组件每次进行的实例增减数量为单个实例增减。\n[0037] 本发明的有益效果为,首先解决了原生Cloud Foundry开源云平台使用人工方式进行应用实例伸缩的局限问题,实现一种基于负载反馈的应用实例自动伸缩方法,提高了平台应用自动适应负载的弹性计算能力。同时还解决了仅依据应用的用户访问请求量进行应用实例伸缩所带来的可能与实际情况不吻合问题,并且还能很好地解决应用的用户访问请求变化剧烈时,平台应用实例伸缩可能出现的应用访问抖动问题,维持了应用访问性能的稳定性。\n附图说明\n[0038] 图1为本发明的在原生Cloud Foundry平台中改进应用实例伸缩控制功能的架构图;\n[0039] 图2为本发明的云平台应用实例自动伸缩方法的基本流程图;\n[0040] 图3为应用实例负载监测代理组件的工作流程示意图;\n[0041] 图4为应用负载分析组件的工作流程示意图;\n[0042] 图5为应用实例伸缩控制组件的工作流程示意图。\n具体实施方式\n[0043] 下面结合附图,详细描述本发明的技术方案:\n[0044] 如图1所示,本发明在原生Cloud Foundry平台中,设计了实例负载监测组件、应用负载分析组件和应用实例伸缩控制组件。\n[0045] 其中原生Cloud Foundry云平台包括云控制器(Cloud Controller)组件、数据库及用户身份验证(UAA)组件、应用实例运行(DEA)组件、健康管理(Health Manager)组件、路由(Router)组件、服务(Service)组件和消息总线(NATS)组件等。除了NATS外,每个组件都可以在多个虚拟机节点运行。新增功能组件包括实例负载监测代理组件、应用负载分析组件、应用实例伸缩控制组件。其中实例负载监测代理组件位于应用运行节点(DEA)中,负责监测每个DEA节点中的应用实例运行负载情况。应用负载分析组件和实例伸缩控制组件位于云控制Cloud Controller节点中,前者负责对负载监测代理提交的负载数据进行分析决策,后者依据前者的决策结果实施平台应用实例伸缩控制。每个应用都以若干实例形式运行在多个DEA节点中。平台各节点功能及工作原理如下:\n[0046] Router节点:识别并路由所有来自内网和外网的请求,进入Router的请求主要有两类:第一类是来自VMC Client或者STS的,由Cloud Foundry使用者发出的,管理型指令。\n第二类是外界对所部署应用系统访问的请求。应用访问请求会被路由到该应用所在的运行环境,即DEA的组件。Router管理动态路由表,通过映射应用对应的IP和端口实现负载平衡。\n[0047] DEA节点:DEA(Droplet Execution Agents)是安全并且完全隔离的应用运行容器。同时,它也管理应用生命周期活动,如创建、启动、停止,并定期广播状态消息。\n[0048] Cloud Controller节点:它是Cloud Foundry的核心控制管理模块。主要工作包括:对应用apps的增删改读;启动、停止应用程序;Staging apps(把apps打包成一个droplet);修改应用程序运行环境,包括实例数(instance)、内存(mem)等等;管理service,包括service与app的绑定等;Cloud Foundry环境的管理;修改Cloud Foundry平台的用户信息;查看Cloud Foundry,以及每一个app的日志信息。总体来说,Cloud Controller管理整个Cloud Foundry平台的命令和控制系统,包括与各类客户端(CLI,Web UI,Spring STS)的调用接口,账户管理,应用部署等核心功能。提供RESTful接口和对象模型。\n[0049] Stager节点:它是负责应用打包组件,从v1.0版本的Cloud Controller中独立出来,专门负责将用户上传的应用代码打包后暂时存放在blobstore中。\n[0050] 身份验证(UAA-AuthN)节点:UAA(User Authorization and Authentication),负责云平台系统的用户认证和授权,以及第三方Oauth2.0访问和身份识别。\n[0051] Health Manager节点:监控应用的状态,监听NATS消息总线,发现应用异常并报警。它监测Cloud Controller节点发布应用预期状态、DEA发布应用实际状态,并将它们进行对比。\n[0052] Service节点:主要负责对外提供服务,可以是平台本身自带的几个基础数据库服务,也可以是加入的第三方扩展其他服务。\n[0053] Gateway和Node节点:Gateway是其它组件(Cloud Controller)访问Node的入口,它对外提供了对Node进行管理的一套“接口”。同时它对外隐藏内部Node的结构,这样外部的组件就可以忽略内部Node的情况,只需要关心服务实例的创建、绑定的动作。Node负责管理服务,包括创建、注销、绑定、启用、禁用等操作。Node不是服务的提供者,它是本地服务的管理者。\n[0054] NATS消息组件:Cloud Foundry的内部消息总线,通过订阅和发布的方式,管理系统级别的通信。NATS是系统各个模块之间通信的桥梁,各组件组成一套基于消息的分布式系统,面向消息的架构是它节点横向扩展,组件自发现等云特性的基础。\n[0055] 为实现基于负载自适应的云平台应用实例伸缩,本发明在原生Cloud Foundry平台中,设计了实例负载监测代理组件、应用负载分析组件和应用实例伸缩控制组件,它们的主要功能如下:\n[0056] 实例负载监测代理组件:负责从各个运行中的应用实例采集实时负载数据。若当前负载数据与前一次记录负载数据的变化值超出一定量时,将实例的当前负载数据发送给云控制器中的负载分析组件处理。\n[0057] 应用负载分析组件:每当接收到实例负载监测代理传送的实例负载数据,负载监测代理就进行一次应用运行负载计算。它将本应用各实例最近负载数据作为输入,按照特定公式计算应用运行负载,并根据设定的应用负载上、下阈值判断当前应用是否出现重载或轻载情况。若出现应用过载,并结合当前应用访问请求量,进行应用实例伸缩决策分析处理,给出决策结果(增加实例、减少实例、暂不处理)。将决策分析结果,即是否要增减应用实例数,传送给实例控制组件处理。\n[0058] 应用实例伸缩控制组件:根据应用负载分析组件发送的结果,调用云平台实例资源API选择合适节点作为应用实例伸缩控制响应节点,并进行实例伸缩操作。\n[0059] 如图2所示,本发明的云平台应用实例自动伸缩方法总体处理流程。首先由平台各运行节点中的实例负载监测代理组件监测各个应用实例的负载,当实例负载变化超出一定值时,将该负载数据提交给应用负载分析组件处理;应用负载分析组件接收到实例负载数据后,将进行应用运行负载计算,并判断应用运行负载是否过载,同时结合该应用的访问请求量进行决策分析处理,给出决策结果(增加实例、减少实例、暂不处理),根据决策结果给应用实例伸缩控制组件发出实例伸缩指令;应用实例伸缩控制组件根据指令进行应用实例伸缩控制处理。\n[0060] 如图3所示,应用实例负载监测代理组件工作流程。每个应用实例运行节点中都有一个实例负载检测代理,负责监测该节点上所有实例的CPU使用率、内存使用率、磁盘I/O和网络流量四项负载情况。同时,系统对每个被测负载事先设定全局固定一致的上阈值\nH[object]和下阈值B[object],[object]值可取cpu,mem,disk和net中的一个。例如选取CPU使用率上阈值为80%,下阈值20%,则Hcpu=80%,Bcpu=20%;磁盘I/O值和网络流量根据具体云平台硬件配置及所处网络环境选择合理的上阈值和下阈值。\n[0061] 工作时,实例负载监测代理定时分别采集被测实例的四种负载数据。其后计算当前负载数据与上次保存实例负载数据的变化量,若此变化量绝对值大于上阈值的5%,则认为该负载数据为有效采样数据,并提交该数据到应用负载分析组件,同时记录在本地;若不大于,则认为负载变化不大,不需要进行实例资源调度处理。\n[0062] 负载监测代理在给负载分析组件上传负载数据时,以三元组(instance_ID,\nobject,load)形式发送。其中instance_ID为实例标号,它用于标识应用实例;object是采样对象(CPU使用率,内存使用率,磁盘I/O和网络流量等四个);load为该对象负载数据。\n[0063] 如图4所示,应用负载分析组件是本发明的关键功能组件,它负责对应用实例负载进行计算得到应用运行负载,并根据应用运行负载状态和应用的访问请求量,进行应用实例伸缩决策分析,从而确定应用实例伸缩操作,工作流程为:\n[0064] 第1步:应用负载分析组件一旦接受到负载监测代理发送的数据,就启动一次应用负载计算。根据新接收到的实例负载数据和应用全部实例的最近负载数据,计算得到应用运行负载。例如,计算应用的CPU负载,其计算公式为: 其中n是该应用实例个\n数,Ci是该应用的第i号实例对应的CPU负载数据,Lcpu为本应用的CPU运行负载。同理,可计算应用的内存负载Lmem、磁盘负载Ldisk、网络负载Lnet。\n[0065] 第2步:应用负载分析组件利用公式计算出该应用的“高负载比”和“低负载比”指标数据。其计算公式分别为:RH=α*Lcpu/Hcpu+β*Lmem/Hmem+γ*Ldisk/Hdisk+δ*Lnet/Hnet,RL=α*Lcpu/Bcpu+β*Lmem/Bmem+γ*Ldisk/Bdisk+δ*Lnet/Bnet。这里Lcpu、Lmem、Ldisk、Lnet分别是应用的CPU使用率、内存使用率、磁盘I/O和网络的运行负载,Hcpu、Hmem、Hdisk、Hnet分别为应用各类负载的上阈值,Bcpu、Bmem、Bdisk、Bnet分别为应用各类负载的下阈值。α,β,γ,δ,表示四类负载的权重比例值,重要性越高权重值越大,且α+β+γ+δ=1,可以根据平台应用类型调整权值。例如,如果应用是CPU消耗型负载,可以α参数值较大。\n[0066] 第3步:比较应用的高负载比RH值与1大小。若RH>=1,则当前应用处于重载状态,转第5步处理;若RH<1,表明应用运行负载没有超过上阈值,转第4步处理。\n[0067] 第4步:比较应用的低负载比RL值与1大小。若RL<=1,则当前应用处于轻载状态,转第6步处理;若RL>1,表明应用运行负载没有过低,无需调整实例数。\n[0068] 第5步:判断应用负载是否会出现“先增后减抖动”情况,即判断标记为重载状态的应用是否持续保持重载。检查方法是:负载分析组件得到云平台路由组件发送过来的单位时间内该应用的访问请求数visit,若visit=VL*N(VL是使实例保持正常负载范围内单位时间最小请求数,依据具体平台的应用实例资源配置情况确定,N是应用当前实例数目),则表明应用负载未来很可能会增大,为避免抖动,暂不减少应用实例数;否则,则转第8步。\n[0070] 第7步:判断当前应用的实例数是否小于N(H 平台允许应用的最大实例数为NH,可依据平台实际情况确定此最大值)。若当前应用实例数小于NH,决策结果为增加一个实例,则发送结果“+1”指令给应用实例伸缩控制组件。若当前应用实例数等于NH,则决策结果为不能调整应用实例数,并告警平台。\n[0071] 第8步:判断当前应用的实例数是否大于N(L 平台允许应用的最少实例数为NL,可依据平台实际情况确定此最小值)。若当前应用实例数大于NL,决策结果为减少一个实例,则发送结果“-1”给应用实例伸缩控制组件。若当前应用实例数等于NL,则决策结果为不能调整应用实例数,并告警平台。\n[0072] 如图5所示,应用实例伸缩控制组件收到应用负载分析组件上传的实例伸缩指令时,将进行实例伸缩处理。当收到的命令为某应用“+1”指令时,表示该应用要增加一个实例。实例伸缩控制组件将调用云平台提供实例操作API函数进行该应用的实例增加操作。云平台在进行应用实例增加时,能够自动根据负载均衡原则选择负载最轻的运行节点创建当前应用的新实例,并通知路由组件在路由表中注册此新实例。当收到的命令为某应用“-1”指令时,表示该应用要减少一个实例。应用实例伸缩控制组件调用云平台提供实例操作API函数进行该应用的实例减少操作,并选择实例负载最轻的实例运行节点删除处理。同时通知路由组件从路由表中去掉此实例,以便路由节点及时更新应用实例数据。\n[0073] 在云平台中,本发明的实例负载监测代理组件采集负载数据并判断应用实例负载的变化量,如果负载变化量不大,即负载保持相对稳定,平台不需要调整应用实例数。本发明所述方法选择了上阈值的5%作为最小有效变化单位,实际可以根据平台处理能力选取合适的最小有效变化单位。实例负载监测代理组件将本次监测值与上次保存负载值求差,如果结果值大于规定的变化量时,则将该负载值发送给负载分析组件,并将它记录保存在系统中。\n[0074] 判断应用实例数是否需要伸缩,需要分析组件依据该应用的运行负载和访问请求情况来决策确定。其中应用的运行负载是由分析组件将该应用的所有实例负载数据进行汇总计算,分别得到应用的CPU、内存、磁盘I/O和网络四项运行负载值。应用访问请求负载是由平台的路由组件提供。\n[0075] 在应用的运行负载计算过程中,将计算本应用的“高负载比”和“低负载比”指标数据。通过该数据判断本应用的运行负载是否过载。具体将比较“高负载比”与1的大小关系,若本应用的“高负载比”>=1,则认为本应用重载,否则本应用没有重载。若本应用没有出现重载,还需要判断本应用是否出现轻载。具体将比较本应用的“低负载比”与1的大小关系。\n若本应用的“低负载比”<=1,则表明了本应用的运行负载过低。\n[0076] 当应用的运行负载出现重载或是轻载情况,还需要根据该应用的当前访问请求量变化,进一步判断应用是否将会“应用访问抖动”。本发明的解决方式是结合应用当前的访问请求数和应用运行负载情况,决策是否进行应用实例数调整,以避免平台应用“抖动”问题出现。
法律信息
- 2018-05-01
未缴年费专利权终止
IPC(主分类): H04L 29/06
专利号: ZL 201410140537.8
申请日: 2014.04.10
授权公告日: 2016.09.21
- 2016-09-21
- 2014-08-06
实质审查的生效
IPC(主分类): H04L 29/06
专利申请号: 201410140537.8
申请日: 2014.04.10
- 2014-07-09
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |