一种基于混合云的可靠应用分配分布式遗传算法的制作方法

文档序号:11432854阅读:253来源:国知局
一种基于混合云的可靠应用分配分布式遗传算法的制造方法与工艺

本发明涉及云技术技术领域,具体涉及一种基于混合云的可靠应用分配分布式遗传算法。



背景技术:

由于现有的以云计算为核心的集中式大数据处理技术已经不能完全满足日益庞大的物联网边缘设备所产生的海量数据处理要求,所以需要一个新的云架构,这种新的架构体系应该能快速响应边缘设备的需求,以减少云计算中心的数据传输及处理压力。混合云概念应运而生,其由多个单个的具有异构功能的小云组成,他们在避免产生大的网络延迟的同时能提供更快地数据计算。然而,这种云环境常常包含一些容易导致任务失败的不可靠的节点和链路。因此,具有有效性保障的应用调度是目前研究面临的挑战。应用程序需要一种配置算法能兼顾cpu、存储、网络和有效性以尽可能优化地使用资源,并保持很小的出错率。应用程序在基础设施网络中的优化调度是一个np-hard难度问题,因此,精确的算法用来解决此问题是不可扩展的。

遗传算法(geneticalgorithm)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。它是由美国的j.holland教授1975年首先提出,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。遗传算法的这些性质,已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。它是现代有关智能计算中的关键技术。



技术实现要素:

本发明的目的是为了解决现有技术中的上述缺陷,提供一种基于混合云的可靠应用分配分布式遗传算法,该算法创新应用程序分配方法,提升混合云环境中应用程序分配的可靠性,同时减小延迟。

本发明的目的可以通过采取如下技术方案达到:

一种基于混合云的可靠应用分配分布式遗传算法,所述算法包括:

s1、构建优化模型,该模型包括云环境模块和应用程序几何模块,过程如下:

s1-1、用一个实体设备集pms和一个实体链路集pls来构建云环境;

s1-2、将应用程序集合分配到云环境中,每个应用包括一个服务集和一个虚拟链路集vls;

s2、根据混合云环境的特点及应用分配所涉及内容定义约束条件,过程如下:

s2-1、准入控制:每个应用程序分配的副本数最多不超过δ:

|d|=δ,

其中,δ为某个应用程序的副本数量,d为某个应用程序所有副本组成的集合;

至少有一个对应的副本被分配时,一个应用程序才能被认为成功分配:

其中,a表示某个应用程序;d表示应用程序a的副本d;a为所有应用程序组成的集合,oa是一个变量,其定义为:如果应用程序a被成功分配则值为1,反之为0;gd,a是一个变量,其定义为:如果应用程序a的副本d被分配则值为1,反之为0;

s2-2、节点嵌入:只在副本被认为已成功放置时才为其分配节点资源:

其中,s表示某个服务,n表示某个实体设备pm,s为所有的服务组成的集合,n为所有的实体设备pm组成的集合,是一个变量,其定义为:如果节点n是应用程序a的副本d对应的服务s所占用的宿主则值为1,反之为0;ia,s是一个变量,其定义为:如果应用程序a对应的服务s被实例化则值为1,反之为0;

如果一个副本没有成功放置则不会有实例化的服务:

如果一个服务寄宿在一个节点上,那么cpu资源必须预先分配给该服务:

其中,是一个变量,其定义为:如果实体设备pmn运行应用程序a对应的服务s则值为1,反之为0;

对每个服务而言,其最多寄宿在一个节点上:

cpu和内存资源的保护约束:

其中,ωs为服务s要求的cpu资源,ωn为实体设备pmn的cpu容量,且

其中,us,n是一个变量,其定义为:如果服务s寄宿在实体设备pmn上则值为1,反之为0,γs为服务s的存储容量要求,γn为实体设备pmn的存储容量;

一旦一个服务被某个副本使用,此服务必须寄宿在某个节点上:

s2-3、链路嵌入:在每个节点上的多网络流约束可表示为:

其中,是一个变量,其定义为:如果服务s1与服务s2之间的虚拟链路部署在应用程序a的副本d对应的节点n1和n2之间的实体链路上则值为1,反之为0,e表示某个实体链路pl,e表示所有实体链路pl组成的集合;其中,

其中,是一个变量,其定义为:如果服务s1与服务s2之间的虚拟链路部署在应用程序a的副本d对应的实体链路e上则值为1,反之为0,是一个变量,其定义为:如果至少有一个应用程序a的副本通过部署在其上的服务s1与服务s2之间的虚拟链路使用实体链路e则值为1,反之为0;

每个链路使用的总带宽不能超过总连接能力:

其中,表示应用程序a所对应的两个服务s1,s2之间的带宽要求,be实体链路ple的带宽限制;

s2-4、可靠性感知约束:对于一个可用副本,它所使用的每一个单独组件必须是可用的,当一个组件被任意一个副本的服务或虚拟链路使用时即认为这个组件被此副本所使用:

其中,c表示某个实体组件,包括实体设备pm和实体链路pl,c为实体组件的集合,即c=n∪e,是一个变量,其定义为:实体组件c被应用程序a的副本d所使用则值为1,反之为0;

单个组件的状态描述为:

其中,χc表示实体组件c的状态;

一个组建的失败概率:

基层网络状态可以被描述为:

x=(χ1,χ2,...,χ|c|);

s3、定义目标函数,将算法所要解决的问题转换为最大化分配的应用数量:

pmn所使用的

pmn所使用的

ple所使用的

s4、定义染色体c,具体如下:

其中,a1,a2,...,aa,描述应用分配的顺序,其中aa表示应用程序集合a中的第a个应用程序;

描述如何给每个应用和每个副本分配服务的顺序,其中表示服务集合s中应用程序|a|的副本δ|a|所对应的第|sa|个服务;

被用于选择一个实体设备pm来运行一个给定应用的给定副本所对应的服务,其中表示实体设备pm集合n中运行应用程序|a|的副本δ|a|所对应的第|sa|个服务的实体设备pm;

s5、构建一个分布式池模型,一个集中池包含所有的遗传算法中的个体,任务将分布式地选择一个随机的个体集来进化成新的一代,在每一代中所有的个体都被存储在分布池中,每个任务可以检查结束条件,如有必要,任务可以计算下一代;

s6、译码,用一个译码算法将染色体转换成一个解空间的解,过程如下:

s6-1、将应用程序根据染色体的第一部分的值a1,a2,...,aa,进行排序,如果要分配一个应用,从第一个副本开始分配,如果这个副本已被分配,检查其可用性;

s6-2、按照染色体第二部分的值来确定一个给定的应用a的给定副本δ所对应的服务的排序;

s7、判断应用程序放置的数量或迭代次数是否达到规定值,过程如下:

s7-1、若已达到规定值,则跳到s13,算法结束得出对应解集合;

s7-2、若未达到规定值,则执行s8;

s8、计算个体的适应度;

s9、复制,复制过程采用精英策略,即根据约束条件和计算的适应度并按照一定比例选择一部分优秀个体复制形成下一代的子个体;

s10、选择交叉,交叉的两个个体,一个来自精英群体,另一个以随机方式从全部个体中产生;

s11、变异,变异操作在下一代种群中增加更多的新个体,即按照初始解空间生成相同的分布,以随机方式来选择一些个体加入新一代的解空间;

s12、返回步骤s7;

s13、结束,输出最优解。

进一步地,所述步骤s1-1中的云环境由5个实体设备pm和8个实体链路pl组成,实体链路pl按如下方式选择,首先创建一个最小生成树,之后随机添加边直到混合云中出现8个实体链路集pl;

每个实体链路pl拥有带宽为1,对每个实体设备pmn:ωn∈{0.5,2,10,50}并且γn∈{1,1.5,2},其中,ωn为实体设备pmn的cpu容量,γn为实体设备pmn的存储容量;

对每个实体链路pl和每个实体设备pm,失效概率从集合{0,0.025,0.05}中均匀分布的随机选择;

每个实体设备pm有一个有限的cpu容量ω和一个有限的存储容量γ,节点间的实体链路pl的特征是一个有限带宽b,假设实体链路pl是对称链路,节点和链路都有一个已知的故障概率,分别为pn、pl,假设故障发生时相互独立的,同时也定义一个节点和链路的可用率分别为

进一步地,所述步骤s1-2中假设服务是相对应用独立的,所以不同应用可以共享同一个服务,但是虚拟链路集是应用专有的;每个服务都有一个确定的cpu容量ω和存储容量γ要求,每个虚拟链路vl要求一定量的带宽β;假设虚拟链路使用的带宽是对称的,应用要求一个最小有效值r,以及可能存在一个最大副本数δa。

进一步地,所述步骤s2-2中定义cpu负载系数clf,即被要求的cpu和云环境中可用的cpu之比,以评估输入复杂性,cpu负载系数clf的值取0.1~1范围,且步长为0.1。

进一步地,所述步骤s2-3中定义每一个包含10个应用的应用组至少有一个服务,每个应用的服务都从一个由3个服务组成的服务集合中以60%的概率随机的选择,对每个服务s:ωs在[0.2,1]的区间随机选择,而γs在[0.75,1]的区间随机选择,其中ωs为服务s要求的cpu资源,γs为服务s的存储容量要求,对每个应用a,所有的服务都相互连接至少|sa|-1,且最大|sa|双向vls的带宽在[0.02,0.04]范围随机选择,其中,sa为应用程序a占用的所有服务组成的集合。

进一步地,所述步骤s2-4中每个应用程序要求的最小可用性(0%,90%,99%),交叉操作是统一交叉的,并且一个浮动字符串以突变概率0.05发生个体突变,每个个体只能发生一个突变。

进一步地,所述步骤s4中定义染色体c采用一个偏随机秘钥,偏随机秘钥染色体是一个在0到1之间取值的浮点数组,被用于染色体的解码阶段进行决策,同时,利用偏随机秘钥定义解码方法。

进一步地,所述步骤s5中分布式池模型框架基于evospace,同时取代原来的重新插入管理,增加容错机制并且使用一致的数据库,每个分布式的任务可以直接在数据库中分配一存储桶的个体,而其他的分布式任务不能选择这个被分配的存储桶,如果一个任务已经完成工作,便将已经分配过的旧的存储桶从数据库移除并且插入从下一代的存储桶中随机选择的新的个体。

进一步地,所述步骤s6-1中如果可保证的可用性比此应用要求的可用性要高,则成功地分配了这个应用并且将尝试分配下一个应用,如果这个可用性保证低于应用要求,在还有多余的应用的副本前提下将尝试配置一个新的副本,如果可用性保证低于应用要求并且没有副本剩余,那这个应用将不能被分配并且将从分配集中移除;

进一步地,所述步骤s6-2中,对于每个服务s,创建一个所有能运行服务s的pms的表l,以使得所有约束条件有效,同时必须检查每个pm的cpu和存储容量,以及相同副本的其它服务的带宽;只有服从于所有这些参数的pms才是列表l的元素,如果表l为空,便可以从分配集合中移除应用a,否则,如果|l|>0,算法对表l中的所有pms排序并选择在位置的pm,这个pm将作为副本δ对应服务s的主机,并且通过检测这个pm是否可以和其它服务建立网络连接分配所找到的带宽。

进一步地,所述步骤s10中设交叉概率为0.7,即子代以0.7的概率从精英父代中获得基因,以0.3的概率从一般个体中获得基因。否则选择第二个染色体。

本发明相对于现有技术具有如下的优点及效果:

1)将传统云环境中在远距离的云中心中处理的应用程序放置到靠近终端用户的边缘云中的可用设备(包括基站、开关、路由器甚至终端移动设备等等)处理,不仅减少了延迟同时也节约了带宽资源,减小了能耗;

2)传统的应用分配算法是不可伸缩的,且没有可用性保证,导致在传统云环境中,本发明提出一种用副本来增加应用程序可用性的方法,同时也采用分布式遗传算法定义了一个可伸缩算法来寻找一个好的配置方法。

3)相比已经提出的ilp(整数线性规划)方法在可用性要求提高时不可扩展的缺点,本发明提出的分布式遗传算法是基于soa(面向服务的架构)的可扩展的可调有效性的。

附图说明

图1是本发明公开的一种基于混合云的可靠应用分配分布式遗传算法流程图;

图2是evospace模型主要的组件和数据流;

图3是偏随机秘钥遗传算法交叉操作实例;

图4是当最小可用性要求为90%且应用程序最大副本数为1时,整数线性规划(ilp)最优解与测试算法的平均应用配置比对比;

图5是当最小可用性要求为0时,整数线性规划(ilp)与测试算法的平均执行时间对比;

图6是当最小可用性要求为90%且应用程序最大副本数为1时,整数线性规划(ilp)与测试算法的平均执行时间对比。

具体实施方式

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

实施例

附图1是本发明公开的一种基于混合云的可靠应用分配分布式遗传算法流程图,下面结合附图1,对本发明的步骤做进一步描述:

s1、构建优化模型,包括两个主要的模块:云环境模块和应用程序几何模块。

s1-1、用一个实体设备集pm和一个实体链路集pl来构建云环境。

在具体实施方式中,混合云环境由5个实体设备pm和8个实体链路pl组成。实体链路pl按如下方式选择,首先创建一个最小生成树,之后随机添加边直到混合云中出现8个实体链路pl。每个实体链路pl拥有带宽为1。对每个实体设备pmn:ωn∈{0.5,2,10,50}并且γn∈{1,1.5,2},其中,ωn为实体设备pmn的cpu容量,γn为实体设备pmn的存储容量。

对每个实体链路pl和每个实体设备pm,失效概率从集合{0,0.025,0.05}中均匀分布的随机选择。

每个实体设备pm有一个有限的cpu容量ω和一个有限的存储容量γ。节点间的实体链路pl的特征是一个有限带宽b。假设实体链路pl是对称链路。节点和链路都有一个已知的故障概率,分别为pn、pl。假设故障发生时相互独立的。同时也定义一个节点和链路的可用率分别为

s1-2、应用程序集合分配到云环境中,每个应用包括一个服务集和一个虚拟链路集。

假设服务是相对应用独立的,所以不同应用可以共享同一个服务,但是虚拟链路vl是应用专有的。每个服务都有一个确定的cpu容量ω和存储容量γ要求。另外,每个虚拟链路vl要求一定量的带宽β。假设虚拟链路使用的带宽是对称的,应用要求一个最小有效值r,以及可能存在一个最大副本数δa。

s2、根据混合云环境的特点及应用分配所涉及内容定义约束条件:

s2-1、准入控制:每个应用程序分配的副本数最多不超过δ:

|d|=δ,

其中,δ为某个应用程序的副本数量,d为某个应用程序所有副本组成的集合;

至少有一个对应的副本被分配时,一个应用程序才能被认为成功分配:

其中,a表示某个应用程序;d表示应用程序a的副本d;a为所有应用程序组成的集合,oa是一个变量,其定义为:如果应用程序a被成功分配则值为1,反之为0;gd,a是一个变量,其定义为:如果应用程序a的副本d被分配则值为1,反之为0。

s2-2、节点嵌入:只在副本被认为已成功放置时才为其分配节点资源:

其中,s表示某个服务,n表示某个实体设备pm,s为所有的服务组成的集合,n为所有的实体设备pm组成的集合,是一个变量,其定义为:如果节点n是应用程序a的副本d对应的服务s所占用的宿主则值为1,反之为0;ia,s是一个变量,其定义为:如果应用程序a对应的服务s被实例化则值为1,反之为0;

如果一个副本没有成功放置则不会有实例化的服务:

如果一个服务寄宿在一个节点上,那么cpu资源必须预先分配给该服务:

其中,是一个变量,其定义为:如果实体设备pmn运行应用程序a对应的服务s则值为1,反之为0,

对每个服务而言,其最多寄宿在一个节点上:

cpu和内存资源的保护约束:

其中,ωs为服务s要求的cpu资源,ωn为实体设备pmn的cpu容量,且

其中,us,n是一个变量,其定义为:如果服务s托管在实体设备pmn上则值为1,反之为0,γs为服务s的存储容量要求,γn为实体设备pmn的存储容量;

一旦一个服务被某个副本使用,此服务必须寄宿在某个节点上:

在具体实施方式中,定义cpu负载系数clf,即被要求的cpu和云环境中可用的cpu之比,以评估输入复杂性,cpu负载系数clf的值取0.1~1范围,且步长为0.1。对每个cpu负载系数clf值,创造100个随机应用例。

s2-3、链路嵌入:在每个节点上的多网络流约束(mcf)可表示为:

其中,是一个变量,其定义为:如果服务s1与服务s2之间的虚拟链路部署在应用程序a的副本d对应的节点n1和n2之间的实体链路上则值为1,反之为0,e表示某个实体链路pl,e表示所有实体链路pl组成的集合;其中,

其中,是一个变量,其定义为:如果服务s1与服务s2之间的虚拟链路部署在应用程序a的副本d对应的实体链路e上则值为1,反之为0,是一个变量,其定义为:如果至少有一个应用程序a的副本通过部署在其上的服务s1与服务s2之间的虚拟链路使用实体链路e则值为1,反之为0;

每个链路使用的总带宽不能超过总连接能力:

其中,表示应用程序a所对应的两个服务s1,s2之间的带宽要求,be实体链路ple的带宽限制。

在具体实施方式中,定义每一个包含10个应用的应用组至少有一个服务。每个应用的服务都从一个由3个服务组成的服务集合中以60%的概率随机的选择。对每个服务s:ωs在[0.2,1]的区间随机选择,而γs在[0.75,1]的区间随机选择,其中ωs为服务s要求的cpu资源,γs为服务s的存储容量要求。对每个应用a,所有的服务都相互连接至少|sa|-1,且最大|sa|双向vls的带宽在[0.02,0.04]范围随机选择,其中,sa为应用程序a占用的所有服务组成的集合。

s2-4、可靠性感知约束:对于一个可用副本,它所使用的每一个单独组件必须是可用的,当一个组件被任意一个副本的服务或虚拟链路使用时即认为这个组件被此副本所使用:

其中,c表示某个实体组件,包括实体设备pm和实体链路pl,c为实体组件的集合,即c=n∪e,是一个变量,其定义为:实体组件c被应用程序a的副本d所使用则值为1,反之为0,

单个组件的状态描述为:

其中,χc表示实体组件c的状态,

一个组建的失败概率:

基层网络状态可以被描述为:

x=(χ1,χ2,...,χ|c|)。

在具体实施方式中,每个应用程序要求的最小可用性(0%,90%,99%),ga的操作者是统一交叉的,并且一个浮动字符串突变概率0.05发生个体突变。每个个体只能发生一个突变。

s3、定义目标函数,将算法所要解决的问题转换为最大化放置的应用数量:

如果一个对应不同副本或应用的服务被配置在同一个实体设备pm上,或者相同的虚拟链路vl被配置在一个实体链路pl上,它们可以重复使用资源,因此,如果服务s被同一个应用配置到实体设备pmn上两次,就没有必要再次分配cpu和存储资源,只有当服务s因不同应用而被安置时才需分配更多的cpu资源;

pmn所使用的

pmn所使用的

ple所使用的

在具体实施方式中,设定结束条件:算法将在计算到100代时或者在计算到20时代出现相同解决方案时停止。

s4、定义染色体,具体如下:

其中,a1,a2,...,aa,描述应用分配的顺序,其中aa表示应用程序集合a中的第a个应用程序,

描述如何给每个应用和每个副本分配服务的顺序,其中表示服务集合s中应用程序|a|的副本δ|a|所对应的第|sa|个服务;

被用于选择一个实体设备pm来运行一个给定应用的给定副本所对应的服务,其中表示实体设备pm集合n中运行应用程序|a|的副本δ|a|所对应的第|sa|个服务的实体设备pm。

采用一个偏随机秘钥,相比于用布尔数组构成染色体,一个偏随机秘钥染色体是一个在0到1之间取值的浮点数组,被用于染色体的解码阶段进行决策;利用偏随机秘钥定义解码方法,避免创建无效的解决方案,以优化解空间。

s5、构建一个分布式池模型:一个集中池包含所有的遗传算法中的个体,任务将分布式地选择一个随机的个体集来进化成新的一代。在每一代中所有的个体都被存储在分布池中,每个任务可以检查结束条件,如有必要,任务可以计算下一代。

这个集中池模型框架是基于evospace(图2)的,但是取代原来的重新插入管理,本发明增加容错机制并且使用一致的数据库(mongodb,一个基于分布式文件存储的数据库)。每个分布式的任务可以直接在数据库中分配一存储桶的个体。而其他的分布式任务不能选择这个被分配的存储桶。如果一个任务已经完成了它的工作,便将已经分配过的旧的存储桶从数据库移除并且插入从下一代的存储桶中随机选择的新的个体。

s6、译码。用一个译码算法将染色体转换成一个解空间的解。

s6-1、将应用程序根据染色体的第一部分的值a1,a2,...,aa,进行排序,如果要配置一个应用,本算法从第一个副本开始分配,如果这个副本已被分配,检查其可用性以保证对应的应用程序有效性。

所述步骤s6-1中,如果可保证的可用性比此应用要求的可用性要高,则成功地分配了这个应用并且将尝试分配下一个应用。如果这个可用性保证低于应用要求,在还有多余的应用的副本前提下将尝试配置一个新的副本。如果可用性保证仍然低于应用要求并且没有副本剩余,那这个应用将不能被分配并且将从分配集中移除。

s6-2、按照染色体第二部分的值来确定一个给定的应用a的给定副本δ所对应的服务的排序。

所述步骤s6-2中,对于每个服务s,创建一个所有能运行服务s的pms的表l,以使得所有约束条件有效。同时必须检查每个pm的cpu和存储容量,以及相同副本的其它服务的带宽。只有服从于所有这些参数的pms才是列表l的元素。如果表l为空,便可以从配置集合中移除应用a,因为没有有效地方式来分配a。否则,如果|l|>0,算法对l中的所有pms排序并选择在位置的pm。这个pm将作为副本δ对应服务s的主机,并且通过检测这个pm是否可以和其它服务建立网络连接分配所找到的带宽(这时采用最短路径算法)。如最后一步所述,一个确定性的解码对于排序pms非常重要。pms必须有一个总的确定性的顺序并且是独立于配置资源的。本发明采用id对pms进行排序,其简单且具有确定性的,并且使最后一步大部分时间都处在一个好的随机顺序上。

s7、判断应用程序放置的数量或迭代次数是否达到规定值。

s7-1、若已达到规定值,则跳到s13,算法结束得出对应解集合。

s7-2、若未达到规定值,则执行s8。

s8、计算个体的适应度。

s9、复制。复制过程采用精英策略,即根据约束条件和计算的适应度并按照一定比例选择一部分优秀个体复制形成下一代的子个体。精英策略能有效地确保解的质量在进化过程中不断获得提升。

s10、选择交叉。交叉的两个个体,一个来自精英群体,另一个以随机方式从全部个体中产生。

所述步骤s10中,如图3所示,染色体1代表精英个体,染色体2表示一般个体。设交叉概率为0.7,即子代以0.7的概率从精英父代中获得基因,以0.3的概率从一般个体中获得基因。以掷硬币的方式决定从哪个染色体选择基因,头面朝上时选择第一个染色体,否则选择第二个染色体。模拟抛掷一枚偏斜的硬币来产生随机数,该硬币有0.7的概率头面朝上。当生成的随机数小于等于0.7时,从第一个染色体获得基因;当随机数大于0.7时,选择第二个染色体产生基因。这样产生的子代更接近于精英个体,可起到加速收敛的作用。

s11、变异。变异操作在下一代种群中增加更多的新个体,即按照初始解空间生成相同的分布,以随机方式来选择一些个体加入新一代的解空间,从而起到防止早熟的作用。

s12、返回步骤s7。

s13、结束,输出最优解。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

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