标签:应用服务 代理 htm tcp 效率 设置 还需 dbi 图片
原文:Nginx 架构和基础原理
Nginx 的应用场景主要有三个:
Nginx 可以通过本地文件系统提供静态资源的服务,例如纯静态的 HTML 页面等。
很多应用服务的运行效率是很低的,QPS,TPS,并发等都是受限的,所以需要把很多应用服务组成一个集群,向用户提供高可用性的服务,这个时候需要 Nginx 的反向代理功能,而应用服务的动态扩容需要负载均衡功能,另外一个,Nginx 层还需要做缓存。因此反向代理服务主要是三个功能:
有时候应用服务本身有很多性能问题,但是数据库服务要比应用服务好的多,业务场景比较简单,并发性和 TPS 都要远高于应用服务,所以这个时候可以由 Nginx 直接去访问数据库或者 Redis,还可以利用 Nginx 的强大的并发性来实现应用防火墙的 API 服务。
Nginx 对外提供服务时,主要有三种流量会到达 Nginx:WEB、EMAIL、TCP 流量。这三种流量到达 Nginx 后,会分别由传输层状态机、应用层状态机、MAIL 状态机来处理。当内存不足以缓存所有的静态资源时,会退化成阻塞的磁盘调用,这个时候需要一个线程池来处理,对于每一个处理完的请求记录访问日志和错误日志,日志也是记录到磁盘中的。
Nginx 有四种进程:
为什么 worker 进程需要很多个?
这是因为,Nginx 采用了事件驱动的模型后,它期望 worker 进程可以从头到尾占满一颗 CPU,这样可以更加高效的利用整颗 CPU,提高 CPU 的缓存命中率,另外还可以将 worker 进程与某一个 CPU 核绑定在一起。
在前面说到了 Nginx 的命令行,其实很多 Nginx 的信号都是通过向 master 进程发送信号来实现的。
master 进程会监控 worker 进程,而监控是通过 Linux 规定的当子进程退出时需要向父进程发送 CHLD 信号实现的。这样可以当出现 bug 时,立刻拉起 worker。
master 进程可以接收以下信号:
worker 进程可以接收以下信号:
USR2 和 WINCH 没有对应的信号,只能通过 kill 发送。
stop 和 quit 的区别是,一个是立即退出,一个是优雅的停止。
在上一篇文章中,讲了热部署的流程,那么热部署具体的流程是怎么样的呢?
这里面,定时器的作用是,如果时间超时了,但是连接还没有处理完毕,就会强制退出进程。另外,Nginx 只能处理 HTTP 的优雅关闭,websocket 、TCP、UDP 的代理都做不到,worker 不解析数据。
以上这些内容,就是 Nginx 命令行和信号的完整过程。下一讲开始讲 HTTP 模块。
关注公众号领取 Nginx 知识图谱
标签:应用服务 代理 htm tcp 效率 设置 还需 dbi 图片
原文地址:https://www.cnblogs.com/lonelyxmas/p/12955920.html