一种大规模流式数据处理系统的瓶颈节点检测方法与流程

文档序号:12131702阅读:342来源:国知局
本发明涉及一种大规模流式数据处理系统的瓶颈节点检测方法,属于大数据计算、模糊逻辑以及流式预处理
技术领域
:。
背景技术
::随着实时大数据技术的发展,很多公司开始部署自己的流式数据处理集群,维护这些集群的运行需要非常大的开销,而流式数据处理系统的典型特征是数据流大小不稳定,系统的复杂随着事件变换很快。为了使得系统能在少数大流量的情况下也能正常运行,在配置集群的时候需要按照预估的最大流量进行资源分配;但是大流量情况通常只在很少的情况下发生,如果资源配置按最高要求配置,则在大部分时候大部分资源都处于闲置状态,系统的资源利用率非常低,造成严重的资源浪费。因此如何监控一个运行中的集群,快速高效地检测到集群中的瓶颈节点并对其实施扩展成为了云计算基础架构领域的关键问题之一。现在主流的流式数据处理引擎都没有对单个节点过载(瓶颈)检测和进行扩展的设计,比如Storm和S4都是使用静态配置的方式进行作业的,对于流量不稳定的情况不能根据需要动态的分配和回收资源,只能从整体检测系统的运行状态,如果需要扩展则需要停止集群,根据需要编辑静态配置文件重新分配资源然后才能继续运行。针对现在云计算平台对扩展性功能的需求,科研人员研究了几种检测瓶颈节点的方法,并且在Storm等平台上进行了集成,在流式数据处理领域得到了诸多应用。对于流式数据处理系统的瓶颈节点检测和扩展的方方法大体分为三类,第一类是基于阈值的静态判断方法,这是一种简单而直观的方法,但是静态阈值的设定需要用户对应用的负载趋势有很深的理解才能正确设置并且阈值对应用是独立的,云平台不能得知这些阈值怎么确定。第二类是一种基于增强学习的自动决策方式用于自动扩展,这种方式使用马尔科夫决策处理模型和Q-learning算法,使用机器学习的方法通过训练一个判断模型对系统的负载状态做判断;这中方法又两个缺陷:一是初始化性能差,需要很大的训练时间;二是需要很大的状态空间,随着状态变量的增加,状态的数量呈指数增长,状态过多的情况下导致性能下降严重。第三类是基于控制理论的方法,控制理论已经用于web服务器,存储系统,数据中心等系统的自动化管理;控制理论方法常分为开放回路(Openloop)和前馈-反馈(feedbackandfeed-forward)两种方式,开放回路是一种无反馈的方式,它只根据当前系统的状态与系统模型计算一个值,并不判断这个结果对系统的输出的影响是否取得希望的结果。而带反馈的控制器则会观察系统输出,并根据系统的输出相应地改进计算以其得到一个期望的结果。控制理论技术集成到流数据处理系统的方法得到了广泛的研究。PaldenLama和XiaoboZhou等在2010IEEEInternationalSymposiumonModeling,AnalysisandSimulationofComputerandTelecommunicationSystems会议上发表的名为“Automatedcontrolincloudcomputing:challengesandopportunities”即提出了一种使用基于平均CPU利用率调整集群虚拟机数量的控制方法,这种方法使用较为直观易懂的控制逻辑,实现虚拟机资源的自动分配,但是其缺点是过于简单,只考虑CPU使用率这一个参数,变量过于单一难以体现流式数据处理系统整体的负载状态,其效果的可靠性较低,误差较大。在2009年9thIEEE/ACMInternationalSymposiumonClusterComputingandtheGrid研讨会上发表的名为“Self-TuningVirtualMachinesforPredictableeScience”的文章提出了一种控制批处理作业资源的PI(Proportional-Integral)控制器,这种方法根据作业的执行进度建立了一个关于已分配资源的有反馈的模型,虽然这个控制器能有效的工作,但是这个模型主要用来预测批处理系统的执行进度和资源分配,并不完全适合于流式数据处理系统。另外的一种广泛的控制理论是模糊逻辑技术,模糊逻辑控制使用将负载参数映射到一个模糊集合,通过定义的模糊规则集合的运算得到结果对应的模糊变量及其隶属度,最后通过解模糊操作获得一个模糊推理的最终结果。基于模糊逻辑理论的控制系统称为模糊控制器,在2011年的IEEE19thInternationalSymposiumonModeling,Analysis&SimulationofComputerandTelecommunicationSystems会议上发表的名为“FuzzyModelingBasedResourceManagementforVirtualizedDatabaseSystems”提出了一种使用模糊逻辑控制资源动态分配的方法,改方法使用CPU使用率代表输入负载,改方法验证了使用模糊逻辑作为资源分配控制器的可行性,但是该论文主要考虑的是业务逻辑层(数据库)的资源分配,并且也存在选取的输入变量过于简单的问题,不能完全反映流式数据处理系统中数据流多变导致的系统状态多样化特征。上述的已有的资源控制策略虽然在各自的应用场景中有一定的效果,但是基于控制理论的方法大多存在选取输入变量过于简单的问题,而基于增强学习的方法存在初始化阶段性能过低而且学习模型的结果不保证可靠,而简单直观的设置阈值方法则不能适应更多的应用场景,需要对各个应用设置独立的阈值且阈值的设定依赖于对应用复杂程度的了解。本发明目的在于解决上述的问题,提出一个基于控制理论的大规模流式数据处理系统瓶颈节点检测方法,该方法既能获得很好的计算性能,而且选取足够反映流式处理系统特征的多个变量参与计算。我们的发明能及时检测到流量的变化给系统负载带来的变化,及时判断出瓶颈节点进行扩展,以维护只运行一个资源利用最优的集群,达到减小集群规模,节省资源的目的。技术实现要素:本发明的目的是克服现有扩展理论的状态变量选取不充分以及可靠性不高的技术缺陷,提出了一种大规模流式数据处理系统的瓶颈节点检测方法。一种大规模流式数据处理系统的瓶颈节点检测方法所依托的系统,即一种基于模糊逻辑控制的瓶颈检测系统,简称本系统包括初始化单元、节点状态采集单元、模糊推理单元和解模糊单元;一种大规模流式数据处理系统的瓶颈节点检测方法,简称本方法,具体步骤如下:步骤1:初始化单元初始化模糊逻辑引擎,设定输入变量的语义化标签及各语义标签的隶属函数,加载模糊规则集,设定推理结果判定参数;其中,模糊逻辑引擎是实现了模糊逻辑控制语言(FCL)标准(IEC1131-7)以及能进行模糊推理的程序引擎,可使用C++语言实现的fuzzylite以及Java等语言实现的jFuzzylogic;语义化标签是模糊逻辑使用的“真值”,各个输入值(即节点状态)有自己的语义标签及对应的隶属函数,这些应该在初始化节点设置好,通常记录在一个配置文件中,有模糊逻辑引擎读取并解析;输入变量的每个语义标签都会对应一个隶属函数,这个函数的值在0~1之间,假设某输入变量x的取值范围为(m,n),函数f(x,v)表示取值为x时对于语义标签v的隶属函数;一般来说,某个语义标签的隶属函数在直角坐标系中为梯形或三角图形;模糊规则集是事先编写的模糊推理的规则集合,模糊逻辑引擎会读取这些规则并解析,用于后面的逻辑推理;推理结果判定,对于最终的结果我们还需要设置两个阈值:可收缩阈值和可扩展阈值,分别使用threshold_scale_in和threshold_scale_out表示,当解模糊的结果小于threshold_scale_in时即表示当前节点可以回收,当解模糊结果大于threshold_scale_out时表示当前节点需要扩展了;步骤2:节点状态采集单元获取节点状态;我们要对一个节点进行瓶颈状态判断,需要先获取该节点的当前运行状态,对于流式数据处理集群来说,我们选择节点的CPU使用率、内存占用率、数据元组大小为主的信息;其中,节点状态用一个元组表示:statusi={Ci,Mi,Si,Missi},分别表示节点i当前的cpu负载,Ci;内存使用率,Mi;处理元组当前处理的数据大小,Si,;最近时间内未及时处理掉的元组数量,Missi;对于所有数据元组都严格在规定范围内处理完成,即不允许超时的流数据处理引擎,如果有元组的处理超时表示系统已经需要扩展了,所以这类引擎在本系统中的Missi的值永远为0,对于允许出现一些容错的流式数据处理引擎则可以在语义标签中为Miss选项设定一组标签和对应的隶属函数;其中,Ci的范围为0~100,Mi的范围为0~100;Si和Missi的取值范围和应用的具体场景相关;步骤3:模糊推理单元将输入变量模糊化,具体为:模糊推理单元使用步骤2获取的状态元组,设置模糊逻辑处理引擎的输入量,由定义的隶属函数对输入量进行模糊化,这一步骤可以由模糊逻辑处理引擎完成;输入变量模糊化的具体流程如下:步骤3.1用一个隶属函数记录变量对于模糊集的隶属程度,对某个输入变量的每一个模糊集需要分别求组隶属程度;其中,隶属函数,记为μA(x);隶属程度的取值范围为0到1之间的实数;对某个输入变量的每一个模糊集需要分别求组隶属程度,具体为:假设有A1,A2,...,An个模糊集,则需要对这n个模糊集分别求隶属度,得到[μA1,μA2,...,μAn];步骤3.2对所有输入变量分别求其模糊集的隶属程度;步骤4:模糊推理;其中,模糊推理是基于模糊规则的推理,模糊规则的前提,即模糊推理的条件是模糊命题的逻辑组合;模糊规则的结论是表示推理结果的模糊命题,所有模糊命题成立的模糊程度均以相应语言变量定性值的隶属函数来表示,即步骤3所求的模糊化结果;步骤4,具体为:步骤4.1模糊推理单元计算每条模糊规则的结论;使用步骤3得到的模糊化结果计算规则前提部分模糊命题的逻辑组合,并将前提逻辑组合的隶属程度与结论命题的隶属函数做min运算,求得结论的模糊程度;步骤4.2对步骤4.1中所有模糊规则的结论的模糊程度做max运算,得到模糊推理结果;至此,模糊逻辑引擎已提供完备的模糊推理实现,我们只需要定义好模糊规则集,即可调用引擎提供的接口获得推理结果;步骤5:解模糊,获得判定结果;步骤4得到的是结果的模糊集的一组隶属度的值,我们要对这一组结果进行解模糊得到一个节点是否处于瓶颈状态的结论,优选的解模糊方法有最大隶属度方法、加权平均法和重心法(theCenterofGravity,COG);最大隶属度方法即取所有结果中隶属度最大的那个结果作为最终的判定结果,这种方法实现简单但精度较差;更常用的是COG,COG方法通过计算结果集的重心位置作为结果;模糊逻辑引擎中实现了多种解模糊算法,例如jFuzzylogic中只需要在配置文件中指定DEFUZZIFYMETHOD的值为COG既可使用重心法解模糊了;重心法解模糊的结果是一个数值,同于与初始化阶段设置的两个阈值比较,得到最终是应该扩展、应该收缩还是保持不变的决策。至此,步骤1到步骤5,完成了一种大规模流式数据处理系统的瓶颈节点检测方法。有益效果一种大规模流式数据处理系统的瓶颈节点检测方法,与其他大规模流式数据处理系统的瓶颈节点检测方法相比,具有如下有益效果:1.本发明所提的大规模流式数据处理系统的瓶颈节点检测方法只依赖于系统当前的状态和之前的时间节点的系统状态,不需要一个对时间的积分函数的计算;2.本发明所提的大规模流式数据处理系统的瓶颈节点检测方法不需要模型训练,它的准确性和稳定性不由训练数据的影响(本身不需要训练);3.本发明所提的大规模流式数据处理系统的瓶颈节点检测方法的优势在于简化了计算,并且稳定性与可靠性都比较好;附图说明图1是本发明一种大规模流式数据处理系统的瓶颈节点检测方法的执行流程图;图2是本发明一种大规模流式数据处理系统的瓶颈节点检测方法中CPU利用率的隶属函数示例图。具体实施方式下面结合附图和具体实施例对本发明所述方法进行深入阐述。实施例1本实施例具体阐述了本发明应用于流式数据处理系统瓶颈节点检测场景下的流程。步骤A:初始化,本实例使用的模糊处理引擎为Java语言实现的jFuzzyLogic,通过jFuzzyLogic提供的配置文件配置初始化的语义标签和隶属函数。本实例的节点只需要处理一个流入的数据流。是用T表示O的任务,在时间ti时使用Taski表示正在执行的处理的状态。我们使用下面的参数来描述这个状态。pi(t):当前处理的数据元组的大小ci(t):当前节点的CPU使用率mi(t):当前节点的内存使用率missi(t):当前未被处理而miss掉的元组数量我们使用模糊逻辑进行决策的目的是判断一个节点是否达到了瓶颈状态,如果节点是瓶颈状态了就需要扩展这个节点,如果是负载很低的情况则可以回收这个节点。所以我们设定输出为对节点应执行的动作,输出的集合为Out={扩展,维持,收缩}。根据选取的隶属函数,我们分别对上面的四个输入参数和一个输出参数进行模糊化。分别对选取的参数设置语义化标签,即设置它们的模糊集合。对于CPU的使用率,其论域为0%-100%,按照经验,可以设置CPU使用率的语义化标签集合为C={非常低,低,中等,高,非常高};我们把这个集合称为CPU使用率的语言标签。对于内存使用率,其论域范围为0%-100%;同理可以设置为M={非常低,低,中等,高,非常高};对于超时(Miss)掉的元组数量,在本实例中其区间为0-10,设置其模糊集合为E={小,中,大}。同理对于当前处理的数据元组的大小,在本实例中其论域范围为0Mb-10Mb,取其模糊集合为P={小,中,大,非常大}。隶属度函数用分段函数表示,也可以用折线图表示。为了方便,我们使用折线图表示各维度的隶属函数。根据经验,我们认为CPU使用率低于5%认为其对于“非常低”的隶属度为1,即100%认为其为非常低;当CPU使用率高于90%时认为其对于“非常高”的隶属度为1;当其在其他情况,即5%-90%之间时,其隶属度如图2所示。根据一种直观的理解,比如认为CPU使用率和内存使用率都很高的时候认为节点需要扩展了,这样,对每一个模糊化的变量组合设计模糊规则,下表是本实例使用的模糊规则库的一个子集,使用这个模糊规则库进行模糊推理:图1是本发明所提方法所依托的系统执行的流程图。从图1中可以看出,我们的系统作为流数据处理系统的一个插件形式存在,从流式数据处理系统中去状态数据执行结算。模糊逻辑引擎jFuzzyLogic通过读取语义标签和隶属函数的定义执行初始化。然后通过模糊化、模糊推理、解模糊几个步骤获得结果。步骤B:节点状态采集单元获取节点状态。步骤一确定的变量可以在运行时很方便的获取,数据元组的大小是数据流的一个属性,CPU使用率、内存使用率和网口数据流量都可以通过系统接口获得。这几个参数对于流数据处理引擎而言是影响最大的,一个节点的处理性能取决于其CPU计算性能以及内存容量,而系统的吞吐量受到数据流量的大小及单个数据元组的大小的影响。对于主流的处理节点的配置,我们认为磁盘IO性能不会是影响节点吞吐率的主要因素,即时对于机械硬盘存储设备其传输速度对于现在的流数据处理应该也是足够的。步骤C:模糊推理单元将输入变量模糊化,初始化引擎后可以通过Java的接口设置输入量。步骤D:模糊推理,模糊推理同样可以通过调用及FuzyyLogic的Java接口实现。步骤E:解模糊,获得判定结果。在本实例中,使用常用的COG(CenterofGravity)算法进行解模糊,在jFuzzyLogic中设置好解模糊器为COG即可。COG解模糊后会得到一个输出变量(Out)的数值。我们设定结果的判定阈值threshold_scale_in为20threshold_scale_out为80,当解模糊的结果小于20时判定节点可以回收,当解模糊的结果大于80时认为当前节点处于瓶颈状态,需要扩展。以上所述为本发明的较佳实施例而已,本发明不应该局限于该实施例和附图所公开的内容。凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1