nginx基础架构

web服务器设计中的关键约束

性能

网络性能、单次请求的延迟性、网络效率

可伸缩性

简单性

可修改性

可进化性、可扩展性、可定制性、可配置性、可重用性

可见性

关键组件的运行情况可以被监控的程度

可移植性

可靠性

nginx的架构设计

优秀的模块化设计

高度抽象的模块接口

所有模块都遵循同样的ngx_module_t接口设计规范,这种方式带来了良好的简单性、静态可扩展性、可重用性

模块接口非常简单,具有很高的灵活性

模块的基本接口ngx_module_t足够简单,只涉及模块的初始化、退出及对配置项的处理
ngx_module_t结构体作为所有模块的通用接口,它只定义了init_master、init_module、init_process、init_thread、exit_thread、exit_process、exit_master;
ngx_command_t类型的commands数组则指定了模块处理配置项的方法。

配置模块的设计

ngx_conf_module提供了高可用性、高可扩展性、高可定制性、高可伸缩性

核心模块接口的简单化

官方的核心类型模块共有6个具体模块:ngx_core_module、ngx_errlog_module、ngx_events_module、ngx_openssl_module、ngx_http_module、ngx_mail_module

多层次、多类别的模块设计

事件驱动架构

nginx不会使用进程或线程来作为事件消费者,所谓的事件消费者只能是某个模块。

请求的多阶段异步处理

将阻塞进程的方法按照相关的触发事件分解为两个阶段

将阻塞方法调用按照时间分解为多个阶段的方法调用

在“无所事事”且必须等待系统的响应,从而导致进程空转时,使用定时器划分阶段

如果阻塞方法完全无法继续划分,则必须使用独立的进程执行这个阻塞方法

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

优点:

  • 利用多核系统的并发处理能力
  • 负载均衡
  • 管理进程或负责监控工作进程的状态,并负责管理其行为

平台无关的代码实现

内存池的设计

这种内存池的最大优点在于:把多次向系统申请内存的操作整合成一次,这大大减少CPU资源的消耗,同时减少了内存碎片

使用统一管道过滤器模式的http过滤模块

nginx框架中的核心结构体ngx_cycle_t

ngx_listening_t结构体

ngx_cycle_t结构体

你可能感兴趣的:(nginx)