Nginx基础架构和配置

特性

  1. 模块化设计,较好的扩展性,动态加载。
  2. 高可用性
  3. 支持热部署,不停机更新配置文件,升级版本,更换日志文件。
  4. 低内存消耗,10k keep-alive连接在非活动模式下大概2.5M。
  5. 事件驱动模型,Aio,mmap,sendfile。

传统网络传输过程

硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈

  1. 系统调用 read()产生一个上下文切换:从 user mode 切换到 kernel mode,然后 DMA 执行拷贝,把文件数据从硬盘读到一个 kernel buffer 里。
  2. 数据从 kernel buffer拷贝到 user buffer,然后系统调用 read() 返回,这时又产生一个上下文切换:从kernel mode 切换到 user mode。
  3. 系统调用write()产生一个上下文切换:从 user mode切换到 kernel mode,然后把步骤2读到 user buffer的数据拷贝到 kernel buffer(数据第2次拷贝到 kernel buffer),不过这次是个不同的 kernel buffer,这个 buffer和 socket相关联。
  4. 系统调用 write()返回,产生一个上下文切换:从 kernel mode 切换到 user mode ,然后 DMA 从 kernel buffer拷贝数据到协议栈。

开启sendfile后

硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈

  1. 系统调用sendfile()通过 DMA把硬盘数据拷贝到 kernel buffer,然后数据被 kernel直接拷贝到另外一个与 socket相关的 kernel buffer。这里没有 user mode和 kernel mode之间的切换,在 kernel中直接完成了从一个 buffer到另一个 buffer的拷贝。
  2. DMA 把数据从 kernelbuffer 直接拷贝给协议栈,没有切换,也不需要数据从 user mode 拷贝到 kernel mode,因为数据就在 kernel 里。
  3. sendfile是个比 read 和 write 更高性能的系统接口,sendfile 是将 in_fd 的内容发送到 out_fd ,而 in_fd 不能是 socket ,也就是只能文件句柄。
  4. 当 Nginx 是一个静态文件服务器的时候,开启 SENDFILE 配置项能大大提高 Nginx 的性能。
  5. 是当 Nginx 是作为一个反向代理来使用的时候,SENDFILE 则没什么用了,因为 Nginx 是反向代理的时候。 in_fd 就不是文件句柄而是 socket,此时就不符合 sendfile 函数的参数要求了。

综上所述,sendfile只能接受句柄参数,不能接收socket文件,静态服务器时开启可以大幅度提升性能,反向代理时由于传输socket,就无需开启了。

Nginx基本功能

  1. 静态资源的web服务器,不支持模块方式php,仅支持安装php-fpm(Tcp:9000,FastCGI通信方式),Apache内部有支持php的模块。
  2. 反向代理服务器,后端搭建多个web服务器,由Nginx进行七层调度,比LVS功能强,但是性能弱,LVS理论并发400万,Nginx 3万。
  3. LNMP架构中,如果想访问动态资源,FastCGI作为服务端,Nginx作为客户端;结构应该为 客户端–>Nginx服务器–>php-fpm–>DB。
  4. uWSGI Django架构服务器ÿ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值