栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > 架构设计

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

架构设计 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
    • Nginx在系统架构中的作用
    • Nginx两个重点概念
      • 代理
        • 正向代理
        • 反向代理
      • 负载均衡
        • 轮询
        • 权重
        • ip_hash
        • url_hash
      • 用shell命令分析Nginx日志
        • 为什么要通过shell日志来分析Nginx日志?
        • 为什么会选择Nginx日志来分析
        • Linux的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文件的配置即可


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号