首页> 中国专利> 一种偏斜数据流的本发明实施例提供的方法及系统

一种偏斜数据流的本发明实施例提供的方法及系统

摘要

本发明提供一种偏斜数据流的本发明实施例提供的方法及系统,方法包括:获取处理所需的数据;根据数据为节点提交任务;节点执行上游不断提交的任务,根据任务的类型对提交的任务分不同处理方法进行处理;其中,不同处理方法包括:负载迁移步骤:对负载产生偏斜的集群动态分配资源,直到负载恢复到合理范围内;数据分发步骤:根据负载范围的不同对负载进行分组,存放各阶段产生的关键任务和各节点间由于负载差异需要调节的资源;时钟监控步骤:定期对集群负载进行一次判断,确定是否需要对集群负载进行均衡处理,确保在处理任务时不会出现不均匀的负载。本发明使负载平衡度大幅度降低,在恢复系统负载均衡的同时改善系统性能。

著录项

  • 公开/公告号CN114900525A

    专利类型发明专利

  • 公开/公告日2022-08-12

    原文格式PDF

  • 申请/专利权人 中国地质大学(北京);

    申请/专利号CN202210549459.1

  • 发明设计人 孙大为;杨志虹;

    申请日2022-05-20

  • 分类号H04L67/1008(2022.01);

  • 代理机构北京市广友专利事务所有限责任公司 11237;

  • 代理人张仲波

  • 地址 100083 北京市海淀区学院路29号

  • 入库时间 2023-06-19 16:22:17

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-12-27

    授权

    发明专利权授予

  • 2022-08-30

    实质审查的生效 IPC(主分类):H04L67/1008 专利申请号:2022105494591 申请日:20220520

    实质审查的生效

说明书

技术领域

本发明涉及大数据处理技术领域,特别是指一种偏斜数据流的本发明实施例提供的方法及系统。

背景技术

随着当下计算机技术的飞速发展和数据量的与日俱增,对分布式流计算系统的研究一直是一个重点问题。与批处理不同,流式数据的特点有以下五个方面:实时性,易失性,突发性,无序性,无限性,所以无法从整体角度对流数据进行操作。流计算环境下由于数据量的暴增导致系统消息传递的方式在不断改进,有效的消息传递方式离不开对低延迟,负载均衡和高速率的研究。分布式系统都运行在大量相互协作的机器之间,由于这些机器的处理方式和能力不同,无法针对性的识别并处理这些数据,长期运行会引起整个系统的负载波动造成任务堆积,影响系统处理速度,所以需要针对需求的不同选择适合的处理方案从这些大规模,多种类且无法控制的数据,及时调整系统的负载,使系统处理效率长期保持在最佳状态,进而得到有价值的信息并反馈到真实场景中。

随机分组(Shuffle grouping)是常见的数据流分组方式之一,这种方式下元组会被尽可能随机地分配到不同的任务中,每个元组被分配到下游实例上的概率都是相同的,使得每个任务所处理元组数量能够保持基本一致,可以保证在处理元组数量上的负载均衡。键值分组:处理上游数据时,根据关键字的不同,把相同关键字的数据分到下游的同一个实例中。

但是针对偏斜数据流,如果存在键值相同的元组过多的情况也会造成集群的负载偏斜,所以在选择键值分组方法的时候,需要根据数据流的实际情况处理键值。负载不平衡问题是影响分布式处理系统性能的主要因素之一。并且上游数据流输入系统时,由于某些数据存在属性上的分散或聚集现象呈现出偏斜趋势,导致这些数据被顺序平均分配到多个处理单元上运行,由于每个节点上处理任务的能力和速度不同,产生系统内部负载偏斜现象。流处理系统收到的数据的大小和速度不可预测,导致其处理方式非常不稳定,造成系统的负载波动。

发明内容

本发明要解决的技术问题是提供一种偏斜数据流的本发明实施例提供的方法及系统,可以解决现有的负载不平衡问题,流处理系统收到的数据的大小和速度不可预测,导致其处理方式非常不稳定,造成系统的负载波动的问题。

为解决上述技术问题,本发明提供如下技术方案:

一种偏斜数据流的本发明实施例提供的方法,所述方法包括:

获取处理所需的数据;

根据所述数据为节点提交任务;

所述节点执行上游不断提交的任务,根据所述任务的类型对提交的所述任务分不同处理方法进行处理;

其中,所述不同处理方法包括:

负载迁移步骤:对负载产生偏斜的集群动态分配资源,直到负载恢复到合理范围内;

数据分发步骤:根据负载范围的不同对负载进行分组,存放各阶段产生的关键任务和各节点间由于负载差异需要调节的资源;

时钟监控步骤:定期对集群负载进行一次判断,确定是否需要对集群负载进行均衡处理,确保在处理任务时不会出现不均匀的负载。

在一种可选的实施例中,所述负载迁移步骤包括:

确定占用CPU资源最多的集群;

对所述占用CPU资源最多的集群进行任务迁移并按预设规则进行分配。

在一种可选的实施例中,所述确定占用CPU资源最多的集群,包括:

设置负载极限范围,所述极限范围包括Lmin和Lmax,所述CPU利用率在[0,Lmin]之间为低负载状态,所述CPU利用率在(Lmin,Lmax)之间的为一般负载状态,所述CPU利用率在[Lmax,1)之间的属于高负载状态,其中,Lmin为极限范围最小值,Lmax为极限范围最大值。

在一种可选的实施例中,所述负载迁移步骤包括:

直接迁出:将超过高负载阈值的节点直接迁出;

直接迁入:将超过高负载阈值的节点直接迁入低于负载阈值的节点中;

关键任务切割:将经过直接迁出步骤和直接迁入步骤后个别一般节点变成新的高负载节点作为关键处理节点,将所述关键处理节点按照预设规则进行切割。

在一种可选的实施例中,所述直接迁出步骤包括:

获取节点负载高于阈值的数量,记为Nh,;

获取节点负载低于阈值的数量,记为Nl;

获取节点负载即不高于也不低于阈值的数量,记为Nn;

若存在Nh大于等于Nl,则按照负载顺序由大到小取出Nl个高负载节点,将取出的Nl个高负载节点与负载升序排列的低负载单元一一配对,剩余(Nh-l)个高负载节点与降序排列的Nn按序列依次配对,超过高负载阈值的节点按照配对顺序被直接迁出,放在临时路由表中。

在一种可选的实施例中,按照公式(1)对取出的Nl个高负载节点与负载升序排列的低负载单元一一配对:

Nh(1,2,…,l)=Nl(1,2,…,l);(1)

按照公式(2)对剩余(h-l)个高负载节点与降序排列的Nn个即不高于也不低于阈值的节点按序列依次配对:

Nh(l+1,l+2,…,h)=Nn(1,2,…,h-l);(2)

其中,其中,Nh为节点负载高于阈值的数量,N1为节点负载低于阈值的数量;Nn为节点负载即不高于也不低于阈值的数量。

在一种可选的实施例中,所述关键任务切割包括获取拆分后第1个节点的键值,第i个节点的键值,最高负载阈值,拆分后第2个节点的键值;

根据所述拆分后第1个节点的键值,第i个节点的键值,最高负载阈值,拆分后第2个节点的键值对所述关键处理节点进行任务切割。

在一种可选的实施例中,按照如下公式对所述关键处理节点进行任务切割:

其中,k

在一种可选的实施例中,按照公式(5)将拆分后的部分在剩余低使用率节点中选择合适的节点配对,并重新按照负载顺序加入到路由表中;

按照公式(6)将重新分配好的路由表中的数据间接迁移到低负载节点中:

其中,S(1,2,…l)为存放任务的路由表顺序,Mi

另一方面,还提供了一种偏斜数据流的本发明实施例提供的系统,所述系统包括可读存储介质,所述可读存储介质上存储计算机程序,所述计算机程序用于执行上述任一所述的方法。

本发明的上述技术方案的有益效果如下:

本发明实施例提供的方法至少具有以下有益效果:

本发明实施例提供的方法,可以使集群中所有节点的负载范围处于0.3到0.6之间,负载平衡度大幅度降低,即当前集群对负载平衡恢复率也很大程度提高,在恢复系统负载均衡的同时改善系统性能。

附图说明

图1为本发明实施例提供的偏斜数据流的本发明实施例提供的方法流程示意图;

图2为偏斜数据流的本发明实施例提供的方法所对应的系统架构示意图;

图3为取出的Nl个高负载节点与负载升序排列的低负载单元一一配对,剩余(h-l)个高负载节点与降序排列的Nn个即不高于也不低于阈值的节点按序列依次配对示意图;

图4为超过高负载阈值的节点直接迁入低于负载阈值的节点中示意图;

图5为将拆分后的部分在剩余低使用率节点中选择合适的节点配对,并重新按照负载顺序加入到路由表示意图;

图6为隔离调度方法示意图;

图7为本发明实施例提供的一个示例性A,B两组按照配对关系调节任务示意图;

图8为本发明实施例提供的另一个示例性A,B两组按照配对关系调节任务示意图;

图9为本发明实施例提供的又一个示例性A,B两组按照配对关系调节任务示意图;

图10为WordCount基准测试作业示意图;

图11为CPU利用率与时间关系示意图;

图12为CPU利用率与时间关系示意图;

图13为节点资源使用率示意图;

图14为节点资源使用率示意图;

图15为采用本发明实施例提供的方法均衡后节点使用率示意图;

图16为平均延迟与运行时间关系示意图;

图17为带轴须的负载偏斜密度分布曲线示意图;

图18为带轴须的负载偏斜密度分布曲线示意图;

图19为负载平衡趋势线斜率示意图。

具体实施方式

为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。

随着当下计算机技术的飞速发展和数据量的与日俱增,对分布式流计算系统的研究一直是一个重点问题。与批处理不同,流式数据的特点有以下五个方面:实时性,易失性,突发性,无序性,无限性,所以无法从整体角度对流数据进行操作。流计算环境下由于数据量的暴增导致系统消息传递的方式在不断改进,有效的消息传递方式离不开对低延迟,负载均衡和高速率的研究。早期的流式数据处理系统是集中式架构,一次查询全部集中在一个节点上,这种方式最大的缺点就是如果节点出现资源饱和或过饱和状态,系统处理速度会迅速大幅减慢,进而增加系统的平均处理时间影响系统的性能,因此一些性能优越的大数据流式计算系统应运而生并应用在各个领域。分布式系统都运行在大量相互协作的机器之间,由于这些机器的处理方式和能力不同,无法针对性的识别并处理这些数据,长期运行会引起整个系统的负载波动造成任务堆积,影响系统处理速度,所以需要针对需求的不同选择适合的处理方案从这些大规模,多种类且无法控制的数据,及时调整系统的负载,使系统处理效率长期保持在最佳状态,进而得到有价值的信息并反馈到真实场景中。

在分布式环境下,集群内的节点资源利用率如内存,CPU,磁盘等是系统负载是否均衡的重要判断依据,而海量数据在集群内的部署不均,则会导致某些节点长期被占用处于高载运行状态,另一部分节点资源长时间处于空闲状态。一些基本的调度算法在各节点内的优化力度是有限的,调度过程中资源开销过大,也会造成集群内各个处理单元负载不均衡,既影响了系统的稳定运行,浪费资源和延迟,又增加了集群出现故障的几率。考虑从轻量级的角度出发,不但可以减小组件对环境的依赖,还不需要消耗大量的内存和CPU资源,保证在消息传输和处理的阶段高效利用集群中的组件,根据集群中各节点的负载情况合理的分配任务。

随着用户对网络数据的需求有增无已,持续不断增加的数据导致拓扑结构更加复杂,负载不均现象更加严重,这些都不利于稳定系统的性能和用户的需求。负载不平衡问题是影响分布式处理系统性能的主要因素之一。当系统接收外部输入的数据时,这些规模庞大且不可控的数据会使系统进入超负载运行状态,若不加以处理这些超载任务,继续运行会最终会因为任务分配不均造成系统崩溃。若考虑系统内部的影响,每个节点对任务的处理能力不同,系统为各个节点的资源分配是随机的。这些节点处理任务的速度实时变化,忽略数据流的特性和应用程序的优先级将它们无差别平均分配到多个处理单元上,也会导致各节点产生负载不均匀的情况,部分节点长期被占用呈现过载状态,使得集群产生负载偏斜情况。对于分布式流处理系统的这些特征,需要重新考虑处理能力和负载的关系。在任务分配的初始阶段,系统中各个节点承载能力不同,发送给它们的任务也是随机的,更应该根据这些特点针对性的分配任务。某一时刻某些节点的过载长期堆积就会导致整个系统处理速度变慢影响性能,所以对分布式流式数据处理系统的负载均衡技术进行研究是非常重要的。

负载均衡是现代计算机领域的基础技术之一,也是分布式系统重点考虑的因素之一。负载均衡问题的关键是将负载均匀分摊到多个处理单元,即节点上执行,从而满足对系统高性能和高并发的要求。最初系统对负载均衡技术的应用,只需要满足用户的需求即可,根据需求的不同发出请求信号,再将相应的数据输送到合适位置进行处理。在流处理背景下,针对大量速率与规模无法预测的数据,仅仅使用这种单一的方式处理任务,稍不注意就会引起系统的负载堆积造成任务阻塞,影响系统处理速度和处理能力。

根据负载均衡技术的特征可以将现有的负载均衡方法分为两大类:分布式负载均衡方法和集中式负载均衡方法。分布式负载均衡方法是给集群中的负载信息设置副本,并将副本保存在集群的每一个服务器上,这些服务器的负载均衡方法是统一的。当系统需要对负载进行调整的时候,从某一个进行负载调节的资源开始更新负载信息并发送副本到其他的处理节点上。集中式负载均衡方法中有一个负责收集集群节点负载信息的节点,由它收集负载信息并进行负载决策,接着将复杂的决策信息依次发送回每个节点进行负载均衡处理。

无论是集中式方法还是分布式方法又可以按照任务分配方式的不同分为两个阶段:静态负载均衡阶段和动态负载均衡阶段。静态负载均衡阶段不考虑不同机器的状态,旨在将一组已知的任务和可用的处理器关联,考虑与分配的任务有关的信息,得出预期的执行时间。在最开始进行负载决策的时候不依赖于集群中节点的负载信息,仅仅按照固定的算法为集群中的节点分配任务。在任务开始前根据已知的任务信息制定固定的分配方案,在执行常规操作的时候,这种方法易于设置,且处理任务效率高。典型的算法有:轮询法,随机法,散列法等,这些方法都不考虑集群中各节点在执行任务时的负载变化情况,不能满足最基本的负载均衡要求,它们部署简单但可用性不强,只能用在数据规模较小任务量少且简单的情况下,并不适合流式计算场景下对大规模多来源数据的处理。

针对静态负载均衡阶段的不足,考虑集群中每个节点的当前负载,进入动态负载均衡阶段。这一阶段的系统根据集群中各节点反馈回来的负载信息和集群节点负载变化的情况,对每个节点进行负载决策,与静态负载均衡阶段相比,更加具有模块化的性质。根据系统运行过程中数据流的变化特点,做到不依赖于特定的节点分配任务,动态的将任务分配到不同情况的节点中改变节点当前的负载,以便更快地处理任务,平衡集群的负载不均情况,优化集群的处理速率和性能。典型的算法有:动态加权轮询法,最小连接数算法等。这些方法相较于静态处理阶段实用性更强,应用范围更宽泛。所以在分布式流处理环境下对负载均衡技术的研究集中在如何处理集群中节点的实际负载这一问题上。

上游数据流输入系统时,由于某些数据存在属性上的分散或聚集现象呈现出偏斜趋势,导致这些数据被顺序平均分配到多个处理单元上运行,由于每个节点上处理任务的能力和速度不同,产生系统内部负载偏斜现象。流处理系统收到的数据的大小和速度不可预测,导致其处理方式非常不稳定,造成系统的负载波动,需要有效的分组策略应对连续范围查询。从外部数据流入处理系统的角度来看,复杂数据流入系统,长期占用部分资源导致系统出现负载偏斜,经过时间累计偏斜现象逐渐堆积,造成节点崩溃和数据丢失。另一方面,从系统的内部角度考虑,数据是随机分配给节点的,它们的通信开销,使用频率和处理能力共同影响负载,和集群其它性能,所以必须同时考虑节点的计算能力等静态因素和任务数量等动态因素,及时纠正产生负载偏斜的部件,恢复系统正常运作。

在处理实际数据的过程中,仅考虑资源的一维调度是远远不足以应对当下的用户需求的,组件内部资源分配差异较高也会消耗大量的资源,影响处理时间。尝试细化问题将一维资源细分成二维,分层对系统负载进行局部调优。在分布式环境中,集群中各节点对内存、CPU、磁盘等资源的利用是系统负载均衡的主要依据。系统中每个节点处理任务的能力和速度不同,给它们分配任务也是随机的,这种分配方式会导致一些节点长期处理同一个任务,造成任务堆积负载升高,而另一部分节点的资源长期闲置,产生负载偏斜现象,如图1所示。负载偏斜情况用一条密度曲线表示,这些密度曲线有的平滑有的极其凸出,曲线越突出代表集群中负载分布越密集,两端极值相差不大,相对应的系统负载越均衡。而负载不均衡的集群呈现出的密度曲线非常低矮平滑,节点占用的负载越分散且差值极大。鉴于此,本发明实施例提供了一种偏斜数据流的本发明实施例提供的方法,可以解决上述技术问题。

请参见图1,图1为本发明实施例提供法人一种偏斜数据流的本发明实施例提供的方法流程示意图,方法包括:

S101、获取处理所需的数据。

S102、根据数据为节点提交任务。

S103、节点执行上游不断提交的任务,根据任务的类型对提交的任务分不同处理方法进行处理。

其中,不同处理方法包括:

负载迁移步骤:对负载产生偏斜的集群动态分配资源,直到负载恢复到合理范围内。

数据分发步骤:根据负载范围的不同对负载进行分组,存放各阶段产生的关键任务和各节点间由于负载差异需要调节的资源。

时钟监控步骤:定期对集群负载进行一次判断,确定是否需要对集群负载进行均衡处理,确保在处理任务时不会出现不均匀的负载。

本发明实施例提供的方法至少具有以下有益效果:

本发明实施例提供的方法,可以使集群中所有节点的负载范围处于0.3到0.6之间,负载平衡度大幅度降低,即当前集群对负载平衡恢复率也很大程度提高,在恢复系统负载均衡的同时改善系统性能。

以下将通过可选的实施例进一步解释和描述本发明实施例提供的方法。

S101、获取处理所需的数据。

需要说明的是,本发明实施例提供的方法(St-Stream:A Study of Two-LevelCollaborative Load Balancing Strategy for Skewed Data Streams)在分布式实时流处理计算系统Apache Storm上实现,请参见图2,由一个主节点和多个工作节点组成。主节点运行了一个守护进程Nimbus,用于分配代码、布置任务和故障检测。每个工作节点都运行了一个守护进程Supervisor,用于监听工作,开始和终止已经分配好的工作进程。Nimbus和Supervisor两者的协作工作是由分布式应用程序协作服务软件ZooKeeper来完成的。ZooKeeper用于管理集群中的不同组件,同时保存了集群中所有的有状态信息,根据上游的写状态信息分配任务并发送给下游组件。在处理数据的过程中随时可以重启ZooKeeper重新获取状态信息,保证消息的准确性。需要说明的是,Apache Storm系统、进程Nimbus、进程Supervisor以及服务软件ZooKeeper均为本领域公知常识,本发明实施例对此不再逐一解释。

S102、根据数据为节点提交任务。

请参见图2,本发明实施例提供的方法所对应的系统包括四部分,Ganglia收集系统和数据库是数据收集组件,负责初始化前期收集的数据。启动Nimbus为主节点用于提交任务,给集群中的工作节点分配任务,集群中各个节点和拓扑状态可以通过UI界面实时监控并查看。Nimbus和Supervisor是由Zookeeper连接的,并起到调节各节点之间的通信和整个集群的运作的作用。Supervisor用于接收Nimbus分配的任务,管理worker进程并按照工作进程的不同执行实际的计算任务。Executor流量交换在槽(slot)中进行可以减少流量交互和通信延迟。Supervisor中的工作节点负责执行上游不断提交的拓扑,为提交的任务分配处理单元,即本发明实施例中所述的工作节点,需要说明的是,本发明实施例中所述的处理单元即工作节点,所述的任务即拓扑任务,后续不再逐一解释。

S103、节点执行上游不断提交的任务,根据任务的类型对提交的任务分不同处理方法进行处理。

Supervisor中的工作节点负责执行上游不断提交的任务,为提交的任务分配处理单元。

其中,不同处理方法包括:

负载迁移步骤:对负载产生偏斜的集群动态分配资源,直到负载恢复到合理范围内。

数据分发步骤:根据负载范围的不同对负载进行分组,存放各阶段产生的关键任务和各节点间由于负载差异需要调节的资源。

时钟监控步骤:定期对集群负载进行一次判断,确定是否需要对集群负载进行均衡处理,确保在处理任务时不会出现不均匀的负载。

进一步地,本发明实施例所对应的系统对提交的任务的处理分为三模块:负载迁移模块,数据分发模块和时钟控制模块。

负载迁移模块主要负责对产生偏斜的处理单元动态分配资源,直到恢复负载到合理范围内。数据分发模块负责按照负载范围的不同对负载进行分组,存放各阶段产生的关键任务和各节点间由于负载差异需要调节的资源。时钟监控模块需要定期对集群负载进行一次判断,确定是否需要执行本发明实施例提供的方法,确保在处理任务时不会出现不均匀的负载。

需要说明的是,本发明实施例提供的方法可以整体分为两个处理阶段,第一阶段将数据库和Ganglia系统的初始化数据传入系统,并使用迁移分配算法将节点内部的过载数据恢复到负载的基本范围内,以弥补节点内部处理数据能力的差异。第二阶段各个节点之间处理任务时会发生负载偏斜现象,在不影响系统处理能力的情况下,通过时钟监控步骤监控每隔T时间判断集群负载是否超出阈值范围,并对相应部分进行调整,恢复集群负载至正常阈值范围内,提升系统性能。

进一步地,S1031包括:

确定占用CPU资源最多的集群。

对占用CPU资源最多的集群进行任务迁移并按预设规则进行分配。

在一种可选的实施例中,确定占用CPU资源最多的集群,包括:

设置负载极限范围,极限范围包括Lmin和Lmax,CPU利用率在[0,Lmin]之间为低负载状态,CPU利用率在(Lmin,Lmax)之间的为一般负载状态,CPU利用率在[Lmax,1)之间的属于高负载状态。其中,Lmin为极限范围最小值,Lmax为极限范围最大值。

可以理解的是,有效降低节点利用率的关键是选择占用CPU资源最多的处理单元进行任务迁移并按规则分配。

作为一种示例,设置负载极限范围L(Lmin,Lmax)=(0.3,0.6)。CPU利用率在[0,0.3]之间处于低负载状态,集群最低警戒阈值Lmin=0.3,对于处在负载范围(0.3,0.6)之间的处理单元为一般负载状态,而利用率处于[0.6,1)之间的属于高负载状态,最高警戒阈值Lmax=0.6。

需要说明的是,根据上游输入的初始化数据并分发任务,是用哈希分配方法对不同的键值分配节点内的不同槽位。哈希分配方法为本领域现有技术,本发明实施例不再详述,通过时钟监控模块判断在一个时钟周期内是否存在负载不均的情况,并对这些资源根据配对原则进行迁移调整,消除资源分配不均产生的超载情况。

在一种可选的实施例中,负载迁移步骤包括:

直接迁出:将超过高负载阈值的节点直接迁出;

直接迁入:将超过高负载阈值的节点直接迁入低于负载阈值的节点中;

关键任务切割:将经过直接迁出步骤和直接迁入步骤后个别一般节点变成新的高负载节点作为关键处理节点,将关键处理节点按照预设规则进行切割。

在一种可选的实施例中,直接迁出步骤包括:

获取节点负载高于阈值的数量,记为Nh,;

获取节点负载低于阈值的数量,记为Nl;

获取节点负载即不高于也不低于阈值的数量,记为Nn;

若存在Nh大于等于Nl,则按照负载顺序由大到小取出Nl个高负载节点,将取出的Nl个高负载节点与负载升序排列的低负载单元一一配对,剩余(Nh-l)个高负载节点与降序排列的Nn按序列依次配对,超过高负载阈值的节点按照配对顺序被直接迁出,放在临时路由表中。

在一种可选的实施例中,请参照图3,按照公式(1)对取出的Nl个高负载节点与负载升序排列的低负载单元一一配对:

Nh(1,2,…,l)=Nl(1,2,…,l);(1)

按照公式(2)对剩余(h-l)个高负载节点与降序排列的Nn个即不高于也不低于阈值的节点按序列依次配对:

Nh(l+1,l+2,…,h)=Nn(1,2,…,h-l);(2)

其中,其中,Nh为节点负载高于阈值的数量,N1为节点负载低于阈值的数量;Nn为节点负载即不高于也不低于阈值的数量。

直接迁入:将超过高负载阈值的节点直接迁入低于负载阈值的节点中;

如图4所示,存储在路由表中的处理单元依次出栈,按照配对顺序和数量直接迁入到低使用率节点中,排除一个时钟周期内高负载任务对集群造成的影响,接着针对各节点之间存在的负载差异进行调节。

在一种可选的实施例中,关键任务切割包括获取拆分后第1个节点的键值,第i个节点的键值,最高负载阈值,拆分后第2个节点的键值;

根据拆分后第1个节点的键值,第i个节点的键值,最高负载阈值,拆分后第2个节点的键值对关键处理节点进行任务切割。

在一种可选的实施例中,按照如下公式对关键处理节点进行任务切割:

其中,k

在一种可选的实施例中,请参见图5,按照公式(5)将拆分后的部分在剩余低使用率节点中选择合适的节点配对,并重新按照负载顺序加入到路由表中;

按照公式(6)将重新分配好的路由表中的数据间接迁移到低负载节点中:

其中,S(1,2,…l)为存放任务的路由表顺序,Mi

进一步地,经过直接迁进和直接迁出操作后,可能存在个别一般负载处理单元变成新的高负载处理单元,这种情况下称这些处理单元为关键处理单元。对关键处理单元不能直接进行配对迁移,需要进行任务切割,由公式(3),(4)表示。根据配对规则将拆分后的部分在剩余低使用率处理单元中选择合适的处理单元配对,并重新按照负载顺序加入到路由表中,由公式(5)表示。将重新分配好的路由表中的数据间接迁移到低负载处理单元中,由公式(6)表示。

如图6所示,对于工作节点之间产生的负载不平衡现象,存在一些节点的负载处于平衡范围内,而另一部分节点的负载低于最小阈值Lmin,两种节点之间存在负载偏差。以50个节点为例,对这些节点使用隔离调度方法为前10个节点优先提交拓扑分配任务,若继续接收上游数据会产生负载偏斜现象,造成剩余节点资源的浪费。

提交拓扑任务后虽然经过任务迁移方法调节点内高载slots(槽)对集群的性能的影响,但是对于各个节点间处理能力的不同仍然会产生负载偏斜现象。按照阈值对每个节点的资源利用率进行排序,此时可以分为两组,节点负载范围在一般范围的为m组,记为Nm(1,2…,m),其他节点为l组,记为Nl(1,2,…,l)。对两组节点进行如下操作:

(a)若集群中l组节点的数量小于m组节点的数量时,按以下方式进行配对调优:将l组节点按照负载由小到大顺序标记,m组节点倒叙标记,对两组节点依次配对,并将任务分配给l组配对节点。如图4-7所示,A为l组的一部分节点,B为m组的一部分节点,对A,B两组按照配对关系调节任务。

调优后的节点按照负载大小重新被添加到m组中,此时选择两队列中的下一组节点继续之前的步骤,直到l组队列为空,证明集群中没有低Lmin的节点,由公式(7)(8)表示。

其中,Nm

如图8所示,(b)如果执行步骤(a)后导致一般的负载节点超过了阈值Lmax,重新变为高负载节点,增加了集群的偏斜程度,称这种节点为关键节点。表明当前m组队列中没有与关键节点相匹配的节点。对关键节点的处理有两种方法:衔接法和放弃关键节点法。衔接法是指放弃与当前m组节点配对的处理单元,在队列中顺序选择下一个节点与关键节点进行配对操作,配对迁移后的新节点按照负载范围重新加入到队列中,直到l组队列为空,等待下一个时钟周期对提交新拓扑后产生的负载偏斜情况重新调节节点负载。

放弃关键节点法是指放弃当前的关键节点,选择l组的下一个节点配对调优,直至队列中只剩下关键节点,忽略关键节点低负载对集群的影响,把这些关键节点当作普通节点,在下一个时钟周期继续提交新的拓扑,等待新拓扑提交任务后若出现负载偏斜现象重新对集群中所有节点的负载配对调优。极少数的关键节点不会对集群性能造成太大影响,还能减少处理时间。

如图9所示,根据提出的偏斜修复模型,对点内处理单元的任务迁移分配方法调节内层由于数据分发不均产生的高载处理单元,同时针对出现的外层节点间由于处理能力不同产生的负载偏斜情况,使用资源组合调优方法调整低载节点造成的集群节点级别的负载偏斜情况。在上游数据分发的同时动态调整集群产生的高载偏斜和低载偏斜两种极端情况,保证集群运行过程中的负载均衡。

需要说明的是,本发明实施例提供的方法基于Storm 2.2.0开发,并可以安装在CentOS 7.0之上,使用Ganglia Web 3.7.2进行负载监控。该集群由8台机器组成,其中一台机器被指定为运行storm nimbus的主节点,其余7台机器作为监督者节点工作。本发明实施例使用Ganglia来收集每个节点的CPU利用率。进一步地,St-Stream(A Study of Two-Level Collaborative Load Balancing Strategy for Skewed Data Streams)平台的配置如表1所示。

表1

软件配置环境如表:2所示:

表2

由于本发明实施例提供的方法与CPU利用率紧密相连,所以实验方案采用CPU密集型线性计算模型。如图10所示,WordCount基准测试作业是由四个顶点组成的CPU密集型线性拓扑,每个顶点所代表的任务如下:

1)编号为1的顶点为Spout,并行度为1,负责从Kafka中拉取文本数据。

2)编号为2的顶点为Bolt,并行度为11,负责将字符串切割成单词。

3)编号为3的顶点为Bolt,并行度为8,负责统计每个单词的个数。

4)编号为4的顶点为Bolt,并行度为1,负责将计算结果放入Redis数据库。

本次实验在传统负载均衡方法和本发明实施例提供的方法的环境下,分别运行上述的WordCount基准测试。在两种不同的方法下,首先使用Ganglia监控工具统计CPU资源消耗情况,用于对比两种方法的CPU资源消耗情况,然后根据Storm框架下的作业监控工具得出Slot资源插槽消耗的消耗情况,最后通过计算结果中的时间戳统计每50秒范围内数据流计算的平均延迟时间。

(1)CPU利用率:CPU利用率是执行任务所占有CPU资源量与总CPU资源的比值,反映了每个节点的资源使用情况。每个节点的CPU利用率的差异越小,代表集群内的资源分布越均匀,负载越均衡。向集群中的节点发送文本数据,观察这些节点CPU利用率的变化。

(2)由于对资源顺序分配导致系统中各节点资源使用的不平衡,一些节点的资源被长期占用。如图11所示,S4节点的CPU利用率长期处于80%到90%之间,这可能导致系统负载长期向S4节点偏斜。而一些节点的资源长期闲置,S1节点的CPU利用率长期在10%到15%之间,产生负载偏斜现象。使用本发明实施例提供的方法可以将S4节点的部分任务分给S1节点,S4从长期的高负载状态恢复到一般负载,S1节点内的空闲资源得到利用,从超低负载状态恢复到一般负载状态,从而使各节点的负载从偏斜状态逐渐恢复到平衡状态,并长期处于负载平衡的范围,,如图12所示。从240秒开始,各节点的CPU利用率在40%到60%之间,没有节点的负载超过60%或低于40%,集群处于并长期保持在相对平衡的状态。

(3)资源插槽使用率:如图13和图14所示,节点内的Slots资源使用情况反映了每个节点前后的负载趋势。资源分配越不平衡,节点内负载迁移和节点间负载操作后,实际槽位使用率的差异就越大。只需要检查前后槽位利用率的差异,就可以知道集群内的节点是否能从不平衡状态恢复到平衡状态,变化的差异用Δ表示。

(4)如图16所示,与Storm相比本发明实施例提供的方法的槽位使用率整体逐渐处于稳定水平。以S1节点为例,使用本发明实施例提供的方法后,该节点由原来的低负载节点恢复到正常范围内,大约24%的资源被重新利用了。而S5节点本身处于一般负载范围内,负载前后差异只有3.75%,表明除非出现增删节点的情况,否则点内资源不会有较大变动。经过改进集群中所有节点的资源使用情况都得到了改善,较大一部分资源都得到了合理利用。

(5)系统延迟:延迟能反映系统运行任务的整体处理时间,是处理数据时间戳与进入时间戳的差值。延迟越小越证明本发明实施例提供的方法对数据的处理能力越强。分别对Storm和本发明实施例提供的方法在平均延迟时间为在50s内的tuple流的平均延迟时间进行实验。

如图16所示,提交拓扑结构后本发明实施例提供的方法的延迟明显低于Storm,在200秒时,Storm的延迟是17毫秒,而本发明实施例提供的方法的延迟是14毫秒,与改进前相比延迟减少了大约17.6%。所以提出的本发明实施例提供的方法在平衡集群负载的基础上,可以有效降低系统延迟。

负载恢复率:带轴须的负载偏斜密度分布曲线能够直观的反映负载样本的分布规律,根据设置的负载范围,分布曲线越瘦高代表某一部分负载分布越集中,分布曲线越矮胖代表负载分布越分散,轴须可以表示数据分布频数。如果多条密负载度曲线分散分布,表明集群存在负载偏斜情况,这些节点负载极值相差很大,需要调节这些负载直到所有密度分布曲线的峰值相对集中在一个较小的范围之内,这样的负载分布曲线才算均衡。

如图17所示为负载偏斜时的密度分布曲线,集群中的七个节点分别分散在不同的负载范围内,轴须呈现系数分布的特征,根据给定的负载范围发现其中S1和S2两条密度曲线处在低负载范围内,S6和S7两条密度曲线超出负载规定范围,这些曲线之间产生负载偏斜情况。使用本发明实施例提供的方法之后集群的负载密度分布曲线如图18所示,此时的轴须线大部分密集分布在中间区域,只有极少量的轴须线散落在轴须横轴的两端,且各条密度曲线峰值相对集中在(40,60)的负载范围内呈现出紧凑分布的特征,这些密度分布曲线表明与图16相比,存在负载偏斜的部分密度曲线经过调整后使集群负载恢复到均衡状态。

经过本发明实施例提供的方法进行调整,集群中所有节点的负载范围处于0.3到0.6之间,如图19所示,负载平衡趋势线斜率逐渐变小。从当前集群的偏斜量变化可以算出,负载平衡度从1.738降低到1.4401,即当前集群对负载平衡恢复率为82.86%,在恢复系统负载均衡的同时改善系统性能。

另一方面,还提供了一种偏斜数据流的本发明实施例提供的系统,系统包括可读存储介质,可读存储介质上存储计算机程序,计算机程序用于执行上述任一的方法。

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号