文章目录
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文件的配置即可


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

被折叠的 条评论
为什么被折叠?



