一种新颖的多云环境下科学工作流调度算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一种新颖的多云环境下科学工作流调度算法
徐赛娟;刘耿耿
【摘要】随着越来越多云服务提供商的出现,通过在多个云之间进行任务调度降低总执行时间,从而降低代价,使得云计算更高效和快速反应.为此,本文引入科学工作流的机制,在满足科学工作流的截止日期下,尽可能地减少总时间,即执行代价.首先,根据科学工作流自身的结构特点,尽可能地合并存在有向割边的任务,使所有符合这些条件的任务合并为一个任务,减少总的任务数,而这也就相当于减少了总时间.然后,不断把每个关键父任务作为下次的输入继续寻找关键父任务,直至所有路径覆盖全部任务,即排列好所有有前后关系的任务,使所有任务依次执行.最后,把每个局部关键路径分配到最适合的云上,并执行任务,获得每一个任务的实际结束时间.实验结果表明本文算法的有效性.
【期刊名称】《闽江学院学报》
【年(卷),期】2018(039)005
【总页数】10页(P63-72)
【关键词】云计算;多云环境;科学工作流;局部关键路径
【作者】徐赛娟;刘耿耿
【作者单位】福建商学院信息工程系,福建福州350012;福州大学数学与计算机科学学院,福建福州350116;福建省网络计算与智能信息处理重点实验室,福建福州350116
【正文语种】中文
【中图分类】TP391
随着云计算技术的不断发展与普及,在互联网市场上出现了越来越多不同的云计算服务提供商.云计算具有强大的并行计算能力,所以许多计算机工作者着手研究大规模的科学工作流在多云环境下的优化任务分配问题.由于不同云服务提供商提供不同的服务,不同的服务需要不同的计算时间,因此产生了不同云环境下的差异.只要能够调动起大部分的云计算设备进行并行计算和同时服务,就可以最大化地提高云计算速度并给予用户最快的反应,从而不仅有利于云计算往更广阔的世界发展,更能够提高云计算在日常生活和关键生产中的地位[1].而在云计算领域中,各个企业想要壮大自身的规模,关键就在于找到自身产品的盈利方式,首当其冲的就是通过降低云计算代价的途径来降低自身消耗,从而提高云计算服务的利润.所以降低代价成为云计算研究的重中之重[2-4] .
本文主要是研究在多云环境下进行任务分配,使得最终任务完成时间能够尽可能地减少.本文算法主要是引入科学工作流的机制,在满足科学工作流的截止日期前提下,尽可能地减少总时间,即执行代价.首先,根据科学工作流自身的结构特点,尽可能地合并存在有向割边的任务,使所有符合这些条件的任务合并为一个任务,减少总的任务数,从而减少了总的时间.然后,不断把每个关键父任务作为下次的输入继续寻找关键父任务,直至所有路径覆盖全部任务,即排列好所有有前后关系的任务,使所有任务依次运行.最后,把每个局部关键路径分配到最合适的云上,并运行任务,获得每个任务的实际完成时间.如果当前云环境上的虚拟机已经执行了一段时间,导致出错,则在满足费用条件约束的前提下新建一个虚拟机来执行该任务.不断比较每个任务的结束时间,最晚的任务结束时间是这个工作流的执行所需的时间.
通过仿真实验发现,多云环境下的工作流完成所需时间比在任何一个单云环境下都少,从而提高了云计算的效率和多云环境下设备的利用率.同时本文调度算法的总执
行时间在不同的情况下都明显少于基于贪心策略的调度算法的总执行时间,即证明本文调度算法可以在不超过总费用的前提下,有效地降低执行时间.
1 调度系统模型
1.1 科学工作流
科学工作流指的是一连串的任务执行过程.最早的起源是来自于办公领域或生产自动化,最终结果是将整个的命令分为一个个单独的任务并按照一定的先后顺序依次执行.每个任务紧接上个任务按设定好的约束条件执行,从而实现对过程中每个任务的控制和监视,确保有序正确地执行并且一旦出现错误能够及时发现和解决.
本文研究的科学工作流主要来源于对计算性能比较高的科学研究领域,比如说地震预测、核糖核酸、天体研究等.本文用有向无环图来表示科学工作流之间的关系与结构,每个点代表一个任务,两点之间的连线边代表任务之间具有数据连接关系,箭头的方向代表了任务之间的前后执行的顺序[5].文中把没有父任务的任务称为入任务,把没有子任务的任务称为出任务.在开始调度之前,需先设置一个伪入任务,执行时间为0,把它和所有入任务相连接,且和这些入任务之间的数据传输时间为0,再设置一个伪出任务,执行时间为0,把它和所有出任务相连接,且和这些出任务之间的数据传输时间为0.这样既不会影响整个科学工作流的执行时间,又可以作为整个科学工作流的启动输入[6].同时每个科学工作流都有一个截止时间,截止时间即为所有任务在各个云环境下执行的总时间和最小的那个.
本文实验数据来自于网上发布的对应于以下各种科学工作流的数据,包括所有任务之间关系的有向无环图、每个任务在不同云环境下的执行时间、每个任务结束之后所需要传输的数据量大小等等.几种主要科学工作流的数据来源的结构,包括地震科学领域的CyberShake,生物信息学领域的SIPHT,生物基因学领域的Epigenomics,重力物理学领域的LIGO,天文学领域的Montage,都有不同的构造结构,即不同的有向无环图.
1.2 多云环境
多云环境主要是指多个云服务提供商都能够提供服务完成用户所需任务,不同的云环境下完成任务的所需时间不同,同一个云和云之间从一个任务到另一个任务的数据传输时间为0,而不同云和云之间从一个任务到另一个任务的数据传输时间为传输数据量除以云间传输速率.所以通过在不同云之间进行任务调度,虽然会多出云间数据传输时间,但可以使部分任务的执行时间变少,使得整个科学工作流的完成时间变少.本文中设定为一共3个云,不同云之间可以并行使用,但在同一时刻,一个云上只能执行一个任务.另外,本文中云间数据传输速率设定为20 MB/s.
图1 调度系统模型Fig.1 Scheduling system model
在实际生活中,主要对象有包括用户、用户端、科学工作者调度器和各个云服务提供商,科学工作者通过事先设定好调度器的调度方法,根据不同的服务类型、云设备特点、调度代价等因素来进行实际的任务调度,用户可通过用户端口输入自身所需要的服务,同时用户只需等待端口显示最终结果,而调度器根据用户的输入分配任务到不同的云上执行,并且返回结果.当有多个用户同时需要服务或云设备在某一时刻资源有限时,就需要比较调度算法.越好的调度需要越少的资源,并能越快地把结果返回给用户,同时还必须保证各个云设备的利用率.图1为该结构的调度系统模型.
1.3 局部关键路径
本文的局部关键路径的结构与一般的关键路径相似,是一条单一方向的任务链,每个任务必须要其所有父任务运行后才能运行.但是与传统的以任务为基本单元的调度方法不同,本文把局部关键路径中的所有局部未调度任务作为一个整体的单元进行调度[7],分配到同一个云环境中同一台虚拟机上,有效地减少了云间数据传输时间.具体的路径选择方法是把每个选定的已调度任务作为输入,选择其关键父任务作为其局部关键路径里的直接前驱任务[8],之后把前驱任务作为当前任务继续搜索关键前驱任务,直到搜索不到前驱任务为止.关键前驱任务是指在所有前驱任务中,数据最迟
传输到达该任务的对应父任务,即关键父任务可以使得该任务最晚开始执行.该运行任务的其他前驱任务则不能放在同一台虚拟机上,所以将其他所有的父任务都放在其他云环境下的虚拟机上,同时如果其他云环境也溢出,则在满足费用条件约束的前提下,新建一台虚拟机来执行父任务.
2 工作流调度算法
本算法主要包含4个部分,即初始化、预处理、调度未调度任务和调度分配局部关键路径.各个部分有序进行.
本文算法引入科学工作流的机制,在满足科学工作流的截止日期下,尽可能地减少总时间,即执行代价.首先,根据科学工作流自身的结构特点,尽可能地合并存在有向割边的任务,使所有符合这些条件的任务合并为一个任务,减少总的任务数,而这也就相当于减少了总的时间.然后,不断把每个关键父任务作为下次的输入继续寻找关键父任务,直至所有路径覆盖全部任务,即排列好所有有前后关系的任务,使所有任务依次执行.最后,把每个局部关键路径分配到运行时间最短的云上,并运行任务.如果当前云环境上的虚拟机已经运行了一段时间,则在满足费用条件约束的前提下新建一个虚拟机来执行该任务.最后比较所有任务的结束时间,数值最大的那个,就是整个工作流的最终所需的时间.即获得工作流的最终完成时间.
之后和同样有费用条件约束的基于贪心策略的比较算法所计算出的最终总时间进行比较.在任务数量为30、50、100的各种情况下,每次新建一个虚拟机两者都需要额外的费用,在超出总费用后就不允许新建虚拟机,只能在已有的虚拟机下执行,最后比较最终总的执行时间,该调度算法明显优于基于贪心策略的比较算法.即证明本文调度算法可以在满足费用条件约束的情况下,可以尽可能有效地降低运行时间. 2.1 初始化
初始化的过程如下.
Step 1:执行预处理步骤.
通过调用预处理过程,将工作流的DAG结构进行分析,把单一边的两个任务和该边合并为一个任务,即父任务的出度为1,子任务的入度也为1,在合并之后,形成新任务的运行时间为两个任务的时间相加.因为这两个任务合并之后即在同一个云下进行运行,所以不再有任务和任务之中的数据传输时间,同时也减少了总的任务数量,简化了工作流的结构,使之后的任务调度变得更简单.
Step 2:初始化伪入任务和伪出任务,同时添加相对应的零大小的数据依赖边.
伪入任务和伪出任务的意义在于作为之后每次迭代的最初输入,起到了启动这些迭代的作用.初始化伪入任务和伪出任务是定义一个假入任务和一个假出任务,这两个任务的运行时间为0,把假入任务和所有没有父任务的任务相连接,把假出任务和所有没有子任务的任务相连接,相互之间的数据传输时间为0.这样相当于这两个任务实际是不存在,只起到启动接下来迭代的作用,而不会影响到总的科学工作流所需要的时间.
Step 3:确认输出的不同云环境下各个任务完成所需要的时间,以及每个任务完成后将往子任务传输的数据大小.
该步骤为接下来的任务调度做准备,不同云环境下各个任务完成所需要的时间就是该任务在总的时间中占据的大小,而每个任务完成后将会往子任务传输的数据大小是指接下来每个任务结束后,如果子任务是工作在其他云环境,就需要额外的云和云之间数据传输的时间.这个时间等于每个任务完成之后将会往子任务传输的数据大小除以云和云之间数据传输的速率,这里一般把速率设为2 MB/s.
Step 4:计算所有任务的EFT、EST、LST、LFT、D(w)以及对应工作所在云,并且初始化伪入任务和伪出任务.
EFT(early finish time)为最早结束时间, EST(early start time)为最早开始时
间.LST(last start time)为最晚开始时间.LFT(last finish time)为最晚结束时间.D(w)指的是整个科学工作流的最晚结束时间[9],即截止日期.这些数据是为了在满足整个
科学工作流在截止日期结束之前能够最快的完成所有任务,同时也为接下来安排每个任务的先后执行和调度顺序做准备,不同的时间可以使这些任务合理安排分配到最适合的云上进行执行.
(1)
(2)
EFT的计算方法:如公式(1)所示,当该任务不存在前驱任务
时,EFT(i)=MET(i,p),MET(i,p)指的是该任务在各个云中执行时间最少的,同时确定了此时所在的云p.如公式(2)所示,当该任务存在前驱任务时,EFT的计算方法为两步.第一步,计算在不同云中时,对于不同的父任务,可以计算EFT[父任务]+MET(i,p)+TE,其中EFT[前驱任务]为计算该前驱任务的EFT大小,TE为该任务和其前驱任务之间的数据转送时间,如果该任务和其前驱任务在同一个云,则TE为0,否则TE为父任务结束时将要传输的数据大小除以云间数据传输速率.继而可得出不同的父任务就会有不同大小的结束时间,从中取出最大的那一个.第二步,则是由第一步中在不同云环境下各得到一个数据时间,从中选出最小的一个数据时间作为最终该任务的EFT. EST(i)=EFT(i)-MET(i,p).
(3)
EST的计算方法:如公式(3)所示,在求出同一任务的EST之后,EST(i)=EFT(i)-MET(i,p),该结果即为所求结果.
(4)
(5)
LST的计算方法:如公式(4)所示,当该任务不存在后继任务时,LST(i)=D(w)-
MET(i,p),MET(i,p)指的是该任务在各个云中执行时间最少的,同时确定了此时所在的云.如公式(5)所示,当该任务存在后继任务时,LST的计算方法为两步.第一步,计算在不同云中,对于不同的子任务计算LST[后继任务]+MET(i,p)+TE,其中LST[后继任务]为计算该后继任务的LST大小,TE为该任务和其后继任务之间的数据转送时间,如果该任务和后继任务在同一个云,则TE为0,否则TE为子任务结束时将要传输的数据大小除以云间数据传输速率.继而可得出不同的子任务会有不同大小的结束时间,从中取出最小的.第二步,则是由第一步在不同云环境下各得到一个数据时间,从中选出最大的一个数据时间作为该任务的LST.
LFT(i)=LST(i)+MET(i,p).
(6)
LFT的计算方法:如公式(6)所示,需在求出同一任务的LFT之
后,LFT(i)=LST(i)+MET(i,p),该结果为所求结果.
最后还需对伪入任务和伪出任务进行初始化,因为伪入任务即为最开始执行的任务,且执行时间为0,所以对应的EFT、EST皆为0.而伪出任务即为最后执行的任务,所以对应的LST、LFT皆为D(w),即截止时间.
Step 5:标记伪入任务和伪出任务为已调度任务.
因为伪入任务和伪出任务为实际不存在的任务,只是为了能够在接下来启动迭代而设置的数据,所以可以直接设置它们为已调度任务,而其他任务为未调度任务. Step 6:执行调度未调度任务步骤.
2.2 预处理
图2 节点空间相关性模型Fig.2 Node spatial correlation model
预处理主要是确认科学工作流的结构,即有向无环图,对存在有向割边的相邻任务进行合并工作,实现简化总任务数和减少数据传输边的作用.该环节可以有效地减少总
任务数,简化任务分配的步骤,使得本文算法的计算时间减少.需要合并的边即为出节点的出度为1,入节点的入度为1,则这些边将进行合并为一个边,如图2,该边合并之后,新生成的边的执行时间为两个任务的执行时间相加,完成之后的输出数据大小为两个任务的输出数据大小之和,入度为出任务的入度,出度为入任务的出度,同时两个任务所连接的所有任务都连接到新的任务上,从而确保总的分配和任务连接关系不发生变化.
对总体DAG进行预处理后可以有效地简化任务结构,有力减少任务数量,从而减少之后分配任务时所消耗的时间,特别是对于含有许多可简化边的工作流结构,更是能够减少一半以上的分配计算时间,如图3所示.
图3 预处理前后的工作流结构Fig.3 Workflow structure before and after preprocessing
主要步骤如下:
Step 1:输入工作流的DAG,即构造一个父亲儿子节点的图矩阵,并以此确定每个任务的入度和出度.
图矩阵是一个n×n的矩阵,如果某个任务与另一个任务之间存在边,则在对应位置上的值设置为1,否则初始设置为0,在进行完这些步骤之后,即可以确认每个任务的入度和出度,为接下来的Step 2做好准备.
Step 2:如果存在有向割边,则删除该边,并把该边对应的两个任务合并为一个新的任务.
有向割边,即指父任务的出度为1,子任务的入度为1.把有向割边在矩阵上对应位置上的数值改为0,即删除了这条边,同时把子任务的出度和之后链接的边变为父任务的出度和之后链接的边,即把父任务和子任务合并,变成了合并之后的新任务,该任务的执行时间为两个任务的执行时间相加[10].此时,因为两个任务以后都在同一个云环境下运行,所以两个任务之间的数据传输时间为0.
Step 3:反复执行Step 2,直到不再存在有向割边为止.
不断执行Step 2,使得整个科学工作流中不再存在有向割边,即使得整个科学工作流最简化,可以大量减少接下来任务分配的工作量,有效地减少总任务数,使得本文算法的计算时间减少.
2.3 调度未调度任务
输入一个已调度的任务,最开始输入的是伪出任务,以此任务为开始,往前延伸不断搜索,最终构成一条单一方向的局部关键路径(pcp),把pcp作为2.4小节的输入.具体步骤如下:
Step 1:构造堆栈,往里面添加输入的已调度任务,把该任务的父任务添加至堆栈,再把该父任务的父任务添加进堆栈,以此反复添加,直到不存在父任务为止.
该步骤是找出局部关键路径上的所有任务,并按先后顺序依次排列好.具体的路径选择方法是把每个选定的已调度任务作为输入,选择其关键父任务作为局部关键路径的直接前驱任务[11],再把父任务作为当前任务继续搜索关键父任务,直到搜索不到父任务为止.关键父任务是指在所有父任务中,数据最迟传输到达该任务所对应的父任务.
Step 2:把该堆栈依次添加到pcp中,从而形成一条完整的局部关键路径,该局部关键路径的头任务不存在未调度的父任务,尾任务不存在未调度的子任务.
Step 3:把该局部关键路径作为输入启动2.4小节,即把每一个pcp中的任务调度到最合适的云中,调度完后就可以确定该pcp中每个任务的实际开始时间和实际结束时间,即这些任务变成了已调度任务.
Step 4:由于Step 3确认了已调度任务的实际开始时间和实际结束时间,所以需要更新这些任务的其它所有未调度的父任务和子任务的EFT、EST、LST、LFT,在更新后,依次把这些已调度任务作为输入启动2.3.
2.4 调度分配局部关键路径
调度整个局部关键路径到最合适的云环境中,以确认pcp中所有任务的实际开始时间和实际结束时间.主要步骤如下:
Step 1:为该pcp寻找总运行时间最短的云环境.
把该pcp中每个任务在不同云环境下的执行时间进行相加,最后得出pcp在各个云环境下的总运行时间,取得最小值时的云即为最合适的云环境.如果该pcp的任务与导出其的已执行子任务在同一云环境下的同一虚拟机内,则将其分配到其他云环境下执行[13].如果其他云环境下的虚拟机都已经溢出执行,即无法满足该任务在其子任务执行之前执行完,则在满足费用条件约束的前提下,在原最合适的云环境下新建一个虚拟机,将该pcp的所有任务放到新建的虚拟机上执行.
费用条件约束是指每次新建一台虚拟机,都需要一定的费用,总的费用是有限制的,超过费用之后就不允许新建虚拟机,否则如果允许不断新建虚拟机,任务就可以不断地平行执行,与实际情况不符,且不能起到优化最终总执行时间的意义[14].
Step 2:确认每个任务的实际上开始执行的时间和实际上完成的时间.
首先确认pcp中头任务的父任务的实际结束时间,如果pcp所在云环境与该父任务所在云环境相同,则pcp头任务的实际开始时间是父任务的实际结束时间,否则还需加上不同云环境之间数据传输的时间[15].该数据传输时间的大小为父任务输出的数据大小除以云环境之间的数据传输速率,本文的数据传输速率设置为2 MB/s.其他每个任务的实际开始执行时间为前一个任务实际完成时间,而实际上完成时间为该任务的实际开始执行时间加上该任务在此云环境下的运行时间[16-17].最后把该pcp里的每个任务设置为已调度任务.
3 仿真实验
3.1 实验基本设置
本文的实验设定:有3个云环境,每个云环境下新建一个虚拟机需要额外费用为1,总费用随虚拟机数量增加而增加,即在满足费用条件约束的前提下,每个云都可以不
断新建虚拟机,如果超过所拥有的费用,则不允许再另外新建虚拟机.
3.2 与基于贪心策略的调度算法进行比较
表1 在工作流为LIGO时,不同任务数量下的总执行时间Tab. 1 The total time for different numbers of tasks when the workflow is LIGO任务数量/个总费用时间/s多云调度算法贪心比较算法
30674.60181.20874.60181.201074.60181.205012103.11193.4514103.11193. 4516103.11193.451006523.031 683.24
12523.03943.8118523.03737.6824523.03577.53
分别在任务数量级为30、50、100的情况下进行实验,此时截止时间为最小的单云环境下的总执行时间,即该调度算法必须在该截止时间内完成,否则多云调度之后总执行时间依然比单云环境下调度的总执行时间更多,从而违背了算法的初衷,没有成功减少工作流的总执行时间.总费用的最小设定是由多云调度算法决定的,因为多云调度算法每次分配所需总费用的是固定,多云调度算法的性能不随总费用的增加而增加.此时把多云调度算法所需的费用甚至更多的费用提供给基于贪心策略的调度算法使用,基于贪心策略的调度算法的总执行时间依然大于多云调度算法.
以下为多云调度算法和贪心比较算法分别在科学工作流LIGO、Epigenomics、SIPHT所对应的DAG结构上执行所需总时间的比较结果. 从表1可以看出,在工作流为LIGO、任务数量为30、50、100时,在给定总费用一样的情况下,多云调度算法所消耗的时间少于贪心比较算法.同时,在任务数相同时,多云调度算法在相同或更少的总费用下的总执行时间依然优于贪心比较算法.
从表2可以看出,在工作流为Epigenomics、任务数量为24、47、100时,在给定总费用一样的情况下,多云调度算法所消耗的时间少于贪心比较算法.同时,在任务数相同时,多云调度算法在相同或更少的总费用下的总执行时间依然优于贪心比较算法.。

相关文档
最新文档