1.本发明属于移动通信技术领域,涉及一种基于雾计算的车联网中高可靠的任务协同计算方法。
背景技术:2.随着专用无线短距离通讯技术(dsrc)在车联网(iov)中的应用越来越广,这使得iov中配备车载单元(obu)的车辆能够利用车对车(v2v)和车对基础设施(v2i)技术与移动车辆和路边单元(rsu)分别进行通讯。同时,蜂窝网络技术的发展以及5g技术的大规模应用构成了低延时、高可靠的车联网通信的基础,这使得iov可以对来自移动车辆配备的各种传感器收集到的大量数据进行复杂处理来支持多种交通服务。
3.然而,计算资源和能源资源的限制,移动车辆倾向于利用iov程序将其产生的大量计算密集、时延敏感型任务卸载到其他处理节点,并且,将任务卸载到外部平台(例如云和雾计算范例)已证明是有益的。其中,对于对延迟和可靠性不敏感的计算密集型任务,传统的基于云的工作方式是合适的,通过将该类型任务卸载到远程的云中心计算,然后将任务结果从云中心反馈,可以大大减少本地的计算压力。但是,当任务对于延迟和可靠性非常敏感时,例如道路规划、紧急避障以及目标识别时,出于时延、效率以及安全考虑,我们再将此类任务卸载到远程云中心的方法是不合适的。为了应对上述挑战,边缘计算被引入到车联网网络中,作为云计算的补充方法之一来增强iov的能力。因此,可以将此类应用通过位于道路边的rsu卸载到位于移动车辆附近的边缘服务器中,这样即降低了移动车辆的计算负载压力又满足了任务的时延需求。
4.但是,根据upstream的报道,汽车每9个小时将会产生并消耗40兆兆字节,并且到2025年,联网汽车将占据全球汽车市场的近86%。这意味着车联网那时每秒产生的数据与现在相比将会呈指数级增长,同时对于靠近终端用户的雾服务器来说,计算负载也将呈指数增长,因此如何平衡雾服务器的计算压力成为了一个亟待解决的挑战。幸运的时,在节省计算开销方面,车辆边缘计算中的d2d(设备到设备)通信技术被提出,并且移动车辆也存在大量的空闲计算资源。基于上述观察,我们提出了一种车辆间高可靠性协同合作以及雾服务器调控的方法,在达到降低雾服务器计算负载的目的同时,能够提升移动车辆的空闲资源利用率。
技术实现要素:5.为了解决上述问题,本发明提出了一种一种基于雾计算的车联网中高可靠的任务协同计算方法,在车辆动态移动的情况下,从链路持续时间方面考虑车辆的可靠性,从传输时延和计算时延方面考虑车辆执行任务的总时延,并从协作车辆角度和任务角度确定任务卸载策略。该方法包括以下步骤:
6.s1:客户车辆向雾服务器提交任务请求,雾服务器评估客户车辆通信范围内所有车辆的可靠性,筛选出客户车辆通信范围内可靠的协助车辆;
7.s2:雾服务器根据任务请求及协助车辆的资源情况计算出每辆协助车辆可计算的任务量;
8.s3:雾服务器基于匈牙利算法生成任务卸载策略并反馈给客户车辆;
9.s4:客户车辆根据任务卸载策略将拆分后的任务卸载至协助车辆节点和雾服务器节点。
10.根据车辆向雾服务器提交的车辆信息,协助车辆在客户车辆通信范围内的链路持续时间为:
[0011][0012]
其中,代表客户车辆vs和协助车辆vi在t时刻的相对距离,取决于车辆的位置和速度两个因素。当两车的速度方向一致时,相对距离表示为:
[0013][0014]
则表示为客户车辆vs和协助车辆vi间的相对速度,计算为:
[0015][0016]
当两车的速度方向相反时,相对距离表示为:
[0017][0018]
其中,h表示车辆的最大通信范围,d表示客户车辆vs和协助车辆vi在t时刻的欧几里得距离,计算为:
[0019][0020]
客户车辆vs和协助车辆vi间的相对速度则表示为:
[0021][0022]
为了保证客户车辆vs和协助车辆vi间的链路持续时间可用,t时刻协助车辆与客户车辆的链路可靠性为:
[0023]
如果
[0024]
其中,表示为客户车辆vs和协助车辆vi之间的链路持续时间的概率密度函数,表示为:
[0025][0026]
进一步,协助车辆执行任务的时延为:
[0027][0028]
其中,表示传输时延,表示计算时延,表示分配给协助车辆vi的任务输入数据大小,表示分配给协助车辆vi的任务所需的cpu指令数,表示协助车辆vi每秒能执行的cpu指令数,表示为客户车辆vs和协助车辆vi之间的数据传输速率。
[0029]
让表示客户车辆生成的任务,其中dss表示任务输入的数据大小,qns表示任务需要的cpu指令数,表示任务的可容忍时延。根据协助车辆与客户车辆间的链路持续时间、协助车辆执行任务的时延以及客户车辆生成的任务,协助车辆实际的执行时间为:
[0030][0031]
其中,表示协助车辆vi实际执行任务的开始时间,即表示协助车辆vi实际执行任务的结束时间,即因此,协助车辆vi最大可执行的指令数为:
[0032][0033]
令集合表示任务ws中每一个子任务所需要的cpu指令数,其中表示第p个子任务所需要的cpu指令数且1≤p≤z。令集合其中表示第i辆协助车辆所能执行的最大cpu指令数且1≤i≤k。接下来,提出了一种改进的匈牙利算法来完成子任务与相应协助车辆之间的分配。由于每个协助车辆可以执行的任务是不同的,因此随意将任务分配给协助车辆很
容易产生大量的资源碎片,造成资源浪费。合理地为协助车分配子任务,可以减少资源碎片,提高协助车辆资源的利用率。例如,我们假设客户车辆vs将子任务分配给对应的协助车辆vi,那么车辆vi的资源利用表示为也就是说,协助车辆vi的资源浪费率为。因此,通过求解以下问题,可以得到资源利用率最大的最优分配:
[0034][0035]
其中θ表示车辆vi是否被分配任务,如果车辆vi被分配任务,θ=1;否则θ=0。符号n(θ=1)则代表被分配了子任务的协助车辆的数目。这样,我们就可以求得客户车辆对应的协助车辆的最大资源利用率。
[0036]
从上我们可以获得来自客户车辆vs的所有子任务数量和每个协助车辆的数量,由于这些协助车辆的数量不一定等于子任务的数量,我们采用添加虚拟节点的方法,使协助车辆的数量等于子任务的数量。为了说明解决上述问题的完成方法,我们考虑了两个简单的情况,其中协助车辆的数量大于子任务的数量或者协助车辆的数量小于子任务的数量。当协助车辆数大于子任务数时,我们增加相应的虚拟子任务,使子任务数等于协作车辆数。此外,这些虚拟子任务所需的cpu指令数为0。因此,执行这些虚拟子任务的每辆车的资源浪费率为100%。同样,当协作车辆数小于子任务数时,我们增加相应的虚拟协作车辆,使协作车辆数等于子任务数。需要注意的是,每个虚拟协作车辆能够完成的最大指令数量是然后,计算这些虚拟协作车辆执行的每个子任务的资源浪费率。
[0037]
因此,任务分配过程描述如下:
[0038]
步骤1:首先,雾服务器从客户车辆vs中获取所有子任务,以及每个协作车辆可以执行的最大指令数。然后,雾服务器判断协助车辆的数量是否等于子任务的数量。如果协助车辆的数量不等于子任务的数量,雾服务器通过添加虚拟节点来使它们相等。之后,雾服务器计算所有车辆在执行某个子任务时的资源浪费率。因此,我们得到n个合作车辆节点、n个子任务节点以及每个车辆节点和每个子任务节点之间的资源浪费率,其中n=max{k,z}。
[0039]
步骤2:根据匈牙利算法的特点,雾服务器开始构造一个矩阵a来表示任务的分配。矩阵a被定义为n*n矩阵,矩阵a的每个元素代表车辆vi执行子任务的资源浪费率。然后,雾服务器根据匈牙利算法的基本思想对矩阵a进行变换:减去矩阵a每一行的最小值,则行最小值为零;减去矩阵a的每一列的最小值,那么列最小值为零。
[0040]
步骤3:接下来,用最少的行数覆盖所有的零。如果需要n行,算法将停止。如果需要少于n行,雾服务器需要创建额外的零。重复以下操作,直到需要n行:找到未被覆盖的最小元素(表示为m),从所有未覆盖的元素中减去m并将m添加到所有被覆盖了两次的元素中,然后继续用最少的行数覆盖所有的零。
[0041]
步骤4:然后,我们得到最优零值对应于原始矩阵中n个元素的位置。最后,n个元素的总和就是最小的资源浪费率。需要注意的是,有些子任务或协作车在分配过程中是虚拟
的,因此分配后不执行虚拟子任务,分配给虚拟协作车的子任务上传到对应的雾服务器执行,雾服务器分配给这些子任务的计算资源即虚拟协作车的可用计算资源。
附图说明
[0042]
为了使本发明的目的、技术方案和有益效果更加清楚,本发明提供如下附图进行说明:
[0043]
图1为基于雾计算的iot模型;
[0044]
图2为匈牙利算法中补全虚拟节点的示意图;
[0045]
图3为匈牙利算法具体分配示意图。
具体实施方式
[0046]
下面将结合附图,对本发明的实施步骤进行详细的描述。
[0047]
图1描述了一个由雾服务器和移动车辆构成的两层网络模型,其中车辆层主要由移动车辆组成,移动车辆会定时向雾服务器提交它的移动信息及可用资源;雾层主要由rsu和雾服务器组成,移动车辆主要通过rsu与雾服务器通信。假设在t时刻客户车辆vs通信范围内的车辆集合设为ψ,客户车辆vs生成的需要处理的计算任务为包含了3个子任务即因此,根据车辆向雾服务器提交的车辆信息,协助车辆vi(vi∈ψ)在客户车辆vs通信范围内的链路持续时间为链路可靠性为由于任务ws需在前执行完成,令成,令所以协助车辆vi(vi∈ψ)实际可以执行任务的时间段为根据时延模型,我们可以得到每辆车在实际可以执行任务的时间段内最大执行的指令数为:任务的时间段内最大执行的指令数为:
[0048]
接下来,我们使用一种改进的匈牙利算法来完成子任务与相应协助车辆之间的分配。由于这些协助车辆的数量不一定等于子任务的数量,我们采用添加虚拟节点的方法,使协助车辆的数量等于子任务的数量,如图2所示。确定好协助车辆的数量等于子任务的数量后,我们开始构建一个矩阵a来表示任务的分配,如图3所示:
[0049]
步骤1:减去每一行的最小元素,找到每一列的最小元素;
[0050]
步骤2:每列减去最小的元素,即分别从1列、1列和1列中减去0,从第4列和第5列中减去0.73;
[0051]
步骤3:用最少的水平线或垂直线覆盖行和列中的所有零元素,由于n大于覆盖线的数量,我们找到未被任何线覆盖的最小元素是0.02,那么我们从所有未覆盖的元素中减去0.02,并在所有被覆盖两次的元素中添加0.02;
[0052]
步骤4:用最少的水平或垂直线覆盖行和列中的所有零元素,因为n等于覆盖线的
数量,所以得到了最佳的零点分配;
[0053]
步骤5:将选中的0元素映射到原始矩阵a,即子任务w
s1
,子任务w
s2
和子任务w
s3
分别分配给合作车辆v4、v1和v5,虚拟子任务w
s4
和w
s5
被分配给合作车辆v2和v3。
[0054]
需要说明的是,虚拟子任务只参与分配,不实际执行。因此,在这个3个子任务和5辆协助车辆的分配示例中,最优分配的资源浪费率为(0.27+0.1+0.2)/3=0.19。