Nginx的简单介绍

一、简介

概念:是一款轻量级、高并发的web服务器

特性:高并发,理论上能够支持高达5万并发连接数;轻量级,占用内存少

作用:

(一)高并发(量)

1、什么叫高并发通过设计保证系统能够同时并行处理很多请求。

参数(指标):

响应时间(Response Time):系统对请求做出响应的时间。

吞吐量:单位时间内处理请求的数量。

并发用户数:同时承载正常使用系统功能的用户数量。

 2、高并发的原理:

为什么能够实行高并发---采用了“多进程+异步非堵塞”模式

问题一:什么叫多进程

一个 Master 进程、多个 Worker 进程 

nginx在启动之后,会有一个master进程和并由master生成多个独立的子进程---worker进程

master进程负责接收来自外界的连接,并向worker进程发送信号,并由worker进程来处理请求的事件;

master进程也能监控worker检查的运行状态,当worker进程退出后(异常情况下),会自动启动新的worker进程。

问题二:woker进程非常多,master进程如何选定并交给其中一个处理

多个work进程同时争抢处理一个请求:惊群现象---当连接进来的时候,所有子进程都将收到master进程的通知并争着和它建立连接,这就叫惊群现象。

多个进程同时争抢处理一个请求的弊端:大量的子进程被激活又挂起,最终只有一个进程获取到这个连接,这会浪费系统资源。

解决方法:nginx对惊群现象的处理--accept_mutex(加锁)

nginx提供了一个accept_mutex这个东西,即每个worker进程在执行accept(接受)之前都需要先获取锁,获取不到就放弃执行accept()的程序

有了这把锁之后,同一时刻就只有一个进程去accept(),这样就不会出现惊群现象。

 

处理请求的完整过程:

在 Master 进程里面,先建立好需要 listen 的 socket(listenfd)之后,然后再 fork 出多个 Worker 进程。

所有 Worker 进程的 listenfd 会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有 Worker 进程在注册 listenfd 读事件前抢互斥锁accept_mutex,抢到互斥锁的那个进程注册 listenfd 读事件,在读事件里调用 accept 接受该连接。

当一个 Worker 进程在 accept 这个连接之后,就开始读取、解析、处理请求,在产生数据后再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。我们可以看到,一个请求完全由 Worker 进程来处理,而且只在一个 Worker 进程中处理。

(二)负载均衡(量多的缓冲机制)

1、概念:将工作任务(负载)分摊到多个服务器上,从而协同工作工作任务。

2、应用分类:

根据性质分类:HTTP负载均衡、IP负载均衡、反向代理负载均衡。

根据OSI的层次分类:

(1)二层负载均衡(了解):负载均衡服务器对外依然提供一个VIP(虚拟ip),集群中不同的机器采用相同IP地址,但MAC地址不一样---当负载均衡服务器接受到请求之后,通过修改报文的目标MAC地址的方式请求转发到目的机器实现负载均衡。

(2)三层负载均衡:和二层负载均衡类似,负载均衡服务器对外仍然提供一个VIP(虚拟IP),但集群中不同的机器采用不同的IP地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过IP将请求转发到不同的真实服务器上。

(3)四层负载均衡:四层负载均衡工作在OSI模型的传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口及目标的端口号。四层负载均衡服务器在接受到客户端请求后,通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。

(4)七层负载均衡:七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、DNS、radius等。七层负载就可以基于这些协议来负载---这些应用层协议中包含很多有有意的内容,比如同一个web服务器的负载均衡,除了根据IP加端口进行负载外,还可以根据七层的URL、浏览器类别、语言来决定负载均衡

3、负载均衡的好处:

①工作效率高:由于是协同合作,因此工作速度更快,效率更高。

②拓展性强:当业务量增加的时候可以通过增加服务器来满足需求(且不影响现有业务质量)。

③高可靠性:单台服务器故障时,由负载均衡设备将后续业务转向其他服务器,不影响后续业务提供,保证业务不中断。

④安全防护:在负载均衡设备上做一些过滤,比如黑白名单的处理。

 (三)反向代理(安全考虑---质)

1、概念
先理解正向代理:

在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。代理对象是客户端,不知道服务端是谁。

反向代理:

客户端不需要任何配置就能访问,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外就一个服务器,暴露的是反向代理服务器地址,隐藏了真实服务器IP地址。代理对象是服务端,

2、负载均衡原理:

 

3、负载均衡算法:

①轮询(Round Robin):把来自用户的请求轮流分配给内部的服务器----从第一个服务器开始,直到第N个服务器,然后重新开始循环。 

权重轮询算法:根据服务器的不同处理能力,给没他服务器分配不同的权值,使其能够接受相应权值的服务请求。

例子:假设四台服务器的处理能力为3:1:1:1

由于权重轮询调度算法考虑到了不同服务器的处理能力,所以这种均衡算法能够确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。所以在实际应用中比较常见。

4、常用负载均衡的工具

常用的软件负载均衡软件有nginx、LVS、Haproxy

①nginx主要用来做七层负载均衡

 拓展:

对于一般的应用而言,有了Nginx就够了(nginx可以用来七层负载均衡)。但是对于一些大的网站而言,一般会采用DNS负载+四层负载+七层负载的方式进行多层次负载均衡。

②LVS(Linux Virtual Server)主要是用来做四层负载均衡。

二、nginx的大致架构:

我们可以将Nginx服务器的结构大致分为主进程、工作进程、后端服务器和缓存等部分。

主进程 Master 进程

工作进程Woker 进程

其实除了 Master 进程和 Woker 进程之外,Nginx 中还有两个特殊用途的进程:缓存加载器进程(Cache Loader )和 缓存管理器进程(Cache Manager)。

缓存加载器进程(Cache Loader )

Cache Loader 进程是在Nginx服务启动一段时间后由主进程生成,在缓存元数据重建完成后就自动退出。

Cache Manager进程一般存在于主进程的整个生命周期,负责对缓存索引进行管理。通过缓存机制,可以提高对请求的响应效率,进一步降低网络压力。

三、nginx的功能模块

(一)配置文件: 

/etc/nginx/nginx.conf :nginx的全局配置文件

/etc/nginx/conf.d :nginx的局部配置文件

(二)nginx配置文件的整体结构:

 

 

(1)全局块

配置影响nginx全局的指令。主要包括:

①配置允许nginx服务器的用户(用户组)

②worker process

③nginx进程

④PID存放路径、错误日志的存放路径

⑤配置文件的引入

(2)events块

配置影响nginx服务器或与用户的网络连接。主要包括:

①设置网络连接的序列化

②是否允许同时接受多个网络连接

③事件驱动模块的选择

④最大连接数的配置

(3)http

配置代理,缓存,日志文件等绝大数功能第三方模块的配置

1)http全局块

①定义MINI-Type

②自定义服务日志

③允许sendfile方式传输文件

④连接超时时间

连接请求数上限

2)server

配置虚拟机本身的相关参数,一个http中可以有多个server。主要包括:

①配置网络监听

②基于名称的虚拟机配置

③就IP的虚拟机配置

3)location

配置请求的路由,以及各种页面的处理情况。主要包括:

①location配置

②请求根目录配置更改

③location的URL

④网站默认首页配置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值