1.本发明属于物联网技术领域,具体涉及一种边缘环境下支持多物联网应用自适应卸载的方法。
背景技术:2.随着物联网(iot)和物联网设备的快速发展产生了各种各样的资源密集型物联网应用,如人脸识别、语音语义分析、交互式游戏和增强现实。由于处理能力、内存容量和电池容量方面的限制,大多数资源密集型物联网应用无法直接在物联网设备上运行。
3.计算卸载是解决物联网设备资源约束的有效方法。特别是,移动云计算(mcc)的提出,将所有或部分计算任务卸载到提供巨大存储和计算资源的云服务器上。更具体地说,应用以某种粒度进行划分,然后将其中一些计算密集型的任务卸载到云中执行,而其他简单的任务则在本地处理,以此来减少应用的响应时间。
4.然而,物联网设备与云服务器之间的距离相对较远,可能会导致显著的执行延迟。此外,大量数据传输可能会导致核心网络中的流量拥塞。为了解决上述问题,引入移动边缘计算(mec)。移动边缘提供了优于物联网设备的计算能力和存储资源,并且更接近物联网设备,可以显著减少延迟。
5.将密集型任务卸载到云服务器或者边缘服务器上确实能够减轻物联网设备的计算和存储压力。然而,应用种类的多样性以及mec中复杂变化的运行时环境,导致在mec中实现计算卸载十分困难。并且,如何解决计算卸载带来的昂贵开销也是不可忽视的问题。具体而言,存在以下挑战:
6.挑战1:使能机制。对于类型多样的物联网应用程序,如何设计一种具有通用性的方法,以将不同类型的强耦合的单片应用程序解耦为不同的功能模块,并支持按需计算卸载成为一个挑战。
7.挑战2:卸载决策。在mec中,计算资源分散在物联网设备、边缘服务器和云服务器上,不同计算平台的资源在性能上存在显著差异。不同应用在执行过程中会出现资源争抢的情况。在这样复杂和变化的网络环境下,如何得到一个合适的卸载策略,在同时满足每个应用的截止时间的情况下,最小化金钱开销是另一个挑战。
8.以往的研究大部分集中在解决android应用的计算卸载。dnn的发展让更多人将目标转移到如何卸载dnn。然而,这些研究都只能针对特定类型的应用,不具有通用性。并且,他们都是针对单个应用程序下的计算卸载问题,无法充分利用mec环境中分散变化的计算资源。
技术实现要素:9.本发明的目的在于提供一种边缘环境下支持多物联网应用自适应卸载的方法,该方法支持不同类型的应用在mec环境下的计算卸载,并最小化计算卸载产生的系统开销。
10.为实现上述目的,本发明采用的技术方案是:一种边缘环境下支持多物联网应用
自适应卸载的方法,包括:
11.构建符合支持按需计算卸载的通用程序结构的应用程序;
12.对于符合支持按需计算卸载的通用程序结构的应用程序,通过静态代码分析提取程序片段流程图,以给卸载方案的生成提供程序的内部流程信息;
13.通过基于遗传算法算子的多任务粒子群优化算法mpso-ga的卸载方案生成算法对周边mec环境和应用程序进行分析,得到最优的卸载方案;
14.应用程序根据卸载方案以服务为粒度进行计算卸载,在满足每个应用截止时间约束的情况下,最小化系统开销。
15.进一步地,通过支持不同类型应用程序分模块单独部署执行的设计模式来设计支持按需计算卸载的通用程序结构,所述设计模式满足:应用程序的每个模块能够在不同的计算节点上独立部署执行;模块能够确定要调用模块或者数据库所在的计算节点,以保证调用的有效性;被调用的模块能够接收调用模块的输入并返回正确的执行结果;
16.符合所述设计模式的应用程序中存在两种类型的服务:一种是纯服务:使用本地数据,无需调用其他服务;另一种是复合服务:依赖来自其他服务的数据,需要调用其他的服务;所述复合服务主要包含以下几种属性:
17.(1)key-value型数据params/result:被调用的服务service在执行过程中所需要的所有外部变量通过params传入,即服务中不再存在访问外部变量的语句;当服务需要对外部变量进行修改时,通过借助result传出;所述外部变量指在服务执行过程中访问到且在服务外部定义的变量;
18.(2)字符串seq:在应用程序中维护一个字符串seq,记录当前服务到主服务的一个调用路径;为了维护seq,当服务被调用时将seq以参数的形式传入,并将调用的服务的名称添加到seq中;
19.(3)invoke函数:复合服务通过invoke函数调用其他服务;invoke实现两个功能:a)控制转发:确定服务是本地执行还是远程调用,如果是远程调用需要在哪个计算节点调用该服务;b)数据传输:将调用的服务需要的所有参数序列化,并将返回的服务执行结果进行反序列化;
20.(4)call函数:服务通过call函数来与数据库建立连接;call函数通过要交互的数据库的名称来确定数据库的位置,并返回与数据库进行传输数据的连接通道,以确保服务与数据库之间的正常数据交互。
21.进一步地,所述卸载方案生成算法从网络模型、应用模型和性能模型三个方面来描述mec环境下的应用卸载问题,并通过mpso-ga算法对应用卸载问题进行求解;
22.网络环境包括一个云服务器cs、多个边缘服务器es以及多个物联网设备ds;将mec环境建模为一个图g=(n,e)包括计算节点的集合n={n1,n2,...,nw},并且使用集合e表示它们之间分连接;计算节点使用表示,其中ψi表示计算节点ni的计算能力;假设每个节点的存储容量能够满足相应的需求;ωi表示节点ni最多能够执行的任务数,其值等于节点的核数;表示使用计算节点ni每秒的计算成本;用e
i,j
表示ni和nj之间的连接,其与带宽v
i,j
以及最小链路延迟rtt
i,j
相关,并且使用表示节点ni和nj之间每秒的传输开销;
23.假设在卸载过程中有个将会执行θ时间的系统;系统中有多个来自物联网设备的应用程序a={a1,a2,...,ag},且应用程序ai以μi的时间间隔执行,则在θ时间段内每个应用程序执行了ξi=θ/μi次,并使用dli表示应用ai的截止时间;其中每个应用程序都符合所述通用程序结构;将应用程序建模为程序片段流程图flowi=(di,si,pi,qi);
24.为了计算应用程序的响应时间和金钱开销,构建一个对应的服务和数据库的卸载方案;用表示应用ai中服务的部署位置;对于每个程序片段其执行位置取决于所属服务的部署位置,即表示应用ai中数据库的部署位置;
25.在应用程序ai第λi次执行过程中,使用表示执行程序片段的任务达到计算节点的时刻;片段实际开始执行的时刻表示为的时刻表示为表示片段在节点上的排队等待时间,则有:
[0026][0027]
前驱片段将数据传给程序片段所产生的数据传入时间如下:
[0028][0029]
程序片段占用节点的时间由自身任务执行时间和执行中与不同数据库之间的数据传输时间组成,计算如下:
[0030][0031][0032]
的结束时刻即为开始时间加上在节点的占用时间,计算如下:
[0033][0034]
应用程序ai第λi次执行的开始时间即为执行主服务的第一个程序片段的任务到达时刻结束时间即为主服务最后一个片段执行完的时间则应用程序ai第λi次执行的响应时间计算如下:
[0035][0036]
程序片段在计算节点执行时候,占用节点产生的使用开销计算如下:
[0037][0038]
程序片段在执行中,传入数据和与数据库交互产生的传输开销计算如下:
[0039][0040]
服务被调用执行一次产生的金钱开销即为其包含的所有程序片段的使用开销和传输开销之和,计算如下:
[0041][0042]
应用ai执行一次的金钱开销mc(ai)即为所有服务的金钱开销与其被调用的次数乘积之和,计算如下:
[0043][0044]
所述卸载方案生成算法的优化目标是,得到一种服务和数据库的卸载方案,以实现在时间段θ内每个应用程序的响应时间在满足时间约束的条件下,最小化总的金钱开销;最终应用卸载问题的形式化定义如下:
[0045][0046]
进一步地,所述基于遗传算法算子的多任务粒子群优化算法的卸载方案生成算法的具体实现方法为:
[0047]
所述卸载方案生成算法的编码策略满足以下三个原则:
[0048]
完整性:问题空间中的每个候选解,都能编码成相应的编码粒子;
[0049]
非冗余:问题空间中的每个候选解,都只对应一种编码粒子;
[0050]
生存能力:编码空间中的每个编码粒子,都能对应问题空间中的候选解;
[0051]
所述编码策略使用粒子z表示mec环境中所有服务和数据库的成本驱动卸载的候选解决方案,其中第t次迭代的第i个粒子描述为(12):
[0052][0053][0054]
其中,p和q分别表示整个系统中服务和数据库的总量;公式(13)中,表示计算节点nj部署了第k个服务在第t次迭代的第i个粒子,表示计算节点nj部署第k-q个数据库在第t次迭代的第i个粒子;
[0055]
粒子的每个编码位代表对应服务或者数据库的部署位置,满足完备性原则;不同编码粒子分别代表不同卸载方案,问题空间的某个可行解只与编码空间的一个编码粒子对应,故满足非冗余性原则;然而,与粒子对应的一些候选解可能不满足截止日期约束,即导致某些应用程序响应时间超过时间限制,因此,不满足生存性原则;所有粒子分为两类:
[0056]
可行粒子:在粒子对应的卸载策略下,每个应用都满足截止日期约束;
[0057]
不可行粒子:在粒子对应的卸载策略下,至少存在某次应用的执行无法都满足截
止日期约束;
[0058]
为了对不同粒子进行比较,采用适应度函数进行衡量;适应度较小的粒子代表更好的候选解;由于某些解决方案可能使得应用的响应时间超过规定的截止日期,因此分为以下三种情况进行比较:
[0059]
情况1:一个粒子是可行解,另一个粒子是不可行解;此时选择可行解,其适应度函数定义为:
[0060][0061]
情况2:两个粒子都是不可行解;选择与截止时间差总和较小的粒子,因为该粒子更贴近可行解,在后续进化更有可能变为可行解;其适应度函数定义为:
[0062][0063]
情况3:两个粒子都是可行解;选择金钱开销较低的粒子,其适应度函数定义为:
[0064][0065]
进一步地,所述mpso-ga算法的实现流程如下:
[0066]
步骤s1:初始化mpso-ga算法的相关参数,包括初始种群大小δ,最大迭代次数iters
max
,最大惯性权重ε
max
,最小惯性权重ε
min
,加速度系数的起始值和结束值和然后,随机生成初始总;
[0067]
步骤s2:根据公式(14)~(16)计算每个粒子的适合度;选择每个粒子自身的最优解,并选择具有最佳适应度的粒子作为当前代中的全局最优解;
[0068]
步骤s3:根据公式(13)更新每个粒子,并重新计算每个新粒子的适合度;
[0069]
步骤s4:更新每个粒子的个人最佳粒子;如果存在比原始粒子更好的解,则将更新全局最优粒子;
[0070]
步骤s5:如果满足迭代停止条件,则结束算法;否则,返回步骤s3继续迭代。
[0071]
与现有技术相比,本发明具有以下有益效果:提供了一种边缘环境下支持多物联网应用自适应卸载的方法,该方法构建符合支持按需计算卸载的通用程序结构的应用程序,对于符合此结构的应用程序通过静态代码分析提取程序片段流程图;然后通过基于遗传算法算子的多任务粒子群优化算法的卸载方案生成算法来分析程序片段流程图和上下文来得到最优的卸载方案;最后,每个应用根据卸载方案以服务为粒度进行计算卸载,在满足每个应用截止时间约束的情况下,最小化开销。该方法支持不同类型应用程序以服务为粒度的计算卸载,且与其他经典方法相比,在满足截止时间约束的情况下可以节省2.11~17.51%的系统成本。
附图说明
[0072]
图1是本发明实施例的方法实现原理图;
[0073]
图2是本发明实施例中支持按需计算卸载的设计模式示意图;
[0074]
图3是本发明实施例中应用中包括的两种类型的服务;
[0075]
图4是本发明实施例中应用程序分析的示意图;
[0076]
图5是本发明实施例中卸载方案的编码粒子的示意图;
[0077]
图6是本发明实施例中变异操作的示意图;
[0078]
图7是本发明实施例中交叉操作的示意图;
[0079]
图8是本发明实施例中mpso-ga算法的实现流程图;
[0080]
图9是本发明实施例中不同场景下应用执行情况示意图;
[0081]
图10是本发明实施例中应用程序的响应时间对比示意图;
[0082]
图11是本发明实施例中应用场景示意图;
[0083]
图12是本发明实施例中简单网络环境中不同截止期约束下不同卸载策略的系统成本;
[0084]
图13是本发明实施例中复杂网络环境中不同截止期约束下不同卸载策略的系统成本。
具体实施方式
[0085]
下面结合附图及实施例对本发明做进一步说明。
[0086]
应该指出,以下详细说明都是示例性的,旨在对本技术提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本技术所属技术领域的普通技术人员通常理解的相同含义。
[0087]
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本技术的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0088]
如图1所示,本实施例提供了一种边缘环境下支持多物联网应用自适应卸载的方法,包括:
[0089]
1、构建符合支持按需计算卸载的通用程序结构的应用程序。
[0090]
2、对于符合支持按需计算卸载的通用程序结构的应用程序,通过静态代码分析提取程序片段流程图,以给卸载方案的生成提供程序的内部流程信息。
[0091]
3、通过基于遗传算法算子的多任务粒子群优化算法mpso-ga的卸载方案生成算法对周边mec环境和应用程序进行分析,得到最优的卸载方案。
[0092]
4、应用程序根据卸载方案以服务为粒度进行计算卸载,在满足每个应用截止时间约束的情况下,最小化系统开销。
[0093]
1方法概览
[0094]
图1显示了本方法的实现原理。对于图1中的节点,我们使用圆圈表示不同类型的操作数据,正方形表示算法。本方法主要包括两部分:上半部分表示卸载使能机制,下半部分表示卸载方案生成算法。
[0095]
卸载使能机制是使得应用程序能够进行计算卸载的关键部分,本方法设计了一种具有通用性的支持按需计算卸载的设计模式,并提出了对应的程序结构。符合该程序结构的应用,能够解耦为多个服务,不同的服务可以在不同计算节点(包括iot设备,云和边缘)
上分布式执行。应用程序在执行过程中根据配置文件确定具体的计算节点,从而实现程序的按需卸载。并且,应用通过静态代码分析可以得到程序片段流程图,以支持后续卸载策略的生成。
[0096]
卸载方案生成算法通过对周边mec环境和应用程序进行分析得到最优的卸载方案。本方法通过建立系统模型、应用模型和性能模型,对要优化的应用卸载问题进行形式化定义。并通过mpso-ga算法,生成一种服务和数据库的卸载方案,使得每个应用程序在满足截止约束的情况下,最小化整体的金钱开销。
[0097]
2卸载机制
[0098]
2.1设计模式
[0099]
由于传统的单片应用程序是无法拆分的,只能以整个应用为单位在物联网设备或者远程服务器上执行。为了实现应用程序按需进行计算卸载,本方法提出一种支持不同类型应用程序分模块单独部署执行的设计模式来设计支持按需计算卸载的通用程序结构,所述设计模式满足以下几点性质:
[0100]
(1)独立性:应用程序的每个模块能够在不同的计算节点上独立部署执行。
[0101]
(2)有效性:模块能够确定要调用模块或者数据库所在的计算节点,以保证调用的有效性。
[0102]
(3)正确性:被调用的模块能够接收调用模块的输入并返回正确的执行结果。
[0103]
本发明提出了一种应用程序设计模式,以满足上述属性,如图2所示。该模式将应用程序看作由多个松散耦合、协作互连的服务所组成的主服务。每个服务在执行过程不会影响其他的服务,以确保服务可以在计算节点上独立部署执行。服务必须通过控制器来调用服务或数据库。控制器负责确认服务或者数据库的部署位置,并支持数据的传输,从而确保服务能够正确有效进行。
[0104]
2.2程序结构
[0105]
在本方法中,我们提出了一种应用程序的程序结构,以满足图2的设计模式。符合设计模式的应用程序中存在两种类型的服务:一种是纯服务:该服务使用本地数据,无需调用其他服务(如图3(a));另一种是复合服务:依赖来自其他服务的数据,需要调用其他的服务(如图3(b))。服务主要包含以下几种属性:
[0106]
(1)params/result(key-value型数据):被调用的服务service在执行过程中所需要的所有外部变量通过params传入,即服务中不再存在访问外部变量的语句。当服务需要对外部变量进行修改时,通过借助result传出。其中,外部变量指在服务执行过程中访问到且在服务外部定义的变量。因此,每个服务都是无状态的,从而确保了服务的独立性。
[0107]
(2)seq(字符串类型):在应用程序中维护一个字符串seq,记录当前服务到主服务的一个调用路径。为了维护seq,当服务被调用时候将seq以参数的形式传入,并将调用的服务的名称添加到seq中。
[0108]
(3)invoke(函数):复合服务需通过invoke函数调用其他服务。invoke需要实现两个功能:(1)控制转发:确定服务是本地执行还是远程调用,如果是远程调用需要在哪个计算节点调用该服务。(2)数据传输:将调用的服务需要的所有参数序列化,以及将返回的服务执行结果进行反序列化。invoke函数的伪代码算法1所示:
[0109][0110]
首先,通过seq和servicename确定要调用的服务到主服务的调用路径,并根据调用路径从配置文件sp中确定service执行的位置address。sp存储有不同服务的部署位置(第2行)如果address等于local,则通过local函数直接本地执行service,并返回结果。注意,这里的local表示调用service时所在的计算节点。(第3~6行),如果address不等于local,则通过remote函数将servicei、parameteri和seq发送给远程节点上的代理程序,远程代理通过反射机制实现对servicei进行调用,最后返回结果。(第7~9行)
[0111]
(4)call(函数):服务应该通过call函数来与数据库建立连接。call函数通过要交互的数据库的名称来确定数据库的位置,并返回与数据库进行传输数据的连接通道,从而确保服务与数据库之间的正常数据交互。具体如算法2所示:
[0112][0113]
首先,数据库的部署位置host从配置文件dp中确定,根据databasenamei(第2行),dp存储有不同数据库部署位置的。然后,通过host和database从记录数据库名和密码的account中获取对应的user和password(第3~4行)、最后,建立数据传输通道,并将通道返回(第5~6行)。
[0114]
综上所述,”params
i”和”result
i”确保了服务的独立性,”seq”、”invoke”和”call”构成的控制器确保服务在执行过程中调用其他服务和数据库的有效性与正确性。
[0115]
2.3应用程序分析
[0116]
为了给后续卸载方案的生成提供程序的内部流程信息,需要对其进行分析。本发明通过静态代码分析提取程序片段流程图,其实现方法为:
[0117]
首先,需要确定卸载的内容,即应用程序中服务和数据库的数量,根据2.2中的规定,数据库由名称唯一标识,服务由其到主服务的调用路径唯一标识。其次,需要对卸载方案进行评估,本方法将服务进一步划分为具有原子性的程序片段,并记录片段之间的执行顺序。最终,本方法将应用程序建模为程序片段流程图,图4为应用程序分析的例子。对于图4中的线,实线表示服务拆解为程序片段,虚线表示服务内部的一个执行过程,点线表示应用中程序片段的实际执行流程。
[0118]
第i个应用程序的程序片段流程图使用符号flowi=(di,si,pi,qi)表示。其中,表示应用程序中数据库的集合,并使用表示数据库的名称。表示应用程序中服务的集合,并使用表示服务名称,表示从服务到主服务的一个调用路径,表示服务总共被调用的次数。由于存在服务调用,每个服务在实际执行过程中会被切分为多个串行的代码片段,即pi是记录实际程序片段执行的顺序的集合,集合中的程序片段可以重复。程序片段加入集合的顺序即为其在应用实际的执行顺序,对于相邻的两个片段,本方法将前一个片段称为后一个片段的前驱片段。qi表示记录程序片段和数据库之间关联情况的集合,其中表示在执行过程中与数据库之间存在交互。
[0119]
代码片段定义为三元组其中,表示传入片段的数据量大小;表示片段的任务量;表示片段执行过程中与数据库交互的数据总量,若没有交互则置0。(由于程序片段的具体信息预测不是本方法研究的内容,因此,需要应用开发人员以json格式提供)
[0120]
本方法通过静态代码技术分析源码中invoke函数和call函数出现的位置,便可以得到应用程序i的程序片段流程图flowi=(di,si,pi,qi),伪代码如算法3所示。
[0121]
算法3以第i个应用程序的源码和主服务的服务名作为输入,构建对应的程序片段流程图,步骤具体如下:首先,将主服务的信息赋值给并通过提取对应的语句集对应第31~32行。然后,向空集si中添加主服务并将di、pi和qi设置为空,对应第33行。最后,调用getflow()函数,以递归方式构建程序片段流程图,对应第34行。getflow()函数步骤对应1到30行,以和作为函数的输入,分别表示当前分析的服务和服务对应的语句集。第2行,使用pid记录当前程序片段的编号,初始置为1,并将当前程序片段加入和pi中。对于语句集中的每条语句做如下操作:获取语句中的关键词,对应第4行。若关键词中包含关键字
‘
invoke’,通过调用路径callseq判断被调用的服务是否之前出现过,如果有则调用次数加1,如果没有则加入si,并通过服务名称得到对应的语句集,对应第5-14行。第15行,更新pid,并将当前新的程序片段加入和pi中。第16行,对服务进
行getflow()递归。若语句中关键词中包含关键字
‘
call’,同理,先判断数据库是否已经在集合di中,如果没有则添加。然后,判断是否在集合qi中,如果没有则加入,对应第18-29行。
[0122][0123]
3卸载方案生成算法
[0124]
所述卸载方案生成算法从网络模型、应用模型和性能模型三个方面来描述mec环境下的应用卸载问题,网络模型描述“应用程序的网络环境”;应用程序模型定义“多个待卸载的符合本方法提出的程序结构的应用程序”;性能模型对应于“试图优化的内容”(分别在3.1、3.2和3.3介绍);然后,根据以上三种模型对本方法需要解决的问题进行了描述(3.4节);最终,通过mpso-ga算法对应用卸载问题进行求解(3.5节)。
[0125]
3.1网络模型
[0126]
网络环境包括一个云服务器(cs)、多个边缘服务器(es)以及多个物联网设备(ds).我们将mec环境建模为一个图g=(n,e)包括计算节点的集合n={n1,n2,...,nw},并且使用集合e表示他们之间分连接。计算节点使用表示,其中ψi表示计算节点ni的计算能力,通常使用cpu来衡量;由于本方法主要由于本研究的重点是寻求卸载方案,
我们假设每个节点的存储容量能够满足相应的需求;ωi表示节点ni最多能够执行的任务数,它的值等于节点的核数;表示使用计算节点ni每秒的计算成本。e
i,j
表示ni和nj之间的连接,其与带宽v
i,j
以及最小链路延迟rtt
i,j
相关,并且使用表示节点ni和nj之间每秒的传输开销.
[0127]
3.2应用建模
[0128]
假设在卸载过程中有个将会执行θ时间的系统。系统中有多个来自物联网设备的应用a={a1,a2,...,ag},且应用ai以μi的时间间隔执行,因此在θ时间段内每个应用执行了ξi=θ/μi次,并使用dli表示应用ai的截止时间。其中每个应用都符合本方法提出的程序结构。根据2.3,将应用建模为程序片段流程图flowi=(di,si,pi,qi)。
[0129]
3.3性能建模
[0130]
为了计算应用程序的响应时间和金钱开销,必须指定一个对应的服务和数据库的卸载方案。表示应用ai中服务的部署位置。对于每个程序片段而言,其执行位置取决于所属服务的部署位置,即表示应用ai中数据库的部署位置。
[0131]
3.3.1应用程序的响应时间
[0132]
在应用程序ai第λi次执行过程中,使用表示执行程序片段的任务达到计算节点的时刻。片段实际开始执行的时刻表示为计算节点的时刻。片段实际开始执行的时刻表示为表示片段在节点上的排队等待时间,则有:
[0133][0134]
前驱片段将数据传给程序片段所产生的数据传入时间如下:
[0135][0136]
程序片段占用节点的时间由自身任务执行时间和执行中与不同数据库之间的数据传输时间组成,计算如下:
[0137][0138][0139]
的结束时刻即为开始时间加上在节点的占用时间,计算如下:
[0140][0141]
应用程序ai第λi次执行的开始时间即为执行主服务的第一个程序片段的任务到
达时刻结束时间即为主服务最后一个片段执行完的时间因此,应用程序ai第λi次执行的响应时间计算如下:
[0142][0143]
3.3.2应用程序的金钱开销
[0144]
程序片段在计算节点执行时候,占用节点产生的使用开销计算如下:
[0145][0146]
程序片段在执行中,传入数据和与数据库交互产生的传输开销计算如下:
[0147][0148]
服务被调用执行一次产生的金钱开销即为其包含的所有程序片段的使用开销和传输开销之和,计算如下:
[0149][0150]
应用ai执行一次的金钱开销mc(ai)即为所有服务的金钱开销与其被调用的次数乘积之和,计算如下:
[0151][0152]
3.4问题表述
[0153]
本方法最终的优化目标是,得到一种服务和数据库的卸载方案,以实现在时间段θ内每个应用程序的响应时间在满足时间约束的条件下,最小化总的金钱开销。最终应用卸载问题的形式化定义如下:
[0154][0155]
3.5mpso-ga算法
[0156]
对于卸载方案sp和dp,旨在探索从服务和数据库到不同计算节点的最佳映射,在满足每个应用程序的截止时间约束下,最小化总的金钱开销。探索从服务和数据库到计算节点的最佳映射已被证明是一个np难问题。传统的pso已经广泛应用于求解连续优化问题,而服务和数据库到计算节点的最佳映射是个离散问题,需要一种新的编码方法。另外,为了避免传统粒子群算法的早熟收敛,需要引入合适的粒子更新策略。本方法针对传统pso算法的上述不足,提出了mpso-ga算法来探索mec环境中多任务的最优卸载策略。基于mpso-ga的应用卸载策略描述如下。
[0157]
(1)问题编码
[0158]
良好的编码策略可以提高基于pso算法的搜索效率和性能,本算法的编码策略满足以下三个原则:
[0159]
定义1(完整性):问题空间中的每个候选解,都能编码成相应的编码粒子。
[0160]
定义2(非冗余):问题空间中的每个候选解,都只对应一种编码粒子。
[0161]
定义3(生存能力):编码空间中的每个编码粒子,都能对应问题空间中的候选解。
[0162]
通常的编码策略难以同时满足这三个原则。本方法使用粒子z表示mec环境中所有服务和数据库的成本驱动卸载的候选解决方案,其中第t次迭代的第i个粒子描述为(12):
[0163][0164][0165]
其中,p和q分别表示整个系统中服务和数据库的总量。公式(13)中,表示计算节点nj部署了第k个服务在第t次迭代的第i个粒子,表示计算节点nj部署第k-q个数据库在第t次迭代的第i个粒子。
[0166]
性质1:该编码策略能够同时满足完整性和非冗余,但是不一定能满足生存性。
[0167]
粒子的每个编码位代表对应服务或者数据库的部署位置,满足完备性原则。不同编码粒子分别代表不同卸载方案,问题空间的某个可行解只与编码空间的一个编码粒子对应,因此,满足非冗余性原则。然而,与粒子对应的一些候选解可能不满足截止日期约束,即导致某些应用程序响应时间超过时间限制,因此,不满足生存性原则。在本方法中,所有粒子可分为两类:可行粒子和不可行粒子,其定义如下。
[0168]
定义4:(可行粒子):在粒子对应的卸载策略下,每个应用都能够满足截止日期约束。
[0169]
定义5:(不可行粒子):在粒子对应的卸载策略下,至少存在某次应用的执行无法都满足截止日期约束。
[0170]
(2)适应度函数
[0171]
为了对不同粒子进行比较,需要用适应度函数进行衡量。通常,适应度较小的粒子代表更好的候选解。这项工作追求得到一种卸载方案,在最小化总的金钱开销下,同时满足每个应用的截止日期约束。因此,金钱开销较低的粒子可以被视为更好的解决方案。由于某些解决方案可能使得应用的响应时间超过规定的截止日期,我们分为以下三种情况进行比较:
[0172]
情况1:一个粒子是可行解,另一个粒子是不可行解。此时选择可行解,其适应度函数定义为:
[0173][0174]
情况2:两个粒子都是不可行解。选择与截止时间差总和较小的粒子,因为该粒子更贴近可行解,在后续进化更有可能变为可行解。其适应度函数定义为:
[0175][0176]
情况3:两个粒子都是可行解。选择金钱开销较低的粒子,其适应度函数定义为:
[0177][0178]
(3)更新策略:
[0179]
传统粒子群优化有三个主要部分:惯性、个体认知和社会认知。每个粒子的迭代更新受其个人最佳位置和当前代的全局最佳位置的影响。过早陷入局部最优是粒子群优化算法的一个主要缺陷。为了提高算法的搜索能力,本方法引入遗传算法的交叉算子和变异算子进行粒子更新。第t+1次迭代中的第i个粒子的迭代更新如公式(17)所示:
[0180][0181]
其中,fu()表示变异操作,fg()和f
p
()表示交叉操作,ε是惯性重量。σ
p
和σg是加速度系数。φu、φ
p
和φg是区间[0,1]上的随机数。
[0182]
对于惯性部分,粒子的速度定义为:
[0183][0184]
其中mu()表示变异算子,ε表示发生变异的阈值。当随机数φu小于ε时,执行变异操作。首先随机选取粒子中的一个位置ind1,然后随机选取一个计算节点替换原先ind1上映射的计算节点。图6描绘了变异算子,其随机选择位置为ind1,并将映射的计算节点从2改为3。
[0185]
性质2:变异算子可以将粒子从可行变为不可行,反之亦然。
[0186]
粒子更新中的个体认知和社会认知公式如下:
[0187][0188][0189]
其中,c
p
()表示交叉操作,表示第t次迭代中的第i个个体的最优历史粒子,gbest
t
表示在第t次迭代中全部粒子中的最优历史粒子,σ
p
(σg)表示个体交叉(社会交叉)的阈值。当随机数φ
p
(φg)小于阈值σ
p
(σg)时执行交叉操作。图7描绘了交叉操作的例子,首先随机选择旧粒子中的位置ind1和ind2,然后用并用(或gbest
t
)中的相同位置替换对旧粒子中的位置进行替换,最终得到新的粒子。
[0190]
性质3:一个粒子经过交叉算子后可以从不可行变为可行,反之亦然。
[0191]
(4)粒子到卸载结果的映射
[0192]
对于一个粒子,需要计算其对应卸载方案下每个应用的执行时间,以及总的金钱开销。因此,本方法提出一种评估算法将粒子映射到卸载结果。评估算法的思路是通过模拟程序片段的实际执行过程,计算出每个程序片段的开始执行时刻和执行完成时刻,从而计算该调度方案下每个应用的响应时间以及总的金钱开销。
[0193]
先设定一个变量curtime,表示当前时间,初始化为0。输入的服务和数据库卸载方案分别为sp和dp。使用符号λi表示应用程序当前执行的次数,初始值为1。给每个程序片段定义三个属性和分别表示执行片段的任务到达时刻,片段执行完成的时刻和片段的剩余执行时间。其初始化如下:
[0194][0195]
然后,通过3.2.3中的公式(6)和(10)可以计算得到每个应用程序执行的响应时间和金钱开销。算法4介绍了评估算法的主要步骤:
[0196][0197]
算法四以卸载方案以及应用程序流程图作为输入,最终得到每个应用程序的执行时间以及系统总的金钱开销,具体步骤如下:
[0198]
步骤1(2~10行):填充通道。根据卸载方案,按顺序把每个程序片段加入到计算节
点上,直到该计算节点没有存在空的通道(用ni.empty表示节点ni剩余的通道数,其初始值为ωi)。放入通道的程序片段需满足执行该程序片段的任务在当前时刻已经到达计算节点的条件,即
[0199]
步骤2(12~18行):寻找最小时间片。首先遍历每个计算节点上正在执行的程序片段,找出其中最短的剩余执行时间将其赋值给时间片slice。然后,将当前时间curtime加上slice,表示经过了长度为slice的时间。
[0200]
步骤3(20~34行):计算程序片段的剩余时间。将正在执行的程序片段的剩余时间减去时间片slice,表示该执行了长度为slice的时间。当剩余时间为0,表示该程序片段已经执行完成,将其结束时间置为curtime。然后,将该片段从通道移除,并将该节点的空闲通道数ni.empty加1。如果不是最后一个片段,则从pi中取出下一个要执行的程序片段并且其任务到达的时刻为curtime和数据传入的时间之和。如果该程序片段是pi的最后一个片段,并且当前执行次数小于总的执行次数,说明应用程序执行结束进入下一次执行。下一次执行的第一个程序片段的取理想触发时间和当前时间中的最大值。
[0201]
重复以上步骤,直到每个应用程序ai都执行了ξi次,最后,通过公式(6)和(10)可以计算得到每个应用程序执行的响应时间和金钱开销mc(ai)。
[0202]
(5)参数设置
[0203]
惯性权重ε可能会极大地影响pso算法的搜索能力和收敛性。ε值越大,全局搜索能力越强,而ε值越小,局部搜索能力越强。经典的惯性权重调整方法如下:
[0204][0205]
其中ε
max
和ε
min
分别表示初始化ε设置的最大值和最小值,iters
cur
和iters
max
分别表示当前算法迭代次数和初始化设定的最大迭代次数。
[0206]
然而经典的更新策略中ε的变化仅与迭代次数有关,并不能很好的适应多任务下最小金钱开销的非线性特性,因此,本方法设计了一种基于当前种群粒子的优劣而自适应调整的离散调整方法来调整惯性权重ε,如下所示:
[0207][0208][0209]
其中表示当前第t-1次迭代的第i个粒子和第t-1次迭代的全局最优解gbest
t-1
之间的差异,τi为astatistical factor,当τj值为1时候,表示和gbest
t-1
在第j
个编码上所映射的计算节点相同,反之则值为0。因此,该算法的搜索能力可以根据当前和全局最优粒子之间的差异进行自适应调整。
[0210]
此外,算法的2个认知因子σ
p
和σg采用线性增减策略进行设置[24],类似于公式(22)。和分别表示参数σ
p
和σg迭代的初始值,和分别表示参数σ
p
和σg迭代的最终值。
[0211]
(6)mpso-ga算法流程
[0212]
图8描绘了所提出的mpso-ga算法的流程图,其实现过程如下:
[0213]
步骤1:初始化mpso-ga的相关参数,包括初始种群大小δ,最大迭代次数iters
max
,最大惯性权重ε
max
,最小惯性权重ε
min
,加速度系数的起始值和结束值和接下来,随机生成初始总体。
[0214]
步骤2:根据公式(14)~(16)等式计算每个粒子的适合度。选择每个粒子自身的最优解,并选择具有最佳适应度的粒子作为当前代中的全局最优解。
[0215]
步骤3:根据公式(13)更新每个粒子,并重新计算每个新粒子的适合度。
[0216]
步骤4:更新每个粒子的个人最佳粒子。如果存在比原始粒子更好的解,则更新全局最优粒子。
[0217]
步骤5:如果满足迭代停止条件,则结束算法。否则,返回步骤s3继续迭代。
[0218]
4方法的评估
[0219]
在本部分中,我们从两个方面评估本方法。一方面,实际场景中的实验验证了本方法的有效性(4.1部分)。另一方面,通过大量的仿真实验验证了mpso-ga算法在解决多任务、多服务器卸载问题上的优越性(4.2部分)。
[0220]
4.1有效性验证
[0221]
为了验证本方法的有效性,根据以下研究问题(rq)在真实场景中进行了实验。
[0222]
rq1本方法在提高应用程序性能方面的效果如何?(4.1.2部分)
[0223]
rq2本方法产生的额外执行开销是否在可接受范围内?(4.1.3部分)
[0224]
4.1.1实验设置
[0225]
(1)应用:我们实现了三个符合本文提出的程序结构的真实世界应用,包括车牌识别应用(下文称为lpra)、目标检测应用(下文简称为tda)和人脸识别应用(以下称为fra)。此外,lpra是一个android应用程序,tda和fra是基于dnn的应用程序,源代码可以在我们的github项目1中找到。
[0226]
表1:不同场景下的物联网设备上下文环境
[0227] 场景1场景2场景3e1-v=1.0mb/s rtt=70msv=1.5mb/s rtt=40mse2
‑‑
v=1.0mb/s rtt=70msc1v=0.6mb/s rtt=100msv=0.6mb/s rtt=100msv=0.6mb/s rtt=100ms
[0228]
(2)网络环境:我们的网络环境包括四个计算节点:一个物联网设备(d1)和三个远程服务器(e1、e2和c1)。如表1所示,我们设计了三个网络场景,其中场景1仅连接到c1,场景2连接到e1和c1,场景3连接到所有远程服务器。表3中的每个元表示数据传输速率v和最小链路延迟rtt,较小的rtt和较高的v表示更好的通信容量。我们使用网络仿真工具dummynet
来控制可用带宽。
[0229]
(3)设备:我们使用工作站模拟边缘服务器(e1和e2)和云服务器(c1),其中e1配备2.5ghz、2核cpu和4gb ram,e2配备3.0ghz、4核cpu和8gb ram,c1配备3.9ghz 8核cpu和16gb ram。此外,我们还使用了两个低性能设备作为物联网设备(d1),华为荣誉mya-al10(1.4ghz,4核cpu和2gb ram)和树莓派pi 3b+(1.4ghz4核cpu,1gb ram)。lpra在mya-al10上运行。tda和fra在树莓派pi 3b+上运行。
[0230]
(3)比较方法为了衡量本方法的有效性,我们讨论了应用程序的三种不同状态:(i)无法支持计算卸载的原始应用程序(以下称为oa),仅在物联网设备上执行。(ii)重构后的应用程序在iot设备(以下称为ral)上本地执行,该设备已从oa重构以满足本文提出的程序结构。(iii)根据mpso-ga生成的卸载方案卸载重新配置的应用程序(以下称为rao),该卸载方案可以使用周围的服务器。本着严谨的原则,我们将此过程重复20次,以避免不必要的错误。
[0231]
4.1.2rq1:本方法带来的性能改进
[0232]
为了衡量本方法的性能改进,根据mpso-ga获得的卸载方案,我们在三种不同的场景中执行了重构的应用程序(包括lpra、tda和fra),实验结果如图9所示。
[0233]
根据结果,与oa相比,计算卸载后这些应用程序的响应时间有效缩短,其中lpra提高了
[0234]
3.97-19.38%,tda提高了29.3-46.27%,fra提高了23.4844.64%。执行神经网络模型通常需要很大的计算能力,因此将这些计算密集型任务卸载到性能更高的服务器上可能会带来出色的性能改进。lpra是一种基于k均值的车牌识别应用程序。通过权衡lpra中任务的数据传输时间和执行时间,lpra中的大多数任务更适合在本地执行,尤其是在较差的网络环境中。因此,计算卸载给lpra带来的性能改进不够显著。
[0235]
同时,在不同的网络环境中,应用程序的性能改进也各不相同。在场景3中,周围网络资源更丰富,通信能力更强,性能改善明显优于其他情况。在仅连接到云服务的场景1中,大多数任务仍在本地执行,因此性能只能提高3.97-29.3%。
[0236]
总的来说,本方法可以在一定程度上为不同的场景和应用程序提供性能改进。
[0237]
4.1.3rq2:本方法产生的额外执行开销
[0238]
与原始应用程序相比,本文提出的结构产生了额外的执行开销,该开销由三个主要部分组成:(1)在调用服务之前和之后需要打包外部变量或结果。(2)被调用的服务或数据库需要由控制器(invoke或call函数)判断以执行。(3)控制器与服务或数据库交互产生的通信和响应时间。为了测量额外的开销,使用不同类型应用程序的oa作为基准。
[0239]
ral和oa之间的差异表明本方法的额外开销。rao和oa之间的差异表明了性能改进效果,其中rao在rq1的不同场景下取平均响应时间。实验结果如图10所示。
[0240]
从实验结果来看,tda和lpra在执行过程中产生了更多的额外开销。相比之下,fra的开销可以忽略不计。这一结果的一个重要原因是,与tda和lpra相比,fra具有更简单的结构,包含更少的服务和数据库。卸载的额外开销主要是在调用服务或数据库时产生的。应用程序中包含的服务或数据库越多,所需的额外开销就越多。
[0241]
此外,通过比较图10中的两条虚线,我们可以看到,与计算卸载的平均优化时间增益相比,额外的执行开销可以忽略不计,特别是对于具有更复杂任务的应用程序。
[0242]
总的来说,本方法产生的额外开销在可接受的范围内。
[0243]
4.2优越性验证
[0244]
为了验证mpso-ga算法的优越性,针对以下研究问题(rq)进行了广泛的模拟实验:
[0245]
rq3:不同应用之间互相独立执行的简单网络环境下,mpso-ga是否能够得到最优的卸载方案。
[0246]
rq4:不同应用在执行过程中存在资源争抢,网络环境更加复杂的情况下,mpso-ga是否能够得到最优的卸载方案。
[0247]
值得注意的是,模拟实验中mpso-ga的参数初始化,其中δ=100、iters
max
=1000、ε
max
=0.8、ε
min
=0.2、和
[0248]
4.2.1实验设置
[0249]
(1)应用:与4.1部分相同,应用类型包括lpra、tda和fra。文献中一般假设任务执行时间与分配的计算资源量呈线性关系,数据传输时间与网络通信能力的关系是相同的。因此,通过收集不同性能设备上的执行时间和数据传输时间,预先得到应用程序中不同程序段的计算工作量和数据传输大小,然后使用最小二乘线性回归进行计算。此外,每种类型的应用程序都需要指定一个期限约束来检查卸载方案是否可行。截止日期限制设置如下。
[0250]
dl1={3.1,3.4,3.8,4.2}dl2={4,5.1,6.3,7.6}dl3={2.6,3,3.5,4.2}
[0251]
其中,dl1、dl2和dl3分别是车牌识别、目标检测和人脸识别的截止日期,值越小说明对时间的约束越严格。
[0252]
表2设备的相关配置
[0253][0254][0255]
表3网络连接情况
[0256][0257]
(2)网络环境:本部分,我们设计了一个应用场景,如图10所示。场景下的云边环境总共包含9台物联网设备(n1~n9),6台边缘服务器(n
10
~n
15
),以及1个云服务器(n
16
)。不同
类型设备的配置、开销和执行应用程序的情况具体见表2,应用只在物联网设备上触发执行,表2中的执行频率表示不同应用每隔一段时间会自动执行一次。每个物联网设备与其相邻的两个边缘服务器相连,相邻的边缘服务器互连,并且所有的物联网设备和边缘服务器都连接云服务器,如图10所示。不同类型的计算节点之间的具体网络情况和开销如表2所示。
[0258]
(3)对比算法:为了对mpso-ga在mec环境下的性能进行比较和评估,引入以下三种方法:(i)传统的pso无法直接用于本文的离散问题,所以通过取余数的方式,将离散问题转化为连续问题,适应度函数同psoga。(ii)ga使用一种二进制问题编码方法,其维数等于服务器的数量,并且适应度函数同psoga。(iii)idea:通过保存实验过程中的最优解,以此尽可能接近真实最优解。在实验中,相同配置的卸载结果可能不同。因此,通过30次重复实验,取其中可行解的平均值来测量系统开销。
[0259]
4.2.2rq3在不同截止时间约束下的应用独立执行情况
[0260]
为了确保应用之间不会发生资源争抢,将不同类型的应用在不同时间段内分别执行。假设在0~180s时间段内,在n1,n2和n3上执行车牌识别应用;在180~240s时间段内,在n4,n5和n6上执行目标检测应用;在240~360s时间段内,在n7,n8和n9上执行人脸识别应用。不同类型应用在不同截止时间约束情况下的实验结果分别对应图12(a),(b)和(c)。图中的正半轴表示方案下的可行解的系统开销,负半轴表示方案下每个应用的响应时间与时间约束的差值之和,当不存在可行解时。折线表示30次重复实验下,算法生成可行解的比率。
[0261]
从实验结果来看,通过使用mpso-ga、pso和ga,系统开销随着截止日期的变宽而降低。这是因为基于元启发式算法的策略在截止日期不严格时倾向于为低开销的服务器分配更多的任务。从图12(a)和(b)可以看出,当截止日期最为严格时候,可能存在都找不到可行解的情况。结果还表明,不同类型应用的系统开销是不同的。这是因为它们由不同的服务组成,服务之间有各种数据传输。例如,tda中包含更多复杂的服务,为了达到截止时间,必须将大部分任务卸载到高性能的服务器上,因此需要更多的计算开销。
[0262]
无论是从节省系统开销,与截止时间差还是可行解的比例来看,mpso-ga取得的效果都优于pso和ga,这是因为mpso-ga可以根据当前情况自适应调整搜索能力,并从全局角度进行迭代进化。而pso算法存在局部搜索能力较差,搜索精度不够高的问题,导致很难搜到更优解。遗传算法的性能受截止期约束的影响很大,这是因为它的搜索范围在每次迭代时都是局部的。总而言之,mpso-ga与pso和ga相比,分别节省了约3.95%~11.56%和2.11%~17.51%的系统开销。
[0263]
4.2.3rq4在不同截止时间约束下的应用同时执行情况
[0264]
为了研究psoga在更加复杂的网络环境下的决策效果,物联网设备n1~n9上的每个应用在0s时刻同时触发执行,并执行360s。实验结果如图13所示:
[0265]
根据实验结果来看,在最严格的两个时间约束条件下,三种算法都无法得到可行解。并且,pso和ga只有在最宽松的时间约束下才有可行解。不同于rq3,不同应用程序应用在执行过程中存在资源争抢,导致某些应用的响应时间无法满足截止时间,因此,尽管在第二严格的时间约束下,也都没有可行解。但是,通过比较可以发现,mpso-ga在这两种情况下生成的方案能使得整体应用响应时间更贴近时间约束。
[0266]
与此同时,随着应用数量的增加,需要确定的服务和数据库的数量大幅增加,问题空间的大小呈指数级增长。因此,该算法获得合适卸载解的难度也大大增加。尽管如此,mpso-ga依旧能够在第三严格时间约束下获得可行解。
[0267]
本方法能够支持mec中各种应用程序的计算卸载以及多任务和多服务器卸载决策。实验结果表明,本方法可以显著提高应用程序在不同场景下的性能,并且额外的执行开销是可以接受的。此外,通过仿真对比实验,证明了本方法在越严格时间约束条件下,更有机会获得可行解;并且,在更宽松的时间约束条件下,得到的可行解开销最小。
[0268]
以上所述,仅是本发明的较佳实施例而已,并非是对本发明作其它形式的限制,任何熟悉本专业的技术人员可能利用上述揭示的技术内容加以变更或改型为等同变化的等效实施例。但是凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与改型,仍属于本发明技术方案的保护范围。