一种基于网络流量优化的Storm任务调度方法与流程

文档序号:15200170发布日期:2018-08-19 10:45阅读:155来源:国知局
本发明涉及数据交换网络领域,尤其是一种storm任务调度方法。
背景技术
:随着计算机的发展,传感器数据、金融数据、在线交易数据等实时流数据不断增多。数据种类多且体量大、源源不断、时性强。这些实时数据产生速度快、消失快,有效时间短。当前实时数据蕴含着丰富的价值,实时数据的高效处理保证了交易的快速处理和信息的实时获取。当前业界推出了storm、spark等分布式实时流数据处理框架。storm是个分布式、可扩展、容错的实时流处理系统。storm的这些特点使得它在业界得到了广泛使用。但是storm仍在不断的发展和完善中,仍有许多需要改进的方面。storm是个分布式的系统,任务分配到不同的机器和机器中的多个进程。相同的硬件情况下,不合理的任务分配方式将严重影响系统的效率。storm的实时性要求很高,不同的调度算法将导致网络流量在系统内不同的流动方式,不合理的流动将导致传输和处理延迟,进而对storm的性能产生影响。任务调度算法的差异,在系统资源相同的情况将影响着系统的性能。现在storm中默认的调度算法采用轮询的方式,将拓扑的任务轮询的方式均匀的放置到空闲的slot中,在调度时没有考虑到任务间的网络通信开销对系统性能的影响,可能造成机器间通信量大、通信延迟高,降低了系统性能,特别是实时流处理系统的数据量大,网络开销将严重影响系统的实时性。技术实现要素:为了克服现有技术的不足,针对storm现有的调度方法没有考虑到任务间的通信开销,导致系统数据流量不均衡、节点间流量大、延迟高和吞吐量下降的问题,本发明提供一种基于网络流量优化的storm任务调度方法,通过在任务运行时监控进程的流量,对进程间流量关系分析,给出优化的调度方案,在尽量不改变现有的worker进程数量和线程任务数量的情况下进行,通信流量优化。本发明解决其技术问题所采用的技术方案是的步骤如下:步骤1:进程间流量统计通过tcpdump命令采用抓包的方式统计进程间发送的信息,统计运行时storm各个worker进程间的数据传输速率,即可得到通信关系矩阵;在n个进程中,进程di和进程dj间的数据传输速率为进程di到dj和dj到di的通信速率之和,其中,1≤i≤n,1≤j≤n,通信关系矩阵w中的i行j列的wij表示进程di和进程dj间的数据传输速率,将n个进程间的数据传输速率进行汇总得到通信关系矩阵w,通信关系矩阵如下所示:步骤2:根据worker进程间的通信关系矩阵,将n个进程划分到k个机器上,本发明采用遗传算法进行网络k划分,所述遗传算法的步骤包括编码表示、定义适应度、选择操作、杂交操作和变异操作;首先按照步骤1得到通信关系矩阵,随机产生m个初始例子染色体,其中,m取值范围为20~100,据编码产生初始种群,计算每个染色体的适应度,然后执行选择操作,根据每个个体的适应度比例确定选择概率,根据选择概率和轮盘选择策略在种群中选择个体,若随机概率大于杂交概率α则进行杂交操作,若随机概率大于变异概率β则进行变异操作;不断循环整个过程,进行选择产生新种群、变异和杂交操作,进行r次循环,其中r的取值范围为100~500,直到适应度值达到稳定,即适应度值不再变化,将种群中适应度值最大的个体所代表的方案作为划分方案,得到机器对应的进程表;具体步骤如下:步骤2.1:编码表示共n个进程,运行在k个机器上,进行编码表示时将n个进程划分到k个子集,即等于现在使用的机器数量k,编码中染色体x表示为{g1,g2,...gi,...,gn},1≤i≤n,且gi取值范围为{0,1,2,...,k-1},表示每个进程属于一个子集,且每个染色体应包含0到k-1的所有值;步骤2.2:定义适应度定义无向图g=(v,e,w),顶点集v={v1,v2,v3...vn},边的集合用w表示各个边之间的权值,边的权值即是步骤1中的通信关系矩阵的权值,将无向图g划分为k个子集,p1,p2...,pk,且子集间互不相交,最大化各个子集内的通信量如公式2所示:其中vi∈ps,vj∈pt,s,t∈{1,2,...,n}且s=t表示同一个子集,在子集内累加边的权值为w(vi,vj),且系统storm运行的应用不变的情况下总的权值和是固定的,当各子集中权值和最大时,子集间权重达到最小;fit表示每个染色体的适应度,适应度公式如下所示:其中,gi,gj∈{0,1,...,k-1}表示子集,gi表示划分的子集,gi=gj表示划分到同一个子集中,traffic表示子集内所有节点间的w(vi,vj)传输速率和,balance表示均衡参数,均衡参数balance定义如下所示:si表示子集i包含的节点数,表示平均每个子集应得到的节点数,n代表进程个数,|si-n/k|表示每个子集节点数与平均节点数差的绝对值;p表示均衡系数,为所有染色体中最小传输速率和与最大均衡参数的比值,定义如下所示:p=min(traffic)/max(balance)(5)定义参数σ改变对均衡度和传输量的重视程度,其中0≤σ≤1;步骤2.3:选择操作选择操作采用轮盘选择方法,根据步骤2.2计算个体适应度fit除以总的适应度表示选择概率,选择概率pi如下所示:b为总群中染色体的个数,以pi为概率选择新的个体;步骤2.4:杂交操作设置杂交概率为α,杂交概率取值范围为0.4~0.9,同时在此时产生随机数δ,其中,0<δ<1,当δ大于α时进行杂交操作,杂交时交换种群中两个染色体的u个对应位,其中,u取值范围为2~10,如果杂交操作使得部分基因缺少,即每个染色体x没有包含0到k-1的所有值,则杂交失败,不进行该次杂交,杂交成功则保留染色体对u个位置改变;步骤:2.5:变异操作设置变异概率β,取值范围为0.0001~0.2,此时产生新的随机数δ′,当δ′大于β时进行变异操作,随机选择两个点,对换这两个点的数值即实现变异操作,连续v次随机对换一个染色体两个基因位即实现变异操作,其中,v取值为3~10;步骤3:机器内worker进程间流量优化当两个进程间传输速率大于阈值h,h为网卡速度的1%~10%,将两个进程中的线程进行重新组织,详细步骤如下:步骤3.1:设定数据传输速率阈值h,h为网卡速度的2%,两个进程间数据传输速率大于阈值h的两两进程,得到进程配对表{c0c1,c1c2,...,cici+1},0<i<k/2;将大于阈值h的配对进程,按照传输速率对进程配对表降序排列;步骤3.2:根据步骤3.1得到的降序排列的进程配对表,依次得到流量最大的两个配对进程cici+1,根据配对的两个进程cici+1内的线程关系,得到线程上下游关系表{e1,e2,e3,...,ei};步骤3.3:根据配对进程cici+1的线程上下游关系表,将进程内的线程按照如下的方式进行重新分配线程:分配最上游线程ei,将最上游的各个线程以轮询的方式分配到cici+1进程中;然后再分配线程ei的直接下游线程ei+1,将线程ei+1分配到存在线程ei的进程中;即ei和ei+1总是成对出现,得到新的进程和线程对应表;步骤4:任务分配根据步骤2得到机器和进程的对应表和步骤3得到的进程和线程对应表,可知每个线程所属的进程,每个进程所属的机器得到了任务分配的全部信息,进行任务分配时,采用storm的cluster类的setassignments函数依次将进程分配到机器上,进程信息及包含的线程通过进程和线程对应表进行查询,机器信息通过机器和进程的对应表查询获得,任务分配过程通过storm命令rebalance来触发实施任务分配。本发明的有益效果在于将worker进程均衡划分到多个机器,减少了节点间的流量;同时将相互关联的线程放置到同一个进程中将减少进程间通信的数据量,提高通信效率,让任务在资源情况不变的情况下更加有效的通信,提高现有资源的使用效率,减少了很多不必要的流量传输,降低了系统的延迟、提高了吞吐量;弥补了storm任务调度中对任务间流量信息考虑不足的问题,优化了系统内机器间和机器内进程间流量不均衡的问题,使得导致系统延迟降低、吞吐量得到提高。附图说明图1表示了进程间通信网络图,节点间的连线上的数字表示进程间传输速率。图2表示将n个进程划分到k个机器的结果示意图,其中n=7,k=3,大圈表示划分机器。具体实施方式下面结合附图和实施例对本发明进一步说明。减少数据在网络间传输的延迟,提高数据处理速度,提升系统的吞吐量。解决系统默认调度的情况下,对机器和进程间的数据传输速率考虑不全面的问题。步骤1:进程间流量统计统计运行时storm各个worker进程间的数据传输速率,得到通信关系矩阵,实时统计进程间的网络流量信息,为了更加准确的了解进程间的网络流量信息,将统计t(t=30s)时间内的流量的平均值。通过tcpdump命令采用抓包的方式统计进程间发送的信息,得到进程间的数据传输速率,统计机器的n个worker进程间的数据传输速率,在n个进程中,进程di和进程dj间的数据传输速率为进程di到dj和dj到di的通信速率之和,其中,1≤i≤n,1≤j≤n,通信关系矩阵w中的i行j列的wij表示进程di和进程dj间的数据传输速率,将n个进程间的传输速率进行汇总得到通信关系矩阵w,通信关系矩阵如下所示:图1表示了进程间通信网络图,节点间的连线上的数字表示进程间传输速率。步骤2:根据worker进程间的通信关系矩阵,将n个进程划分到k个机器上,本发明采用遗传算法进行网络k划分,所述遗传算法的步骤包括编码表示、定义适应度、选择操作、杂交操作和变异操作;首先按照步骤1得到通信关系矩阵,随机产生m个初始例子染色体,其中,m取值范围一般为20~100,本发明取m=50。据编码产生初始种群,计算每个染色体的适应度,然后执行选择操作,根据每个个体的适应度比例确定选择概率,根据选择概率和轮盘选择策略在种群中选择个体,若随机概率大于杂交概率α则进行杂交操作,若随机概率大于变异概率β则进行变异操作;不断循环整个过程,进行选择产生新种群、变异和杂交操作,进行r次循环,其中r的取值范围为100~500,本发明取r=300,直到适应度值达到稳定,即适应度值不再发生变化,将种群中适应度值最大的个体所代表的方案作为划分方案,得到机器对应的进程表;具体步骤如下:步骤2.1:编码表示共n个进程,运行在k个机器上,进行编码表示时将n个进程,需要将进程划分到k个子集,即等于现在使用的机器数量k,编码中染色体x表示为{g1,g2,...gi,...,gn},1≤i≤n,且gi取值范围为{0,1,2,...,k-1},表示每个进程属于一个子集,例如g1=2,表示第1个进程属于第2个子集,i∈{1,2,...,n},且每个染色体应包含0到k-1的所有值,否则将导致基金缺少,造成部分子集没有分配到节点;例如对一个10个节点的划分,划分到3个子集内,即n=10,k=3,染色体的例子如表1所示。表1:染色体例子编号12345…910染色体01201…12根据编码表示的方法,通过产生0到k-1的随机数填充染色体的n个位置。连续产生m(m应大于20)个染色体。同时随机产生的染色体,可能不包含0到k-1的所有数字,这样导致部分子集没有划分到节点,对于这样的染色体应该排除掉。步骤2.2:定义适应度通过定义适应度,使得更满足条件的染色体更能在下一代中得到保存,适应度越高表示更加满足划分条件,在步骤2.3中选择操作留下来的概率增大;定义无向图g=(v,e,w),顶点集v={v1,v2,v3...vn},边的集合用w表示各个边之间的权值,边的权值即是步骤1中的通信关系矩阵的权值,将无向图g划分为k个子集,p1,p2...,pk,且子集间互不相交,步骤2的目的在于减少不同子集间的通信量即减少跨机器的网络传输量,在各个进程(顶点v)间通信总量确定的情况下,最小化子集间的通信量便是最大化各个子集内的通信量,最大化各个子集内的通信量如公式2所示:其中vi∈ps,vj∈pt,s,t∈{1,2,...,n}且s=t表示同一个子集,在子集内累加边的权值为w(vi,vj),且系统storm运行的应用不变的情况下总的权值和是固定的,各子集中权值和最大,也就是子集间权重达到最小,仅仅让子集间的权值和达到最小将导致各个子集的负载不均衡,下面将通过定义适应度平衡子集间权重减小程度和子集划分的均衡度两个方面。fit表示每个染色体的适应度,适应度越高表示更加满足划分条件,适应度旨在减少子集间流量的同时使得各个机器上的进程数量更加均衡,同时,通过balance均衡参数来使得划分更加均衡,适应度公式如下所示:其中,gi,gj∈{0,1,...,k-1}表示子集,机器个数为k,gi表示划分的子集,gi=gj表示划分到同一个子集中,traffic表示子集内所有节点间的w(vi,vj)传输速率和,balance表示均衡参数,当各个子集内的节点数越均衡,balance越小减少的分越小,则适应度越大,均衡参数balance定义如下所示:si表示子集i包含的节点数,表示平均每个子集应得到的节点数,n代表进程个数,|si-n/k|表示每个子集节点数与平均节点数差的绝对值,balance越小说明越均衡;p表示均衡系数,主要是为了平衡传输速率和与均衡参数的数量级差异,p为所有染色体中最小传输速率和与最大均衡参数的比值,定义如下所示:p=min(traffic)/max(balance)(5)通过引入均衡参数使得子集间划分更加均衡的有更大的概率得以保留,使得划分更加均衡,即机器的负载更加均衡,同时不同人对流量减少程度和均衡度的需求不同,通过定义参数σ来改变对均衡度和传输量的重视程度,其中0≤σ≤1,σ越高表示对均衡度越重视;本发明中σ=0.5。通过适应度的定义,在努力降低节点间传输量的基础上,使得划分更加均匀,各个机器的负载更加均衡,使得storm任务调度方法更加具有实践意义。步骤2.3:选择操作选择操作采用轮盘选择方法,根据步骤2.2计算个体适应度fit除以总的适应度表示选择概率,选择概率pi如下所示:b为总群中染色体的个数,以pi为概率选择新的个体,当前适应度高的有更大的概率保存到下一代中,经过多次循环,适应度更高即更加满足划分条件的个体将有更大的概率得到保留;同时,每次将适应度最高的直接放入下一个种群中,使得每次迭代时,最优的总会得到保存,提高稳定性。步骤2.4:杂交操作设置杂交概率为α,杂交概率取值为0.4~0.9,本发明取α=50%。同时在此时产生随机概率δ,0<δ<1,当δ大于α时进行杂交操作,杂交时交换总群中两个染色体的u个对应位,u取值范围为2~10,u取染色体总位数n的10%。如果杂交操作使得部分基因缺少,即每个染色体x没有包含0到k-1的所有值,没有进程划分到特定机器上,造成划分为空的情况,则杂交失败,不进行该次杂交,杂交成功则保留染色体对u个位置改变;步骤:2.5:变异操作设置变异概率β,取值范围为0.0001~0.2,本发明β=5%,此时新产生随机概率δ′,当δ′大于β时进行变异操作,采取连续v次随机对换一个染色体两个基因位来实现,v为染色体总位数n的5%,取值范围为3~10,随机选择两个点,对换这两个点的数值即实现变异操作;根据worker进程间的通信关系矩阵,将进程划分到机器上,为降低机器间的通信量,即最小化机器间的网络传输量,最大化机器内的网络传输量,同时保证各个机器内的进程数量均衡。划分的原则如下:1)机器间的通信量最小,即减少通信需要跨交换机的数据流量。2)机器内的通信量尽最大,网络流量大部分在机器内部得以完成。3)各个机器内的进程数量趋于平衡,使得各个机器的负载更加均衡。最小化机器间的网络通信量,无法保证各个机器的负载均衡,通过结合均衡度和机器间通信量两个维度来评价分配方案,形成最优的分配方案。划分后减少机器间的经过网络的数据传输量,减少了需要经过交换机甚至需要经过多个交换机的数据传输量。减少了跨机器或交换机的数据传输量,降低了数据传输延迟。同时因为大量数据不再需要通过网络传输,java传输数据时便不再需要经过复杂的序列化和反序列化操作,进一步降低通信延迟。将满足三个划分原则的进程划分到多个机器的问题转换成网络k划分的问题,将进程当做网络节点,机器当做子网,网络k划分问题属于组合优化的范畴,即根据网络拓扑模型寻找最佳的网络配置将n个网络节点划分到k个子网,最小化子网间的数据传输量,这是个np完全问题,对于该问题的求解有许多方法,遗传算法解决该问题,具有简单易用、鲁棒性强和全局搜索的特点。本发明采用改进的遗传算法进行网络k划分,主要使得划分的各个机器上的进程数量尽可能均衡,通过进程划分,减低机器间的通信量,降低通讯延迟,提升系统的吞吐量和实时性。划分的一种结果如图2所示,7个进程划分到3个机器(大圆圈表示)中。机器间的传输量为5,远远小于机器内的网络传输量。步骤3:机器内worker进程间流量优化步骤1和步骤2中降低了机器间的通信量,最大化机器内的通信量,但是机器内通信时还是需要通过端口进行转发,端口在转发时java仍会进行序列化和反序列化等操作,同时在端口发送时需要在进程的公共队列排队等待,这些操作花费了很多时间,仍然需要进进一步优化机器内部的通信;寻找两个进程间传输速率大于阈值h,将两个进程中的线程按照下面的步骤进行重新组织,主要目的是将两个worker内有上下游关系的放到同一个worker内,将进程间的数据传输变成线程间的直接发送来降低传输延迟;当两个进程间传输速率大于阈值h,h一般为网卡速度的1%~10%,本发明取h为网卡速度的2%。将两个进程中的线程进行重新组织,详细步骤如下:步骤3.1:设定数据传输速率阈值h,h设置为网卡速度的2%,两个进程间数据传输速率大于阈值h的两两进程,得到进程配对表{c0c1,c1c2,...,cici+1}(0<i<k/2);将大于阈值的配对进程,按照传输速率降序排,得到降序排列后的进程配对表;步骤3.2:根据步骤3.1得到的降序排列的进程配对表,依次得到流量最大的两个配对进程cici+1,分析配对的两个进程cici+1内的线程,得到线程上下游关系表{e1,e2,e3,...,ei},越排在前面的线程越位于上游;每个线程都有属于的组件,组件间按照从头到尾的方式连接,得到线程属于的组件便可以得到上下游的组件同时得到上下游的线程。步骤3.3:根据配对进程cici+1的线程上下游关系表,将进程内的线程按照如下的方式进行重新分配线程:分配最上游线程ei,将最上游的各个线程以轮询的方式分配到cici+1进程中;然后再分配线程ei的直接下游线程ei+1,将线程ei+1优先分配到存在线程ei的进程中;这样ei和ei+1总是成对出现,减少了进程间的数据传输流量;依次将步骤3.1得到的排序后的进程配对表中的两两进程,进行线程的重新分配操作,然后得到新的进程和线程对应表;步骤4:任务分配根据步骤2得到的机器和进程的对应表和步骤3得到的进程和线程对应表,便知道每个线程所属的进程,每个进程所属的机器,得到了任务分配的全部信息,进行分配时,采用storm的cluster类的setassignments函数依次将进程分配到具体机器上,进程信息及包含的线程通过进程和线程对应表查询,具体机器信息通过机器和进程的对应表查询获得,任务分配过程通过storm命令rebalance来触发,按照步骤2和步骤3的过程进行任务重新组织,即可实施任务分配。根据步骤2和步骤3得到的机器间和机器内的调度方案,可以得到每个进程对应的线程信息和每个机器包含的进程信息,便可以形成进程和线程对应表和机器对应的进程表,两张表构成任务分配表。通过继承ischeduler接口来实现自定义的调度器networktrafficoptimizationscheduler。定义调度器可以按照任务分配表进行任务分配。具体采用storm的cluster类的setassignments函数来根据任务分配表来分配新的调度方案。函数setassignments依次将进程及进程包含的线程分配到对应的机器,机器和进程的对应关系通过机器对应的进程表查询。通过storm命令rebalance可以调用自定义的调度器。当自定调度器判断拓扑任务已经运行而且运行了rebalance命令,调用自定义调度器。自定义调度器首先统计机器中各个进程间数据传输速率,得到通信关系矩阵。根据通信关系矩阵。然后,按照步骤2采用神经网络的方式得到机器对应的进程表。在一个机器内按照步骤3方法,进行机器内进程间流量优化,得到进程和线程对应表。最后根据进程和线程对应表和机器对应的进程表得到任务分配表。通过setassignments将线程分到对应的进程,进程分到对应的机器上,便采用新的方案来运行任务。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1