Nginx原理

##一个Web服务器搭建多个网站有三种方法

  1. 基于不同域名的虚拟网站
  2. 基于不同监听端口的虚拟网站
  3. 基于不同IP的虚拟网站

原理简单介绍

Web: apache nginx weblogic tomcat (Web服务器)
LB: nginx lvs haproxy (负载均衡器)
缓存:nginx squid vanish

Nginx是什么?

  1. nginx,开源的,支持高性能,高并发的www服务和代理服务软件
  2. nginx对静态资源处理更好,并且占用资源少
  3. 不但是优秀的Web软件,还有反向代理负载均衡功能和缓存服务功能,我lvs负载均衡和Haproxy比,部署起来更简单,方便。在缓存方面,又类似于Squid缓存服务软件

Nginx重要特性

  1. 支持高并发,特别是静态小文件业务环境,支持几万并发连接
  2. 资源消耗少,在3万并发连接下,开启10个Nginx线程消耗的内存不到200M
  3. 可以zo做HTTP反向代理及加速缓存,即负载均衡功能
  4. 具备Squid等缓存功能
  5. 支持异步网络I/O时间模型epoll

Nginx三大功能

  1. 作为Web服务软件
  2. 反向代理或负载均衡器
  3. 前端业务数据缓存服务 (图片视频,所谓视频是类似于的微信小视频,一般都小于10M,小于1M的是小文件,反之大文件)

###简单介绍apache
Apache 是进程的连接,不是Nginx的线程连接,进程是资源池,进程和进程之间的资源是不互通的,所以进程接待客户会大量消耗资源,但是会很稳定,线程接待客户,他们的资源是共享的,所以在高并发时候,会出现资源互抢。Apache的软件包的大小比Nginx大,高并发时,Nginx接待的多,作为Web,中小企业大多是Nginx,但作为其他作用,都会使用

nginx处理静态数据快,apache处理动态数据快
nginx资源占用小,apache资源占用高
nginx用的是epoll模型,apache用的是select模型

Nginx原理

Nginx原理

Nginx原理

为社么Nginx总体性能比Apache高?

  • Nginx使用最新的epoll(linux2.6内核)和kqueue(freebsd)异步网络I/O模型,而Apache使用的是传统的select模型,奴前linux下能承受高并发防卫的Squid,Memcached软件采用的都是epoll模型
  • 处理大量连接的读写是,Apache所采用的select网络I/O模型比较低

select (同步I/O网络模型)
性能:随着连接数的增加,性能急剧下降,处理成千上万并发连接数时,性能很差
连接数:连接数有限制,处理的最大连接数不超过1024,如果要处理的链接数超过1024个,则需要修改FD_SETSIZE宏,并重新编译
内在处理机制:线性轮询
开发复杂性:低

epoll (异步I/O网络模型)
性能:随着连接数的增加,性能基本上没有下降,处理成千上万并发连接时,性能很好
连接数:连接数无限制
内在处理机制:回调callback
开发复杂性:中

同步和异步 解析

Nginx原理

I/O阻塞:线程阻塞,当往硬盘里写数据时,需要等待时间才能写完,并且,写完前不可执行其他操作。指的是硬盘读写速度。(灰色的)
I/O阻塞,在写入硬盘时,需要等待时间,反映读写速度,dd命令
select 不论是单线程还是多线程,都是一个线程只能做一件事,而且线程在做事的时候,会出现阻塞情况,会降低读写速度。
epoll 是最右边的模型,异步无阻塞模型,
当一个线程做一个事,开始读写到磁盘时,会有阻塞,于是这个线程会自动切换到其他事情去做,使其本线程达到无阻塞状态,这样相当于一个线程执行了很多任务,提高效率,达到高效的效果