nginx 由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解 nginx 模块的开发以及它的内部原理,但是国内却没有一本关于这方面的书,源于此我们决定自己来写一本。本书的作者为淘宝核心系统服务器平台组的成员,本书写作的思路是从模块开发逐渐过渡到 nginx 原理剖析。书籍的内容会定期在这里更新,欢迎大家提出宝贵意见,不管是本书的内容问题,还是字词错误,都欢迎大家提交 issue(章节标题的左侧有评注按钮),我们会及时的跟进。
众所周知,nginx 性能高,而 nginx 的高性能与其架构是分不开的。那么 nginx 究竟是怎么样的呢?这一节我们先来初识一下 nginx 框架吧。 nginx 在启动后,在 unix 系统中会以 daemon 的方式在后台运行,后台进程包含一个 master 进程和多个 worker 进程。我们也可以手动地关掉 daemon 模式,让 nginx 在前台运行,这个时候,nginx 就是一个单进程的,很显然,生产环境下我们肯定不会这么做,所以关掉 daemon 的方式,一般是用来调试用的,在后面的章节里面,我们会详细地讲解如何调试 nginx。所以,我们可以看到,nginx 是以多进程的方式来工作的,当然 nginx 也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是 nginx 的默认方式。nginx 采用多进程的方式有诸多好处,所以我就主要讲解 nginx 的多进程模式吧。刚才讲到,nginx 在启动后,会有一个 master 进程和多个 worker 进程。master 进程主要用来管理 worker 进程,包含:接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态,当 worker 进程退出后 (异常情况下),会自动重新启动新的 worker 进程。而基本的网络事件,则是放在 worker 进程中来处理了。多个 worker 进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个 worker 进程中处理,一个 worker 进程,不可能处理其它进程的请求。worker 进程的个数是可以设置的,一般我们会设置与机器 cpu 核数一致,这里面的原因与 nginx 的进程模型以及事件处理模型是分不开的。nginx 的进程模型,可以由下图来表示:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !