基于Nginx负载均衡架构的云计算分布式系统的设计与实现
作者: 彭好佑 符天 杨登攀 傅翠玉 姚坚
基于Nginx 负载均衡架构的云计算分布式系统的设计与实现彭好佑,符天,杨登攀,傅翠玉,姚坚(海南软件职业技术学院,海南 琼海 571400)摘要:针对海量用户的高并发访问请求,云计算服务面临负载分配不均和响应时间增加的问题。基于负载均衡算法研究基础上,文章设计Nginx负载均衡架构的云计算分布式系统,采用 Nginx负载均衡器、Prometheus和Grafana实现云计算分布式系统和监控系统的搭建。高并发访问实验测试表明相对单一的服务器应用系统,该云计算分布式系统有较低资源消耗性和可靠性,较好地实现负载均衡。
关键词:云计算;负载均衡算法;Nginx;监控系统
中图分类号:TP399 文献标识码:A文章编号:1009-3044(2023)16-0044-03
0 引言
随着信息技术的高速发展,互联网用户也得到巨大的增长,爆发式的高并发访问请求给单一的服务器带来严峻的挑战,准确及时地响应高并发的访问请求,是云计算分布式系统一个重要的研究热点。架构相应的云计算分布式服务系统并实现高质量的负载均衡,是提高云计算服务的响应质量重要方式之一。
负载均衡是云计算分布式应用系统中最核心的技术之一。云计算分布式系统负载均衡最主要目的是通过相应分发策略,将用户的并发请求通过分配策略平均分配给云计算的服务节点,使服务节点的平均请求响应时间最少,吞吐量最大,资源得到最充分的利用,避免某服务节点过载的目的[1]。在云计算分布式系统中,如果只是单一增加服务器数量,不采用适应负载均衡技术,将会导致有些服务属于超负载运转状态,甚至会出现系统崩溃,而有些服务器却处于空闲的状态,影响云计算分布式系统服务质量,用户体验较差,系统资源利用率较低。因此,负载均衡算法的转发策略影响整个云计算分布式系统的服务质量,采用合适的负载均衡器是云计算分布式系统考虑核心问题。Nginx是一个高性能的基于七层负载均衡的反向代理Web服务器,具有稳定强、高并发、低消耗、安全性高,配置简单灵活的特点[2],比较适合作为云计算分布式系统的负载均衡器。
本论文通过对负载均衡算法进行研究分析,采用Nginx负载均衡器高响应并发请求,设计并搭建云计算分布式系统和监控模型,在高并发访问中实现负载均衡,提高云计算分布式系统的可靠性和稳定性。
1 负载均衡算法
负载均衡算法是负载均衡器的核心部分,负载均衡器根据负载均衡算法将用户并发请求平均分配到不同的服务器,在有限的系统资源中,实现资源利用的最大化。
1.1 负载均衡算法分类
目前常见的负载均衡算法主要有:1) 硬件负载均衡。从专门的硬件设备上实现负载均衡功能[3],与系统无关,该设备具有负载均衡能力强,能使整个分布式系统达到最佳的性能,但缺点是设备价格昂贵,成本高。
2) 软件负载均衡。将软件安装某硬件上作为负载均衡器[4],通过软件来实现系统性能达到最佳的效果,软件负载均衡器优点是配置灵活,具有各种请求调度算法,成本比较廉价。缺点是安装和运行负载均衡软件需要消耗计算机系统的额外开销,很容易成为系统的性能瓶颈。
1.2 Nginx 内置均衡算法
Nginx基于软件负载均衡算法,其负载均衡策略主要分两种:内置负载均衡策略和扩展负载均衡策略。内置的负载均衡算法主要有:加权算法、轮询算法、IP_hash 算法、fare和url_hash算法。外置的算法是根据需求,开发人员自己编写的负载均衡算法。
1) 轮询算法该算法根据预先设定好的某种固定顺序,按顺序周期响应服务请求,当负载均衡器收到用户请求后,按照预先制定轮询分配方案,当一个周期结束,按原来固定顺序开始新的周期分配给不同的服务节点。
2) 加权轮询算法加权轮询算法根据设定好的权重,根据服务节点权重的大小,选择权重最大的节点,选中该节点后,该节点的权重自动减1,并重新进行排序,重复以上步骤,根据权重来分发请求到不同的服务节点中,权重weight和访问比率成正比,用于后端服务器性能不均的情况。
3) IP hash算法根据hash算法将请求访问服务器的IP放入一张hash表中[5],即根据IP地址进行hash散列算法找到其相应的后端服务器,把客户端的请求分配该服务器。
该算法主要优点是相同IP地址将被分配到同一台后端服务器,这种算法用于有状态session 会话应用场景[6]。
4) url_hash 算法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,这种算法在后端服务器为缓存时比较有效。
5) fair 算法按后端服务器的响应时间来分配请求,响应时间短的服务器优先分配[5]。这种算法适用于对访问性能要求较高的业务应用,是一种更为智能的负载均衡算法。
2 云计算分布式系统的设计
云计算分布式系统架构的设计方案如图1所示,采用Nginx中间件作为负载均衡器,实现云计算分布式系统在高并发访问请求中负载均衡。Nginx负载均衡器通过的负载均衡算法把客户端的用户请求分配给适合后端Web服务器,后端Web服务器响应用户的请求,把请求结果返回客户端用户,实现负载均衡。
在该架构中,监控服务器定时收集后端Web服务器和Nginx负载均衡器性能信息,监控其运行状态、负载情况,超过设定负载可发出警告信息,便于及时发现问题和维护。
监控系统的设计。Prometheus是一款开源的监控系统,具备对Kubernetes管理的容器云的监控功能,可对容器云上的Node物理节点、应用容器、Kubernetes集群资源、容器应用运行状态进行动态发现、监控和智能告警[7]。Grafana是一个开源的度量分析和可视化工具,可将采集的数据进行分析和查询,最后实现可视化的展示和过载报警[8]。如图2所示,云计算分布式系统监控方案采用Prometheus和Grafana 建立监控系统,分为数据收集、数据提取和数据展示三部分。在数据收集端的Web服务器中采用Node_exporter监控工具,将被采集的数据信息通过HTTP服务的方式发给监控服务器Pro⁃metheus Server。在数据提取模块,监控服务器Pro⁃metheus Server 负责获取、查询和保存被监控端的信息,将收集到监控端的数据保存到时序数据库(Time SeriesDatabase,TSDB) 。数据展示端通过Grafana软件实现可视化业务系统监控展示和过载警告信息的输出。
云计算分布式系统仿真平台搭建需求如表1所示,其中4台PC机都在VMware Workstation 部署cen⁃tos 7.6 操作系统,负载均衡采用Nginx实现,Web01和Web02是部署PHP和MySQL的Web服务器。客户端为Win 10操作系统PC机,采用Apache Bench工具模拟高并发访问请求,测试云计算分布式系统性能,这5 台PC通过网线连接在同一个交换机上。PrometheusServer实时采集Web01、Web02和Nginx负载均衡器的运行信息和负载情况,为云计算分布式系统的性能分析提供依据。
3 云计算分布式系统的实现
Web01 和Web02 中安装Nginx 和MySQL,在Web01和Web02中修改nginx.conf,将Nginx关联PHP 服务,完成的Web 服务器搭建。编写测试脚本test.php,查询数据库test中的mobile表中数据,并把查询到的数据返回到Web页面。
3.1 加权轮询算法
负载均衡器采用加权算法,根据服务器性能内存、CPU等情况分配相应的权重,Web01设置权重值为1,Web02设置权重值为2。Nginx负载均衡器当检测到Web服务器连接异常时,在timeout周期内,Nginx 将请求发送给可用的服务节点,在Nginx负载均衡器修改配置代码:
3.3 实验测试
客户端使用Apache的Apache Bench工具向服务器端发送高并发连接访问请求,发送请求总是分别4000、4500、5000、5500、6000、6500、7000、7500、8000 个高并发请求,同时并发数500 个。对单一服务器Web01提供请求响应,当在并发总数是5000个时,开始出现丢包现象,丢包数为2个;而云计算分布式系统在4 000~8 000个的高并发访问时,并无丢包情况。
如图3所示,单独服务器Web01响应高并发请求时,随着请求总数的增加,CPU的使用率越来越高,增长较快。而云计算分布式系统中Web01 和Web02同时响应高并发请求,其CPU使用率较低,且增长较缓慢,实现了负载均衡。
并发请求连接总数分别为2100、2400、2700、3000、3300、3600、3900、4200、4500高并发访问,并发连接500 个,模拟500 用户在线同时HTTP 访问,统计Web01和Web02 的TCP连接数。实验结果如图4和图5所示,经过Nginx进行负载均衡后, Web01和Web02 的TCP连接比例基本是1:2,实验表明根据后端服务器的性能实现加权轮询算法分配策略的负载均衡。
4 总结
本文根据云计算分布式系统在高并发访问请求中存在的负载不均衡、响应速度下降的问题,对负载均衡算法进行研究,设计云计算分布式系统架构,采用Nginx负载均衡器架构云计算分布式系统和采用Prometheus和Grafana建立监控系统,监控后端服务器运行情况和超载预警。最后,对云计算分布式系统进行高并发仿真测试,实验表明该云计算分布式系统比单一的服务器系统有较高的可靠性,较低的系统资源使用率,实现基于加权轮询算法的负载均衡。
参考文献:
[1] 刘敬玲,黄家玮,蒋万春,等.数据中心负载均衡方法研究综述[J].软件学报,2021,32(2):300-326.
[2] 张炜森,陈涛,李康.Nginx高并发负载均衡原理与策略比较研究[J].工业控制计算机,2018,31(1):85-86,89.
[3] 谭畅,谭歆,胡磊,等.云中心基于Nginx的动态权重负载均衡算法[J].重庆邮电大学学报(自然科学版),2021,33(6):991-998.
[4] 龚劲松,孙九凌.基于服务器负载均衡技术分析[J].长江信息通信,2021(11):89-91.
[5] 戴伟,马明栋,王得玉.基于Nginx的负载均衡技术研究与优化[J].计算机技术与发展,2019,29(3):77-80.
[6] 伍春生.Nginx负载均衡技术在高速公路视频云联网平台中的应用[J].上海船舶运输科学研究所学报,2021,44(1):60-64.
[7] 谢超群.基于Prometheus的容器云监控平台应用研究[J].西安文理学院学报(自然科学版),2022,25(4):23-26.
[8] 程通.基于Prometheus的高校智慧教室电子设备运维方案[J].信息与电脑,2022(19):4-6.
【通联编辑:谢媛媛】