Nginx - 概述

Nginx的组成

  1. Nginx二进制可执行文件 (由各个模块编译出的一个文件)
  2. Nginx.conf (控制Nginx的行为)
  3. access.log (访问日志)
  4. error.log (定位问题)

Nginx的性能瓶颈

  • 处理小文件时考虑握手性能RSA
  • 处理大文件时考虑对称加密性能AES
    image

Nginx进程结构

image

  • 多进程而不是多线程?
    因为Nginx为了保证高可用,如果使用多线程结构,线程之间共享地址空间,当某个第三方模块引发地址空间导致的错误时,在地址越界出现时,会导致整个nginx挂掉。
  • 特点
    进程间的通信使用共享内存信号实现。worker进程和CPU绑定,数量和CPU核数一致,有效使用CPU缓存,减少缓存失效命中率。Master进程管理监控worker进程。

Nginx进程管理:信号

image

reload流程

  • 不停机载入新配置
    image

Nginx连接池

nginx的连接包括:对下游客户端的连接,对上游服务器的连接。

nginx每一个worker进程都有一个ngx_cycle_t的数据结构,里面有三个数组:connections, read_events,write_events。每个连接都对应一个读事件和一个写事件,所以它们的数组标号是对应的。nginx默认的worker connections大小是512,这个一般会修改。

又见LRU
OpenResty Ngx_http_lua_api中使用lua_shared_dict分配共享内存,该内存使用一个红黑树结构来保存key-value。当lua_shared_dict预分配的内存使用完后,会用LRU淘汰里面的键值对。

Nginx最常用容器:红黑树

红黑树:自平衡二叉查找树

  • 高度不会超过2 * log(n)
  • 增删改查复杂度 O(log(n))
posted @ 2023-08-07 15:52  rachel_aoao  阅读(8)  评论(0编辑  收藏  举报