2023年7月11日发(作者:)
Vol.48No.123002计算机与数字工程Computer&DigitalEngineering总第374期第482020年第12卷期一种web服务器集群自适应动态负载均衡设计与实现∗葛钰李洪赭李赛飞成都611756)(西南交通大学信息科学与技术学院摘要随着互联网技术的蓬勃发展,电商平台、视频网站等大量涌现,为人们日常生活增加了极大的便利。与此同时,由于用户规模的逐步庞大,高并发成为大规模网站需要解决的问题。基于Nginx作为反向代理为后端web服务器集群起负载均衡的方式在各大大型网站广泛运用。论文针对Nginx的加权最小连接算法存在的问题进行优化,根据后端服务器运行状态进行周期性读取各项参数,确定下一个周期内权重分配,动态修改权值并通过多次实验确定论文设计的方式能够提高负载均衡效率。关键词Nginx;web服务器集群;最小加权连接;动态负载均衡TP393;TP918DOI:10.3969/.1672-9722.2020.12.036中图分类号DesignandImplementationofAdaptiveDynamicLoadBalancingforWebServerClustersGEYuLIHongzheLISaifei611756)(SchoolofInformationScienceandTechnology,SouthwestJiaotongUniversity,ChengduAbstracthaveemerged,whichgreatlyfacilitatespeople'ametime,duetothegradualincreaseoftheuserscale,highcon⁃paper,theproblemsexistingintheweightedleastconnectionsalgo⁃ingtotherunningstateofthebackendserver,theparametersareobtainedperiodicallytodeter⁃mindsClassNumberTP393,ghtsaredynamicallymodifiedandthemethoddesignedinthispaperisdeter⁃Nginx,webservercluster,weightedleastconnection,dynamicloadbalancingWiththerapiddevelopmentofInternettechnology,alargenumberofe-commerceplatformsandvideoweerseproxy,Nginxiswidelyusedforloadbalancingof1引言随着计算机互联网技术的迅猛发展,人们可以够同时支撑亿万用户在线访问,面对如此巨大的流量冲击,服务器很容易出现因过载而宕机的现象[2],传统的单一服务器无法支撑如此庞大的业务需求。使用服务器集群技术能够同时满足网络服务的性能需求,将多台计算机按一定的拓扑结构有效地组织起来共同完成指定任务的计算机系统就是集群系统[3]。集群技术可在较低成本条件下满足网络服务高可用、高性能要求[4]。按照集群的应用足不出户的进行网购,社交,视频等活动,享受了互联网技术带来的巨大便利。同时,用户的激增和需求的多样性给互联网公司带来了巨大的挑战。2016年国内购票网站每日PV值高达400亿[1]。由阿里巴巴公司创建的双十一促销活动,能∗收稿日期:2020年6月13日,修回日期:2020年7月15日基金项目:四川省重大科技专项课题(编号:2018GZDX0005,2019YFG0399);中央高校基本科研业务费专项(编号:2682019CX63)资助。作者简介:葛钰,男,硕士研究生,研究方向:云计算、计算机网络。李洪赭,男,博士研究生,研究方向:网络与信息安全。李赛飞,男,工程师,研究方向:铁路信号系统网络安全。2020年第12期计算机与数字工程3003领域不同,可将集群分为三种:高可用集群、高性能计算集群和负载均衡集群[5]。负载均衡集群常用于高并发的Web应用或缓存应用[6]。一般由两部分组成:前端负载调度服务器和后端web服务器集群。负载均衡器负责接收客户端的请求,按照一定的分发策略将请求分发给后端服务器。负载均衡既扩展了服务器带宽,增加了吞吐量[7],提高了服务器节点及集群资源的利用率,降低了服务成本[8]。由于硬件负载均衡器价格高昂,软件负载均衡得到人们的广泛关注和应用。Nginx是一款强大的高性能Http服务器,安装和配置相对简单,对于网络依赖性小且占有内存小,包含多种负载均衡算法,能满足上万级别的请求调度[9]。目前国内外很多网站架构都采用Nginx作为负载均衡和反向代理[10]的服务器。中国大陆使用Nginx服务器的用户很多,其中包括:阿里、百度、京东、腾讯、网易等大型公司。Tengine项目为阿里巴巴将在Nginx基础上,基于淘宝自身业务进行改进的web平台并加入了一些高级特性。负载均衡器根据负载均衡算法将客户端请求分发给后端服务器,那么负载均衡算法就是整个集群运行性能的决定性因素。国内外许多学者在负载均衡算法做过研究,IslamS提出了很多改进之处。比如[11]提出一种改进具有陈旧负载信息的最短队列负载均衡方法,KaurK等[12]提出一种通过虚拟机蚁群算法实现负载平衡的方法,王红斌等[13]提出一种LVS集群中加权最小连接算法的改进方法,张玉芳等[14]提出一种通过节点的负载与性能比衡量节点负载权值大小来分配任务的方法,孙俊文等[15]提出一种使用模拟退火算法自适应确定权重向量,利用动态加权轮询算法动态分配请求的方法,汪佳文等[16]提出一种根据服务器实时负载情况并结合改进的Pick-K算法对权重轮询负载均衡算法进行优化的动态自适应权重轮询随机负载均衡算法。Nginx本文基于加权最小连接算法提出一种应用在负载均衡的设计与实现方法。通过收集周期反向代理和后端服务器集群中的自适应动态T内服务器各个性能参数的平均状况,计算各服务器权重占比,KV改变在consul务器权重。保证在下一个周期内,值,Nginx使用upsync上注册的各个后端服务器动态拉取性能最优的服务KV值修改各服器权重最大,会提供更多的服务。这样使得整个集群系统在各个周期内处于最优状态,最后通过压力测试实验确定周期T,并证明该方法能够有效提高负载均衡效率。2负载均衡算法分析负载均衡算法可以分为静态负载均衡算法和动态负载均衡算法。常见的静态调度算法包括:轮询Robin(Round,WRRRobin)、目,RR标)地,权重轮询址散列(WeightedRoundDH),一致性哈希(ConsistentHash(Destination,CH)。常见动Hash,态tions调度tions,定分配策略,,LC算WLC),法)加权最小连接包括:最小连。静态调度算法是在服务器运行前给(Weighted接数法(LeastLeastConnec⁃Connec⁃动态调度算法根据连接数以及事先设定的权重进行分配。各种算法都没有考虑在运行中服务器当前的性能状态。不同的后端服务器的配置不尽相同,对于处理客户端的请求速度有快有慢,最小连接数算法是根据后端服务器当前的连接情况,动态地选取集群中目前连接数最少的一台服务器来处理当前的请求,合理地分流到各个服务器,提高利用效率。加权最小连接数算法是最小连接数算法的超集。遍历后端服务器,比较每个后端服务器的连接数与权重的比值,选取该值最小的服务器,即:C(Sm)/W(Sm)=min{C(Si)/W(Si)}(1)其中为C(Sm)/W(Sm)目标服务器连接数与权重比值,min{C(Si)/W(Si)}表示取得该比值的最小值。如果目标服务器比值刚好等于最小值时,那么下次请求为该服务器进行处理。加权最小连接数算法不仅考虑了服务器的连接数,还考虑了服务器的性能。不过该算法的缺点也很明显,权重由手动设置,权重较大的服务器在接入很多请求之后也会继续分配请求,使得负载不均衡,并且由于不同的请求其连接权重和时间都有差距,该算法无法根据各个后端服务器当前真实的负载状况,进行动态的修改权重。3自适应动态负载均衡的设计与实现3.1自适应动态负载均衡算法设计基于加权最小连接数算法进行改进,各后端节点权值并不应该在手动设置之后就不再改变,应根据服务器负载性能进行周期性更改,能够保证上一个周期内性能最好的服务器在下一个周期中承担更多的连接,而负载足够多的服务器接受少一些的请求,CPU性能评价准则,空闲率、从而使得集群一直处于最佳状态。本文选取内存空闲率以及根据此三项重要性能的使用情况对IO空闲率作为负载权值进行动态修改。为防止在周期点瞬时读取性3004葛钰等:一种web服务器集群自适应动态负载均衡设计与实现第48卷能参数可能造成的不准确性和误差较大的情况,采取在T、T/2时刻分别读取并计算求取平均值的方式来代表T时间内各参数性能。同时周期T如果较小那么会导致过于频繁收集各性能参数所带来的额外消耗,周期T如果较大那么会导致负载信息收集不及时,造成一定时间内负载不均衡的情况,故T的取值需要进行实验测定。3.1.1我们使用权值计算方法Si表示某台后端服务器,使用F(Si)表示权值,那么此时各台服务器权值计算方式为CT+CTMT+MTF(S2i)=P*(kcpu*(1-2)+kmem*(1-22)+IT+ITk2io*(1-2))(2)其中CT、CT表示CPU在T、T22时刻的使用率,MT、MT分别表示内存在T、T22时刻的使用率,IT、IT分别表示IO在T、T时刻的使用率,将T、22T2时刻的值读取并求取平均值可求出服务器各参数使用率,空闲率也随之可得。kcpu、kmem、kio分别表示CPU、内存、IO在性能中影响程度的大小,其中kcpu+kmem+kio=1(3)根据服务器性能、实际经验,出于研究和学习的目的我们分别设定kcpu=0.6、kmem=0.3、kio=0.1。3.1.2P值为权值改变的参考参数,权值改变参考参数及临界值默认为1。在服务器CPU使用率或者内存使用率高于80%时,表示此时服务器处于高负载状态,所能承受的空间不足,P值减少为一半,即为0.5,将所求权值和降低一半,减少该服务器权重。当服务器CPU使用率或者内存使用率高于90%时,表示改服务器处于超负载状态,无力承担更多负载,此时将P设置为0.1,大大降低权重,在下一个周期内将请求分配给其余服务器。IO使用率达到80%的情况较少,故不用考虑其中,上述情况可以表示为ìïCT+CMïTT+MT22ïï<0.8p=1ï2<0.8andï+CíCTTM2T+MT22ïï³0.8p=0.5(4)ï2³0.8orïïCT+CTM2T+MTï2î2³0.9or22³0.9p=0.1用各个服务器在每个周期内根据自身性能状况计算权重,若每个周期内都需要对权值进行更新,则会对Nginx负载均衡器的负担过重。故在一些请求比较稳定的周期内,各服务器性能参数波动不大导致F(Si)值的变化也不大的时候,我们就不需要进行更新权值的操作。此时可以设置一个临界值来控制是否进行权值更新,在波动范围超过临界值的时候才更新权值,表示为ìí|FOld(Si)-F(Si)|£CFNew(Si)=FOld(Si)î|FOld(Si)-F(Si)|>CFNew(Si)=F(S(5)i)在本周期的F(Si)和上个周期FOld(Si)FOld(Si)绝对差值小于C的时候,权值不更改。在绝对差值大于C的时候权值才会变更。3.1.3在计算完各个服务器权值之后,负载均衡器权重计算此时的各个F(Si)为小数,而Nginx负载均衡器需要一个整数,我们就需要进行负载均衡器权重计算,由于我们是按照各服务器CPU空闲率,内存空闲率以及IO空闲率进行权值计算,后端服务器各性能参数空闲率越高,则F(Si)值越高,那么再下一个周期在负载均衡器所分得的权重应该越大,这样在下个周期内,就会有更多请求到达此服务器,同理,F(Si)值越低,在负载均衡器端的权重应该越小,故我们可n以按照各服务器F(Si)与åF(Si)占比的方式确i=1定,即ìïïw1=F(S1)*NïnïïF(Sïåi)i=1ïïïïw2=F(S2)n*NíïïåF(Si)(6)ïi=1ïïïïF(Sïwn)n=n*NïïîåF(Si)i=1其中N为整数,可根据后端服务器个数进行灵活调整,通过上述方式我们可以计算出各服务器在负载均衡器的权重值w1w2wn。3.2自适应动态负载均衡实现方式设计本在各后端服务器添加性能收集模块,采集各服务器CPU、内存、IO磁盘信息,通过Socket通信发送给权值计算模块。权值计算模块接收各服务器发送的消息进行处理,并根据上述算法计算出各服务器的权重值,通过post方法传送到权重修改模2020年第12期计算机与数字工程3005块。权重修改模块包括服务注册发现中心Consul以及负载均衡器Nginx,Nginx配置文件中upstream模块配置基础负载均衡算法以及后端服务器数据接收转发,如图1所示配置。图1Nginxupstream模块配置基础算法为least_Conn,即最小连接算法,注册配置upsync模块,upsync_type=consul,表示服务注册中心使用consul。将后端服务器ip地址和JSON信息挂载到服务注册中心,JSON信息中的Weight即表示该服务器权重值。如图2所示。图2consulkv中心挂载显示发现中心拉取后端服务器Nginx会通过upsync模块每隔ip地址以及权重信息配0.5s从服务注册置到upstream模块里面。upstream模块收到ip地址及其权重信息,就可以根据配置变更权重分配。这样系统就能达到自适应动态负载均衡。整个系统的流程图如图3所示。图3整个系统流程图4实验在实验之前,需要搭建测试环境,本论文基于Nginx载均衡器、做的设计实验,后端Web服务器集群、故需要一台Nginx进行压力测试的服务器做负客户端。为保证实验的严谨性,避免由于服务器性能相近导致权重分配相近。故后端服务器的配置两两不同,实验环境配置如表1。表1实验环境配置IP地址用途处理内磁盘软件配器存大小置192.168.89.100客户端双核192.168.89.105负载均衡器双核4G50GJMeter192.168.89.139后端服务器双核4G40GNginx192.168.89.161后端服务器双核4G2G40GTomcat192.168.89.188后端服务器四核4G40G100GTomcatTomcat客户端使用JMeter压力测试工具对此服务器集群进行压力测试。使用Http请求的方式压力测试负载均衡器所代理的IP地址和端口。图4实验环境Web服务器集群架构实验一,在第二节自适应动态负载均衡算法描述中可知周期T是个待确定的参数,需要对集群系统进行压力测试,变化参数为周期T值。若周期T太短,那么各服务器频繁地获取性能参数,会加重对服务器性能开销,若T取值过大,那么就会导致负载均衡器对服务器权重更改缺少及时性,整个集群系统的负载能力无法得到提升。为了性能的均衡,需要对T值进行实验测定。本实验T值测试范围为5s~10s,每隔1s测试一次。测试方式为使用JMeter进行并发访问。评价参数为请求返回的平均响应压力测试软件生成1000个用户对集群系统时间(averageresponsetime),平均响应时间越小说明集群系统对用户的请求响应速度越快,则集群系统的性能越好。由图5可以看出,在5s~7s这个阶段,由于周期较小,过于频繁地读取参数,加重了对服务器的开销,随着周期时间变大,响应时间逐步下降。而在7s的及时性逐渐降低,到10s这个范围时,响应时间又逐步升高。故当随着T值越大,对服务器权重T值等于7s时能够得到最低平均响应时间,此时集群系统性能最佳。3006葛钰等:一种web服务器集群自适应动态负载均衡设计与实现第48卷图5平均响应时间与周期T关系折线实验二,本文设计的自适应动态负载均衡方法基于加权最小连接算法进行改进,那么需要在同一个集群环境下分别用两种负载均衡算法进行压力测试,进行对比。故本实验采用JMeter模拟100~1500进行测试一分钟的方式,,每隔100并发用户分别对两种负载均衡算法一共得到15组数据。且每次测试选取平均响应时间以及吞吐量作为性能优劣的判断。平均响应时间越小,页面响应的时间越短,系统性能越好。而吞吐量越大,那么该系统能够容纳同时访问的数据量越大,系统性能越好。为保证数据的可靠性,每组数据分别测试三次求取平均值。测试数据如表2所示。表2两种算法的平均响应时间与吞吐量并发量自适应动态负载均衡加权最小连接(QPS)平均响应吞吐量平均响应吞吐量时间(ms)(reqs/sec)时间(ms)(reqs/sec)785782729678749579579568813由表2和图6所示,总体来看,随着并发量的增加,两种算法的平均响应时间是在逐步增大。在100~200平均响应时间要略好于本文的设计的自适应动态并发用户量的时候,加权最小连接算法的负载均衡算法。这是因为并发量较小的时候,各后端服务器性能消耗较低,此时存在于各后端服务器的性能收集模块会消耗一定性能,导致响应时间略高。在并发量300~500的时候,两者响应时间差别不大。之后随着并发量的逐步提高,由于能够动态改变服务器的权重,自适应动态负载均衡算法的优势显现出来,响应时间逐渐与加权最小连接算法拉开差距。在并发量为1500时,本文的自适应动态负载均衡算法响应时间优于加权最小连接算法15.8%错误率显著增加,,并且随着并发量提升,而自适应动态负载均衡算法仅为加权最小连接算法的其一半左右。从表2结合图7来看,吞吐量波动范围不大,在大部分阶段都是自适应动态负载均衡算法的吞吐量好于加权最小连接算法。由此可见,随着并发量的提高,不管是响应时间还是吞吐量都能得到优化。图6平均响应时间与并发量关系折线图7吞吐量与并发量关系折线5结语本文基于Nginx的集群系统的加权最小连接算2020年第12期计算机与数字工程3007法,分析了其优劣性,提出了一种自适应动态负载均衡方法,能够根据服务器实时性能更改Nginx处各后端服务器权重,动态调节性能。并分别从算法设计和实现方式设计加以详细阐述,进行两次实验,第一次实验确定周期T的取值,第二次通过多次实验对比确定该算法能够在加权最小连接算法的基础上较大提升集群系统的负载均衡性能。但本设计还存在一定缺陷,比如临界值的确定,临界值大小确定也会影响权值的确定。若临界值过大,服务器实时性会降低,若临界值过小,那么频繁地更改也会影响集群性能。参考文献1]FanQ,manceComparisonofWebServ⁃ersHighwithConcurrencyDifferentWorkloadArchitectures:ACaseStudyUsingtems&,[2016.C]//HotTopicsinWebSys⁃2]房俊华.分布式数据流系统中负载均衡技术研究[D].上海:华东师范大学博士论文,ChinadataResearchNormalstreamUniversitysystemonload[,D]balancing2017..Shanghaitechnology:PhDthesisin3]GeunyoungPark,BoncheolGu,JunyoungHeo,SanghoYi[Adaptive,JungkyuC]//ComputationalLoadHanBalancing,JaeminScienceMechanismPark,Hong&ItsApplications-iccsaforMinServer,XuefengClusterPi.,In⁃4]ternationalDaiW,IbrahimConferenceI,Bassiouni,GlasgowM.,UkImproving,ad,Edata-intensivecomputingoncloudplatforms[C]//2016CloudJ)International,.BhuyanIEEE,2016ConferenceLN.:tCloud(Smart⁃5]GuoBalancinginaCluster-BasedWebServeronParallelforMultimedia&DistributeApplicationsSystems[,J],17(Trans⁃]s11):6LinZ,XiaopingL,nt-baseddynamicload-balancingclusteralgorithmforheterogeneouswebserver7]吴和生2010,[7(J].1云计算环境中多核多进程负载均衡技术的研).:eandInformationSystems,究与应用[D].南京:南京大学,chandapplicationofmulti-coremulti-processingenvironmentload[D]gtechnology:NanjingUniversityincloud,comput⁃[8]BaoL,ZhaoD,lingter[C]//erConferencebalancing,Berlinonforwebserverclus⁃,WebHeidelbergInformation,2010Sys⁃d:[9]ShaoQF,YangTC,ignofhighavail⁃ableMechanicssinglesign-onserverofNginx-basedPublications[C]//Applied241:ech,2013,[10]HongL,AmpEI,CenterNT,chonNginxreversegrammingproxyrealizationvisual[managementJ].Journalschemeandthepro⁃[11]legeIslam,houNormalCol⁃kLoadBalancingMethods:rovement[J].arXiv:1710.0695711,[12]KaurK,dapproachofloadbalancing[throughC]//InternationalVMsusingConferenceACO,MinMaxonNextandgeneticGenerationalgorithmCom⁃[13]王红斌putingTechnologies..Web服务器集群系统的自适应负载均衡调度IEEE,2017.策略研究[D].长春:吉林大学,gyResearchonAdaptiveLoadBalancingChangchun:JilinUniversityforWeb,ClusterSystem[D].[14]张玉芳,魏钦磊,赵膺.基于负载权值的负载均衡算法[J].计算机应用研究,2012,29(12):ngalgorithmYufangbased,WEIonQinleiload,ZHAOJ]Wei..JournalLoadofbalanc⁃puterApplications,2012,29(weight12):[⁃[15]孙峻文,周良,丁秋林.基于退火算法的动态负载均衡研究[J].计算机科学,2013,40(5):amicJunwenLoad,ZHOUBalancingLiangBased,chon[J].ComputerScience,2013,40(5):thm[16]汪佳文,王书培,徐立波,等.基于权重轮询负载均衡算法的优化[J].计算机系统应用,2018(4):tionJiawen,WANGShupei,XULibo,⁃[J].ofComputerweight-basedSystemspollingApplicationsloadbalancing,2018algorithm(4):138-144.[[[[[[[
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689028258a197302.html
评论列表(0条)