文章目录

  • nginx 服务
  • 一,nginx 介绍
  • 二,选择nginx的原因
  • 三、IO多路复用
  • 1、I/O multiplexing【多并发】
  • 2、一个请求到来了,nginx使用epoll接收请求的过程是怎样的?
  • 3、异步,非阻塞


nginx 服务

一,nginx 介绍

  • Nginx (engine x) 是一个高性能的 HTTP 和 反向代理 服务,也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好
  • 在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

创始人是:伊戈尔·赛索耶夫

二,选择nginx的原因

Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:

单机环境下参考服务器配置。 并发连接数在7000+ -8000左右。 集群模式20000+

  • 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应。
  • 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
  • 作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
  • Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。

三、IO多路复用

1、I/O multiplexing【多并发】

  • 第一种方法就是最传统的多进程并发模型 (每进来一个新的I/O流会分配一个新的进程管理。)
  • 第二种方法就是I/O多路复用 (单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流 。)
  • I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同
  • 时管理多个I/O流。发明它的原因,是尽量多的提高服务器的吞吐能力。
  • 在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流。

nginx 从服务器下载生成的excel_Nginx

2、一个请求到来了,nginx使用epoll接收请求的过程是怎样的?

  • ngnix会有很多连接进来, epoll会把他们都监视起来,然后像拨开关一样,谁有数据就拨向谁,然后调用相应的代码处理。
  • epoll.
  • epoll 可以说是I/O 多路复用最新的一个实现,epoll 修复了select/poll绝大部分问题, 比如:
  • epoll 线程安全的。
  • epoll 告诉你具体哪个sock有数据,你不用自己去找了。

3、异步,非阻塞

# pstree |grep nginx
 |-+= 81666 root nginx: master process nginx
 | |--- 82500 nobody nginx: worker process
 | \--- 82501 nobody nginx: worker process

1个master进程,2个work进程

  • 每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?
  • 处理到可能发生阻塞的地方,比如向后端服务器转发request,并等待请求返回。那么,这个处理的worker不会这么一直等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。这就是异步。
  • 此时,如果再有request 进来,他就可以很快再按这种方式处理。这就是非阻塞和IO多路复用。
  • 而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。这就是异步回调。