nginx基础架构


nginx是一个性能堪比Apache的web服务器,其高性能与其设计架构是有着很大的关系的。
nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程

1.高度模块化

高度的模块化设计是nginx的架构基础,在Nginx中,除了少量的核心代码,其它一切皆为模块

2.事件驱动架构

由一个事件发生源去产生事件,一个或多个事件收集器去收集、分发事件,多个事件处理器去消费事件。对于nginx而言,一般会由网卡、磁盘产生事件。事件模块去收集和分发事件,所有的模块去消费事件。

3.请求的多阶段异步处理

采用异步非阻塞的方式去处理客户端的请求,因此保证其高并发能力

同步和异步是描述通信模式的概念,而阻塞和非阻塞是描述处理调度方式的概念

4.master-worker的工作模式

nginx启动后,在unix系统中会以daemon的方式在后台运行,后台进程包括一个master进程和多个worker进程。

master-worker工作模式:
1.master通过接受客户端的请求并解析,通过进程间通信,将相应的指令发送给worker进程,从而实现对worker的控制;
2.每个worker进程都会竞争同一个共享锁,只有竞争到共享锁的进程才能够处理客户端请求;
3.当worker进程接收到master发送的客户端请求信号之后,worker进程会处理该请求的事件,若是accept事件,则将其添加至accept队列中,如果是read或write事件,则会将其添加到read-write队列中
4.在将事件添加到对应的队列中之后,对于accept队列,在持有共享锁的情况下,会处理完accept队列中的客户端请求,对于read-write队列,会在释放锁之后去处理队列中的read或者是write事件

master进程主要用来管理worker进程。包含:接收外部的信号,向worker进程发送信号,监控worker进程的运行状态,当worker进程异常退出后,会重新启动一个worker进程
worker进程主要用来处理事件,由于一个master进程管理多个worker进程,因此worker进程之间是平等的,多个worker进程去竞争来自客户端的请求,各个进程之间是独立的,一个请求只能被一个worker进程所处理。

5.内存池的设计

将向系统申请内存空间的请求整合起来,一次向系统申请内存空间,降低了cpu的消耗

惊群现象

惊群现象是指当一个事件被触发时,所有等待该事件的进程或者线程都被唤醒,从而全部去竞争该资源,但是最后只有一个进程或线程获得该资源,其他的进程或线程重新进入休眠状态。惊群现象一般是socker的accept()导致。例如nginx,其worker进程是由master进程fork产生,在master进程中,需要先建立好需要监听的socket,然后在fork出多个进程,这多个进程去accept同一个socket,当一个连接进来之后,所有的进程都会收到通知,并且去竞争同一个连接,但是只有一个进程能够accept并建立连接。

惊群现象会导致linux内核对进程或者是线程频繁地做无效调度,上下文切换等导致系统性能下降。

Linux2.6版本之后,通过引入一个标记为WQ_FLAG_EXCLUSIVE,解决了accept的惊群现象

nginx通过加锁的机制,进程间的通信保证负载均衡(即连接数满的worker不去获得accept锁)以及timeout的设定(保证没有拿到accept锁的进程,去拿锁的频度更高)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值