CN114090226A - 一种基于负载均衡的流式计算引擎调度方法及*** - Google Patents

一种基于负载均衡的流式计算引擎调度方法及*** Download PDF

Info

Publication number
CN114090226A
CN114090226A CN202110790363.XA CN202110790363A CN114090226A CN 114090226 A CN114090226 A CN 114090226A CN 202110790363 A CN202110790363 A CN 202110790363A CN 114090226 A CN114090226 A CN 114090226A
Authority
CN
China
Prior art keywords
load
node
task
chromosome
population
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110790363.XA
Other languages
English (en)
Inventor
乔颖
葛景晓
王宏安
冯长有
杨延栋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Software of CAS
Electric Power Research Institute of State Grid Xinjiang Electric Power Co Ltd
Original Assignee
Institute of Software of CAS
Electric Power Research Institute of State Grid Xinjiang Electric Power Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Software of CAS, Electric Power Research Institute of State Grid Xinjiang Electric Power Co Ltd filed Critical Institute of Software of CAS
Priority to CN202110790363.XA priority Critical patent/CN114090226A/zh
Publication of CN114090226A publication Critical patent/CN114090226A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/12Computing arrangements based on biological models using genetic models
    • G06N3/126Evolutionary algorithms, e.g. genetic algorithms or genetic programming

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Physiology (AREA)
  • Genetics & Genomics (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)

Abstract

本发明公开一种基于负载均衡的流式计算引擎调度方法及***,属于流式计算引擎和实时技术领域,根据负载监测信息使用基于遗传算法的负载均衡算法制定新的调度策略,重新分配***资源使***达到负载均衡,可以解决集群发生负载不均衡的问题。

Description

一种基于负载均衡的流式计算引擎调度方法及***
技术领域
本发明属于流式计算引擎和实时技术领域,具体涉及一种基于负载均衡的流式计算引擎调度方法及***。
背景技术
流式计算引擎由于其实时性、分布性、容错性等特性,被广泛应用在大数据处理场景中,如流量实时预警、推荐***、金融***、智能家居监控、物联网、风控***、故障检测等。随着物联网应用所产生的数据规模越来越大以及对实时性的要求越来越高,其应用通常运行在流式计算引擎上,并且需要流式计算引擎***整体的负载均衡,从而提升吞吐量,降低端到端的处理延迟来满足时间约束。流式计算引擎调度方法是使流式计算引擎保持负载均衡、满足数据处理实时性的关键。
在流式计算引擎中,运行的应用程序的逻辑可以抽象成一个有向无环图,称之为DAG图,图中的每个顶点代表不同的算子,执行对应的计算操作,边代表数据流向,元组是流式计算引擎处理数据的单位,可以通过<τ,k,v>来表示,其中τ表示时间戳,k,v为键值对。流式计算引擎在处理数据流时,部分处理会将数据的中间值以状态的形式存储在算子中供后续数据流处理使用。在进行有状态计算时,不同处理节点被分配的数据和数据的处理时间是不同的,因而各个节点的负载会出现不均衡现象。此时,流式计算引擎调度方法需要尽可能维持***的负载均衡,对数据处理给予实时响应。
目前主流的流式计算引擎如Storm(参考Apache Storm.2021.http://storm.apache.org)、Flink(参考Carbone P,Katsifodimos A,Ewen S,et al.Apacheflink:Stream and batch processing in a single engine[J].Bulletin of the IEEEComputer Society Technical Committee on Data Engineer-ing,2015,36(4):28-38.)等采用轮询调度方法作为***的默认资源调度策略,这种调度方法会将流式计算中执行计算任务的算子依次分配到各个物理节点上去工作,而忽略了***内部节点之间的通信、资源划分不均匀和算子之间计算开销的差异性等诸多问题,是一种粗粒度的资源调度方法,无法发挥集群的最大性能。
与此同时,相关学者们已经提出了一些面向流式计算引擎的调度方法,Aniello(参考Aniello L,Baldoni R,Querzoni L.Adaptive online scheduling in storm[C]//Proceedings of the 7th ACM international conference on Distributed event-based systems,ACM,2013:207-218.)等提出了基于流式计算拓扑结构的调度策略,调度时优先将算子轮询分配给与它通信频繁的工作节点,但该方法仍是一种静态调度方法,忽略了***工作过程中负载的变动,不能真正实现***的负载均衡。Junhua Fang(参考JunhuaFang,Pingfu Chao,Rong Zhang,et al.Integrating workload balancing and faulttolerance in distributed stream processing system.2019,22(6):2471-2496.)等和Anis(参考Nasir MAU,Morales GDF,Kourtellis N,et al.When two choices are notenough:Balancing at scale in distributed stream processing[C]//2016 IEEE 32ndInternational Conference on Data Engineering(ICDE).IEEE,2016:589-600.)等都提出了一种基于数据分发策略的在线任务调度方法,但他们把每个算子上就绪未完成计算的元组数量作为该算子的当前负载,忽略了不同算子处理数据能力差异性带来的负载不均衡问题。
发明内容
针对现有流式计算调度方法的不足,本发明提出了一种基于负载均衡的流式计算引擎调度方法及***,根据负载监测信息使用基于遗传算法的负载均衡算法制定新的调度策略,重新分配***资源使***达到负载均衡,可以解决集群发生负载不均衡的问题。
为实现上述目的,本发明采用以下技术方案:
一种基于负载均衡的流式计算引擎调度方法,包括以下步骤:
从流式计算引擎的每个物理节点上收集过去一段时间的负载统计数据,并存储到内存数据库中;
根据当前节点的最大负载maxL和全部节点的平均负载
Figure BDA0003160848970000021
计算负载不均衡程度
Figure BDA0003160848970000022
Figure BDA0003160848970000023
如果负载不均衡程度
Figure BDA0003160848970000024
超出预设阈值,则判定当前处于负载不均衡状态,从内存数据库中取出过去一段时间的负载统计数据,再根据遗传算法(GALB算法)生成新的数据分发策略;
将新的数据分发策略传递给流式计算引擎的主节点,并由主节点分发至各个分支节点,在线更新数据分发策略,完成调度。
进一步地,根据GALB算法生成新的数据分发策略的步骤包括:
流式计算引擎的物理节点集合表示为N={n1,...ni,...nm},m为全部物理节点的数量,物理节点ni处理的算子表示为Oi,算子Oi的状态表示为Si
将负载统计数据的全部元祖以key进行分组,得到K={K1,...Ki,...Ka},Ki表示第i个元组分组,a为全部元组分组数量,单个元祖e在算子Oi上占用的CPU处理时间为ci,将对每个key数据的处理作为一个任务,单个任务执行时间Ci=ci*Ki,则任务集合表示为T={C1,...Ci,...Cp},p表示任务集合T中的任务数量;
通过TT×N构建任务处理时间矩阵taskMat,TT表示任务矩阵T转置,taskMat[i][j]表示第i个任务分到第j个节点上处理需要的处理时间;
通过随机函数生成初始的染色体chromo,chromo[i]表示在上游算子到下游算子的数据分发过程中第i个key被分发到算子Ochromo[i]上,chromo数组的长度为通过key进行分组时key的数量a;
设定种群数量u,生成u条染色体x,组成种群P={x1,x2,x3,...xu},通过贪心策略计算每一条染色体的每个编码位的编号,再将该染色体加入到该种群中;
通过任务处理时间矩阵taskMat来计算每条染色体的适应度
Figure BDA0003160848970000031
其中
Figure BDA0003160848970000032
为针对当前染色体的所有节点的平均负载,
Figure BDA0003160848970000033
maxL为针对当前染色体的节点最大负载,maxL=Max{L1,...Li,...Lm};每个节点的负载通过
Figure BDA0003160848970000034
计算得出,其中i表示第i个节点,k是临时变量,xk=i表示将第k个任务分配到第i个节点上;
计算种群中所有染色体的适应度,通过轮盘赌算法生成一个新的种群;
对新种群中的染色体进行交叉操作,交换任意两条染色体的指定编码位;
对经过交叉操作的染色体进行变异操作,对要进行变异的染色体随机选择编码位进行随机变异;
循环执行上述步骤直至设定的次数,找出最优染色体,得到新的数据分发策略。
进一步地,贪心策略的执行步骤包括:
将所有的任务根据任务处理时间降序排序,依次放入一队列Q中;
从队列Q中取出队首的任务作为当前的任务即第i个任务;
将当前任务分配到当前负载最小的节点即第j个节点上去,每个节点的当前负载表示为被分配到该节点的所有任务的处理时间之和,然后将该任务从队列中删除,更新当前负载最小的节点的负载,更新公式为:Lj=Lj+taskMat[i][j],L表示负载;
继续从队列Q中取出下一个任务进行上一步骤的处理,重复进行,直至队列Q为空。
进一步地,通过轮盘赌算法生成一个新的种群的步骤包括:
计算种群的最大适应度和最小适应度,根据该最大适应度和最小适应度对每条染色体的适应度进行归一化处理,得到归一化的种群适应度;
计算每个染色体的适应度占全部染色体的适应度之和的比值,得到每个染色体的选择概率;
计算每个染色体的选择概率与其之前所有染色体的选择概率之和,得到所有染色体的累积概率qi
生成一个0~1之间的随机数r1,若满足qi>r1∧qi-1<r1,则选择该染色体加入到一新的种群中;
重复执行上一个步骤,直到新的种群中的染色体数目达到前一种群的规模。
进一步地,对新种群中的染色体进行交叉操作的步骤包括:
设置种群的交叉概率η,使用随机函数生成0~1之间的随机数r2,选择r2≤η的两条染色体;
使用随机函数生成要交叉的编码位,将上述选择的两条染色体对所述要交叉的编码位进行编码交换;
重复上述步骤,直至遍历完该种群中的全部染色体。
进一步地,对染色体进行变异操作的步骤包括:
设置变异概率ζ,使用随机函数生成0~1之间的随机数r3,若r3≤ζ,则进行变异;
对于要进行变异的染色体随机选择编码位作为变异位进行变异,变异值为随机的节点编号且与当前值不同。
进一步地,在对负载统计数据的全部元祖以key进行分组后,先对负载统计数据进行降维处理,降维处理步骤包括:
获取当前时间作为哈希函数的随机种子,利用哈希函数h1(e)对所有的key进行散列操作,将其散列到b个哈希槽上去,每个key被散列到的哈希槽为s=h1(e)%m;
将被哈希到同一个哈希槽s上的key进行聚合操作,将聚合之后的哈希槽上的所有的元组看作一个新的key,生成一个新的数据集合K′=[k′1,k′2,k′i,...,k′b],b为哈希槽数量;
对所有哈希槽中所存储的元组按照数量从高到底的顺序进行排序,若某个哈希槽上聚合之后的元组的数量k′i与所有哈希槽总元组数量
Figure BDA0003160848970000041
的比值超过了所有下游算子数量z的倒数,则将该哈希槽中的数据使用哈希函数进行二次散列。
一种基于负载均衡的流式计算引擎调度***,包括:
负载均衡检测模块,用于从流式计算引擎的每个物理节点上收集过去一段时间的负载统计数据,并存储到内存数据库中;根据当前节点的最大负载maxL和全部节点的平均负载
Figure BDA0003160848970000042
计算负载不均衡程度
Figure BDA0003160848970000043
调度模块,用于当
Figure BDA0003160848970000044
超出一预设阈值时,从内存数据库中取出过去一段时间的负载统计数据,根据GALB算法生成新的数据分发策略;
在线调度策略更新模块,用于在线更新新的数据分发策略;
数据分发模块,用于将新的数据分发策略传递给流式计算引擎的主节点,并由主节点分发至各个分支节点,在线更换数据分发策略。
本发明的有益效果:
本发明可以实时监测流式引擎中各个节点中处理的数据信息,并判断当前的流式计算引擎的负载均衡程度是否超过了阈值。若超过阈值,使用基于遗传算法的数据分发策略来解决算子被分发的元组数量以及处理单个元组的时间不同带来的负载不均衡问题。从而提升流式计算引擎的吞吐量,降低端到端的数据处理延迟。该方法适用于各种对实时性要求比较高的物联网应用,可以充分提升物联网应用的智能化程度。
附图说明
图1是一种基于负载均衡的流式计算引擎调度方法流程图。
图2是一种基于负载均衡的流式计算引擎调度***架构图。
图3是上游算子向下游算子进行数据分发操作的示意图。
具体实施方式
下面将结合实施例和附图,对本发明的技术方案进行清楚、完整的描述,可以理解的是,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本实施例公开一种基于负载均衡的流式计算引擎的调度方法,总体分为检测和调度两个部分,检测部分负责监测和统计***的数据信息,并将信息保存到数据库中,调度部分根据统计信息不断生成新的调度策略,如图1所示,具体步骤包括:
1、所述负载均衡检测模块分布在流式计算引擎***的每个物理节点上,收集过去一段时间的数据处理信息并将其存储到内存数据库中。通过
Figure BDA0003160848970000051
来判断当前***是否处于负载均衡的状态,其中maxL表示当前***节点的最大负载,
Figure BDA0003160848970000052
表示***的平均负载。当
Figure BDA0003160848970000053
超过了预先设定的阈值,则判定当前***出现了负载不均衡的情况。
2、当***中出现了负载不均衡问题后,调度模块会从数据库中取出过去一段时间内的负载统计数据,然后根据GALB算法进行建模。生成新的数据分发策略。
3、新的数据分发策略生成后,传递给流式计算引擎的主节点,并由其分发至各个物理节点,在线更换数据分发策略,并继续转到步骤一进行监控工作。
本发明方法采用以下方式实现:
流式计算引擎***中的物理节点集合可以表示为N={n1,...ni,...nm},1≤i≤m,m为节点的个数,使用Oi表示流式计算中的算子,Si表示算子Oi的状态,qi,k表示是否将单个元组e分发到算子Oi上,其值为1时表示分发,为0时表示不分发。在进行有状态计算时,元组在算子Oi上占用的CPU处理时间为ci,t时刻,节点ni上的负载可以表示为:Li=|{<τ,k,v>:qi,k=1∧τ<T}|*ci,所有节点的平均负载可以表示为:
Figure BDA0003160848970000061
节点的最大负载表示为:maxL=Max{L1,L2,L3,...Lm}。
当流式计算引擎运行之后,负载监测模块检测到***出现负载不均衡情况后,调度模块通过使用GALB算法计算出新的数据分发策略qi,k,生成路由表并更新数据分发策略。
GALB算法的具体步骤如下:
1、流式计算引擎发生负载不均衡时,调度模块从***的内存数据库中读取过去一段时间的统计数据,该统计数据对元组以key进行分组,可以表示为K={K1,K2,K3,...Ka},a为全部元组分组数量,分别代表在过去一段时间内数据源算子发送的不同key对应的元组的数量。当a大于预先设的阈值ξ时,使用聚合方法对数据进行降维(数据降维方法见步骤10)。
2、将对每个key最近一段时间t数据的处理看作一个任务,其执行时间Ci与其最近这段时间执行的元组的数量有关,可以表示为Ci=ci*Ki,其中处理时间ci与该元组被处理的算子上的状态Si有关。任务集合可以表示为T={C1,C2,C3,...Cp},p表示任务集合T中的任务数量,节点的集合可以表示为N={n1,n2,n3,...nm},每个节点的处理能力与该节点上的算子的状态大小有关。
3、通过TT×N构建任务处理时间矩阵taskMat,其中TT表示任务矩阵T转置(上角标T表示矩阵转置),taskMat[i][j]表示第i个任务分到第j个节点(算子)上处理,需要的处理时间。
4、通过随机函数生成初始的染色体chromo,chromo[i]表示在上游算子到下游算子的数据分发过程中,第i个key被分发到算子Ochromo[i]上,chromo数组的长度为通过key进行分组时key的数量a,染色体的每个编码位的数据范围是通过DAG图得出的下游算子的并发度。
5、设定种群数量u(该数目的具体值可以由用户进行设置),生成u条染色体组成种群P={x1,x2,x3,...xu}。通过使用贪心策略来计算一条染色体每个编码位的编号,然后将该染色体加入到种群中去。设初始种群中的染色体数目为u,对于初始种群中的其他u-1条染色体,每条染色体可以通过将各个编码位设置为随机的节点编号来实现,贪心策略的具体步骤如下:
5.1、将所有的任务根据任务处理时间降序排序并依次放入队列Q中,任务的计算量可以通过按照key来统计的元组的数量来表示。
5.2、从队列Q中取出队首的任务作为当前的任务即第i个任务。
5.3、将当前任务分配到当前负载最小的节点即第j个节点上去,每个节点的当前负载可以表示为被分配到该节点的所有任务的处理时间之和,然后将该第i个任务从队列中删除,更新节点的负载,第j个节点的更新公式为:Lj=Lj+taskMat[i][j]。
5.4、重复执行5.2-5.4,直至队列Q为空。
6、对于每条染色体x,通过任务处理时间矩阵taskMat来计算该染色体的适应度fi(i表示第i个染色体),fi的计算公式可以表示为
Figure BDA0003160848970000071
其中
Figure BDA0003160848970000072
为针对当前染色体的所有节点的平均负载,可以表示为:
Figure BDA0003160848970000073
N为节点集合,maxL为针对当前染色体的节点最大负载,表示为:maxL=Max{L1,...Li,...Lm},每个算子节点的负载可以通过
Figure BDA0003160848970000074
Figure BDA0003160848970000075
来计算得出,其中Li式子中的i表示第i个节点,k是临时变量,xk=i表示将第k个任务分配到第i个节点上。
7、通过步骤六得出整个种群所有染色体的适应度为F={f1,f2,f3,...fu},u为染色体总数量,通过轮盘赌算法生成一个新的种群,对于每个染色体个体x执行如下操作:
7.1、进行归一化处理,适应度表示负载均衡程度,适应度越低,在下一轮迭代中被选中的概率应该越高,计算种群的最大适应度与最小适应度为:maxFitness=Max{f1,f2,f3,...fu},minFitness=Min{f1,f2,f3,...fu},则对于染色体x对应的适应度fx归一化后为:
f′x=(maxFitness+minFitness-fx)/(maxFitness-minFitness)
进而得到归一化后的种群适应度为F′={f′1,f′2,f′3,...f′u)。
7.2、计算适应度比例,即每个染色体个体的选择概率
Figure BDA0003160848970000076
式中,f(xi)为当前染色体的适应度,f(xj)为任意染色体的适应度,xi表示第i个染色体,xj表示第j个染色体,该式子的意思是:每个染色体的适应度占总适应度的比例。
7.3、然后计算所有个体的累积概率,即每个染色体个体与其之前所有个体的选择概率之和
Figure BDA0003160848970000077
其相当于概率论中的概率分布函数F(x)。
7.4、接下来使用随机生成函数生成r1∈[0,1],若满足qi>r1∧qi-1<r1,则选择该染色体加入新的种群中。
7.5、重复7.4的步骤,直至新的种群中的染色体数目再次达到之前的规模。
8、通过步骤7生成一个新的种群,在该种群基础上进行交叉操作。
8.1、设置种群的交叉概率为η(该值可以由用户进行自主设置,根据实验经验设置在0.6左右效果比较好),判断两条染色体是否继续交叉操作的方法为:使用随机函数生成0~1之间的随机数r2,若r2≤η,则记录该染色体,并用同样的方式选择另一条染色体。
8.2、使用随机函数生成交叉的编码位的位置(范围为染色体的长度)。
8.3、将两条选择出来的染色体的指定编码位进行交换,并继续执行步骤8.1-8.2直到遍历完整个种群。
9、在步骤8的基础上对种群进行变异操作,设置种群的变异概率为ζ(可由用户设置,根据实验经验取0.1左右效果比较好),使用随机函数生成0~1之间的随机数r3,若r3≤ζ则对该染色体进行变异,否则不变异,对于要进行变异的染色体随机选择编码位作为变异位,变异值为随机的节点编号(不能与当前值相同)。
10、重复执行步骤6-9,直到达到用户设定的循环次数,找出最优染色体,得到新的数据分发策略。
11、对数据按照key进行分组后,若key的数量过大,会导致算法求解时间开销过大,因此先对数据进行降维处理,步骤如下。
11.1、获取当前***时间作为哈希函数的随机种子,使用h1(e)哈希函数(e表示单个元组)对所有的key进行散列操作,将其散列到b个哈希槽(b为哈希槽数量)上去,每个key被散列到的哈希槽为s=h1(e)%m。
11.2、将被哈希到同一个哈希槽s上的key进行聚合操作,将聚合之后的哈希槽上的所有的元组看作一个新的key。此时生成一个新的数据集合K′=[k′1,k′2,k′i,...,k′b],b为哈希槽数量。
11.3、对所有哈希槽中所存储的元组按照数量从高到底的顺序进行排序,若某个哈希槽上聚合之后的元组的数量k′i与所有哈希槽总元组数量
Figure BDA0003160848970000081
的比值超过了所有下游算子数量z的倒数,即
Figure BDA0003160848970000082
时,将该哈希槽中的数据使用h2(e)哈希函数进行二次散列。
与上面方法相对应的,本发明提供了一种基于负载均衡的流式计算引擎调度***,包括负载均衡检测模块、调度模块、在线调度策略更新模块和数据分发模块,图2所示为实现该***的一种具体架构。所述负载均衡检测模块通过在每个节点的worker工作进程中启动一个监控线程,通过快照的方式收集每个物理节点(算子)中处理的不同key的元组的数量。若通过负载统计数据计算的负载不均衡程度即负载不均衡程度未超过阈值,则持续监控,若超出阈值则激活调度模块进行数据调度,并将生成的新的数据调度方法传给在线调度策略更新模块进行在线更新操作;所述在线调度策略更新模块可以在线更新通过GALB算法生成的数据分发策略,首先其通过主节点向所有的工作节点发送新的数据分发策略,每个实际工作的物理节点worker进程收到新的分发策略后,每个上游算子在对相关的元组进行过计算操作之后,先暂时停止向下游算子分发元组,并在此过程中向数据分发模块进行订阅操作,当新的数据分发策略替换完成后,数据分发模块会通过分发消息的方式告知所有的算子,每个算子按照新的数据分发策略向下游算子进行数据分发。本***的四个模块按照所具有的负载均衡检测、数据调度、在线调度策略更新和数据分发等功能对应执行上述的基于负载均衡的流式计算引擎调度方法的各个技术手段,通过这四个模块组合成的***来实现上述方法,这四个模块具体分别执行上述哪些技术手段对于本领域技术人员很容易辨识,不再重复赘述上述技术手段,本领域技术人员应可理解。
下面结合单词统计的例子和相关数据,对本发明进行说明。
1、如图3所示,该图代表一个单词统计在流式计算中的DAG图。在计算过程中,上游算子按照指定的概率生成相应的单词,然后向下游算子进行数据分发,其中相同的单词会被分发到同一个下游算子。下游算子根据收到的元组对单词进行计数统计,并将统计的中间结果以数组的形式保存在自己的算子状态中。最终下游算子将统计的结果进行输出。
2、下面结合具体的实例对GALB算法进行演示
设当前流式计算任务中下游算子的任务并发度为3,分布在3个物理节点中,节点编号为1,2,3。上游算子通过指定概率生成8个单词发送给下游算子,将对每个单词的处理看作一个任务,一共8个任务,每个任务的长度如以下表1所示:
表1
编号 1 2 3 4 5 6 7 8
任务长度 15 15 12 6 9 18 21 9
负载检测模块通过统计每个算子处理相同数量的元组所花费的时间,进一步的可以计算出不同算子对于数据的处理能力如以下表2所示:
表2
节点 1 2 3
处理能力 1 2 3
GALB算法的基本运算过程如下:
1)生成任务处理时间矩阵,根据每个任务与不同节点的处理能力的比值,可以计算出不同任务在每个节点运行所需要的CPU时间片的时间,将其作为该任务分配到该节点后给其带来的负载增量。计算出来的任务处理时间矩阵如以下表3所示:
表3
1 2 3 4 5 6 7 8
节点1 15 15 12 6 9 18 21 9
节点2 7.5 7.5 6 3 4.5 9 10.5 4.5
节点3 5 5 4 2 3 6 7 3
2)染色体的编码方式采用整型数组编码,编码长度等于任务个数8,每个编码位上的基因值的变化范围为所有的节点的编号{1,2,3},表示将该任务分配到对象的节点上进行处理。例如:
1,3,2,2,1,2,3,1
表示将编号为1,5,8的任务分配到节点1上去执行,将编号为2,7的任务分配到节点3上去执行,将编号为3,4,6的任务分配到节点2上去执行。
3)使用贪心策略初始化种群的一条染色体
将所有的任务按照降序进行排序:
21,18,15,15,12,9,9,6
按照上述排列依次处理各个任务,将各个任务分配到当前负载最低的节点上进行处理,若存在负载相同的节点,则将其分配到任务处理时间矩阵对应的处理时间更少的节点。初始时假设所有的节点负载为0:
a.将编号为7的任务分配到3号节点,当前每个节点的负载情况如以下表4所示:
表4
节点编号 1 2 3
负载情况 7
b.将编号为6的任务分配到2号节点,当前每个节点的负载情况如以下表5所示:
表5
节点编号 1 2 3
负载情况 9 7
c.将编号为1的任务分配到1号节点,当前每个节点的负载情况如以下表6所示:
表6
节点编号 1 2 3
负载情况 15 9 7
d.将编号为2的任务分配到3号节点,当前每个节点的负载情况如以下表7所示:
表7
节点编号 1 2 3
负载情况 15 9 12
e.将编号为3的任务分配到2号节点,当前每个节点的负载情况如以下表8所示:
表8
节点编号 1 2 3
负载情况 15 15 12
f.将编号为5的任务分配到3号节点,当前每个节点的负载情况如以下表9所示:
表9
节点编号 1 2 3
负载情况 15 15 15
g.将编号为8的任务分配到3号节点,当前每个节点的负载情况如以下表10所示:
表10
节点编号 1 2 3
负载情况 15 15 18
h.将编号为4的任务分配到3号节点,当前每个节点的负载情况如以下表11所示:
表11
节点编号 1 2 3
负载情况 15 17 18
最终,根据贪心策略得出的一个初始染色体的编码为:
1,3,2,3,3,2,3,3
将该染色体作为一条初始染色体加入种群。
4)以步骤3中得到的初始染色体为例,可以计算出该染色体的适应度为:
节点的平均负载为
Figure BDA0003160848970000111
节点的最大负载为maxL=18
进而可以求得该染色体的种群适应度(负载均衡程度)为:
Figure BDA0003160848970000112
5)对适应度进行归一化处理。在每一轮的种群选择过程中,染色体的选择概率与其种群适应度成反比,适应度越高,该染色体被选择的概率越大。假设种群中有五条染色体,其适应度分别为:0.1,0.2,0.3,0.4,0.5。则
maxFitness=0.5,minFitness=0.1
f′1=(maxFitness+minFitness-f1)/(maxFitness-minFitness)=1.25
f′2=(maxFitness+minFitness-f2)/(maxFitness-minFitness)=1
f′3=(maxFitness+minFitness-f3)/(maxFitness-minFitness)=0.75
f′4=(maxFitness+minFitness-f4)/(maxFitness-minFitness)=0.5
f′5=(maxFitness+minFitness-f5)/(maxFitness-minFitness)=0.25
归一化后的种群适应度为1.25,1,0.75,0.5,0.25。则染色体的选择概率计算如以下表12所示:
表12
染色体 1 2 3 4 5
适应度 1.25 1 0.75 0.5 0.25
选择概率 0.333 0.267 0.2 0.133 0.067
累计概率 0.333 0.6 0.8 0.933 1
使用随机函数生成0~1之间的随机浮点数,根据该浮点数所属的概率区间来选择染色体,例如若随机函数产生的浮点数为0.68,则3号染色体被选中加入到新的种群中去(0.8≤0.68≤0.8),继续生成随机数进行选择直至新的种群中染色体数目与之前相同。
6)对步骤5生成的新的种群进行交叉操作,假设种群的交叉概率为0.5,通过随机函数生成5个0~1之间的随机浮点数,来选择进行交叉操作的染色体。例如若生成的随机数为0.28,0.51,0.89,0.64,0.43。则选择编号为1,5的两条染色体进行交叉,假设其父代染色体如下:
1,2,2,3,1,3,3,1
2,3,3,2,3,1,2,3
随机生成交叉点,交叉点的范围为染色体编码位的总长度,即任务的总数。假设随机生成的交叉点位2,则交叉后产生的子代染色体如下:
1,3,2,3,1,3,3,1
2,2,3,2,3,1,2,3
7)变异操作:根据设定的种群变异概率确定需要进行变异操作的染色体,变异后的编码为在节点编号范围内生成的随机值(不能与当前编码相同),假设变异之前的染色体为:
1,2,2,3,1,3,3,1
若随机产生的变异编码位为7,在1~3之间随机生成的数字为2,则变异后的染色体为:
1,2,2,3,1,3,2,1
8)重复执行步骤4~7,直到执行了预先设定的指定轮数,或者种群的平均适应度达到了阈值,则停止。
上述实施例仅为例示性说明本发明的原理及其功效,而非用于限制本发明的范围。任何熟于此技术的本领域技术人员均可在不违背本发明的技术原理及精神下,对实施例作修改与变化。本发明的保护范围应以权力要求书所述为准。

Claims (8)

1.一种基于负载均衡的流式计算引擎调度方法,其特征在于,包括以下步骤:
从流式计算引擎的每个物理节点上收集过去一段时间的负载统计数据,并存储到内存数据库中;
根据当前节点的最大负载maxL和全部节点的平均负载
Figure FDA0003160848960000011
计算负载不均衡程度
Figure FDA0003160848960000012
Figure FDA0003160848960000013
如果负载不均衡程度
Figure FDA0003160848960000014
超出预设阈值,则判定当前处于负载不均衡状态,从内存数据库中取出过去一段时间的负载统计数据,再根据遗传算法生成新的数据分发策略;
将新的数据分发策略传递给流式计算引擎的主节点,并由主节点分发至各个分支节点,在线更新数据分发策略,完成调度。
2.如权利要求1所述的方法,其特征在于,根据遗传算法生成新的数据分发策略的步骤包括:
流式计算引擎的物理节点集合表示为N={n1,...ni,...nm},m为全部物理节点的数量,物理节点ni处理的算子表示为Oi,算子Oi的状态表示为Si
将负载统计数据的全部元祖以key进行分组,得到K={K1,...Ki,...Ka},Ki表示第i个元组分组,a为全部元组分组数量,单个元祖e在算子Oi上占用的CPU处理时间为ci,将对每个key数据的处理作为一个任务,单个任务执行时间Ci=ci*Ki,则任务集合表示为T={C1,...Ci,...Cp},p表示任务集合T中的任务数量;
通过TT×N构建任务处理时间矩阵taskMat,TT表示任务矩阵T转置,taskMat[i][j]表示第i个任务分到第j个节点上处理需要的处理时间;
通过随机函数生成初始的染色体chromo,chromo[i]表示在上游算子到下游算子的数据分发过程中第i个key被分发到算子Ochromo[i]上,chromo数组的长度为通过key进行分组时key的数量a;
设定种群数量u,生成u条染色体x,组成种群P={x1,x2,x3,...xu},通过贪心策略计算每一条染色体的每个编码位的编号,再将该染色体加入到该种群中;
通过任务处理时间矩阵taskMat来计算每条染色体的适应度
Figure FDA0003160848960000015
其中
Figure FDA0003160848960000016
为针对当前染色体的所有节点的平均负载,
Figure FDA0003160848960000017
maxL为针对当前染色体的节点最大负载,maxL=Max{L1,...Li,...Lm};每个节点的负载通过
Figure FDA0003160848960000018
计算得出,其中i表示第i个节点,k是临时变量,xk=i表示将第k个任务分配到第i个节点上;
计算种群中所有染色体的适应度,通过轮盘赌算法生成一个新的种群;
对新种群中的染色体进行交叉操作,交换任意两条染色体的指定编码位;
对经过交叉操作的染色体进行变异操作,对要进行变异的染色体随机选择编码位进行随机变异;
循环执行上述步骤直至设定的次数,找出最优染色体,得到新的数据分发策略。
3.如权利要求2所述的方法,其特征在于,贪心策略的执行步骤包括:
将所有的任务根据任务处理时间降序排序,依次放入一队列Q中;
从队列Q中取出队首的任务作为当前的任务即第i个任务;
将当前任务分配到当前负载最小的节点即第j个节点上去,每个节点的当前负载表示为被分配到该节点的所有任务的处理时间之和,然后将该任务从队列中删除,更新当前负载最小的节点的负载,更新公式为:Lj=Lj+taskMat[i][j],L表示负载;
继续从队列Q中取出下一个任务进行上一步骤的处理,重复进行,直至队列Q为空。
4.如权利要求2所述的方法,其特征在于,通过轮盘赌算法生成一个新的种群的步骤包括:
计算种群的最大适应度和最小适应度,根据该最大适应度和最小适应度对每条染色体的适应度进行归一化处理,得到归一化的种群适应度;
计算每个染色体的适应度占全部染色体的适应度之和的比值,得到每个染色体的选择概率;
计算每个染色体的选择概率与其之前所有染色体的选择概率之和,得到所有染色体的累积概率qi
生成一个0~1之间的随机数r1,若满足qi>r1∧qi-1<r1,则选择该染色体加入到一新的种群中;
重复执行上一个步骤,直到新的种群中的染色体数目达到前一种群的规模。
5.如权利要求2所述的方法,其特征在于,对新种群中的染色体进行交叉操作的步骤包括:
设置种群的交叉概率η,使用随机函数生成0~1之间的随机数r2,选择r2≤η的两条染色体;
使用随机函数生成要交叉的编码位,将上述选择的两条染色体对所述要交叉的编码位进行编码交换;
重复上述步骤,直至遍历完该种群中的全部染色体。
6.如权利要求2所述的方法,其特征在于,对染色体进行变异操作的步骤包括:
设置变异概率ζ,使用随机函数生成0~1之间的随机数r3,若r3≤ζ,则进行变异;
对于要进行变异的染色体随机选择编码位作为变异位进行变异,变异值为随机的节点编号且与当前值不同。
7.如权利要求2所述的方法,其特征在于,在对负载统计数据的全部元祖以key进行分组后,先对负载统计数据进行降维处理,降维处理步骤包括:
获取当前时间作为哈希函数的随机种子,利用哈希函数h1(e)对所有的key进行散列操作,将其散列到b个哈希槽上去,每个key被散列到的哈希槽为s=h1(e)%m;
将被哈希到同一个哈希槽s上的key进行聚合操作,将聚合之后的哈希槽上的所有的元组看作一个新的key,生成一个新的数据集合K′=[k′1,k′2,k′i,...,k′b],b为哈希槽数量;
对所有哈希槽中所存储的元组按照数量从高到底的顺序进行排序,若某个哈希槽上聚合之后的元组的数量k′i与所有哈希槽总元组数量
Figure FDA0003160848960000031
的比值超过了所有下游算子数量z的倒数,则将该哈希槽中的数据使用哈希函数进行二次散列。
8.一种基于负载均衡的流式计算引擎调度***,基于权利要求1-7任一项所述的方法,其特征在于,包括:
负载均衡检测模块,用于从流式计算引擎的每个物理节点上收集过去一段时间的负载统计数据,并存储到内存数据库中;根据当前节点的最大负载maxL和全部节点的平均负载
Figure FDA0003160848960000032
计算负载不均衡程度
Figure FDA0003160848960000033
调度模块,用于当
Figure FDA0003160848960000034
超出一预设阈值时,从内存数据库中取出过去一段时间的负载统计数据,根据遗传算法生成新的数据分发策略;
在线调度策略更新模块,用于在线更新新的数据分发策略;
数据分发模块,用于将新的数据分发策略传递给流式计算引擎的主节点,并由主节点分发至各个分支节点,在线更换数据分发策略。
CN202110790363.XA 2021-07-13 2021-07-13 一种基于负载均衡的流式计算引擎调度方法及*** Pending CN114090226A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110790363.XA CN114090226A (zh) 2021-07-13 2021-07-13 一种基于负载均衡的流式计算引擎调度方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110790363.XA CN114090226A (zh) 2021-07-13 2021-07-13 一种基于负载均衡的流式计算引擎调度方法及***

Publications (1)

Publication Number Publication Date
CN114090226A true CN114090226A (zh) 2022-02-25

Family

ID=80296027

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110790363.XA Pending CN114090226A (zh) 2021-07-13 2021-07-13 一种基于负载均衡的流式计算引擎调度方法及***

Country Status (1)

Country Link
CN (1) CN114090226A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116804963A (zh) * 2023-08-24 2023-09-26 北京遥感设备研究所 一种使数据库行为监测***多样化的方法及***

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116804963A (zh) * 2023-08-24 2023-09-26 北京遥感设备研究所 一种使数据库行为监测***多样化的方法及***
CN116804963B (zh) * 2023-08-24 2023-11-14 北京遥感设备研究所 一种使数据库行为监测***多样化的方法及***

Similar Documents

Publication Publication Date Title
Tang et al. An intermediate data placement algorithm for load balancing in spark computing environment
CN105446979B (zh) 数据挖掘方法和节点
CN109617826B (zh) 一种基于布谷鸟搜索的storm动态负载均衡方法
Ban et al. Query optimization of distributed database based on parallel genetic algorithm and max-min ant system
Schlag et al. Scalable edge partitioning
CN115237580B (zh) 面向智能计算的流水并行训练自适应调整***、方法
CN114090226A (zh) 一种基于负载均衡的流式计算引擎调度方法及***
CN116050540A (zh) 一种基于联合双维度用户调度的自适应联邦边缘学习方法
CN111078380A (zh) 一种多目标任务调度方法及***
CN111858721B (zh) 一种基于优先级编码的分布式计算方法
CN110851282B (zh) 一种基于内存网格的分布式数据计算方法及***
CN111580950A (zh) 一种提升云可靠性的自适应反馈资源调度方法
CN108427773B (zh) 一种分布式知识图谱嵌入方法
CN106874215B (zh) 一种基于Spark算子的序列化存储优化方法
CN115617510A (zh) 一种基于信息素遗传蚁群算法的服务器动态均衡方法及***
CN108415761B (zh) 一种基于网络流量优化的Storm任务调度方法
CN113191534A (zh) 物流资源分配方法、装置、设备及存储介质
CN114528094A (zh) 基于lstm和遗传算法的分布式***资源优化分配方法
Cao et al. A streaming graph partitioning approach on imbalance cluster
CN107729150B (zh) 一种异构集群安监设备最小能耗节点的寻址方法
Sedighpour et al. Paslpa-overlapping community detection in massive real networks using apache spark
Ganesh et al. A Hyper Heuristics Technique for Data Partitioning and Scheduling to Heterogeneous Systems Using Genetic Algorithm and Improved Particle Swarm Optimisation
Aparnaa et al. An Enhanced Adaptive Scoring Job Scheduling algorithm for minimizing job failure in heterogeneous grid network
US11675767B1 (en) Hash based rollup with passthrough
Eid et al. Replication strategies based on markoc chain monte carlo and optimization on cloud applications

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination