master和worker
master是一个领导,它把任务分给它手下不同的worker,worker接到任务之后,来做具体的操作。
worker的工作机制
当客户端发送请求时,首先会进入master,master得到任务后,会向其下的worker发布,而woker则会通过争抢的方式得到任务,然后通过反向代理用tomcat完成具体操作。
一个master多个worker的好处
- 可以使用
nginx -s reload
热部署,也就是说不需要重新启动,就可以让修改完的配置生效,以上图为例,第一个worker不做任何变化,还是继续处理它的事情,剩余的3个worker则会重新加载nginx,如果此时有一个新的请求,那第一个worker就不会参与争抢,因为它里面有任务,而剩余的3个worker会去争抢,这3个worker争抢的时候已经是最新的配置,争抢到任务后进行操作,而第一个任务在它执行之后,会重新加载nginx,得到最新的配置。 - 每个worker都是独立的进程,如果有其中一个worker出现了问题,其它的worker也会继续争抢,实现请求的过程,不会造成服务中断。
设置多少个worker合适
worker数和服务器的cpu数相等是最为适宜的
连接数worker_connection
1、发送请求,占用了worker的几个连接数?
- 静态资源一般是2,client⇄worker
- 数据库请求一般是4,client⇄worker⇄Tomcat
2、nginx有一个master,四个worker,每个worker支持最大的连接数据是1024,支持最大的并发数是多少
- 普通的静态访问最大并发数是: worker_connections(worker的最大连接数) * worker_processes (worker的数量)/2
- 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4