应用容器的弹缩方法及装置、微服务、存储介质与流程

文档序号:17719027发布日期:2019-05-22 02:01阅读:263来源:国知局
应用容器的弹缩方法及装置、微服务、存储介质与流程

本发明涉及计算机技术领域,尤其涉及一种应用容器的弹缩方法及装置、微服务、计算机可读存储介质。



背景技术:

paas(platformasaservice,平台即服务)作为软件行业快速开发部署定制化应用的云平台,兼容容器化应用的开发和部署。paas平台不仅需要完成容器化应用的快速部署,还要能支持其所承载应用的自动弹缩,以满足业务自动扩容和缩容。

目前的paas平台上的应用容器的弹缩(弹性伸缩),基本原理就是通过修改微服务的期望实例个数,周期性检查期望实例个数和实际运行实例个数进行比对来实现微服务实例动态调度。控制策略都是集中在微服务自身的一些指标,如cpu、内存,以及微服务自身自定义指标。比如google开发的kubernetes,作为最主流的容器云应用编排的平台之一,已经支持了三种指标弹缩。

然而,对于一些场景,微服务需要弹缩依据的指标不在微服务本地统计,而是在其他微服务统计。也就出现了需要根据其他微服务的指标来对微服务自身进行弹缩。典型的应用场景1:基于api(applicationprogramminginterface,应用程序编程接口)网关流量的弹缩,网关负责每个微服务实例请求的路由及负载均衡,只在api网关有每个微服务实例的请求和时延统计;典型的应用场景2:通信领域的小区接入管理微服务和性能统计微服务是两个独立的微服务。对于上述场景,微服务需要根据其他微服务的统计来进行动态扩容和缩容。因此,如何实现跨微服务弹缩,而应用无需修改适配是我们需要解决的课题。



技术实现要素:

有鉴于此,本发明的目的在于提供一种应用容器的弹缩方法及装置、微服务、计算机可读存储介质,以解决如何实现跨微服务弹缩,而应用无需修改适配的问题。

本发明解决上述技术问题所采用的技术方案如下:

根据本发明的一个方面,提供的一种应用容器的弹缩方法,所述方法包括步骤:

根据预设数据库中存储的第一微服务的中间件容器获取到的第二微服务的性能指标数据、以及所述中间件容器的弹缩门限,确定第一微服务目标实例个数;其中,所述第一微服务实例包括编排的所述中间件容器和所述应用容器;

根据所述第一微服务目标实例个数,弹缩所述中间件容器。

根据本发明的另一个方面,提供的一种微服务,所述微服务包括微服务实例、数据库、确定模块以及弹缩模块;

所述微服务实例包括编排的中间件容器和应用容器;

所述中间件容器,用于获取其他微服务的性能指标数据;

所述数据库,用于存储所述中间件容器获取到的其他微服务的性能指标数据;

所述确定模块,用于根据所述数据库中存储的所述中间件容器获取到的其他微服务的性能指标数据、以及所述中间件容器的弹缩门限,确定微服务目标实例个数;

所述弹缩模块,用于根据所述微服务目标实例个数,弹缩所述中间件容器。

根据本发明的另一个方面,提供的一种应用容器的弹缩装置,所述应用容器的弹缩装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的应用容器的弹缩程序,所述应用容器的弹缩程序被所述处理器执行时实现上述的应用容器的弹缩方法的步骤。

根据本发明的另一个方面,提供的一种计算机可读存储介质,所述计算机可读存储介质上存储有应用容器的弹缩程序,所述应用容器的弹缩程序被处理器执行时实现上述的应用容器的弹缩方法的步骤。

本发明实施例的一种应用容器的弹缩方法及装置、微服务、计算机可读存储介质,通过将中间件容器和应用容器绑定在同一个微服务中,根据采集到的其他微服务的性能指标数据,弹缩中间件容器,从而实现间接弹缩应用容器的目的。

附图说明

图1为本发明实施例的网络架构结构示意图;

图2为本发明第一实施例的应用容器的弹缩方法流程示意图;

图3为本发明第一实施例的应用容器的弹缩方法中采集性能指标数据的流程示意图;

图4为本发明第一实施例的应用容器的弹缩方法中存储性能指标数据的流程示意图;

图5为本发明实施例的使用应用容器的弹缩方法的系统结构示意图;

图6为本发明第二实施例的微服务结构示意图;

图7为本发明第二实施例的微服务中的中间件容器结构示意图;

图8为本发明第二实施例的微服务另一结构示意图;

图9为本发明第二实施例的微服务中的中间件容器结构示意图;

图10为本发明第三实施例的应用容器的弹缩装置结构示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

为了更好地理解本发明的实施例,以下结合图1对具有容器的网络架构进行说明:

netfuction:网络功能,类似网元的概念,例如enobeb网元,omm系统,mce网元,epc网元。网络功能具体实现过程中可被拆分成多个微服务。

microservice:微服务,提供比较独立的功能,图1中的microservice1,microservice2,microservice3,microservice4四个微服务共同构成一个网络功能,提供类似网元的功能。

msinst:微服务实例,微服务的一个实体,如图1所示,microservice3微服务有四个实例msinst1,msinst2,msinst3,msinst4,这四个微服务实例具有完全相同的功能,一般是负载均衡处理业务。比如10000个用户接入,每个实例处理2500个。

container:容器,提供运行环境隔离,类比进程+进程运行的环境。方便部署安装,秒级启动等优势。如图1所示,msinst3微服务实例有三个容器container1,container2,container3。

传统的通信网元可被拆分为图1所示的多个微服务构成的功能的集合,以满足未来网络功能并根据场景进行灵活的编排、裁剪和部署,微服务的实体一般是一个容器化的应用,这也是paas平台能够独立部署的功能实体。

从图1中可以得知,一个微服务(microservice3)有4个实例(msinst1,msinst2,msinst3,msinst4)来提供一定的业务量,然而微服务的业务量不是恒定不变,是随着时间、用户数、节假日等变化而变化,必然会出现扩容和缩容的情况。恒定的资源和实例个数无法满足业务量的动态变化,这就需要paas平台根据实时业务量弹性的扩张或者收缩出若干个微服务实例,也就是容器化应用弹缩来满足业务需求。

第一实施例

如图2所示,本发明第一实施例提供一种应用容器的弹缩方法,其特征在于,所述方法包括步骤:

s11、根据预设数据库中存储的第一微服务的中间件容器获取到的第二微服务的性能指标数据、以及所述中间件容器的弹缩门限,确定第一微服务目标实例个数;其中,所述第一微服务实例包括编排的所述中间件容器和所述应用容器。

在本实施例中,中间件容器和第一微服务的应用容器被编排在第一微服务的实例中,这样,应用容器的生命周期和中间件容器的生命周期保持一致。

请参考图3所示,在本实施例中,所述中间件容器通过以下方式获取所述第二微服务的性能指标数据:

s110、根据注入的环境变量,获取所述第二微服务的采集地址、采集周期以及归一化处理策略。

在本实施例中,所述中间件容器和所述第一微服务的应用容器被编排在所述第一微服务的实例时,注入环境变量。作为示例地,注入的环境变量可如下所示:

第二微服务的ip和port:"sourceendpoint",取值为"ip:port",例如:"129.0.1.2:9300";

第二微服务提供的url:"url";

测量项名称(需要采集的测量项):"metric_{name}",其中name为具体的测量项;

测量项归一化处理策略:"metric_policy_{name}";

采集周期:"metric_period",单位为秒。

在本实施例中,根据注入的环境变量,获取的所述第二微服务的采集地址可以为“sourceendpoint+url+metric_{name}”,即第二微服务的ip和port、第二微服务提供的url以及测量项名称。

s111、根据所述第二微服务的采集地址和所述采集周期,采集所述第二微服务的性能指标数据。

s112、根据归一化处理策略,将采集到的所述第二微服务的性能指标数据进行归一化处理。

接上述示例地,假设测量项名称"metric_{name}"为"requesttimes";测量项归一化处理策略为"requesttimes/1000",把测量项数据按照最大处理能力归一化为一个百分比值。在采集到所述第二微服务的性能指标数据之后,根据测量项归一化处理策略"requesttimes/1000"进行归一化处理。

请参考图4所示,在本实施例中,所述中间件容器获取到的第二微服务的性能指标数据通过以下方式存储到所述预设数据库中:

根据所述中间件容器的配置文件和容器标签,获取所述中间件容器获取到的第二微服务的性能指标数据。

在本实施例中,所述中间件容器的配置文件是根据注入的环境变量生成的,容器标签为配置文件在容器中的路径。

作为示例地,中间件容器可通过以下方式镜像制作增加配置文件以及增加容器标签:

addcadvisortest_conf.json/var/cadvisortest_conf.json

labelio.cadvisor.metric.cadvisortest="/var/cadvisortest_conf.json"

其中,cadvisortest_conf.json为中间件容器对外提供的数据服务的配置文件,内容为空;

"io.cadvisor.metric.cadvisortest"容器标签,即配置文件在容器中的路径。

作为示例地,中间件容器运行后动态生成配置文件cadvisortest_conf.json中的内容,格式如下:

其中,

"endpoint",为中间件容器的对外提供服务的地址。

"metric_name",为测量项名称,从注入的环境变量获取,具体方法为前缀匹配,带有"metric_"的环境变量都认为为注入的测量项名称,

"polling_frequency"为采集周期,从注入的环境变量"metric_period"获取。

"regex":为正则匹配方式,为"http://{podip}:9091/epsbroker/lb/userkpi"返回值。

将所述性能指标数据打上标签后存储到所述预设数据库中。

作为示例地,通过以下方式将性能指标数据打上containerid标签后存储到cassandra数据库中:

在本实施例中,通过以下方式计算所述第一微服务目标实例个数:

所述第一微服务目标实例个数=采集到的性能指标数据的和÷弹缩门限目标值;其中,所述弹缩门限目标值=(最大弹缩门限+最小弹缩门限)÷2。

s12、根据所述第一微服务目标实例个数,弹缩所述中间件容器。

在本实施例中,所述根据所述第一微服务目标实例个数,弹缩所述中间件容器包括步骤:

若采集到的性能指标数据的平均值小于所述弹缩门限,则根据所述第一微服务目标实例个数,删除所述中间件容器;

若采集到的性能指标数据的平均值大于所述弹缩门限,则根据所述第一微服务目标实例个数,增加所述中间件容器。

进一步地,在删除或者增加中间件容器时,可设置惩罚时间,防止抖动。

为了更好地说明本实施例,以下结合图5进行说明:

图5中包括两个微服务,微服务app1和微服务app2。微服务app1需要根据微服务app2的性能指标数据实现动态弹缩。

微服务app1包含两个微服务实例app1-inst1,app1-inst2,分别运行在两个节点(node)上,两个节点用node1,node2标识。app1为微服务实例app1-inst1中的一个容器,与该容器app1对应的一个中间件容器broke1和中间件容器采集器cadvisor1。同样的,app2为微服务实例app1-inst2中的一个容器,与该容器app2对应的一个中间件容器broke2和中间件容器采集器cadvisor2。pmagent为集群性能汇聚器。cassandra为时序数据库。eps为微服务弹缩判决器。vnpm为微服务生命周期管理模块。

微服务app1根据微服务app2的性能指标数据实现动态弹缩的具体过程如下:

微服务app2负责测量项的统计。中间件容器broke1和broke2负责采集微服务app2的性能指标数据,并缓存。中间件容器采集器cadvisor1和cadvisor2负责对应地采集中间件容器broke1和broke2缓存的性能指标数据,并缓存。集群性能汇聚器pmagent负责汇聚中间件容器采集器cadvisor1和cadvisor2缓存的性能指标数据,打上containerid标签后存储到时序数据库cassandra中。微服务弹缩判决器eps根据时序数据库cassandra中存储的性能指标数据以及中间件容器的弹缩策略(弹缩门限),计算目标实例个数。微服务生命周期管理模块vnpm负责根据目标实例个数,修改实例个数。

本发明实施例的一种应用容器的弹缩方法,通过将中间件容器和应用容器绑定在同一个微服务中,根据采集到的其他微服务的性能指标数据,弹缩中间件容器,从而实现间接弹缩应用容器的目的。

第二实施例

如图6所示,本发明第二实施例提供一种微服务,所述微服务包括应用容器21、中间件容器22、微服务实例23、数据库24、确定模块25以及弹缩模块26;

在本实施例中,所述微服务实例23包括编排的中间件容器22和应用容器21。由于中间件容器22和应用容器21被编排在所述微服务实例23中,这样应用容器21的生命周期和中间件容器22的生命周期保持一致。

所述中间件容器22,用于获取其他微服务的性能指标数据。

请参考图7所示,在本实施例中,所述中间件容器22包括获取单元221、采集单元222和归一化处理单元223;

所述获取单元221,用于根据注入的环境变量,获取所述其他微服务的采集地址、采集周期以及归一化处理策略。

作为示例地,注入的环境变量可如下所示:

其他微服务的ip和port:"sourceendpoint",取值为"ip:port",例如:"129.0.1.2:9300";

其他微服务提供的url:"url";

测量项名称(需要采集的测量项):"metric_{name}",其中name为具体的测量项;

测量项归一化处理策略:"metric_policy_{name}";

采集周期:"metric_period",单位为秒。

在本实施例中,根据注入的环境变量,获取的其他微服务的采集地址可以为“sourceendpoint+url+metric_{name}”,即其他服务的ip和port、其他微服务提供的url以及测量项名称。

所述采集单元222,用于根据所述其他微服务的采集地址和所述采集周期,采集所述其他微服务的性能指标数据;

所述归一化处理单元223,用于根据归一化处理策略,将采集到的所述其他微服务的性能指标数据进行归一化处理。

假设测量项名称"metric_{name}"为"requesttimes";测量项归一化处理策略为"requesttimes/1000",把测量项数据按照最大处理能力归一化为一个百分比值。在采集到其他微服务的性能指标数据之后,根据测量项归一化处理策略"requesttimes/1000"进行归一化处理。

所述数据库24,用于存储所述中间件容器22获取到的其他微服务的性能指标数据。

请参考图8所示,在一种实施方式中,所述微服务还包括中间件容器采集器27和集群性能汇聚器28;

所述中间件容器采集器27,用于根据所述中间件容器22的配置文件和容器标签,获取所述中间件容器22获取到的其他微服务的性能指标数据;

在本实施例中,所述中间件容器22的配置文件是根据注入的环境变量生成的,容器标签为配置文件在容器中的路径。

作为示例地,中间件容器可通过以下方式镜像制作增加配置文件以及增加容器标签:

addcadvisortest_conf.json/var/cadvisortest_conf.json

labelio.cadvisor.metric.cadvisortest="/var/cadvisortest_conf.json"

其中,cadvisortest_conf.json为中间件容器对外提供的数据服务的配置文件,内容为空;

"io.cadvisor.metric.cadvisortest"容器标签,即配置文件在容器中的路径。

作为示例地,中间件容器运行后动态生成配置文件cadvisortest_conf.json中的内容,格式如下:

其中,

"endpoint",为中间件容器的对外提供服务的地址。

"metric_name",为测量项名称,从注入的环境变量获取,具体方法为前缀匹配,带有"metric_"的环境变量都认为为注入的测量项名称,

"polling_frequency"为采集周期,从注入的环境变量"metric_period"获取。

"regex":为正则匹配方式,为"http://{podip}:9091/epsbroker/lb/userkpi"返回值。

所述集群性能汇聚器28,用于将所述性能指标数据打上标签后存储到所述数据库24中。

作为示例地,通过以下方式将性能指标数据打上containerid标签后存储到cassandra数据库中:

所述确定模块25,用于根据所述数据库24中存储的所述中间件容器22获取到的其他微服务的性能指标数据、以及所述中间件容器22的弹缩门限,确定微服务目标实例个数。

所述弹缩模块26,用于根据所述微服务目标实例个数,弹缩所述中间件容器22。

请参考图9所示,在本实施例中,所述弹缩模块26包括删除单元261和增加单元262;

所述删除单元261,用于若采集到的性能指标数据的平均值小于所述弹缩门限,则根据所述微服务目标实例个数,删除所述中间件容器22;

所述增加单元262,用于若采集到的性能指标数据的平均值大于所述弹缩门限,则根据所述微服务目标实例个数,增加所述中间件容器22。

本发明实施例的一种微服务,通过将中间件容器和应用容器绑定在同一个微服务中,根据采集到的其他微服务的性能指标数据,弹缩中间件容器,从而实现间接弹缩应用容器的目的。

第三实施例

如图10所示,本发明第三实施例提供一种应用容器的弹缩装置,所应用容器的弹缩装置包括:存储器31、处理器32及存储在所述存储器31上并可在所述处理器32上运行的应用容器的弹缩程序,所述应用容器的弹缩程序被所述处理器32执行时,用于实现以下所述的应用容器的弹缩方法的步骤:

根据预设数据库中存储的第一微服务的中间件容器获取到的第二微服务的性能指标数据、以及所述中间件容器的弹缩门限,确定第一微服务目标实例个数;其中,所述第一微服务实例包括编排的所述中间件容器和所述应用容器;

根据所述第一微服务目标实例个数,弹缩所述中间件容器。

所述应用容器的弹缩程序被所述处理器32执行时,还用于实现以下所述的应用容器的弹缩方法的步骤:

根据注入的环境变量,获取所述第二微服务的采集地址、采集周期以及归一化处理策略;

根据所述第二微服务的采集地址和所述采集周期,采集所述第二微服务的性能指标数据;

根据归一化处理策略,将采集到的所述第二微服务的性能指标数据进行归一化处理。

所述应用容器的弹缩程序被所述处理器32执行时,还用于实现以下所述的应用容器的弹缩方法的步骤:

根据所述中间件容器的配置文件和容器标签,获取所述中间件容器获取到的第二微服务的性能指标数据;

将所述性能指标数据打上标签后存储到所述预设数据库中。

所述应用容器的弹缩程序被所述处理器32执行时,还用于实现以下所述的应用容器的弹缩方法的步骤:

所述第一微服务目标实例个数=采集到的性能指标数据的和÷弹缩门限目标值;其中,所述弹缩门限目标值=(最大弹缩门限+最小弹缩门限)÷2。

所述应用容器的弹缩程序被所述处理器32执行时,还用于实现以下所述的应用容器的弹缩方法的步骤:

若采集到的性能指标数据的平均值小于所述弹缩门限,则根据所述第一微服务目标实例个数,删除所述中间件容器;

若采集到的性能指标数据的平均值大于所述弹缩门限,则根据所述第一微服务目标实例个数,增加所述中间件容器。

本发明实施例的一种应用容器的弹缩装置,通过将中间件容器和应用容器绑定在同一个微服务中,根据采集到的其他微服务的性能指标数据,弹缩中间件容器,从而实现间接弹缩应用容器的目的。

第四实施例

本发明第四实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有应用容器的弹缩程序,所述应用容器的弹缩程序被处理器执行时实现第一实施例所述的应用容器的弹缩方法的步骤。

本发明实施例的计算机可读存储介质,通过将中间件容器和应用容器绑定在同一个微服务中,根据采集到的其他微服务的性能指标数据,弹缩中间件容器,从而实现间接弹缩应用容器的目的。

需要说明的是,上述装置实施例与方法实施例属于同一构思,其具体实现过程详见方法实施例,且方法实施例中的技术特征在装置实施例中均对应适用,这里不再赘述。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件来实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上参照附图说明了本发明的优选实施例,并非因此局限本发明的权利范围。本领域技术人员不脱离本发明的范围和实质,可以有多种变型方案实现本发明,比如作为一个实施例的特征可用于另一实施例而得到又一实施例。凡在运用本发明的技术构思之内所作的任何修改、等同替换和改进,均应在本发明的权利范围之内。

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