nginx架构学习

打印 上一主题 下一主题

主题 538|帖子 538|积分 1614

前言

这篇文章重要纪录下对nginx架构的学习纪录。
架构设计

优秀的模块化设计

高度模块化的设计是Nginx的架构基础。在Nginx中,除了少量的焦点代码,其他一切皆
为模块。

在这5种模块中,配置模块与焦点模块都是与Nginx框架密切相关的,是其他模块的基
础。而事件模块则是HTTP模块和mail模块的基础,原因参见8.2.2节。HTTP模块和mail模块
的“职位”相似,它们都更关注于应用层面。在事件模块中,ngx_event_core_module事件模块
是其他所有事件模块的基础;在HTTP模块中,ngx_http_core_module模块是其他所有HTTP模
块的基础;在mail模块中,ngx_mail_core_module模块是其他所有mail模块的基础。
事件驱动架构

所谓事件驱动架构,简单来说,就是由一些事件发生源来产生事件,由一个大概多个事
件网络器来网络、分发事件,然后许多事件处置惩罚器会注册自己感爱好的事件,同时会“消
费”这些事件。下图为Nginx处置惩罚事件的简单模型:

管理历程、多工作历程设计

Nginx接纳一个master管理历程、多个worker工作历程的设计方式,如图所示:

包罗完全雷同的worker历程、1个可选的cache manager历程以及1个可选的
cache loader历程。
这种设计带来以下长处:
(1)利用多核体系的并发处置惩罚能力
现代操纵体系已经支持多核CPU架构,这使得多个历程可以占用差别的CPU焦点来工
作。如果只有一个历程在处置惩罚哀求,则一定会造成CPU资源的浪费!如果多个历程间的职位
不同等,则一定会有某一级同一职位的历程成为瓶颈,因此,Nginx中所有的worker工作进
程都是完全同等的。这提高了网络性能、降低了哀求的时延。
(2)负载均衡
多个worker工作历程间通过历程间通信来实现负载均衡,也就是说,一个哀求到来时更
容易被分配到负载较轻的worker工作历程中处置惩罚。这将降低哀求的时延,并在一定程度上提
高网络性能。
(3)管理历程会负责监控工作历程的状态,并负责管理其行为
管理历程不会占用多少体系资源,它只是用来启动、制止、监控或利用其他行为来控制
工作历程。起首,这提高了体系的可靠性,当工作历程出现问题时,管理历程可以启动新的
工作历程来避免体系性能的下降。其次,管理历程支持Nginx服务运行中的步伐升级、配置
项的修改等操纵,这种设计使得动态可扩展性、动态定制性、动态可进化性较容易实现。
内存池的设计

      为了避免出现内存碎片、减少向操纵体系申请内存的次数、降低各个模块的开发复杂
度,Nginx设计了简单的内存池。这个内存池没有很复杂的功能:通常它不负责回收内存池
中已经分配出的内存。这种内存池最大的长处在于:把多次向体系申请内存的操纵整合成一
次,这大大减少了CPU资源的斲丧,同时减少了内存碎片。
       因此,通常每一个哀求都有一个这种简易的独立内存池(在第9章中会看到,Nginx为每
一个TCP连接都分配了1个内存池,而在第10章和第11章,HTTP框架为每一个HTTP哀求又分
配了1个内存池),而在哀求结束时则会销毁整个内存池,把曾经分配的内存一次性归还给
操纵体系。这种设计大大提高了模块开发的简单性(如在前几章中开发HTTP模块时,申请
内存后都不消关心它释放的问题),而且因为分配内存次数的减少使得哀求执行的时延得到
了降低,同时,通过减少内存碎片,提高了内存的有效利用率和体系可处置惩罚的并发连接数,
从而增强了网络性能。
利用统一管道过滤器模式的HTTP过滤模块

     有一类HTTP模块被命名为HTTP过滤模块,此中每一个过滤模块都有输入端和输出端,
这些输入端和输出端都具有统一的接口。这些过滤模块将按照configure执行时决定的顺序组
成一个流水线式的加工HTTP响应的中央,每一个过滤模块都是完全独立的,它处置惩罚着输入
端接收到的数据,并由输出端传递给下一个过滤模块。每一个过滤模块都必须可以增量地处
理数据,也就是说能够准确处置惩罚完备数据流的一部分。
     这种统一管理过滤器的设计方式的好处非常显着:起首它允许把整个HTTP过滤体系的
输入/输出简化为一个个过滤模块的简单组合,这大大提高了简单性;其次,它提供了很好
的可重用性,恣意两个HTTP过滤模块都可以连接在一起(在可允许的范围内);再次,整
个过滤体系非常容易维护、增强。例如,开发了一个新的过滤模块后,可以非常方便地添加
到过滤体系中,这是一种高可扩展性。又如,旧的过滤模块可以很容易地被升级版的过滤模
块所更换,这是一种高可进化性;接着,它在可验证性和可测试性上非常友好,我们可以灵
活地变更这个过滤模块流水线来验证功能;末了,如许的体系完全支持并发执行。
其他一些用户模块

      Nginx还有许多特定的用户模块。例如,ngx_http_stub_status_module模块提供对所有HTTP连接状态的监控,这就提高了体系可见性。而ngx_http_gzip_filter_module过滤模块和ngx_http_gzip_static_module模块使得雷同的吞吐量传送了更多的信息,自然也就提高了网络服从。我们也可以开发如许的模块,让Nginx变得更好。

      后续再对nginx架构各块原理进行更细化的学习。
参考册本:《深入理解Nginx模块开发与架构剖析第2版》

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表