Openstack云平台自适应认证系统负载均衡策略研究

2019-09-13 03:39林韧昊朱智强胡翠云
计算机应用与软件 2019年9期
关键词:贝叶斯特征值状况

林韧昊 朱智强,2 孙 磊 胡翠云

1(信息工程大学 河南 郑州 450001)2(郑州信大先进技术研究院 河南 郑州 450001)

0 引 言

近年来,随着云计算技术的高速发展,与云计算相关领域的研究成果层出不穷,开源云平台Openstack是由Rackspace和美国国家航空航天局(NASA)合作研制的一种旨在提供基础设施即服务(IAAS)的虚拟化管理平台,能够提供可靠的云部署方案。目前国内外许多云行业领军企业都以Openstack作为云计算架构的基石,标志着Openstack已经是事实上的开源云平台的行业标准。

随着云用户的不断增多,云平台安全问题日益突出,身份认证技术作为保护云用户信息隐私数据安全的第一道防线,对于云平台安全具有重要意义。Openstack的认证服务主要通过Keystone作为认证授权的中枢组件,但由于Keystone组件的负载压力过大,极易成为性能上的瓶颈,加上云环境下海量用户的并发认证请求,会使得某台认证节点负载过高,导致整个云平台无法正常工作。负载均衡是用来维持系统高可用性的关键技术,一个好的负载均衡策略能够有效地避免数据流量的拥挤、缩短节点响应时间、提高资源利用率,使得负载分布更加均衡,从而保证整个云平台的服务质量(QoS)[1]。文献[2]考虑到任务优先级问题,提出了一种基于蜜蜂觅食策略行为的云环境下的负载均衡技术,但是仅适用于非抢占式任务。文献[3]提出了一种基于改进加权最小连接结合指数平滑预测算法,但是没有充分考虑节点的性能状况,且任务完成时间较长。文献[4]提出了用局部种群减少的方法对遗传算法进行了改进并将响应时间作为算法主要参数,但是该方案对节点负载状况没有进行充分考量,且自适应性不足。文献[5]提出一种动态负载均衡算法,重点考虑虚拟节点的资源分配问题,通过CloudAnalyst软件进行仿真。但是该算法每次分配资源需要对所有虚拟节点负载状况进行检测,导致算法效率较低。文献[6]采用朴素贝叶斯算法对各节点负载状态进行分类,并根据节点状态分类结果来实现任务和资源分配的合理调度。文献[7]在文献[6]的基础上提出了一种模拟蜜蜂采蜜机理的负载均衡策略,通过模拟蜂群的觅食行为同时考虑到任务优先级来实现负载均衡。

上述负载策略算法存在工作效率较低、节点平均响应时间较长、自适应性不足以及对节点负载状况及性能考虑不充分等问题。为了提升Openstack云平台认证系统的性能,针对Keystone节点,提出一种基于改进朴素贝叶斯分类算法的负载策略。通过朴素贝叶斯算法对Keystone节点的负载状况进行分类。并通过信息熵算法确定各特征值指标所占权重,使得分类结果具有更高的准确率。通过一种基于往返时延的性能评估方法来表示节点的性能,用自适应系统和阈值判定策触发条件来防止短时间内认证服务请求暴增的情况,并由任务的合理分发和迁移来避免单个节点因负载过高宕机,从而实现对Openstack云认证系统的负载均衡。通过实验对比分析,本文所提策略相较于WRR(Weighted Round-Robin)算法、动态负载均衡算法(Dynamic Load Balancing, DLB)[5]、遗传算法[4](Genetic Algorithm, GA)、NB(Naive Bayes)算法[6]及BHHLB(Bees Hunting Honey Load Balancing)算法[7],降低了任务完成时间及每台虚拟节点的平均响应时间,且相较于DLB算法、GA算法、NB算法及BHHLB算法和有着更高的迁移准确率。

1 Openstack认证系统分析

1.1 开源云平台Openstack

Openstack作为开源云平台的行业标准,相较于其他的虚拟化管理软件,由多种独立的组件共同组成,各组件之间分工明确,协同完成云平台中的各项工作,构成云平台的实质就是组合这些组件[8]。各组件之间统一采用Rest-full API接口规范来提高其标准化及快速扩展能力。Openstack采用了无共享、基于消息的架构,在部署方面较为灵活,并且具有模块松耦合、组件配置灵活、易于二次开发等优点。

由于Openstack云平台采用了灵活的分布式低耦合SOA架构模式,所以需要一个类似服务总线的模块对Openstack中的各个组件进行统一的授权认证及服务规则管理。

1.2 认证服务组件Keystone

Openstack在Essex版本后增加了Keystone组件作为串联Openstack中各组件的授权认证中心。Keystone组件通过其特有的插件化架构为Openstack云平台用户提供统一的访问控制、授权管理、目录服务管理以及令牌(Token)管理等服务。Keystone组件的身份认证机制主要通过Token的签发和验证实现来实现,云用户在与Openstack其他应用组件交互之前,需要从Keystone获得令牌,作为访问Openstack API和其他服务资源时提供的一种身份证明。Keystone详细工作流程如图1所示。

图1 Keystone详细工作流程图

Keystone组件负载分析:

Keystone作为Openstack中的服务总线模块,访问Openstack中所有应用组件都需要经过Keystone组件的认证与授权,用户与其他组件交互前都需要通过Keystone获取服务列表,获取每个服务的访问地址Endpoint。这使得Keystone成为Openstack云平台的认证授权中枢,与API Client以及其他组件有着大量的交互次数。

文献[9]对Keystone的安全性进行了分析,基于Keystone的认证方式是通过用户名/口令以明文形式发送,默认使用HTTP协议进行认证,存在诸多安全隐患。由于Keystone组件具有良好的扩展性,可以与其他后端授权系统集成,如增加认证服务器构成加密的访问环境。但是通过增加新的认证协议实现更安全的通信必然会带来更多的开销。相较于普通的基于用户名/口令的认证方式,高安全性的认证方式会带来额外的通信开销与计算开销,使得Keystone组件具有更高的负载。

Keystone组件采用基于Token的认证方式,UUID Token需要持久化后端存储,所有API的调用都需要通过Keystone组件对Token进行认证。而PKI Token的长度负载较重,不推荐用于生产部署。这种基于Token的认证方式在一定程度上也增加了Keystone组件的负载,使得Keystone成为性能上的瓶颈。

Keystone作为Openstack云平台的认证核心组件,同时也是制约Openstack云平台是否能够高效稳定运行的关键。但是Openstack云平台基于Keystone组件的认证系统,在任务分发至Keystone节点时采用的是随机分配的方法,没有考虑到节点的性能及负载状况同时也没有相应的任务分发及迁移策略。所以通过适当的负载均衡策略对Openstack基于Keystone组件的认证系统进行负载均衡是非常有必要的。

2 自适应负载均衡机制

2.1 自适应负载管理框架设计

为了更好地应对云环境下的海量用户的并发认证请求,本文设计了自适应负载均衡管理框架[10],通过各模块协同工作来实时收集各节点当前的负载和性能状况,从而提高本文策略动态的自适应能力。

RabbitMQ是目前常用的开源消息队列组件,本文通过RabbitMQ组件作为消息中间件来实现Openstack认证系统高并发的业务的异步处理。应用服务器在接收到用户请求后,首先写入消息队列,能够有效防止数据流量的拥堵和大量日志传输问题。

采集模块主要负责以t1为周期通过心跳机制实时收集集群中各Keystone服务节点负载及性能状况并提交至计算模块。计算模块首先判断是否满足触发负载策略的条件,若触发负载策略,则将采集周期改为t2(t2

图2 自适应负载均衡管理框架图

2.2 自适应机制触发阈值

当集群处于低负载状态时,使用负载策略会引起系统不必要的开销,本文通过两种触发阈值来唤醒集群中的负载均衡机制。

第一种情况是短时间内服务请求暴增的情况。例如在上班高峰期大量桌面云同时启动会导致Keystone节点在短时间内负载过高,从而影响到云平台的正常工作。针对这种情况本文设计了负载变化量阈值Rthreshold,由中央控制节点在单位时间内收集并计算节点的负载变化量ΔLoadi,并判断在当次检测中如果ΔLoadi>Rthreshold则触发集群中的负载均衡机制并缩短对节点负载状况检测的周期。关于负载变化量取CPU或内存变化较为敏感的部分[11]。ΔRC表示单位时间内CPU使用率变化,ΔRM表示单位时间内内存使用率变化。若ΔRC>ΔRM,则ΔLoadi表示ΔRC,若ΔRM>ΔRC,则ΔLoadi表示ΔRM。关于Rthreshold的设定需参考实际的应用场景中的应用服务带来的I/O请求次数以及需要满足的云用户数量。

第二种是设置高位阈值[12]Hthreshold。当某台Keystone服务节点的当前负载量超过所设定的阈值时,表示该节点已经处于高负载状态,此时需要触发负载均衡策略。关于高位阈值的触发需要结合预测模块根据任务队列给出的预测结果Loadforecast来避免瞬时峰值引起策略触发带来的资源消耗问题。阈值的设置必须有一个合理的依据,设置过高会导致某台节点负载过高但不能及时处理,设置过低会导致策略频繁触发引起系统不必要的开销。因此需要根据Keystone节点具体情况及云用户的实际需求来设定。

3 基于改进朴素贝叶斯分类算法的负载策略

本文使用KS{KS1,KS2,…,KSn}表示n个处于工作状态的Keystone服务节点集合。使用T{T1,T2,…,Tm}表示m个要处理的认证请求。为了提高系统资源利用率,将Keystone虚拟节点作为认证服务基本执行单元。

朴素贝叶斯算法是数据挖掘中常用的条件假设独立分类算法。相较于决策树、人工神经网络等分类算法[13]具有简单、高效、易实现及实用性强等优点,能够处理很好地多分类任务,并且适合增量式训练,新增数据不需要重建所有的知识库,能够很好地应对云环境下的服务节点不断变化的问题。由于Keystone作为Openstack云平台的认证交互中心,与其他组件API存在大量交互次数,所以本文通过朴素贝叶斯算法对Keystone服务节点的负载状况进行直观的分类,从而更好地实施负载均衡策略。

本策略根据系统工作时虚拟认证节点的负载状况,利用朴素贝叶斯分类算法将虚拟认证节点分为低负载状态集合L,中负载状态集合M及重负载集合H。为了使算法具有更高的分类准确度,对朴素贝叶斯分类算法进行改进,通过信息熵算法确定各特征值指标所占的权重,使算法的分类结果具有更高的准确率。

3.1 相关概念

定义1负载特征值,将虚拟节点k的各负载特征值表示为L(k)=(L1,L2,L3,L4,L5),用来反映该节点的当前负载状况。

定义2CPU特征值,L1=LC=α1C1+α2C2,其中:C1表示虚拟认证节点k的CPU处理能力,主要衡量指标为MIPS(Million Instructions Per Second);C2为该节点的当前CPU利用率。

定义3内存特征值,L2=LM=β1M1+β2M2,其中:M1为该节点的的物理内存;M2为节点当前内存利用率。

定义4带宽特征值,L3=LB=χ1B1+χ2B2,其中:B1为该节点的网络带宽资源:B2表示节点当前带宽资源利用率。

定义5I/O特征值,L4=LI=δ1I1+δ2I2,其中:I1表示该节点的磁盘I/O性能IOPS (Input/Output Per Second);I2表示节点当前的磁盘IO资源利用率。

定义6队列特征值,为了更好地实施负载策略通过预测模块对任务队列进行统计避免瞬时峰值引发不必要的迁移和触发。L5=LQ=ε1Q1,其中Q1为队列长度。

定义7训练样本分类集,LC={LCi|i=1,2,3},其中:LC1表示低负载集合;LC2表示中负载集合;LC3表示重负载集合。

3.2 基于信息熵算法的特征指标权重评价模型

信息熵算法是为了解决对信息的量化度量问题的常用算法,可以表示一组不确定的事物所包含的信息量的多少,也可以用于度量已知数据中包含的信息量及权重。本策略通过信息熵算法对不同特征值指标赋予一个权值来解决各个特征属性对类别决策影响相同的问题,从而使朴素贝叶斯分类算法的分类结果具有更高的准确率。

根据所定义的决定负载状况的5个特征值指标可得到矩阵V:

(1)

根据云计算中心采取资源冗余来使得云资源利率达到最大的特性,可根据式(2)对矩阵进行标准化处理,得到标准化矩阵R,且矩阵R满足归一性。

(2)

(3)

则第i项虚拟资源特征状态指标下的第j个评估对象的特征比重为:

(4)

特征指标的信息熵计算公式如下:

(5)

(6)

3.3 基于改进朴素贝叶斯的负载状况分类算法

(7)

P(kx|LCi)=P((L1kx,L2kx,L3kx,L4kx,L5kx)|LCi)=

(8)

式中:P(Lj|LCi)表示未知样本kx的负载特征值Lj属于样本分类LCi的概率,可通过训练数据获得。由此可知LCi的后验概率为:

(9)

由于分母P(kx)不依赖于P(LCi)的特征,所以可以将分母设为常数C,则:

(10)

根据最大后验概率(MAP)决策准则,可得分类器对未知样本kx分类函数为:

argmax{P(LCi|kx)P(LCi)}i=1,2,3

(11)

根据式(10)和式(11)可得:

(12)

对式(12)进行最大似然化,并对似然函数取对数,加入式(6)中根据信息熵算法所得权重,得到:

(13)

综上可得Keystone虚拟节点的负载状态LC(kx)可表示为:

(14)

3.4 性能评估模型

构成云端的服务节点是异构的,能否准确地评估集群中各服务节点的性能是负载策略能否有效实施的关键一环。目前常用的基于硬件性能的评估方法需要进行大量的实验且通用性较差,而基于压力测试的评估方法无法实时掌握节点性能且会占用一定系统开销。

往返时延RTT(Round-Trip Time)是衡量系统性能的重要指标。这里往返时延是指:从请求端建立连接起发送的第一个报文开始,数据包在请求端与服务端之间的传输时间以及请求被服务端处理后返回结果的时间之和。本文通过基于往返时延的评估方式来评估认证节点的性能。

考虑到任务的多样性,单位时间内每个Keystone服务节点处理的请求数量及种类是不同的,本文以需求量最高的令牌验证服务为例,取单个节点在一定时间内令牌验证服务的平均往返时延作为衡量该节点的性能指标。并对所有认证节点进行一次测试,若某台节点在一次采集周期内未处理请求,则使用上个周期采集到的数据进行评估;若为新添加的节点,则使用测试数据作为衡量其性能值的依据。用P来表示一台Keystone节点的性能:

(15)

(16)

式中:RTTtotal表示节点单位时间内的往返时延之和;RTTave为一次检测周期内的平均往返时延,ΔN表示单位时间内处理的并发请求的数量;λ为常数系数。

3.5 策略流程

本文提出一种基于朴素贝叶斯算法的负载策略,由中央控制节点的采集模块通过心跳机制实时收集节点的负载信息,再交由计算模块计算出节点KSi的负载特征值,并结合节点的性能状况,对任务进行合理的分发和迁移,达到负载均衡的目的。

Task1自适应触发策略:在集群整体负载水平较低时,触发负载均衡策略会引起不必要开销。由中央控制节点以T0为周期收集并计算节点负载状况并通过自适应阈值来控制策略的触发,不触发时默认以加权轮询方式分发,阈值设定需根据实际应用场景及用户需求而定。

Task2任务分发策略:通过朴素贝叶斯算法对节点负载状况进行分类,并计算出各集合内节点的性能值。根据分类结果对三种负载状况集合中的Keystone节点进行排列,将任务按照低负载集合节点优于中负载集合节点优于重负载集合节点的优先级进行分发。且在同一集合内,根据性能值的高低再对同一集合中的节点进行排序,确保能够分发到性能最高的节点。

Task3任务迁移策略:在任务迁移方面,为了使迁移目标更加准确,尽可能避免不必要或者过多的迁移,所以规定任务迁移仅在高负载集合和低负载集合之间进行。迁移部分同分发部分,根据负载状况分类结果对节点进行排序。根据排序结果,将高负载集合中节点的任务向低负载集合节点进行迁移,且优先迁移到同一集合中性能较高的节点中。

Task1:自适应触发部分

1. while(true)

2.Load=Loadnow-Loadbefore;

3. if ΔLoad>RthredholdorLoadnow>Hthredholdthen

4. break;

5. else

6. sleepT0seconds;

7. end if

8. end while

Task2:任务分发部分

9. while(break)

10. Initialize;

11. for eachKSido

12. classifyKSiintoL,M,H;

13. calculatePfor eachKSiintoL,M,H;

14. sortKSsin the order ofL,M,H;

15. sortKSiin same set in order ofPfrom high to low;

16. end for

17. for eachTjdo

18. distributeTjtoKSiby priority fromLtoH;

19. distributeTjtoKSiin order ofPfrom high to low;

20. updateL,M,HandP;

21. end for

22. end while

Task3:任务迁移部分

23. while(break andL≠∅,H≠∅)

24. for eachTsdo

25. migrateTsfromKSi∈HtoKSj∈L;

26. migrateTstoKSj∈Lin order ofPfrom high to low;

27. updateL,HandP;

28. end for

29. end while

4 实 验

本文通过云计算仿真软件Cloudsim[14]对本文所提出的负载策略进行模拟仿真实验。通过对Cloudsim中的DataCenterBroker类进行扩展,构造并实现本文所设计的策略,具体流程如下:

(1) 初始化各项参数。

(2) 创建数据中心及代理业务。

DataCenter Mydatacenter_0=createDatacenter

(“MyDatacenter_0”);

DatacenterBroker broker=createBroker();

(3) 创建虚拟机列表并设定虚拟机基本参数。

private static List createVM(int userId, int vms, int idShift);

(4) 对bindCloudletToVm(int cloudletId,int vmId)进行修改,构造本文设计算法。

public static void runSimulation_Bayes(DatacenterBroker broker);

(5) 提交任务列表及虚拟机列表。

broker.submitVmList(vmList);

broker.submitCloudletList(cloudletlist);

(6) 开始仿真。

CloudSim.startSimulation();

ListnewList=broker.getCloudletReceivedList();

(7) 仿真结束,输出仿真结果。

CloudSim.stopSimulation();

Log.printLine(String.format(″vm id= %s,mips=%s ″,vm.getId(),vm.getMips()));

printCloudletList(newList);

将本文所提出的负载均衡策略与加权轮询算法WRR、动态负载均衡算法DLB以及基于GA算法、NB算法、BHHLB算法的负载均衡策略进行对比、分析与评估来得出实验结论。主要评估指标为任务最大完成时间、各节点的平均响应时间以及被迁移的任务数量。

4.1 实验环境

通过Cloudsim模拟选取5台虚拟机作为Keystone虚拟节点。对不同的负载均衡策略选取相同的实验环境,具体实验环境配置如表1所示。

表1 仿真环境中资源参数列表

4.2 实验分析

通过对Cloudsim中的cloudlet类进行改写来设置云任务的长度、数量及属性来模拟云平台Openstack认证系统中多样化的服务请求,分别对任务的最大完成时间和节点的平均响应时间及被迁移任务迁移数量进行统计。

图3反映了通过本文策略进行负载均衡前后的任务最大完成时间比较。在不使用本文策略的情况下默认采用Openstack认证系统使用的随机分配法。对比结果显示,通过本文策略进行负载均衡后,任务的最大完成时间显著减少,并且随着任务数量增加,差距较为明显,反映了使用本文负载均衡策略后系统的工作效率有较大的提高。

图3 负载均衡前后任务最大完成时间对比

图4反映了随着任务数量增加不同算法任务最大完成时间比较。任务完成时间能够反映系统的工作效率。由于本文策略增加了自适负载均衡管理应框架,通过各个模块实时收集掌握节点负载信息,并计算各Keystone节点的负载特征值,在任务量较低时占用了一定的开销。但是随着任务数量增加,通过朴素贝叶斯算法对节点负载状况进行分类,使得任务能够优先分发到负载较低的节点。通过自适应阈值避免在低负载状态下策略的频繁触发引起系统不必要的开销。相较于其他对比算法对节点性能的表示以及任务分发时节点的性能状况考虑更加充分,克服了其他对比算法权重分配不合理及自适应性不足等问题。随着任务数量增加,能够使系统处于一个相对稳定且高效的工作状态,有着更好的负载均衡效果。

图4 任务最大完成时间对比

图5反映了随着任务数量增加,不同算法之间响应时间的对比。节点平均响应时间可以反映出负载的分布情况。由于本文所提出策略基于朴素贝叶斯算法,相较于DLB、GA算法,能够有效避免在Keystone虚拟节点中寻找最优解的问题,节省了大量计算开销,并减轻了系统负担。相较于NB、BHHLB算法,通过信息熵算法来度量各特征值指标的所占权重,克服了各个特征属性对于类别决策影响相同的问题,使算法的分类结果具有更高的准确率。通过中央控制节点实时收集各Keystone节点负载状况,并通过自适应阈值来防止短时间内认证服务请求暴增的情况,使节点处于相对稳定的状态。所以本文策略能够有效降低各节点的平均响应时间,并且能够高效地利用每一个节点的计算资源,使得集群中各节点的负载分布更加均衡。

图5 节点平均响应时间对比

图6表示随着任务数量增加不同算法之间任务迁移次数比较。任务迁移频繁会带来不必要的资源损耗,为了避免不必要的迁移,本文策略在特征值选取方面综合考虑了节点的负载状况,增加了队列特征值,结合预测模块对负载进行预测,在任务迁移时充分考虑了各节点的性能状况。相较于NB算法规定任务迁移仅在高负载集合和低负载集合之间进行,避免了过多迁移。相较于BHHLB算法将节点的性能状况作为任务迁移时的重要依据。结果表明:本文策略随着任务数量增加,相较于其他对比算法在任务迁移方面具有较高的准确度,能够有效避免任务在不同节点间多次迁移导致的资源浪费。

图6 被迁移任务数量对比

综合对比分析,本文所提出策略在任务完工时间、节点平均响应时间方面优于WRR、DLB、GA、NB、BHHLB算法,在任务迁移次数方面优于DLB、GA、NB、BHHLB算法。在任务量较大时,能够使负载的分布更加均衡。在Openstack云平台认证系统中有着更好地负载均衡效果。

5 结 语

身份认证技术是保护云环境下用户隐私数据安全的第一道防线。Keystone作为Openstack云平台的认证核心组件同时也是制约云平台稳定高效运行的瓶颈,所以维持Keystone节点稳定高效的工作具有重要意义。本文针对云平台Openstack基于Keystone组件的认证系统资源消耗导致负载不均衡问题,考虑到Keystone组件的特点,对节点的负载及性能状况进行实时的监测。通过改进的朴素贝叶斯算法对节点的负载状况进行分类并结合节点的当前性能对任务进行合理的分发和迁移,从而实现Openstack认证系统的负载均衡。实验结果显示,本文所提出的负载策略,相较于WRR、GA等算法在任务数量较大时能够取得更好的负载均衡效果。下一步工作是将本文所设计的负载策略在实际Openstack云身份认证系统中进行测试和应用。

猜你喜欢
贝叶斯特征值状况
声敏感患者的焦虑抑郁状况调查
单圈图关联矩阵的特征值
2019年中国国际收支状况依然会保持稳健
基于贝叶斯网络的海盗袭击事件影响因素
租赁房地产的多主体贝叶斯博弈研究
租赁房地产的多主体贝叶斯博弈研究
贝叶斯公式的应用和推广
求矩阵特征值的一个简单方法
近10年我国啦啦操研究状况及趋势
安全感,你有吗?