0 引言
随着网络的高速发展和普及,人们对网络服务的依赖和需求也越来越来大。为了保持所提供网络服务的高质量、高效率,负载均衡系统是影响服务器集群性能的核心部分,而负载均衡算法是决定负载均衡模块如何分发用户请求的重要部分,但已有负载均衡算法容易造成用户请求分配不均,有着一定的局限性。
研究者们提出了一些新的评估各个服务器节点负载的方法,以此来改进负载均衡算法。例如,张慧芳选择静态参数(如CPU主频、内存大小等)和动态参数来计算节点的综合负载(如CPU利用率、内存利用率等);HWANG S T等人提出了用硬件指标、CPU利用率和在线连接数作为评估指标。Duan Zhaolei等人利用CPU利用率、磁盘利用率、分页错误数、请求数、请求响应时间等指标来计算服务器的实时负载;章文嵩、陈伟等人在研究集群系统的动态负载均衡算法方面利用输入指标、服务器节点指标两类负载信息来计算综合负载,其中综合负载通过线性加权计算得出,各指标的权值按照其重要性大小进行确定。
据以往的研究看来,负载的计算往往是按照一定的加权比例进行的,比较经验主义,且主观性和随意性比较大,没有一个较为科学的方法来确定加权的比例,从而导致实时负载计算式反馈出来的不太不准确。为了解决准确评估实时负载的问题,本文采用了统计学中的因子分析法来评估实时负载,以求达到较准确评估负载。
1 基于因子分析的动态负载均衡方法
1.1 算法设计思路
在已有负载均衡算法中,有一些以实时负载情况作为依据的负载均衡算法,已有的加权最小连接(WLC)算法能够较有效地均衡服务器集群的负载、分发用户请求,然而目前的WLC算法仅仅是参考了实时连接数这一负载信息,并没有考虑到不同网络应用的连接对服务器负载的影响程度是不同的,如视频连接对服务器的影响肯定比文本连接对服务器的影响大。因此,本文的思路是通过采集一些其他服务器的性能数据信息,改进实时负载情况的计算方式,并将这些新的负载度量信息与WLC算法结合,以达到改进算法、提高用户请求调度效率的目的。改进的动态负载均衡算法的应用模型如图1所示。
设有n台缓存服务器组成的集群,则可以定义服务器设备集合S={S1,S2,…,Sn}(n>1)。该算法的核心内容为:服务器设备集群中的各个服务器节点在每间隔一个时间周期T就向负载均衡调度器反馈当前服务器的服务器性能参数,调度器接收到这些负载度量信息后,利用这些负载度量信息评估出实时负载情况,结合实时负载情况,做出缓存服务器的选择,达到合理的负载均衡。因此,本文要做的工作是:(1)选择什么负载度量信息;(2)用什么计算方法组织这些负载度量信息,得出一个综合的负载情况指标;(3)如何与WLC算法进行结合。
1.2 实时负载情况的量化
首要的工作是如何评价服务器的负载情况。采用数值量化的办法无疑是较为合理的,本文利用多元统计分析学中的因子分析法,通过合理的推导和计算,获得能够反映实时负载情况的量化,从而帮助现有负载均衡算法做出更准确的任务分配,达到改进已有负载均衡算法的目的。
定义1 负载参数变量:某种可观测的、影响实时负载能力的变量,Xi表示第i种影响负载能力的变量,这里用X1表示CPU利用率,X2表示内存利用率,X3表示磁盘利用率,X4表示网络带宽使用率。
定义2 实时负载指数:Load表示负载实时指数,有Load=g(X1,…,X4),g表示Xi与Load的关系函数。
定义3 负载参数向量:由X1,…,X4构成的4维可观测向量,记为X,其各维数据均为可以较准确、直接观测出的数据。
仅仅通过Load=g(X1,…,X4)无法得出各种负载参数变量与Load的合理关系,于是开始因子分析法。首先,建立正交因子分析模型:设X=(X1,…,X4)T是可观测的随机向量,即按照上面的定义引入了p种负载参数变量,其协方差矩阵为:
其中,σij为Xi和Xj的协方差。设F=(F1,F2,F3)T为公共因子,这些因子属于不可直接观测、却又可以影响每个负载参数变量的共同潜在因素,按照本文选取的参数,可以给F1、F2、F3分别命名为计算速度因子、网络传输速度因子、I/O速度因子;且E(F)=0,D(F)=I3(即F的各分量方差为1,且互不相关)。设ε=(ε1,ε2,…,ε4)T为特殊因子,它与F互不相关却又可以影响负载参数变量,那么每个负载参数变量都可以表示成公共因子的线性函数与特殊因子之和,则:
该模型用矩阵表示为:
X=AF+ε(3)
通过以上过程,得到了初步的数学模型,即描述了负载参数Xi与潜在因素F存在一定的关系。然而模型中仍有未知的特殊因子ε和aij,因此可利用观测出的数据X对模型进行求解,以得到Xi与Fm的关系。
由于公共因子是不相关的,且均有潜在影响,则有:Load=f(F1,F2,F3)。然而这些公共因子F很难通过实际数据去测量,因此在因子分析法中,首先考虑用X来代替F,用可观测量反映不可测量。接下来将公共因子转换成负载参数的组合,这个过程就是因子得分(factor scoring)。潜在因素向量F=(F1,F2,F3)T可以用最小二乘法估计为:
F≈[(ATA)-1AT]X=STX(4)
这样就可以得到潜在因素向量F与最初的可观测向量X的关系,其中S=(βij)4×3为因子得分系数矩阵,而X就是前面各种负载因素变量组成的向量,可以看出因子得分系数矩阵的计算主要与因子载荷矩阵A有关。再把F替换为X,得到:
根据因子分析方法中的概念,将潜在因素使用线性相加的办法可以进一步得出一些关于负载指数的具体计算式:
其中,wi为公共因子Fi的权重。由因子分析法可知,wi的值为使用方差贡献率作为权重值,结合式(5)和(6),得到:
其中,βi=(β1i,…,β4i)T是前面提到的因子得分系数矩阵的列向量,X为负载因素向量。
由于在因子分析法计算出的综合得分有一些会出现负值,因此做一定修正,即:
经过以上分析过程,从原来常用简单的线性叠加式,通过使用因子分析法的方式,得到了实时负载指数的计算公式,为后文的负载均衡算法的改进和实验分析提供了依据。
1.3 DLBFA算法的设计
本文的思路是在已有算法的基础上进行改进,其中加权最小连接(Weighted Least-Connection,WLC)是目前已有算法连接请求调度情况较好的一种算法,它选择服务器设备节点的算法过程主要以考虑服务器节点的连接数为主,但是其缺陷就是算法中每个服务器节点的分配权重为固定值,并不能实时地按照服务的性能调整服务器节点的权重。因此引入前面得出的服务器实时负载指数,提出基于因子分析的动态负载均衡(Dynamic Load-balance Based on Factor Analysis,DLBFA)算法,动态地修正服务器的权值,这样负载均衡系统可以根据动态权重做出服务器的选择。
从前文可知,负载情况的计算需要采集的一些服务器性能信息是以较主流的CPU、内存、磁盘和网络4个方面来源为主的。其中负载参数向量X记为:X=(U1,U2,U3,U4)T,其中向量各维分别为CPU利用率、内存利用率、磁盘利用率和网络带宽使用率。那么可以结合式(8),经过因子分析的过程算出Li。再将Li与WLC算法结合,形成改进算法。可以约定如下:设服务器集合S={S1,S2,…,Sn}(n>1),W(Si)表示服务器的权值,C(Si)表示服务器Si当前连接数,α(Si)表示服务器Si对应的可变因子,则选择服务器的策略为:
式(9)达到了W(Si)的动态变化的目的,其中α(Si)的确定与Li的值有关,这样就可以做到Li与WLC算法的结合。α(Si)确定的策略以各个服务器的负载平均值L为基准,即:
其中,当第i台服务器的负载指数大于平均负载指数时,可认为负载过重,此时将α(Si)的值调小,达到了降低权值的目的;如果第i台服务器的负载指数小于平均负载指数,则认为负载较轻,此时α(Si)的值为1不变,保持权值也不变。这里设置的ε、θ是为了防止α(Si)调整过于频繁影响任务调度而设置的阈值,保证了服务器的负载情况稳定在一定范围之内。算法的伪代码描述如下:
算法1 基于因子分析的动态负载均衡算法
输入:用户请求集VR,服务器节点集VS,服务器权重集合W,可变因子集合α,服务器当前连接数集合C。
输出:请求映射到服务器的集合。
begin
m←REQUEST_NUM//获得请求数
n←SERVER_NUM//获得服务器数
minWeight←MAX_WEIGTH//最小权重初值
C←getConnectionNum()//获得连接数
W←InitalWeight()//初始化权重集合
for i←1 to n do
Li←getServerLoad(i)
//根据式(8)获得每个服务器节点的负载值
if(Li>=ε)//更新α(Si)
α(Si)=Li*α(Si)
α(Si)=1
else
α(Si) = α(Si)
W(Si) ← C(Si)/(W(Si)α(Si)) //更新服务器权重
for i←1 to m do
for i←1 to n do
if(W(Si)< minWeight)
SERVER←Si //选择负载较小的服务器
G←{VR→SERVER}
//请求到服务器的映射的加入结果集合
return G //返回映射结果集
end
2 实验及分析
2.1 实验方案与环境
为了验证改进算法的基本性能,本实验采用网络仿真软件OPNET Modeler模拟网络环境进行测试,将DLBFA算法与OPNET Modeler自带的最小连接调度(WLC)算法以及其他改进的基于动态反馈的负载均衡算法(MTN)进行对比。本次实验主要观察平均响应时间,即集群系统对连接请求的平均响应时间。
模拟网络的客户端有200个节点,仿真运行30 min,由于客户端的配置数目较大,固定性能数据采集周期T设置为20 s。为了验证算法在性能不同的服务器集群上的效果,本实验使用3种性能不同的服务器组成了实验集群,服务器性能大小次序为:服务器1<服务器2<服务器3。客户端与服务器集群系统通过链路与负载均衡器相连。
2.2 实验结果与分析
实验结果如图2所示。
实验运行约5 min后进入响应时间稳定期,通过观察此后响应时间数据分析结果。从图2(a)可见,在运行WLC算法的集群中,不同性能的服务器的响应时间差别并不太大,说明性能较好的服务器其处理资源并没有被充分利用,负载均衡算法对任务分配并不理想,并没有达到预期的目的。从图2(b)可以看出,改进的MTN算法由于考虑了服务器的负载和性能情况,各个节点的响应时间随着性能变化而变化,分配效果有了一定的改进,但是响应时间的区分程度还是不够明显。而图2(c)显示,本文的DLBFA算法的负载均衡效果有了进一步提高,能更好区分不同服务器的性能任务的分配,这使得服务器集群的资源得到了充分的利用,达到了实验需要的目标。
3 结论
CDN中的负载均衡算法是提高网站服务质量和性能的关键,与传统的负载均衡算法相比,本文提出的动态负载均衡算法有如下特点:
(1)该算法通过负载均衡器动态地收集各个服务器的实时性能数据,将服务器的实时负载加入到算法中综合考虑,使得连接请求的调度更加合理。
(2)如何通过实时的性能数据合理地评估实时负载情况是本文的主要着力点。本文通过使用统计学中的因子分析法将获得的实时数据组织起来,提出了一个较为有理有据的实时负载情况的计算式。
通过合理地组织实时负载数据,较准确地测算出实时负载情况,可以帮助负载均衡模块在连接请求调度时做出更为合理的选择,而本文的实验结果也证明了这一点,具有一定的应用价值。