Nginx平台模块开发和架构解析

栏目: IT技术资讯 发布于: 2017-01-11 23:40:32

  Nginx的高性能、高效率是与其架构密不可分的《深入理解Nginx模块开发与架构》首先就从架构开讲

    在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。也可以手动地关掉后台模式,让nginx在前台运行,并且通过配置让nginx取消master进程,从而可以使nginx以单进程方式运行。可以看到,nginx是以多进程的方式来工作的,当然nginx也是支持多线程的方式的,只是主流的方式还是多进程的方式,也是nginx的默认方式。nginx采用多进程的方式有诸多好处,所以首先需要了解的是nginx的多进程模式。

     nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的。

在nginx启动后,master来管理worker进程,所以我们只需要与master进程通信就行了。master进程会接收来自外界发来的信号,再根据信号做不同的事情。所以要控制nginx,只需要通过kill向master进程发送信号就行了。比如kill -HUP pid,则是告诉nginx,从容地重启nginx,一般用这个信号来重启nginx,或重新加载配置,因为是从容地重启,因此服务是不中断的。首先master进程在接到信号后,会先重新加载配置文件,然后再启动新的worker进程,并向所有老的worker进程发送信号,告诉他们可以光荣退休了。新的worker在启动后,就开始接收新的请求,而老的worker在收到来自master的信号后,就不再接收新的请求,并且在当前进程中的所有未处理完的请求处理完成后,再退出。

在操作nginx的时候,worker进程之间是平等的,每个进程,处理请求的机会也是一样的。首先,每个worker进程都是从master进程fork过来,在master进程里面,先建立好需要listen的socket(listenfd)之后,然后再fork出多个worker进程。所有worker进程的listenfd会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有worker进程在注册listenfd读事件前抢accept_mutex,抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。我们可以看到,一个请求,完全由worker进程来处理,而且只在一个worker进程中处理。

    Nginx是一个高效、高性能平台。在Liunx/Unix服务器上获得广泛的应用。写nginx代码时,在处理网络事件的回调函数时,通常做的第一个事情就是判断超时,然后再去处理网络事件,是Nginx调试的基本思路。nginx可以借助超时时间来实现定时器。维护定时器的红黑树等先进理念。Nginx的架构非常庞大事件结构非一朝一夕可以全盘掌握的相信在不远的将来,Nginx将在高性能Web服务器端发挥更大的作用。


本文转载于微信公众号: 渤海销售(BHXSFW),更多微信文章请扫描关注公众号:

渤海销售

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。
转载请注明:文章转载自 [http://www.php230.com]
本文标题:Nginx平台模块开发和架构解析
IT技术书籍推荐:
PHP编程(第3版)
PHP编程(第3版)
凯文·塔特罗 (Kevin Tatroe) (作者), 彼得·麦金太尔 (Peter MacIntyre) (作者), 拉斯马斯·勒多夫 (Rasmus Lerdorf) (作者), 赵戈戈 (译者), 易国磐 (译者), 张鹏飞 (译者)
这是一本可以让读者深入了解PHP 技术的书籍,作者用言简意赅的语言并结合了大量实例来解释每一个要素。本书涵盖了PHP 所有基本的要点,不管你是一个想从头开始学习PHP的人,还是对PHP 已经有了基础想继续深入的人,这本书都很合适。
最新互联网资讯
深入 Linux I/O 重定向
发布于 2017-01-19 18:22:59
fastjson 1.2.24 发布,Java的JSON处理器
发布于 2017-01-19 18:30:02
通过Nginx定义Header头信息
发布于 2017-01-19 17:36:26
微信头条