具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请涉及的技术名词:
Serverless:Serverless无服务器架构描述了一种场景,从用户自己维护的物理机,到IaaS,再到PaaS,计算模式的转变并不会停止,在云计算基础设施成熟的情况下应用程序可以不需要考虑服务器的存在,通过按需使用的方式,实现成本和效率的提升。
Knative:一款基于Kubernetes的Serverless开源框架,用于满足Serverless场景下应用部署和服务访问需求。
Kubernetes:容器编排调度框架,云原生技术事实标准。
KPA:Knative Pod Autoscaler,Knative中基于请求指标自动扩缩容。
HPA:Horizontal Pod Autoscaler,Kubernetes中水平扩缩容Pod实例。
Pod:Kubernetes中应用实例调度的基本单位。
实施例1
根据本发明实施例的一个方面,提供了一种自适应限流的系统,图1是根据本发明实施例一的自适应限流的系统的示意图,本申请实施例提供的自适应限流的系统包括:网关12、队列容器14、业务容器16和控制器18,其中,
网关12,用于接收请求消息,并将请求消息发送至队列容器14;队列容器14,用于接收并转发网关12发送的请求消息;业务容器16,用于接收队列容器14转发的请求消息,并执行对应的处理操作;控制器18,用于依据业务容器16反馈的性能指标或队列容器14反馈的信息量指标,控制队列容器14转发至业务容器16的请求消息的数量。
具体的,本申请实施例提供的自适应限流的系统可以应用于Serverless场景,如图2所示,图2是根据本发明实施例一的自适应限流的系统中请求消息的处理流程的示意图,通过网关12将接收到的请求消息发送至队列容器14,队列容器14将请求消息转发至业务容器16,由业务容器16对该请求消息进行处理,其中,业务容器16在处理请求消息的过程中,会反馈当前业务容器16的指标或队列容器14的性能指标至控制器18,其中,业务容器16的性能指标可以包括:CPU指标和存储指标(Memory指标);队列容器14的信息量指标可以包括:并发请求指标;当指标持续上升时,控制器18会控制队列容器14转发至业务容器16的请求消息的数量。
需要说明的是,评判指标是否持续上升可以通过设置预设值,判断该指标是否大于或等于该预设值,若指标大于或等于该预设值,则控制队列容器14降低转发至业务容器16的请求消息的数量。
可选的,队列容器14包括:通过调节请求队列窗口的大小,,其中,通过调节请求队列窗口的大小,,用于接收控制器18发送的调整指令,并依据调整指令通过调节请求队列窗口的大小,控制进入业务容器16的请求消息的数量。
进一步地,可选的,请求队列窗口包括:在业务容器16的性能指标或队列容器14的信息量指标大于或等于第一预设值的情况下,减少进入业务容器16的请求消息的数量;第二调节模块,用于在业务容器16的性能指标或队列容器14的信息量指标小于或等于第二预设值的情况下,增加进入业务容器16的请求消息的数量;第三调节模块,用于在业务容器16的性能指标或队列容器14的信息量指标大于第二预设值,小于第一预设值的情况下,依据预设策略调整进入业务容器16的请求消息的数量。
可选的,预设策略为维持当前进入业务容器16的请求消息的数量。
可选的,队列容器14,还用于将接收到的请求消息进行排队。
具体的,如图2所示,队列容器14记作QUENE容器,在本申请实施例中,控制器18通过控制QUENE容器中的请求队列窗口调整进入业务容器16的请求消息的数量,实现了限流的目的;
其中,通过设置预设值,在在预设值包括第一预设值和第二预设值,且第一预设值大于第二预设值的情况下,当业务容器16的性能指标或队列容器14的信息量指标大于或等于第一预设值的情况下,说明业务容器16中的性能指标或队列容器14的信息量指标持续升高,此时控制器18开始调整并减小请求队列窗口,从而减少接入业务容器的请求消息的数量,到达业务限流的目的。
当业务容器16的性能指标或队列容器14的信息量指标小于或等于第二预设值时,增加进入业务容器16的请求消息的数量;说明此时业务容器16或队列容器14的数据处理压力还能够接受更多的请求消息,此时控制器18控制请求队列窗口增加进入业务容器16的请求消息的数量。
当业务容器16的性能指标或队列容器14的信息量指标大于第二预设值,小于第一预设值时,依据预设策略调整进入业务容器16的请求消息的数量;即,在业务容器16的性能指标或队列容器14的信息量指标在第一预设值与第二预设值之间,说明此时业务容器16或队列容器14能够稳定运行,但是由于大于第二预设值,小于第一预设值,为了不限流,可以先维持当前业务容器16的状态。
可选的,业务容器16的性能指标包括:第一类弹性指标;第一类弹性指标包括:处理器指标和存储器指标;或,队列容器14的信息量指标包括:第二类弹性指标;第二类弹性指标包括:并发请求指标。
具体的,本申请实施例中以HPA和KPA类型为例,其中,HPA是本申请实施例中的第一类弹性指标,即,包含处理器指标和存储器指标,记作CPU指标和Memory指标;当CPU和Memory负载开始升高,即CPU指标和Memory指标大于或等于第一预设值的情况下,控制器18开始调整并减小请求队列窗口,从而减少进入业务容器的请求消息的数量,到达业务限流的目的。
同理,KPA是本申请实施例中的第二类弹性指标,在队列容器14中的并发请求数量(即,本申请实施例中的信息量指标中的并发请求指标)大于或等于第一预设值的情况下,控制器18开始调整并减小请求队列窗口,从而减少进入业务容器的请求消息的数量,到达业务限流的目的。
本申请实施例在实际应用于过程中处理器指标、存储器指标、并发请求指标以及请求队列窗口的大小可以对外进行显示,例如以图形化方式显示,如,处理器指标可以表现为当前处理器的性能曲线,业务占用率;或,存储器指标可以表现为存储器当前的读写状态表,存储器的占用率;并发请求指标可以表示为当前队列容器并发的请求消息数量;请求队列窗口的大小可以表示为窗口的形状变化,本申请实施例仅以上述示例为例进行说明,以实现本申请实施例提供的自适应限流的系统为准,具体不做限定。
需要说明的是,在图2中HPA的弹性指标以实线进行标记,KPA的弹性指标以虚线进行标记。
本申请实施例提供的自适应限流的系统在开源主流Serverless框架下基于弹性指标,实现自适应限流,满足了在Serverless场景下面对突发流量请求、负载指标不确定性以及弹性延迟的情况下动态流量控制的诉求,保障服务稳定运行。
此外,需要说明的是,本申请实施例中的请求消息仅以“消息/信息”的形式进行示例,以实现本申请实施例提供的自适应限流的系统为准,具体不做限定。
在本发明实施例中,通过网关,用于接收请求消息,并将请求消息发送至队列容器;队列容器,用于接收并转发网关发送的请求消息;业务容器,用于接收队列容器转发的请求消息,并执行对应的处理操作;控制器,用于依据业务容器反馈的性能指标或队列容器反馈的信息量指标,控制队列容器转发至业务容器的请求消息的数量,达到了满足在不同的负载指标下动态实现限流的目的,从而实现了减少到业务容器的请求,到达业务限流目标的技术效果,进而解决了由于相关技术在限流上往往是通过静态设置限流策略实现限流,导致的无法满足实际业务的需求的技术问题。
实施例2
根据本发明实施例,还提供了一种自适应限流的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图3是本发明实施例的一种自适应限流的方法的计算机终端的硬件结构框图。如图3所示,计算机终端30可以包括一个或多个(图中仅示出一个)处理器302(处理器302可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器304、以及用于通信功能的传输模块306。本领域普通技术人员可以理解,图3所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端30还可包括比图3中所示更多或者更少的组件,或者具有与图3所示不同的配置。
存储器304可用于存储应用软件的软件程序以及模块,如本发明实施例中的自适应限流的方法对应的程序指令/模块,处理器302通过运行存储在存储器304内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的自适应限流的方法。存储器304可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器304可进一步包括相对于处理器302远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端30。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输模块306用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端30的通信供应商提供的无线网络。在一个实例中,传输模块306包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输模块306可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
在上述运行环境下,本申请提供了如图4所示的自适应限流的方法。图4是根据本发明实施例二的自适应限流的方法的流程图。在控制器侧,本申请实施例提供的自适应限流的方法具体如下:
步骤S402,接收业务容器反馈的性能指标或队列容器反馈的信息量指标;
本申请上述步骤S402中,控制器接收业务容器反馈的指标状态或队列容器反馈的指标。
可选的,业务容器的性能指标包括:第一类弹性指标;第一类弹性指标包括:处理器指标和存储器指标;或,队列容器的信息量指标包括:第二类弹性指标;第二类弹性指标包括:并发请求指标。
具体的,在本申请实施例中业务容器反馈的性能指标或队列容器反馈的信息量指标以HPA和KPA类型为例,其中,HPA是本申请实施例中的第一类弹性指标,即,包含处理器指标和存储器指标,记作CPU指标和Memory指标;当CPU和Memory负载开始升高,即CPU指标和Memory指标大于预设值的情况下,控制器开始调整并减小请求队列窗口,从而减少进入业务容器的请求消息的数量,到达业务限流的目的。
同理,KPA是本申请实施例中的第二类弹性指标,在队列容器14中的并发请求数量(即,本申请实施例中的信息量指标中的并发请求指标)大于或等于第一预设值的情况下,控制器18开始调整并减小请求队列窗口,从而减少进入业务容器的请求消息的数量,到达业务限流的目的。
步骤S404,判断业务容器的性能指标或队列容器的信息量指标是否大于预设值;
本申请上述步骤S404中,基于步骤S402中的业务容器的性能指标或队列容器的信息量指标进行判断,判断该业务容器的性能指标或队列容器的信息量是否大于预设值;
在本申请实施例中业务容器的性能指标或队列容器的信息量指标以HPA和KPA类型为例,在判断业务容器的性能指标或队列容器的信息量指标是否大于预设值时存在两种判断标准,具体如下:
第一种判断标准:业务容器的性能指标为第一类弹性指标;
可选的,步骤S404中判断业务容器的性能指标或队列容器的信息量指标是否大于预设值包括:判断业务容器中的处理器指标和存储器指标是否大于预设值。
具体的,在第一类弹性指标包括处理器指标和存储器指标的情况下,记作CPU指标和Memory指标;判断业务容器中的CPU指标和Memory指标是否大于预设值。
第二种判断标准:队列容器的信息量指标为第二类弹性指标;
可选的,步骤S404中判断业务容器的性能指标或队列容器的信息量指标是否大于预设值包括:判断消息容器中的并发请求指标是否大于预设值。
具体的,在第二类弹性指标包括并发请求指标的情况下,判断消息容器中的并发请求指标是否大于预设值。
步骤S406,依据判断结果控制队列容器转发至业务容器的请求消息的数量。
具体的,基于步骤S404中的判断,步骤S406控制器会依据判断结果控制队列容器转发至业务容器的请求消息的数量,即,通过队列容器进入业务容器的请求消息的数量。
由于步骤S404中是基于两种判断标准进行判断的,因此依据判断结果控制队列容器转发至业务容器的请求消息的数量具体如下:
在预设值包括第一预设值和第二预设值,且第一预设值大于第二预设值的情况下,本申请实施例提供的自适应限流的方法会存在三种判断结果,具体如下:
判断结果一:
当业务容器的性能指标或队列容器的信息量指标大于或等于第一预设值时,控制队列容器中的请求队列窗口减少转发至业务容器的请求消息的数量;
具体的,当业务容器的性能指标或队列容器的信息量指标大于或等于第一预设值的情况下,说明业务容器中的性能指标或队列容器的信息量指标持续升高,此时控制器开始调整并减小请求队列窗口,从而减少接入业务容器的请求消息的数量,到达业务限流的目的。
以HPA为例,当CPU和Memory负载开始升高,即CPU指标和Memory指标大于或等于第一预设值的情况下,控制器开始调整并减小请求队列窗口,从而减少进入业务容器的请求消息的数量,到达业务限流的目的。
判断结果二:
当业务容器的性能指标或队列容器的信息量指标小于或等于第二预设值时,增加进入业务容器的请求消息的数量;说明此时业务容器或队列容器的数据处理压力还能够接受更多的请求消息,此时控制器控制请求队列窗口增加进入业务容器的请求消息的数量;
具体的,当业务容器的性能指标或队列容器的信息量指标小于或等于第二预设值时,增加进入业务容器的请求消息的数量;说明此时业务容器或队列容器的数据处理压力还能够接受更多的请求消息,此时控制器控制请求队列窗口增加进入业务容器的请求消息的数量。
判断结果三:
当业务容器的性能指标或队列容器的信息量指标大于第二预设值,小于第一预设值时,依据预设策略控制队列容器中的请求队列窗口调整转发至业务容器的请求消息数量;其中,预设策略为维持当前进入业务容器的请求消息的数量。
具体的,当业务容器的性能指标或队列容器的信息量指标大于第二预设值,小于第一预设值时,依据预设策略调整进入业务容器的请求消息的数量;即,在业务容器的性能指标或队列容器的信息量指标在第一预设值与第二预设值之间,说明此时业务容器或队列容器能够稳定运行,但是由于大于第二预设值,小于第一预设值,为了不限流,可以先维持当前业务容器的状态。
综上,本申请实施例提供的自适应限流的方法中当请求量增大时,业务容器负载开始升高,控制器发现业务容器的指标升高,开始调整并减小请求队列窗口,从而减少进入业务容器的请求消息的数量,当业务容器负载降低之后,控制器发现指标降低,开始调整并增大请求队列窗口,从而增加进入业务容器的请求消息的数量。依据弹性指标,到达业务自适应限流的目标。
举例说明:
假如当前并发请求数100qps,持续5分钟。QUEUE容器中窗口大小为100,HPA的弹性指标为CPU 50%,也就是当CPU到达50%时开始扩容。当业务容器接收到请求流量之后开始处理,那么业务容器负载开始增高,当CPU达到50%HPA开始扩容,但扩容为完成之前,流量会继续进入该业务容器,此时控制器根据指标调整并减少请求队列窗口,从而避免流量过多导致业务容器崩溃。当弹性扩容完成之后,HPA指标随之降低,控制器根据业务容器的指标调整并增加请求队列窗口。通过自适应限流,保障了业务容器平稳运行。
本申请实施例提供的自适应限流的方法在开源主流Serverless框架下基于弹性指标,实现自适应限流,满足了在Serverless场景下面对突发业务流量、负载指标不确定性以及弹性延迟等的情况下,动态流量控制的诉求,保障服务稳定运行。对实际Serverless场景具有重要的应用价值。
在本发明实施例中,通过接收业务容器反馈的性能指标或队列容器反馈的信息量指标;判断业务容器的性能指标或队列容器的信息量指标是否大于预设值;依据判断结果控制队列容器转发至业务容器的请求消息的数量,达到了满足在不同的负载指标下动态实现限流的目的,从而实现了减少到业务容器的请求,到达业务限流目标的技术效果,进而解决了由于相关技术在限流上往往是通过静态设置限流策略实现限流,导致的无法满足实际业务的需求的技术问题。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的自适应限流的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例3
根据本发明实施例,还提供了一种用于实施上述自适应限流的方法的装置,图5是根据本发明实施例三的自适应限流的装置的示意图,如图5所示,本申请实施例提供的自适应限流的装置包括:接收模块52,用于接收业务容器反馈的性能指标或队列容器反馈的信息量指标;判断模块54,用于判断业务容器的性能指标或队列容器的信息量指标是否大于预设值;控制模块56,用于依据判断结果控制队列容器转发至业务容器的请求消息的数量。
实施例4
根据本发明实施例的另一方面,还提供了一种非易失性存储介质,其中,非易失性存储介质包括存储的程序,其中,在程序运行时控制非易失性存储介质所在设备执行上述实施例2中的方法。
实施例5
根据本发明实施例的另一方面,还提供了一种处理器,其中,处理器用于运行程序,其中,程序运行时执行上述实施例2中的方法。
实施例6
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的自适应限流的方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:接收业务容器反馈的性能指标或队列容器反馈的信息量指标;判断业务容器的性能指标或队列容器的信息量指标是否大于预设值;依据判断结果控制队列容器转发至业务容器的请求消息的数量。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:业务容器的性能指标包括:第一类弹性指标;第一类弹性指标包括:处理器指标和存储器指标;或,队列容器的信息量指标包括:第二类弹性指标;第二类弹性指标包括:并发请求指标。
进一步地,可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:判断业务容器的性能指标或队列容器的信息量指标是否大于预设值包括:在业务容器的指标为第一类弹性指标的情况下,判断业务容器中的处理器指标和存储器指标是否大于预设值。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:判断业务容器的性能指标或队列容器的信息量指标是否大于预设值包括:在队列容器的指标为第二类弹性指标的情况下,判断队列容器中的并发请求指标是否大于预设值。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:依据判断结果控制队列容器转发至业务容器的请求消息的数量包括:在预设值包括第一预设值和第二预设值,且第一预设值大于第二预设值的情况下,当业务容器的性能指标或队列容器的信息量指标大于或等于第一预设值时,控制队列容器中的请求队列窗口减少转发至业务容器的请求消息的数量;当业务容器的性能指标或队列容器的信息量指标小于或等于第二预设值时,控制队列容器中的请求队列窗口增加转发至业务容器的请求消息的数量;当业务容器的性能指标或队列容器的信息量指标大于第二预设值,小于第一预设值时,依据预设策略控制队列容器中的请求队列窗口调整转发至业务容器的请求消息数量;其中,预设策略为维持当前进入业务容器的请求消息的数量。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。