全链路性能测试:Nginx 负载均衡的性能分析和调优

前言

为什么性能测试很多同学觉得是一个比较难以自学上岸的测试领域,是因为真正做全链路的性能测试是比较难的。所谓的全链路就是在项目的整个链路上任何一环节都有可能存在性能测试瓶颈,我们都需要能够通过分析性能的监控指标找到对应的问题。

我们今天要讲的Nginx负载均衡就是属于项目链路的一个环节,如果这个环节出了问题,那么也会造成性能瓶颈问题。所以,我们就需要深入了解一下具体什么是Nginx,以及Nginx出了问题会带来什么样问题以及如何解决这些问题。

什么是Nginx

Nginx: 是一个用 C 语言编写的高性能HTTP服务器、反向代理web服务器,具备占用内存少 + 并发能力强的优点。主要作为, 集群、负载均衡的软件、反向代理服务器、web服务器。

那么,这里讲到的反向代理又是什么?跟我们之前了解到的正向代理有什么区别呢?

图片.png

因为所有的流量都要经过这个反向代理,所以这个性能要求非常高,Nginx就是一个内存占用少,并发能力强的一种反向代理,所以使用非常广泛。

图片.png

我们要学习Nginx就需要先安装部署一个Nginx服务,然后才能演示看到其工作原理。

nginx安装

图片.png

图片.png

Nginx与项目集群的负载均衡实战

nginx配置负载均衡肯定是因为有多个相同的服务,至少2个以上,所以我们要启动2项目:

vim /usr/local/nginx/conf/nginx.conf
upstream web_app {

 	server 项目1的IP地址:端口 weight=1 max_fails=2 fail_timeout=30s;
	server 项目2的IP地址:端口 weight=1 max_fails=2 fail_timeout=30s;
	}
location / {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_set_header Host  $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://web_app;
            root   html;
            index  index.html index.htm;
        }

图片.png

Nginx的均衡策略

1、weight 权重 : 值越大,转发到的流量越多。 按照比例关系来分配流量。
2、轮询:默认策略,max_fails 在fail_timeout时间内最大失败次数,如果所有都失败,任务服务器已停就会踢掉这个服务器,不再分配流量给他【这个按照默认配置就可】
3、least_conn最小连接:此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况 【会自动检测服务器的性能进行分配 处理时间短的服务器就会多分配,长时间的少分配】
4、ip_hash和url_hash用的会相对少一些,以为这两种方案都是在服务缓存不共享的情况用,但是现在大部分公司都是redis这种缓存共享机制,所以用的很少。
5、fair响应时间: 借助收费的第三方插件,也比较少。愿意花钱的,效果还是比较好的。

图片.png

Nginx对性能测试调优

当按照如上配置好Nginx之后,可以对Nginx发起性能测试请求,有Nginx按照Nginx策略分发到不同的服务器上。

如果在测试时候,我们可以通过prometheus+grafana监控Nginx和服务器集群的压力情况:

图片.png

回帖
请输入回帖内容 ...