nginx笔记-2

nginx的请求处理流程

 nginx处理的流量是其他应用服务处理流量的数倍。

 

 nginx的三个状态机:传输层状态机、http状态机、mail状态机。

核心部分由非阻塞的事件驱动处理引擎(epoll)实现,利用线程池处理阻塞的磁盘调用。最后通过应用层的协议,比如http、mail、stream、FastCGI等协议代理到响应的应用服务器。

nginx的进程结构

1.单进程结构

不适用于生产环境。

2.多进程结构

利用服务器多核的特性,实现健壮的nginx。为什么不是多线程呢?因为nginx要保持他的高可用性,高可靠性。进程是资源调度的基本单位,线程之间是共享内存的,容易导致内存错误。

worker处理真正的请求,master主要是监控worker进程,master和worker之间通过signal进行通信。

缓存要被cachemanager、cacheloader、多个worker进程之间共享。

worker进程间通讯都是通过共享内存实现的,每个worker独占一颗cpu内核,减少缓存失效的命中率。

nginx重新启动配置文件:  nginx -s reload 

查看本地示例:

# 查看当前的nginx进程
➜ nginx ps -ef | grep nginx 501 13775 1 0 8:42下午 ?? 0:00.00 nginx: master process /Users/xiaohuochai/Desktop/nginx/sbin/nginx 501 13776 13775 0 8:42下午 ?? 0:00.00 nginx: worker process 501 13785 885 0 8:42下午 ttys005 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn nginx # 给父进程发送hup信号(其实结果是会reload
➜ nginx
kill -SIGHUP 13775
# 查看hup之后的进程结果(worker进程们的pid变了,说明worker们 reload了 子进程无论是新启还是kill 都会给master发送信号 ➜ nginx
ps -ef | grep nginx 501 13775 1 0 8:42下午 ?? 0:00.00 nginx: master process /Users/xiaohuochai/Desktop/nginx/sbin/nginx 501 13942 13775 0 8:46下午 ?? 0:00.00 nginx: worker process 501 13948 885 0 8:46下午 ttys005 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn nginx ➜ nginx

nginx使用信号管理父子进程

(进程间交换数据必须通过内核,常见的多进程间通信方式:共享内存、信号、匿名管道、有名管道、高级管道、消息队列、信号量、套接字) 

master、worker、nginx命令行都可以发送信号,控制进程。

linux规定,当子进程终止的时候,会向父进程发送‘chld’ 信号。

master从worker接收到的消息,分别表示:

  • TERM/INT 表示立刻停止nginx进程
  • QUIT 优雅的停止nginx进程
  • HUP 重载配置文件
  • USR1 重新打开日志文件,做日志文件的切割
  • USR2 热部署使用,见下面热部署流程
  • WINCH  热部署使用

reload重载配置文件的真相

当配置文件发生改变的时候,都会nginx -s reload,在不影响现有业务不宕机的情况下,如何平滑的更新nginx配置。

 

老配置worker如果长时间不优雅退出,也不会影响新worker,但是会占用系统资源。nginx提供了一个配置shutdown_timeout,可以在worker进程timeout时候强制关闭。

热升级的完整流程 

 

reload --重新加载,reload会重新加载配置文件,Nginx服务不会中断,master进程不会退出。而且reload时会测试conf语法等,如果出错会rollback用上一次正确配置文件保持正常运行。

restart --重启(先stop后start),会重启Nginx服务,新启master,关闭旧的master,如果配置文件出错会导致服务启动失败,那就是更长时间的服务中断了。

 优雅的关闭worker进程

worker关闭连接池的所有连接后,才会退出进程。如果超时,所有链接会被强制关闭。

网络收发与nginx事件间的对应关系

 

wireshark和charles抓包有什么优缺点?

(感觉wireshark复杂一些??

nginx的事件驱动模型, 事件循环+分发

当有新事件到达时,push进事件队列,但是如果事件队列中的时间长时间得不到处理,引发恶性循环,大量的cpu计算资源都会消耗在不正常的事件。

epoll(网络事件收集器模型)的优劣以及原理

 这张图比较了几种常见的事件处理模型,横轴是连接句柄也就是并发数量,纵轴是随着并发增加分发事件所消耗的时间,图中曲线代表着不同的事件分发模型的效率。

epoll的事件处理时间与句柄数增加几乎是无关的,适合做大并发连接的处理,在linux 2.5.44内核中被引入(深入浅出nodejs里面有讲

nginx的请求切换

原文地址:https://www.cnblogs.com/catherinezyr/p/13426141.html