nginx的原理你必须知道的一些事。

nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各
个worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。基本的网
络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只
可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu
核数一致。

worker进程是如何处理我们的http请求的?

master(master进程会先建立好需要listen的socket)--------fork生成子进程workers,继承
socket(此时workers子进程们都继承了父进程master的所有属性,当然也包括已经建立好的socket,当然不是同一个socket,只
是每个进程的这个socket会监控在同一个ip地址与端口,这个在网络协议里面是允许的)------当一个连接进入,产生惊群现象(惊群现象:指一个fd的事件被触发后,等候这个fd的所有线程/进程都被唤醒。虽然都被唤醒,但是只有一个会去响应。)。

Nginx对惊群现象的处理共享锁

nginx提供了一个accept_mutex这个东西,从名字上,我们可以看这是一个加在accept上的一把共享锁。有了这把锁之后,同一时刻,就只会有一个进程在accpet连接,这样就不会有惊群问题了。accept_mutex是一个可控选项,我们可以显示地关掉,默认是打开的。

worker进程工作

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

采用这种方式的好处:

1)节省锁带来的开销。对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查上时,也会方便很多

2)独立进程,减少风险。采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不
会中断,
master进程则很快重新启动新的worker进程。当然,worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前worker上的
所有请求失败,不过不会影响到所有请求,所以降低了风险。

Nginx的事件处理机制,采用异步非阻塞事件处理机制,一个worker进程只有一个主线程,通过异步非阻塞的事件处理机制,实现了循环处理多个准备好的事件,从而实现轻量级和高并发。

异步非阻塞事件处理机制:

同步和异步的概念,这两个概念与消息的通知机制有关.同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者。

阻塞和非阻塞,这两个概念与程序等待消息(无所谓同步或者异步)时的状态有关.

当读写事件没有准备好时,就放入epoll里面。如果有事件准备好了,那么就去处理;如果事件返回的是EAGAIN,那么继续将其放入epoll里
面。从而,只要有事件准备好了,我们就去处理,只有当所有时间都没有准备好时,才在epoll里面等着。这样,我们就可以并发处理大量的并发了,当然,这
里的并发请求,是指未处理完的请求,线程只有一个,所以同时能处理的请求当然只有一个了,只是在请求间进行不断地切换而已,切换也是因为异步事件未准备
好,而主动让出的。这里的切换是没有任何代价,你可以理解为循环处理多个准备好的事件。

与多线程相比,这种事件处理方式是有很大的优势的,不需要创建线程,每个请求占用的内存也很少,没有上下文切换,事件处理非常的轻量级。并发数再多也不会导致无谓的资源浪费(上下文切换)。更多的并发数,只是会占用更多的内存而已.

之前我们提到nginx的负载均衡功能,那么和LVS的负载均衡有什么区别呢?

负载均衡分为:

L4 switch(四层交换),即在OSI第4层工作,就是TCP层啦。此种Load Balance不理解应用协议(如HTTP/FTP/MySQL等等)。例子:LVS,F5

L7 switch(七层交换),OSI的最高层,应用层。此时,该Load Balancer能理解应用协议。例子:haproxy,MySQL Proxy

很多Load Balancer(例如F5)既可以做四层交换,也可以做七层交换。

LVS 工作在网络4层仅做请求分发之用没有流量,可配置性低,几乎可对所有应用做负载均衡,对网络依赖大,没有健康检查机制。

nginx的7层(应用层),所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,对网络依赖小,可检测服务器内部错误。

nginx可以根据URL进行负载均衡的请求转发,而LVS只能根据ip:port进行请求转发

一般情况下,LVS会被放在最前端做负载均衡,nginx可作为lvs的节点服务器。

前面我们也提到过nginx实现邮件代理服务器的功能,一般使用nginx做邮件代理服务器的场景不多。

很不幸,nginx最早也是被当作邮件代理服务器来开发的。

nginx的原理你必须知道的一些事。,布布扣,bubuko.com

时间: 2024-08-27 18:36:27

nginx的原理你必须知道的一些事。的相关文章

Nginx工作原理和优化

Nginx工作原理和优化 分类: Linux webserver2013-05-16 11:04 4975人阅读 评论(0) 收藏 举报 目录(?)[+] 1.  Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作. Nginx

Nginx 工作原理

Nginx 工作原理 Nginx由内核和模块组成. Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者.通常一个location中的指令会涉及一个handler模块和多个filter模块(当然,多个location可以复用同一个模块).handler模块负责处理请求,完成响应内容的生成,而filter模块

(转)Apache和Nginx运行原理解析

Apache和Nginx运行原理解析 原文:https://www.server110.com/nginx/201402/6543.html Web服务器 Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务. 应用层使用HTTP协议. HTML文档格式. 浏览器统一资源定位器(URL). Web服务器常常以B/S(Browser/Server)方式提供服务.浏览器和服务器的交互方式如下: GET /index.php HTTP/1.1 +-------

nginx负载均衡、nginx ssl原理及生成密钥对、nginx配制ssl

1.nginx负载均衡 新建一个文件:vim /usr/local/nginx/conf/vhost/load.conf写入: upstream abc_com{ ip_hash; server 61.135.157.156:80; server 125.39.240.113:80;}server{ listen 80; server_name www.abc.com; location / { proxy_pass http://abc_com; proxy_set_header Host $

nginx 工作原理和配置文件讲解

1.nginx 介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日.其将源代码以类BSD许可证的形式发布,因它的稳定性.丰富的功能集.示例配置文件和低系统 资源的消耗而闻名.2011年6月1日,nginx 1.0.4发布. Nginx是一款轻量级的Web 服务器/反向代理服

Nginx 工作原理和优化、漏洞

1.  Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作. Nginx的模块从结构上分为核心模块.基础模块和第三方模块: 核心模块:HTTP模块.EVENT模块和MAIL模块 基础模块:HTTP Access模块.HTTP F

Nginx工作原理和优化、漏洞(转)

查看安装了哪些模块命令: [[email protected] xcache]# nginx/sbin/nginx -Vnginx version: nginx/1.2.3built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) TLS SNI support enabledconfigure arguments: --prefix=/opt/xcache/nginx --with-ipv6 --with-http_ssl_module --with

转:Apache和Nginx运行原理解析

Web服务器 Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务. 应用层使用HTTP协议. HTML文档格式. 浏览器统一资源定位器(URL). Web服务器常常以B/S(Browser/Server)方式提供服务.浏览器和服务器的交互方式如下: GET /index.php HTTP/1.1 +---------------+                   +----------------+  |               +------

Nginx工作原理和优化、漏洞

1.  Nginx的模块与工作原理 第三方模块:HTTP Upstream Request Hash模块.Notice模块和HTTP Access Key模块. 图1-1展示了Nginx模块常规的HTTP请求和响应的过程. Nginx 本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者.通常一个 location中