尚硅谷nginx教程-7nginx原理

1. master和worker

在nginx搭建之后,在linux系统中,其实是有2个进程,一个进程叫master,一个进程叫worker。

# 查看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能建立的最大连接数,应该是 worker_connections * worker_processes,当然这里所说的是最大连接数。

对于http请求本地资源来说,,如果是支持http1.1的浏览器每次访问要占用2个连接,所以普通的静态访问最大并发量是( worker_connections * worker_processes)/2
而如果是http作为反应代理,最大并发数量是(worker_connections * worker_processes)/4。因为反向代理服务器,每个并发会建立与客户端的连接和与后端服务器的连接。
两个数字相比取大的,因此最大并发数为( worker_connections * worker_processes)/2

5. 总结

1.nginx采用master-worker的方式
2.worker采用争抢方式进行工作的
3.可以根据CPU数量设置worker数量
4.发送请求的时候,每个请求占有2个或4个连接数
5.worker支持的最大并发数

posted on 2020-04-16 15:04  singleSpace  阅读(316)  评论(1编辑  收藏  举报