一种面向多类型服务的动态负载均衡算法
2017-06-23李国申亚坤李永华曲文丽
李国+申亚坤+李永华++曲文丽
摘 要: 针对航空物流ILink数据平台交易复杂性高、服务种类多、业务规模大等特点,提出一种面向多类型服务的动态负载均衡算法。通过分析四种基本服务类型以及实时采集四种服务类型的资源消耗,根据用户服务请求类型的不同动态调整各服务器的负载,引入了过载服务器节点缓冲机制缓冲负载过重节点,有效解决了航空物流ILink数据平台可能出现的用户等待时间过长、局部负载过重、甚至个别服务器节点崩溃的问题,达到了集群的负载均衡。仿真实验结果表明,提出的算法在系统吞吐量、系统响应时间、负载率等关键指标上优于经典的比率算法和遗传算法。
关键词: ILink平台; 动态负载均衡算法; 多类型服务; 缓冲机制
中图分类号: TN911?34; TP302 文献标识码: A 文章编号: 1004?373X(2017)12?0128?04
Abstract: A dynamic load balancing algorithm for multi?type services is proposed to suit aviation logistics ILink data platform to complex transaction, multi?type service and large?scale business. The four fundamental service types were analyzed and resource consumption of the four service types was acquired in real time. The algorithm can update the load balance weight of every service according to the types of users′ service requests. A node buffer mechanism for overload servers was imported to solve the problems of long time waiting of users, over?heavy local load and even the breakdown of individual server node possibly appearing on the aviation logistics ILink data platform, so as to achieve the load balancing. The simulation results show that the algorithm is superior to the classic ratio algorithm and genetic algorithm in system throughout, responding time and load efficiency.
Keywords: ILink platform; dynamic load balancing algorithm; multi?type service; buffering mechanism
航空物流是一种高效的现代化运输方式,我国航空物流运输周转量逐年增加,已经成为现代最重要的运输方式之一。如何高效地处理海量航空物流数据访问请求是当前亟待解决的问题。目前采用软件负载均衡是解决该问题的方案之一,但是由于服务器性能不同,必须依赖有效的负载均衡算法,将大量的并发访问合理转发到多个节点分别进行处理,各服务器比较均衡地承担任务,进而提高集群系统的处理能力和服务质量,缩短用户响应时间,实现高效的负载均衡[1?3]。
1 问题描述
航空物流数据交换平台负载均衡问题是航空物流信息平臺的关键问题。为了让服务器集群中多台服务器最大化地分摊用户的并发请求,避免甚至消除集群中的负载过重、负载震荡等问题,国内外学者相继提出了多种负载均衡算法,主要分为两类:静态负载均衡算法和动态负载均衡算法。常见的负载均衡算法如表1所示。
航空物流数据交换平台调度模型如图1所示。在ILink client向数据交换平台发送请求以后,请求经过互联网首先到达服务器集群的虚拟服务器。虚拟服务器对外提供透明的服务访问,它屏蔽了内层物理服务器的具体细节。在虚拟服务器中,由于用户服务请求类型的不同,资源消耗情况差异较大,所以虚拟服务器会把用户请求依据服务类型分别加入到相应的服务请求队列,随后用户请求被缓存到31个等待就绪队列中。负载控制模块是负载均衡机制的核心,该模块包括负载采集、负载计算和请求分发。负载采集模块负责采集,包括节点各种类型的服务CPU占用率、内存占用率、磁盘空闲比等;负载计算模块是根据算法模型,对采集到的服务器状态信息确定各服务类型的负载系数,进而确定服务器接收用户请求的概率。负载分发模块功能则是根据节点接收用户请求的概率对用户请求进行分发。
在ILink数据平台上,提供的主要有四种网络服务,即CoreService,ConfigService,SitaService,SendMsgService,如表2所示。
这四种服务的功能各不相同资源消耗差异较大,ConfigService主要是根据数据库中的信息配置用户的请求报文,该操作涉及大量的用户数据保存,需要占用大量的磁盘空间;CoreService是把用户报文信息写入到xml文件或者从xml文件把信息封装到用户的报文中,显然该服务类型需要进行频繁的I/O操作;SitaService是为了实现平台的国际化,将用户的报文转化成国际通用Sita报文格式,转换过程涉及大量的格式转换,CPU内存消耗较大;SendMsgService则是系统中使用最多的一种网络服务,完成用户数据报文发送和转发的功能,主要消耗计算机的带宽资源。
该问题的调度模型如下:
2 算法设计
2.1 ILink平臺
ILink航空货运数据交换平台是航空电子货单信息平台的基础平台,通过建立安全、高效、稳定的数据传输通道,实现航空物流参与者之间的数据交换。ILink平台是由多台服务器构成的分布式系统,具有高度的系统安全性、可靠的传输稳定性、支持业务报文转换,支持用户单点接入和多点接入,支持高并发的业务模型,允许进行负载均衡扩展。
2.2 算法设计
服务器集群接收到用户请求以后,综合考虑各台服务器性能的差异性以及各种类型的服务差异性,根据服务器的不同服务类型消耗资源的不同计算各台服务器分配请求的概率。根据概率对收到的用户请求进行分配,由于用户请求的随机性,在服务器接收服务的过程中,可能导致某些服务器节点始终处于高负荷状态,此时,引入过载缓冲机制,把负载过重节点加入到过载队列中,避免了部分节点负载过重,有利于服务器集群的负载均衡。算法流程如图2所示。
面向多服务类型的动态负载均衡算法流程如下:
(1) 初始化队列。算法开始,需要对用户请求就绪队列和服务器过载队列进行初始化。在用户请求就绪队列中存放用户各种服务类型的用户请求,服务器过载队列则存放后台过载的服务器节点。
(2) 更新各服务类型负载系数。四种不同的服务类型对服务器的负载是不同的,算法根据收集到的动态确定各个服务类型的负载系数,越大,说明当前j类型的服务对服务器的负担越重。
(3) 计算服务器节点的负载。通过收集到的后台各服务器的状态信息,综合考虑服务器操作系统和其他软件开销,依据式(4)计算服务器当前的负载状况。
(4) 检查节点是否过载。对于服务器集群中的节点,在运行过程中,可能有的节点处于高负荷状态,在算法中,设定服务器负载阈值为0.9,当某个节点的负载超过该阈值以后,就认定该节点处于高负载状态,将该节点加入过载队列。
(5) 更新过载队列。过载队列保存了处于高负载状态的服务器节点,过载队列不接收用户请求,一段时间以后,如果过载队列中的节点负载低于设定的最低阈值0.75,则把该节点移出过载队列,重新接收用户的请求,继续分担集群的任务。
(6) 更新分配概率。后台服务器依据节点的负载状况进行用户请求的分配,具体来说就是根据各个服务器节点的给每个节点分配一个相对应的比率,负载均衡模块把该比率作为一段时间内收到的用户请求调度的依据。
3 实验设计
3.1 实验环境
为了验证该动态负载均衡算法的性能,搭建了一套模拟的ILink环境。该环境模拟真实的生产环境,由两台Dell服务器组成,每台服务器上虚拟出四台虚拟机,各个虚拟机的配置如下:操作系统为Windows Server 2008 R2 Enterprise,处理器为IntelXeon CPU E5?2665@2.40 GHz,安装内存为4 GB,2 GB,1 GB,512 MB,系统类型为64位操作系统,运行环境为MyEclipse,jdk1.7.0_07。
3.2 实验过程
在对算法进行仿真实验的过程中,需要分别编写客户端程序和服务端的响应程序。首先在服务器端,配置ILink数据交换平台中的四种常见服务即SendMsgService服务、CoreService服务、ConfigService服务和SitaService服务,具体配置过程为编写相应服务的后台程序,并对服务的配置文件进行修改。例如,对于CoreService服务,该服务的主要资源消耗为I/O消耗,所以实验中对CoreService的编写主要是访问后台数据库,对其进行读写操作以消耗计算机的I/O资源。
对四种服务配置完成后,需要模拟生产环境中真实的客户请求,编写Java的Servlet程序,通过Tomcat服务器接收用户的请求,并在收到请求以后解析请求,然后调用服务端的后台服务进行相应操作。在客户端,同样需要借助程序在短时间内分场景产生各种服务类型的用户请求,同时记录各个请求的响应时间以及一段时间内该算法的吞吐量。
3.3 实验场景
在航空物流数据交换平台上,服务类型的不同,对集群的负载也是不同的。本实验设计了四个实验场景,第一个场景的目的是测试仿真程序的可靠性,保证用户能够获取到各种类型的服务。第二个场景是为了通过多次实验获取一组较优的,因为的取值直接影响算法的性能好坏。第三个场景是测试算法在吞吐量这一指标上的优劣。第四个场景是测试算法在负载率指标上的好坏。图3描述了在100组不同的负载系数情况下算法响应时间这一指标的优劣。用户请求的分配过程依赖于的设置,设置的好坏直接影响算法的性能。最终本文选定的一组较优的为[0.15,0.45,0.27,0.13]。从图3可以看到在并发量30以前三种算法的响应时间差别不大,在30以后,响应时间急剧上升,而且本文算法是始终优于其他两种算法的。这是因为在系统并发访问量较小的情况下,各类服务请求相对来说都很少,这时比率算法和本文算法区别不大,遗传算法搜索能力较强,容易最快找到一组最优解。当访问量逐渐增大以后,各类服务请求区别较大,而比率算法和遗传算法是忽视这种服务类型差别的,导致服务器对于所有的请求全部接收,一定程度上影响了算法的响应时间,且遗传算法在并发量较大的时候容易陷入“早熟”,这也是遗传算法在并发量较大时比本文算法性能差的一个原因。
图4是在实验场景二确定的基础上四种服务类型混杂访问的情况下系统吞吐量指标的实验结果图。该实验接近真实的用户访问场景,从吞吐量的角度验证了算法的优劣。在图4中,三种算法在请求访问量不饱和的情况下,系统吞吐量差别不大,所有用户的所有服务类型的请求都能得到及时响应。但是随着系统并发量的增加,三种算法差距逐渐加大,这是因为随着并发量的增多,用户对各种服务类型的请求也趋于随机化且数量较大,本文算法能够依据服务类型的不同计算节点的负载,并把负载超过阈值的节点加入过载队列,暂停其提供服务,避免了服务器节点负载过大从而用户请求失败的概率,增加了系统吞吐量。
图5通过负载均衡率L这一综合指标,衡量了三种算法在服务器集群上运行的效率。在访问量不饱和的情况下,三种算法差别细微,请求量为30~50时三种算法在负载率指标上差距加大。在系统请求量超过50以后,三种算法系统负载率趋于最大值,对于比率算法和遗传算法,负载率在0.9以上,而本文算法在0.8左右,总体性能较好,后台各个服务器能够比较均衡地承担用户请求,这是因为算法设定的阈值为0.8,超过阈值负载的节点将加入到过载队列中,等待一段时间以后继续为用户提供服务,当然,阈值是能够根据需要进行设定的。
4 结 语
本文提出了一种面向多类型服务的动态负载均衡算法,该算法能够根据服务器中各个服务类型资源消耗的不同,计算服务器节点的负载,依据负载状况确定的概率来分配用户请求,算法能够在访问量较大的情况下缓冲过载的节点,一定程度上提高了系统的吞吐量和降低了集群负载率。但是本文中各服务类型对服务器的负载系数是固定的,是根据大量随机实验选取的,研究负载系数根据不同的业务环境进行自适应变化将是下一步的工作重点。
参考文献
[1] 王荣生,杨际祥,王凡.负载均衡策略研究综述[J].小型微型计算机系统,2010,31(8):1681?1686.
[2] 李新,黎文伟.一种改进的动态告警负载均衡算法[J].小型微型计算机系统,2013,34(7):1585?1589.
[3] 郑贵德,陈明.以云计算为后台的负载均衡技术[J].现代电子技术,2012,35(9):77?80.
[4] SEMCHEDINE Fouzi, BOUALLOUCHE?MEDJKOUNE Louiza, AISSANI Djamil. Task assignment policies in distributed server systems: A suivey [J]. Journal of network and computer applications, 2011, 34(4): 1123?1130.
[5] CHOI S Y, LEE S, LEE T, et al. Double?phase polling algorithm based on partitioned ONU subgroups for high utilization in EPONs [J]. Journal of optical communications and networking, 2009, 1(5): 484?497.
[6] MIRZA Hamid Turab, CHEN Ling, CHEN Gencai. Practicability of dataspace system [J]. JDCTA, 2010, 3(4): 233?243.
[7] 王鵬,黄焱,李坤,等.云计算集群相空间负载均衡度优先调度算法研究[J].计算机研究与发展,2014,51(5):1095?1107.
[8] 王强,李雄飞,王婧.云计算中的数据放置与任务调度算法[J].计算机研究与发展,2014,51(11):2416?2426.
[9] 周莹莲,刘甫.服务器负载均衡技术研究[J].计算机与数字工程,2010,38(4):11?14.