【性能测试-02】 - Nginx在系统架构中的作用

本文深入探讨了Nginx在系统架构中的关键角色,包括正反向代理原理、负载均衡策略(轮询、权重、ip_hash和url_hash)以及为何选择shell分析Nginx日志。通过讲解shell命令如awk、sed和sort uniq,展示了高效的数据处理在性能测试中的价值。

Nginx在系统架构中的作用

Nginx作为业内最常用的代理服务器,较为详细的记录了用户的访问数据,而且在分布式部署性能优化方面页发挥了积极作用,所以说到性能测试,Nginx是不得不提的中间件

Nginx两个重点概念

代理

正向代理和反向代理的作用是什么,什么是代理呢?举个例子,比如说你想去某公司做测试,但是你无门,但是小王正好认识对方的测试主管,就把你的简历推荐进去,小王就是代理

正向代理

正向代理的特点就是你非常清楚你要去哪,访问什么服务器,但服务器不关心你的出发地是哪里,它只关心你从哪个代理服务器来的

反向代理

说了正向代理,那么反向代理是什么意思呢,咱们先了解一下应用场景,比如我们内部服务器集群,是不可能直接暴漏出去给外网访问,这样安全风险大,再有现在很多网站为了提高性能,多采用分布式部署,通过多台服务器来缓解服务端的压力,这些都可以通过Nginx完成。那我们外网用户如何访问内部的应用呢,Nginx可以暴漏端口给外网用户,当接受到请求之后,分发给内部服务器,此时的Nginx就扮演这反向代理的角色,这样一个过程,客户端是明确的,但对于访问到具体哪台应用服务器是不明确的

负载均衡

在这里插入图片描述
为什么需要负载均衡呢,比如说线上只有一台应用服务器,但是公司玩大了,随着用户体量的上升,一台服务器难以支撑现有用户的访问,哪就得搞两台或者多台服务器,那么问题来了,用户怎么能均匀的访问这些服务器呢,这就需要了解Nginx负载均衡策略,简单来说就是Nginx如何分发这些请求到后边的服务器集群,下面介绍Nginx的三种负载均衡策略

轮询

也就是使用平均分配的方式,把每个请求平均分配到配置的后端服务器上,除非有服务宕机,才会停止分发

upstream localhost{
//分发到各应用服务
	server 127.0.0.1:7070;
	server 127.0.0.1:7071;
}

server {
    listen 8081 default;
    server_name test.csdn.net;
    charset utf-8;
    location /get {
    proxy_pass http://somestream;
 
    }  

我们就会轮询本地7070和7071这两个服务

权重

也就是被指轮询的比重,在真实的互联网场景下,很多服务器上会配置多个应用,会导致每台服务器的资源占用不一致,对于相对空闲的机器可以多配置一些访问比例,比较繁忙的机器配置可以少配置一些访问比例

upstream localhost{
//分发到各应用服务
	server ip1:8080 weight=9;
	server ip2:8081 weight=1;
}

server {
    listen 8081 default;
    server_name test.csdn.net;
    charset utf-8;
    location /get {
    proxy_pass http://somestream;
 
    }  

ip_hash

上边两种配置在电商场景下会出现很常见的问题,比如你登陆一个网站,登陆信息已经保存在A机器上,但是做后续操作时,请求发送到B机器上,那就获取不到你在B机器上的登陆信息,这时就要重新登陆,这样用户是无法接受的,ip_hash可以很好的解决这个问题,让每次访问的同用户都能访问到固定的服务器上

upstream test{
//分发到各应用服务
	ip_hash;
	server localhost:8080;
	server localhost:8081;
}

server {
    listen 8081 default;
    server_name test.csdn.net;
    charset utf-8;
    location /get {
    proxy_pass http://somestream;
 
    }  

url_hash

一般来讲,要用到urlhash,是要配合缓存命中来使用。举一个的实例:有一个服务器集群A,需要对外提供文件下载,由于文件上传量巨大,没法存储到服务器磁盘中,所以用到了第三方云存储来做文件存储。服务器集群A收到客户端请求之后,需要从云存储中下载文件然后返回,为了省去不必要的网络带宽和下载耗时,在服务器集群A上做了一层临时缓存(缓存一个月)。由于是服务器集群,所以同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。在此类场景下,为了使得缓存命中率提高,很适合使用url_hash策略,同一个url(也就是同一个资源请求)会到达同一台机器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取,既减少了带宽,也减少的下载时间。

upstream somestream {
    hash $request_uri;
    server 192.168.244.1:8080;
    server 192.168.244.2:8080;
    server 192.168.244.3:8080;
    server 192.168.244.4:8080;
 }
 
server {
    listen 8081 default;
    server_name test.csdn.net;
    charset utf-8;
    location /get {
    proxy_pass http://somestream;
 
    }  

用shell命令分析Nginx日志

为什么要通过shell日志来分析Nginx日志?

对于测试而言,比较熟悉的掌握python或java的用法较多,熟悉shell的比较少,肯定有运动员说,shell能干的python也能干,其实对于性能测试而言,处理效率是比较关心的话题,在Linux服务器上处理数据达到百万以上,对于文本操作而言,相对python或者java,shell在处理效率方面有着得天独厚的优势,所以掌握基础的shell还是必要的

为什么会选择Nginx日志来分析

对于大型的互联网公司来说,对于获取分析日志早已有平台化支持,基本一键导出你需要的用户数据访问报表,而对于中小公司来说,去哪里获取都是问题
使用Nginx这种比较原生的方式去了解底层操作,让我们接触到数据统计

Linux的shell命令

在这里插入图片描述

awk:

awk可以将文本中的数据按行读取,然后将读取出来的数据按照规定的分隔符去提取你所需要的内容
常用参数 -F 指定分隔符
比如以下代码
在这里插入图片描述
为分隔符,寻找以 root 开头的行数据,打印第7

以下代码以BEGIN开头,END结尾,打印第1列数据
在这里插入图片描述

Sed:

Sed是一个流编辑器,一次只能处理一行内容,需要注意的是Sed并不改变文本本身的内容,它指示把结果存在临时缓冲区中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Sort

在这里插入图片描述
在这里插入图片描述

uniq

在这里插入图片描述
在这里插入图片描述
学完这些命令,在看一下Nginx的日志分析,如果你不去清楚Nginx的日志地址在哪,可以查看nginx.conf文件的配置即可

在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值