
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习计算机编程开发技术,而今天我们就通过案例分析来了解一下,程序员需要掌握哪些Nginx的架构设计方法。
事件驱动架构
事件驱动架构,简单的说就是由一些事件发生源来产生事件,由事件收集器来收集、分发事件,然后由事件处理器来处理这些事件(事件处理器需要先在事件收集器里注册自己想处理的事件)。
对于Nginx服务器而言,一般由网卡、磁盘产生事件,Nginx中的事件模块将负责事件的收集、分发操作;而所有的模块都可能是事件消费者,它们先需要向事件模块注册感兴趣的事件类型,这样,在有事件产生时,事件模块会把事件分发到相应的模块中进行处理。
对于传统web服务器(如Apache)而言,采用的所谓事件驱动往往局限在TCP连接建立、关闭事件上,一个连接建立以后,在其关闭之前的所有操作都不再是事件驱动,这时会退化成按顺序执行每个操作的批处理模式,这样每个请求在连接建立后都将始终占用着系统资源,直到关闭才会释放资源。这种请求占用着服务器资源等待处理的模式会造成服务器资源极大的浪费。
管理进程、多工作进程设计
这种设计带来以下优点:
1)利用多核系统的并发处理能力
现代操作系统已经支持多核CPU架构,这使得多个进程可以分别占用不同的CPU核心来工作。Nginx中所有的worker工作进程都是完全平等的。这提高了网络性能、降低了请求的时延。
2)负载均衡
多个worker工作进程通过进程间通信来实现负载均衡,即一个请求到来时更容易被分配到负载较轻的worker工作进程中处理。这也在一定程度上提高了网络性能、降低了请求的时延。
3)管理进程会负责监控工作进程的状态,并负责管理其行为
管理进程不会占用多少系统资源,它只是用来启动、停止、监控或使用其他行为来控制工作进程。先,这提高了系统的可靠性,当worker进程出现问题时,管理进程可以启动新的工作进程来避免系统性能的下降。其次,管理进程支持Nginx服务运行中的程序升级、配置项修改等操作,这种设计使得动态可扩展性、动态定制性较容易实现。
内存池的设计
为了避免出现内存碎片,减少向操作系统申请内存的次数、降低各个模块的开发复杂度,Nginx设计了简单的内存池,它的作用主要是把多次向系统申请内存的操作整合成一次,这大大减少了CPU资源的消耗,同时减少了内存碎片。
因此,通常每一个请求都有一个简易的独立内存池(如每个TCP连接都分配了一个内存池),而在请求结束时则会销毁整个内存池,把曾经分配的内存一次性归还给操作系统。这种设计大大提高了模块开发的简单些,因为在模块申请内存后不用关心它的释放问题;而且因为分配内存次数的减少使得请求执行的时延得到了降低。同时,通过减少内存碎片,提高了内存的有效利用率和系统可处理的并发连接数,从而增强了网络性能。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。