首页 > 系统相关 >全链路性能测试:Nginx 负载均衡的性能分析和调优

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

时间:2024-07-03 20:00:33浏览次数:27  
标签:负载 http nginx 性能 代理 Nginx 调优 服务器

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

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

什么是Nginx

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

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

  • 正向代理:是给客户端做代理, 服务器收到的都是代理给我发过来的数据,不知道是哪个客户端;应用场景是客户端有集群时,代表就是VPN;

图片

  • 反向代理:是给服务器做代理,客户端访问服务器其实访问的都是代理的地址,不知道服务器是哪个 服务器地址不会暴露;应用场景就是有服务器集群时,代表是Nginx,可以保护服务器的地址不会暴露,也可以做负载均衡。

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

图片

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

nginx安装

第一步:安装依赖:yum install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel -y ,因为是C语言写的 所以要安装一些C语言的依赖;

第二步:安装pcre:

wget **https://sourceforge.net/projects/pcre/files/pcre/8.44/pcre-8.44.tar.gz/download --no-check-certificate 
  • 解压 :tar -xzvf download ,得到一个pcre-8.44 文件夹

  • 进入解压后的文件夹:cd pcre-8.44/

    •  ./configure ,做编译,配置加载检查

    •   make && make install ,安装和编译

第三步:下载安装Nginx安装包:wget **http://nginx.org/download/nginx-1.19.5.tar.gz # 解压 进入nginx解压后的文件夹

  • ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

  • make && make install

 第四步:启动nginx:

  • 1)cd /usr/local/nginx/sbin

  • 2)./nginx 【启动进程】

  • 3)ps -ef | grep nginx :检查是否启动,启动master 和worker两个进程,说明启动成功了

图片

第五步:访问一下这个Nginx服务是否可以访问成功

  • web页面访问:默认端口是80,地址:http://服务器ip地址, 能打开看到如下页面就说明成功了

图片

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

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

  • 1、修改nginx.conf配置文件,把 两个项目做成集群


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;
        }
  • 2、配置完后,所有经过Nginx的流量,都会走到location里:location里的代理匹配web_app,就会找到upstream里进行负载均衡,按照权重的配置走到对应的服务器。

  • 3、配置完成后,测试一下配置文件以及重新加载配置文件:

图片

  • 4、然后没有问题,就可以直接访问的是Nginx网关,由网关去做分配具体访问到哪个服务器。

Nginx的均衡策略

1、weight 权重 :值越大,转发到的流量越多。按照比例关系来分配流量。
  • 此策略

 比较适合服务器的硬件配置差别比较大的情况【性能好的服务器权重大,性能差的服务器权重小】但是这 个权重需要自己去计算,并进行压测去检验这个权重是否这是合理。*

2、轮询:默认策略,max_fails 在fail_timeout时间内最大失败次数,如果所有都失败,任务服务器已停就会踢掉这个服务器,不再分配流量给他【这个按照默认配置就可】

  • 不区分后台服务是什么样的,就是轮着来分配流量。此策略适合服务器配置相当,无状态且短平快的服务使用。

  • fail_timeout: 失败轮询时长;一直会轮训查询,因为可能会恢复 恢复了就正常分配流量了;

  • fail_timeout 服务器被认为停机的时长,默认10s

3、least_conn最小连接:此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况 【会自动检测服务器的性能进行分配 处理时间短的服务器就会多分配,长时间的少分配】

4、ip_hash和url_hash用的会相对少一些,以为这两种方案都是在服务缓存不共享的情况用,但是现在大部分公司都是redis这种缓存共享机制,所以用的很少。

5、fair响应时间:借助收费的第三方插件,也比较少。愿意花钱的,效果还是比较好的。

图片

Nginx对性能测试调优

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

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

图片

  • server connection:可以看到服务器有几个处理请求,waiting特别多的话,就说明很多请求在等待,服务器很繁忙

  • Upstream :可以看到Nginx的负载均衡是否合理。如果压力都在某一台机器上,或者没有按照你配置的策略进行分配的话,那么可能就是你的负载均衡策略配置有问题或者失效了,需要去调整。

 

标签:负载,http,nginx,性能,代理,Nginx,调优,服务器
From: https://blog.csdn.net/m0_58552717/article/details/140135508

相关文章

  • CocosCreator客户端优化系列:CPU占用及性能优化
    CocosCreator客户端优化系列(四):CPU占用及性能优化转载请保留原文链接:https://blog.csdn.net/zzx023/article/details/88991314这篇文章是优化系列的最后一篇了,内容会长一些,更多的是提供一些方向以及思路,具体的一些细节由于篇幅有限,就不一一说明了,只要找对方向,就可以慢慢研究。希望......
  • web前端应用性能指标测量工具有哪些?
    接上一篇介绍前端性能指标的内容,本文主要总结下一般使用的性能测量工具。1、可以借助Gooogle开源的web-vitals库来测量一些性能指标:import{onCLS,onINP,onLCP,onFCP,onFID,onTTFB}from'web-vitals';onCLS(console.log);onINP(console.log);onLCP(console.log);o......
  • web前端应用性能指标优化方案有哪些?
    接上一篇介绍前端性能指标的内容,本文主要总结下一般使用的指标优化方案加载相关:FCP优化:降低服务器响应时间:确保服务器能迅速响应请求,这样浏览器就能更快地开始处理并渲染页面内容。可以通过优化服务端代码、改善静态资源的提供方式(如将图片部署到CDN)来实现。延迟加载非关......
  • 12条技巧,打造出超高性能的接口API
    插:AI时代,程序员或多或少要了解些人工智能,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(前言–人工智能教程)坚持不懈,越努力越幸运,大家一起学习鸭~~~1.并行处理简要说明举个例子:在价格查询链路中,我们需要获取多种独立的价格配置项......
  • web前端应用应该关注哪些性能指标?
    作为一个有经验的前端开发工程师来说,关注性能是必不可少的一项日常工作,那么应该重点关注一些什么样的性能指标呢?其实主要还是从用户体验的角度来看,一般我们会从页面加载相关、交互相关方面入手。原文:前端性能指标,一网打尽FCP:首次内容绘制LCP:最大内容绘制TTFB:首字节时间TBT:总......
  • nginx https配置& proxy_protocol协议配置
    server{ listen8100proxy_protocol; set_real_ip_from0.0.0.0/0; real_ip_headerproxy_protocol; location/{ proxy_set_headerX-Real-IP$proxy_protocol_addr;proxy_set_headerX-Forwarded-For$proxy_protocol_addr; proxy_passh......
  • 探索Mojo语言的编译器优化:提升性能的秘诀
    ......
  • nginx开启https
    生成自签名证书如果是在运营商处获得的证书,则不用这一步点击查看代码mkdir/etc/nginx/sslcat>/etc/nginx/ssl/nginx.cnf<<EOF[req]default_bits=2048distinguished_name=req_distinguished_namereq_extensions=req_extx509_extensions=v3_re......
  • 5% 消耗,6 倍性能:揭秘新一代 iLogtail SPL 日志处理引擎与 Logstash 的 PK
    作者:阿柄引言在当今数据驱动的时代,日志收集和处理工具对于保障系统稳定性和优化运维效率至关重要。随着企业数据量的不断增加和系统架构的日益复杂,传统日志处理工具面临着性能、灵活性和易用性等多方面的挑战。Logstash作为一款广受欢迎的开源日志收集与处理工具,早已广泛应用于......