nginx架构设计

对于一个高性能的服务器,需要考虑如下约束:

  1. 性能
    1. 网络性能(是否应对高并发)
    2. 单词请求延迟性
    3. 网络效率
  2. 可伸缩性(能够添加组件提供服务,耦合度低)
  3. 简单性(组件越简单,越容易理解和实现)
  4. 可修改性(修改的难易程度)
  5. 可见性(关键运行组件能够被监控的程度,例如服务器交互的连接数,缓存使用情况等)
  6. 可移植性(跨平台)
  7. 可靠性(部分出故障是否影响到全局)

nginx架构设计

  • nginx中,除了少量核心代码,其他一切皆为模块。所有模块都遵循ngx_module_t接口设计规范,


    nginx_module_t模块

    该模块只涉及模块的初始化,退出以及对配置项的处理,带来了足够的灵活性。

  • 配置模块的类型为NGX_CONF_MODULE,它仅有的模块为ngx_conf_module,这是nginx最底层的模块,指导所有模块以配置项来中心提供功能。
  • nginx还定义一种基础类型的模块,叫核心模块,模块类型为NGX_CORE_MODULE,目前官方核心类型模块内有6个具体模块:ngx_core_module,ngx_errlog_module,ngx_openssl_module,ngx_http_module,ngx_mail_module,ngx_events_module,核心模块的定义可以简化nginx的涉及,使得其他模块设计的时候只需要考虑如何调用6个核心模块。核心模块将ctx上下文实例化为ngx_core_module_t,该上下文以配置项的解析为基础。读取nginx.conf文件的时候,根据ngx_command_t把解析出的结构放到ngx_core_module_t结构中。
  • 所有模块是分层次,分类别的。都具备相应的ngx_module_t接口。
    但在请求处理流程中层次不同。
  • nginx中,配置模块和核心模块是 有框架代码所定义的。是必须的,其他三种模块不会和框架产生直接关系,他们在核心模块中有自己的代言人。例如事件模块由其代言人ngx_module_t核心模块定义。
事件驱动架构

事件驱动架构指,由一些事件源来产生事件,一些事件收集器来收集分发事件,然后许多事件处理器来处理事件。同时消费这个事件。

  • 对于nginx,网卡,磁盘产生事件,事件模块负责收集分发,所有其他模块都可能是事件的收集着,他们首先需要向事件模块注册感兴趣的事件类型,这样有事件产生的时候会把事件分发到相应的模块。

你可能感兴趣的:(nginx架构设计)