APP下载

基于Nginx负载均衡架构的云计算分布式系统的设计与实现

2023-07-26彭好佑符天杨登攀傅翠玉姚坚

电脑知识与技术 2023年16期
关键词:轮询均衡器分配

彭好佑,符天,杨登攀,傅翠玉,姚坚

(海南软件职业技术学院,海南 琼海 571400)

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负载均衡器性能信息,监控其运行状态、负载情况,超过设定负载可发出警告信息,便于及时发现问题和维护。

图1 云计算分布式系统架构

监控系统的设计。Prometheus是一款开源的监控系统,具备对Kubernetes管理的容器云的监控功能,可对容器云上的Node物理节点、应用容器、Kubernetes集群资源、容器应用运行状态进行动态发现、监控和智能告警[7]。Grafana是一个开源的度量分析和可视化工具,可将采集的数据进行分析和查询,最后实现可视化的展示和过载报警[8]。如图2所示,云计算分布式系统监控方案采用Prometheus和Grafana 建立监控系统,分为数据收集、数据提取和数据展示三部分。在数据收集端的Web服务器中采用Node_exporter 监控工具,将被采集的数据信息通过HTTP服务的方式发给监控服务器Prometheus Server。在数据提取模块,监控服务器Prometheus Server 负责获取、查询和保存被监控端的信息,将收集到监控端的数据保存到时序数据库(Time Series Database,TSDB) 。数据展示端通过Grafana软件实现可视化业务系统监控展示和过载警告信息的输出。

图2 监控系统模型

云计算分布式系统仿真平台搭建需求如表1 所示,其中4 台PC 机都在VMware Workstation 部署centos 7.6 操作系统,负载均衡采用Nginx实现,Web01和Web02 是部署PHP 和MySQL 的Web 服务器。客户端为Win 10 操作系统PC 机,采用Apache Bench 工具模拟高并发访问请求,测试云计算分布式系统性能,这5台PC 通过网线连接在同一个交换机上。Prometheus Server实时采集Web01、Web02和Nginx负载均衡器的运行信息和负载情况,为云计算分布式系统的性能分析提供依据。

表1 10组并发总数4000个并发数500个高并发访问请求测试

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.2 监控系统部署

1) node_exporter的安装

Web01、Web02 和Nginx 负载均衡器中安装Node_exporter 组件工具,并启动node_exporter 收集服务器信息。

2) 在监控服务器中安装prometheus server,在Prometheus.yml 文件中,增加需要抓取的节点的信息,启动prometheus server 抓取Web01、Web02 和Nginx 负载均衡器运行信息。

修改Prometheus.yml,增加以下代码

3) 安装和启动Grafana 服务,通过http://192.168.40.13:3000 登录Grafana,加载数据源,加载Dashboard监控模块,查看Web01、Web02和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使用率较低,且增长较缓慢,实现了负载均衡。

图3 高并发请求响应时CPU使用率

并发请求连接总数分别为2100、2400、2700、3000、3300、3600、3900、4200、4500高并发访问,并发连接500 个,模拟500 用户在线同时HTTP 访问,统计Web01和Web02 的TCP连接数。实验结果如图4和图5所示,经过Nginx 进行负载均衡后, Web01和Web02的TCP连接比例基本是1:2,实验表明根据后端服务器的性能实现加权轮询算法分配策略的负载均衡。

表2 9组高并发数请求Web01和Web02的TCP_tw连接数

4 总结

本文根据云计算分布式系统在高并发访问请求中存在的负载不均衡、响应速度下降的问题,对负载均衡算法进行研究,设计云计算分布式系统架构,采用Nginx 负载均衡器架构云计算分布式系统和采用Prometheus和Grafana建立监控系统,监控后端服务器运行情况和超载预警。最后,对云计算分布式系统进行高并发仿真测试,实验表明该云计算分布式系统比单一的服务器系统有较高的可靠性,较低的系统资源使用率,实现基于加权轮询算法的负载均衡。

猜你喜欢

轮询均衡器分配
应答器THR和TFFR分配及SIL等级探讨
遗产的分配
一种分配十分不均的财富
基于等概率的ASON业务授权设计∗
绩效考核分配的实践与思考
依托站点状态的两级轮询控制系统时延特性分析
利用时间轮询方式操作DDR3实现多模式下数据重排
无线传感网OFDM系统中信道均衡器的电路实现
一种基于LC振荡电路的串联蓄电池均衡器
基于LMS 算法的自适应均衡器仿真研究