尚硅谷nginx教程-7nginx原理

1. master和worker

在nginx搭建之后,在linux系统中,其实是有2个进程,一个进程叫master,一个进程叫worker。 ```#shell # 查看nginx进程 ps -ef|grep nginx ``` master是管理员,把任务分给worker,有worker执行具体的任务。

1.1 worker是怎么执行工作的

当client发送一个请求到nginx,首先由master把请求分配到worker去执行。 一个管理员下面可能会有很多的worker,那么worker是怎么得到这个任务的呢? 这里用到一个机制,不是平均分配,也不是轮询,而是 争抢。 即所有的worker采用争抢的机制抢到这个任务,然后调用tomcat,活用反向代理,指向我们的操作。 ### 1.2 master-worker机制的好处 首先,对于每个worker的进程来说,独立的进程,不需要加锁,所以省略了锁带来的开销。同时在编程以及问题查找时,也会方便很多。 其次,采用独立的进程,可以让互相之间不受影响。一个进程退出后,其他进程继续进行争抢任务和工作,工作不会中断,master进程则很快启动新的worker进程。当然worker进程的异常退出,肯定是程序有bug了。异常退出,会导致当前worker让所有请求失败,不过不会影响到所有请求,所以降低了风险。

2.热部署

在生产环境,nginx是不能停止的,而使用热部署就能解决不停止nginx完成部署的问题。
比如现在有4个worker,加入当前任务被worker1争抢到了。当使用 ./nginx -s reload 进行热部署时,worker1不做变化,继续处理任务。未执行任务的worker就把nginx重新进行加载。如果说有1个新的请求,worker1就不参与争抢,其他3个任务进行争抢,这是3个任务已经是重新加载之后的内容。
worker1则等待原来的任务执行完毕后,重新加载,获得最新的配置。

3. 设置多少个worker,才是合适的

nginx同redis蕾丝,都采用了io多路复用机制,每个worker都是一个独立的进程。但每个进程里只有一个祝线程。通过异步非阻塞的方式来处理请求,即便是成千上万个请求也不在话下。每个worker的县城可以把一个CPU的性能发挥到极致。所以worker数和服务器的CPU数相等是最为适宜的。设少了,浪费CPU;设多了会造成CPU频繁切换上下文带来的损耗。
windows没有io多路复用机制,在windows中功能虽然有,但它并不能把它的效能发挥到最大限度。所以,nginx、redis一般安装到Linux系统中,把它的性能发挥到最大限度。

4.连接数 worker-connection

问题:发送一个请求,占用几个连接数?
答案:2个或者4个
只访问静态资源,2个连接数;当使用tomcat时,需要4个连接数

问题2: nginx有一个master,有4个worker,每个worker支持的最大连接数是1024,每个worker支持的最大并发数是多少?
worker最大支持的连接数:

这个值是表示每个worker的进程所能建立连接的最大值。所以,一个nginx能建立的最大连接数,应该是

猜你喜欢

转载自www.cnblogs.com/csj2018/p/12712991.html