1. Nginx在架构体系中的位置与功用
- 网关
- 虚拟主机:为不同域名/ip/端口提供服务
- 路由:使用反向代理,整合后面服务为一个完整业务
- 静态服务器:mvvm模式中,用来发布 html/css/js/img
- 负载集群:使用upstream,负载多个tomcat。
2. 架构设计
- 核心模块
正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、进程管理等核心功能。 - 标准 HTTP 模块
提供 HTTP 协议解析相关的功能,如:端口配置、网页编码设置、HTTP 响应头设置等。 - 可选 HTTP 模块
用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,如:Flash 多媒体传输、解析 GeoIP 请求、SSL 支持等。 - 邮件服务模块
用于支持 Nginx 的邮件服务,包括对 POP3 协议、IMAP 协议和 SMTP 协议的支持。 - 第三方模块
为了扩展 Nginx 服务器应用,完成开发者自定义功能,如:Json 支持、Lua 支持等。
3. Nginx 多进程模型
服务器每收到一个客户端请求时。就有服务器主进程(master process)生成一个子进程(worker process)出来和客户端建立连接进行交互,直到连接断开,该子进程结束。
使用进程的好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成影响,同时降低编程的复杂度,降低开发成本。其次,采用独立的进程,可以让进程互相之间不会影响,如果一个进程发生异常退出时,其它进程正常工作,master 进程则很快启动新的 worker 进程,确保服务不中断,将风险降到最低。 缺点是操作系统生成一个子进程需要进行内存复制等操作,在资源和时间上会产生一定的开销;当有大量请求时,会导致系统性能下降。
4. Nginx的异步非阻塞 IO
Nginx 使用的是 epoll。
传统的 select 和 epoll 模式:
- 新连接来了,线程一起抢,谁抢到算谁的。
- 被惊醒的线程轮询所有的 tcp 连接,找到有事件的 tcp 连接处理。
epoll 模式:
- 新连接来了,线程一起抢,谁抢到算谁的。
- 内核把事件写入Map,被惊醒的线程直接到 Map 中查找。
select、poll 模式中右侧抢到的线程会去轮询左侧的所有 TCP 连接,epoll 模式右侧抢到的线程会去 Map 中查找事件。
5. 代理
- 正向代理
是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。 - 反向代理
以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
|