基于Nginx的动态权重负载均衡技术研究

known 发布于 2025-08-25 阅读(441)

摘 要:负载均衡策略在保障Web服务器集群稳定运行和性能方面是不可或缺的。在众多的负载均衡技术中,Nginx得到了广泛应用,常被大规模应用于反向代理服务前端。通过对Nginx负载均衡算法的学习研究,设计实现了一种改进的动态权重负载均衡算法。该算法利用Redis缓存机制,实时采集并存储后端Web服务器的CPU利用率、内存利用率、网络带宽和磁盘I/O等性能指标信息。然后,通过熵值法计算各项性能指标的系数,并动态地修改后端Web服务器的权重。实验结果显示,与加权轮询算法和最小连接数算法相比,新算法在高并发情况下具有更好的响应时间和吞吐量。

关键词:负载均衡;动态权重;服务器集群;熵值法;Nginx

中图分类号:TP368.5 文献标识码:A 文章编号:2096-4706(2024)20-0067-05

Research on Dynamic Weight Load Balancing Technology Based on Nginx

ZHENG Songyi, CHEN Guoliang, JIANG Zhengliang, ZHANG Yuxiang

(Network and Educational Technology Center, Jinan University, Guangzhou 510632, China)

Abstract: The load balancing strategies are indispensable in ensuring the stable operation and performance of Web server clusters. Among numerous load balancing technologies, Nginx has been widely used and is often applied on a large scale in the front-end of reverse proxy services. Through the study of Nginx load balancing algorithm, an improved dynamic weight load balancing algorithm is designed and implemented. The algorithm uses the Redis cache mechanism to collect and store the CPU utilization, memory utilization, network bandwidth, disk I/O and other performance index information of the back-end Web server in real time. Then, the coefficient of each performance index is calculated by the entropy method, and the weight of the back-end Web server is dynamically modified. The experimental results show that the new algorithm has better response time and throughput in the case of high concurrency compared with the Weighted Round Robin algorithm and the Least Connections algorithm.

Keywords: load balancing; dynamic weight; server cluster; entropy method; Nginx

0 引 言

随着Web应用和服务的访问量激增,Web服务器集群承担了越来越多的请求压力。为了保障和提高Web服务器集群的整体服务效能,负载均衡技术在Web服务器集群管理中得到了广泛应用。

针对负载均衡的解决方案有硬件及软件负载均衡。硬件负载均衡能提供更好的高可用性、性能和可扩展性,业界主流的硬件负载均衡包括F5、A10等。但硬件负载均衡成本过高,对于大部分用户单位来说,使用Nginx这种免费且功能强大的开源软件负载均衡工具可能是更为合适的选择。Nginx能够有效地降低系统资源的使用率,同时保持较高的并发数,并且容易进行扩充,常被用来作为Web服务器端的负载均衡器[1],解决高并发场景下后端服务器对于请求的处理。

目前常见的负载均衡算法有轮询、加权轮询、最小连接、加权最小连接等[2-3]。由于负载均衡技术的广泛应用,国内外诸多研究学者对其进行了深入研究与优化。文献[4]提出了通过依据负载权重来选择节点集的分布负载方法。文献[5]创新性提出了哈希负载平衡算法,使Web集群的负载平衡效果得到有效的提高。文献[6]提出了依据集群系统的值来选择相应的服务器的算法,该算法能够依据不同的用户请求类型来确定不同的服务器性能评估标准。文献[7]将深度学习的长短期记忆网络算法引入了负载均衡技术中,用于权重的自适应改变。

通过对Nginx负载均衡技术的学习研究,在加权轮询算法的基础上,设计实现了一种改进的动态权重负载均衡算法。该算法主要包含3个方面:

1)利用Redis缓存机制进行数据交换,使用CPU利用率、内存使用率、磁盘I/O利用率、网络带宽等更全面的负载指标[8]作为计算后端服务器动态权重的依据。

2)考虑到了后端服务器间硬件性能存在差异,引入了权重系数以区分不同硬件对处理请求的性能影响程度,并采用熵值法进行权重系数计算。

3)对后端服务器集群是否均衡状态进行实时判断以减少计算,实现动态调整后端服务器的负载情况,有效达到负载均衡的目的。此外、如果所有的后端服务器都超过负载阈值,则向管理员发出告警,由管理员介入评估处理。

1 改进的动态权重算法

改进的动态权重算法系统模型包括三个模块,即负载信息采集模块、负载信息处理模块和动态权重调整模块,具体情况如图1所示。

负载信息采集模块运行在各台后端服务器中,周期性的采集后端服务器的各项负载信息并写入Redis中。负载信息的采集周期不能随意设置,采集周期设置过小会增加后端服务器资源消耗,引起服务器权重更新的震荡;而如果采集周期设置过大,则可能导致采集到的负载数据不及时或不准确,对负载平衡策略产生负面影响,从而降低系统性能。经过实验测试,选取了10秒作为本算法的采集周期。

负载信息处理模块和动态权重调整模块部署在动态负载均衡服务器上。

负载信息处理模块是从Redis读取最新的后端服务器各项负载信息数据并根据算法对每台服务器的权重进行计算,同时将权重计算结果写入Redis中供其他模块调用。

动态权重调整模块从Redis获取每台服务器的权重信息,对负载不均衡的服务器进行权重的修改,最后根据算法合理地选择某一台后端服务器处理请求。

各个模块之间的数据交换通过Redis进行,有利于提高系统处理请求的响应速度,总体算法流程如图2所示。

1.1 服务器初始化权重计算

初始化权重反映的是后端服务器节点在开始时刻的性能情况。设集群后端服务器的CPU、内存、磁盘I/O和网络带宽的剩余负载性能分别使用PCPU、Pmem、Pio、Pnet表示,集群内所有后端服务器的CPU、内存、磁盘I/O和网络带宽的剩余负载性能之和分别使用TCPU、Tmem、Tio、Tnet表示,根据式(1~4)可以计算集群所有服务器节点的剩余负载性能总和:

(1)

(2)

(3)

(4)

由于不同硬件对服务器性能产生的影响有所差异,因此需要对各个性能指标进行加权处理[9]。节点的初始化权重可根据式(5)进行计算[9-10]:

(5)

其中:为服务器节点i的初始化权重;A为调节成为一个整数的调节常量,从而减小因舍弃小数位导致的误差,本文A取值为1 000;、、、为服务器节点CPU、内存、磁盘I/O、网络带宽的权重系数,并且满足式(6)的约束:

(6)

对于、、、权重系数的计算,传统方法大多采用的是层次分析法,偏主观性,难以精确衡量各个硬件对服务器性能的影响,本算法中使用熵值法进行计算。

1.2 熵值法计算权重系数

熵值法是计算指标权重的经典算法之一,用来判断某个指标的离散程度。在本文算法中采用熵值来度量各项指标的离散程度,指标的熵值越小,对服务器性能的影响越大,即权重系统越大。假设有n台服务器节点,每台服务器节点有k个负载性能指标(CPU、内存、磁盘I/O、网络带宽等),令xij为第i台服务器的第j个指标Xi = {xi1,…,xik},Yi为Xi标准化后的值Yi = {yi1,…,yik},权重系数主要计算步骤如下[10-11]:

1)对原始数据组进行标准化处理,消除各指标的量纲差异,把各指标数值压缩在[0—1]区间,数据标准化方法如下:

(7)

其中,yij为第i台服务器的第j个指标的标准化值。

2)计算第j项指标的熵值。设pij为第i台服务器第j项指标占集群服务器第j项指标的比重,Ej为第j项指标的熵值,则:

(8)

(9)

3)计算各项指标权重系数wj:

(10)

本算法中首先获取后端服务器的各项指标的实时数据作为训练数据,然后根据式(7)得到标准化值,接着循环遍历各后端服务器,使用式(8)与式(9)计算得出各个指标熵值,最后根据式(10)计算各项指标的权系数、、、。

1.3 负载均衡值设计

随着请求访问量的变化,集群各后端服务器处理请求所消耗资源的不同,各后端服务器的性能负载情况也随之发生变化,从而需要动态的更新服务器的权重。但是频繁的更新各后端服务器权重,会导致负载均衡服务器不断地重新计算和调整请求分配,增加了负载均服务器的开销[9]。

因此,算法需要根据实际情况评估服务器集群负载均衡状态以决定是否进行权重调整,兼顾负载均衡效果和系统性能。本文使用式(11)来计算节点i的负载性能:

(11)

其中,Ui为节点的资源的负载性能,Ci、Mi、Ii、Ni为节点i当前的CPU、内存、磁盘I/O和网络带宽实时负载性能。Ui很好地展示了各个服务器的实时负载情况。通过分析,本文使用服务器资源使用率βi来反映当前服务器集群中各台服务器的使用情况,如式(12)所示:

(12)

基于服务器资源使用率βi,使用式(13)来计算评估当前服务器集群的负载均衡状态[12]:

(13)

其中,βavg为服务器集群的资源利用率的平均值。σ为表征负载均衡值,反映了服务器集群的负载均衡情况,服务器集群的负载均衡程度越好,则σ值越小;反之,服务器集群的负载均衡程度越差,σ值越大。

1.4 动态权重的调整

本文算法中通过βi来调整服务器节点的权值[13]。一般来说βi的值为1,但是实际应用中,要关注βi和1的差值,其绝对值增大就代表负载分配的不均衡。本文根据βi列出公式对最开始的权重修改,求得了使用率均衡下的DWi,即新的权值:

(14)

式(14)中,B为一个常数,用于调节权重步长,本文中取值为5。当βi<1时,服务器负载较轻,当请求到来时,可以在目前的权重上加上B·βi;当βi>1时,服务器负载较重,当请求到来时,可以在目前的权重上减去B·βi。

2 实验分析

2.1 实验环境及参数设置

本文实验环境包含1台Redis服务器、1台测试客户端(安装siege用于测试后端服务器性能)、1台Nginx负载均衡服务器及3台后端服务器[14]。为了保证后端服务器具备差异化的响应处理能力,微调了3台后端服务器的配置使其具有不同负载性能。实验环境配置信息如表1所示。

2.2 结果分析

实验测试了以下3项:

1)测试服务器集群与单台服务器在不同请求并发数下的响应时间。

2)测试集群内改进的动态权重算法(简称动态权重算法)、轮询算法(Round Robin Algorithm, RR)、最小连接数算法(Least Connections Algorithm, Least-conn)在不同的请求并发数下的响应时间。

3)测试集群内上述3种算法在不同的请求并发数下的吞吐量。

记录10次实验数据并取均值。得到了在不同请求并发数下,服务器集群与单台服务器的响应时间、集群内各算法的响应时间,以及集群内各算法的吞吐量的对比情况,具体结果如图3至图5所示。

如图3所示,当请求并发数小于200时,无论是单台服务器还是服务器集群,其响应时间的差异并不明显;然而,一旦请求并发数超过200,单台服务器的响应时间会迅速增长,而利用负载均衡技术的服务器集群的响应时间则保持小幅度的平稳增长。

如图4所示,平均响应时间总体而言随着请求并发数的增加而升高的,但动态权重算法的平均响应时间低于其他两种算法。动态权重算法的总的平均响应时间分别比RR算法、Least-conn算法低了10.09%、6.3%。

由图5可以得出,三种算法的吞吐量总体随着并发数的增加而增加,当并发量高于1 200时三种算法的吞吐量随着并发数的增加有一定程度的减少,但是动态权重算法的吞吐量减少的幅度最为平缓,而且高于其他两种算法。

综上所述,本文提出的动态权重算法,在平均响应时间和吞吐量两个方面都优于其他两种算法,在一定程度上提升了服务器的性能。

此外,在处理服务节点的负载信息时,如果所有服务节点的负载超出设定的阈值,会通过微信向服务器集群管理员发送告警通知,请求评估处理,如图6所示。

3 结 论

本文通过学习研究Nginx的负载均衡算法,设计实现了一种改进的动态权重算法。动态权重算法使用Redis进行缓存多种性能指标,然后使用熵值法进行性能指标的权重系数,并根据服务器集群的负载均衡状态动态修改集群内各后端服务器的权重。实验结果表明,动态权重算法在高并发请求下,能合理有效地将请求分发到合适的后端服务器节点进行处理,提高了响应速度,提升了服务器集群的整体性能。

参考文献:

[1] DYMORA P,MAZUREK M,SUDEK B. Comparative Analysis of Selected Open-Source Solutions for Traffic Balancing in Server Infrastructures Providing WWW Service [J].ENERGIES,2021,14(22):1-23.

[2] MA C,CHI Y H. Evaluation Test and Improvement of Load Balancing Algorithms of Nginx [J].IEEE Access,2022,10:14311-14324.

[3] 梁剑.Nginx负载均衡技术的研究 [J].太原师范学院学报:自然科学版,2019 (2):78-80

[4] 张玉芳,魏钦磊,赵膺.基于负载权值的负载均衡算法 [J].计算机应用研究,2012,29(12):4711-4713.

[5] 邓珍荣,唐兴兴,黄文明,等.一种Web服务器集群负载均衡调度算法 [J].计算机应用与软件,2013,30(10):53-56+101.

[6] 王永辉.基于Nginx高性能Web服务器性能优化与负载均衡的改进与实现 [D].成都:电子科技大学,2015.

[7] LINP, YANG J, SHI X. Improved Load Balancing Algorithm Based on Long Short-Term Memory Networks[C]//Proceedings of the 7th International Conference on Computer Science and Application Engineering. 2023: 1-6.

[8]刘佳祎,崔建明,智春.基于Nginx服务器的动态负载均衡策略[J].桂林理工大学学报,2020,40(2):403-408.

[9]谭畅,谭歆,胡磊,等.云中心基于Nginx的动态权重负载均衡算法[J].重庆邮电大学学报:自然科学版,2021,33(6):991-998.

[10] 王钊,刘钊远.一种改进的流媒体集群动态负载均衡调度算法 [J].计算机与数字工程,2018,46(2):241-246.

[11] 刘甜甜,谷晓燕,陈梦彤.基于熵值法改进Stacking的文本情感分析 [J].科学技术与工程,2023,23(23):10008-10014.

[12] 丁逸.基于层次策略的动态负载均衡算法研究 [D].南京:东南大学,2005.

[13] 吴俊鹏,刘晓东.一种基于集群的动态负载均衡算法研究 [J].电子设计工程,2021,29(16):75-78.

[14] 曲干聪,王俊.基于负载反馈的分布式数字集群动态负载均衡算法 [J].计算机应用研究,2022,39(2):526-530+542.

作者简介:郑松奕(1986—),男,汉族,广东揭阳人,助理工程师,硕士,研究方向:机器学习、软件工程、网络管理计算机网络网络安全;通信作者:陈国良(1984—),男,汉族,广东英德人,高级工程师,本科,研究方向:网络管理网络安全、系统管理、软件工程;蒋正亮(1987—),男,汉族,广东清远人,工程师,硕士,研究方向:计算机网络与网络安全、算力网络;张裕祥(1989—),男,汉族,广东韶关人,工程师,硕士,研究方向:通信工程、网络安全。

标签:  服务器 

免责声明

本文来自网络,不代表本站立场。如有不愿意被转载的情况,请联系我们。

iidomino cuppor