nginx学习篇(一)浅谈内部核心架构

一、什么是nginx

nginx是一款免费的、开源的、高性能的HTTP服务器和反向代理服务器,在我们工作中主要用在这三个方向:

  • 静态服务器
  • 反向代理
  • 负载均衡

当然还有一些其它的功能(如灰度分流…)这篇就不细究了,会在后面的章节谈及。
nginx可以承受每秒1万次的请求量,而它之所以能接受这么多的请求是因为它的架构模式决定的。它的设计不像其它服务器那样使用线程处理请求,而是利用的异步事件驱动,底层利用了Linux系统的epoll事件处理模型。

二、nginx有哪些特点

  1. 配置简单:只需要通过配置来完成自己定制的功能,复杂的功能还可以支持结合lua脚本编写
  2. 跨平台:nginx既有Linux版本,也有Windows版本的支持
  3. 非阻塞:可以支持2~3万的并发连接,非阻塞的i/o通信
  4. 多进程:多个工作进程的支持充分利用cpu的资源,减少并发带来的问题
  5. 异步处理:先将用户请求全部接受,再一次性发送到后端web服务器,减小服务器压力
  6. 高可用:能快速发现故障机器,并过滤掉,也提供连接超时重试机制、稳定性高
  7. 内存消耗小、成本低廉(相比于F5)、节省带宽

三、nginx的整体架构

在这里插入图片描述
1、模块化设计
标准的高内聚低耦合,分为核心模块和功能模块
在这里插入图片描述
核心模块:维持一个运行循环(run-loop,有点像netty里的event loop),执行网络请求处理的不同阶段的模块功能,存储读写、内容传输、网络读写、外出过滤,以及将请求转发上游服务器。还提供错误日志记录、配置文件解析、事件驱动机制、进程管理等
功能模块:HTTP模块提供HTTP协议解析相关功能;邮件服务模块支持POP3、IMAP、SMTP协议的支持;还有些其它的模块比如对json支持、对lua的支持等

2、代理设计
无论是对于HTTP还是memcache、redis等网络请求或响应都采用了代理机制

3、事件驱动模型
基于异步非阻塞的事件驱动模型,是nginx高并发、高性能的关键因素

4、多进程模型
nginx启动的时候,会生成两种类型的进程,一个主进程和多个工作进程,多个工作进程可以通过配置文件来指定,一般会设成当前机器的cpu核数的两倍(io密集型)。主进程主要负责进程调度、加载配置、启动工作进程;而工作进程是用来处理实际的网络请求及响应,每一个worker进程都可以同时处理数以千计的网络请求

四、nginx事件驱动模型

工作进程在调用io后,就去处理其它的请求,当io调用返回后会触发事件并通知该工作进程,从而实现异步调用。nginx事件驱动模型由三个部分组成:

  • 事件发送器:负责将io事件发送到事件处理器
  • 事件收集器:负责收集工作进程的各种io请求
  • 事件处理器:负责各种事件的响应工作

由事件收集器收集工作进程的请求,事件发送器将每个请求放入一个待处理的事件列表,事件处理器使用非阻塞的调用方式处理请求。常见处理方式有这三种:select模型、poll模型、epoll模型。

五、总结

上面我们简单了解了nginx是干什么的和它的架构模型,下一篇我会介绍nginx的实际应用部分。

猜你喜欢

转载自blog.csdn.net/u18256007842/article/details/89280763