所在的位置: html >> html市场 >> Nginx基础学习

Nginx基础学习

Nginx介绍

Nginx是一款高性能的Web服务器,最初由俄罗斯程序员IgorSysoev开发,自年问世以来,凭借其高性能、高可靠、易扩展等优点,在反向代理、负载均衡、静态文件托管等主流场合得到了广泛的应用。

Nginx具有以下优点。

高性能:相比于其他Web服务器如Apache,在正常请求以及高峰请求期,可以更快地响应请求。

高可靠:Nginx采用多进程模型,分为主进程和工作进程。主进程负责监视工作进程,当工作进程异常退出时,可以快速拉起一个新的工作进程,从而为用户提供稳定服务

高并发:Nginx通常作为网关级服务,其支持的并发量通常在万级别,经过优化甚至可以达到十万级别。

易扩展:Nginx是模块化设计,具有极高的扩展性,使用者可以根据自身需求,定制开发相应模块。

热部署:Nginx提供了优雅重启以及平滑升级的方案,使用户在修改配置文件或者升级Nginx时,不会影响线上服务。

跨平台:支持Linux、Windows、macOS多种平台。

Nginx基础架构

多进程模型

Nginx使用了Master管理进程和Worker工作进程(Worker进程)的设计,如下图nginx工作时,会生成一个master进程和若干个worker进程。master进程主要负责读取、应用配置,并管理worker进程。worker进程负责处理请求。master与worker之间采用基于事件的通信模式。多进程模型的设计充分利用了多核处理器的并发能力。

异步非阻塞

Nginx的Worker进程全程工作在异步非阻塞模式下。从TCP连接的建立到读取内核缓冲区里的请求数据,再到各HTTP模块处理请求,或者反向代理时将请求转发给上游服务器,最后再将响应数据发送给用户,Worker进程几乎不会阻塞。当某个系统调用发生阻塞时(例如进行I/O操作,但是操作系统还没将数据准备好),Worker进程会立即处理下一个请求。当处理条件满足时,操作系统会通知Worker进程继续完成这次操作。一个请求可能需要多个阶段才能完成,但是整体上看每个Worker进程一直处于高效的工作状态,因此Nginx只需要少数Worker进程就能处理大量的并发请求。

CPU绑定

通常在生产环境中会配置Nginx的Worker进程数量等于CPU核心数,同时会通过worker_cpu_affinity将Worker进程绑定到固定的核上,让每个Worker进程独享一个CPU核心,这样既能有效避免CPU频繁地上下文切换,也能大幅提高CPU的缓存命中率。

Worker进程的负载均衡机制

当客户端试图与Nginx服务器建立连接时,如果每个Worker进程都争抢着去接受连接就会造成“惊群效应“,Worker进程都被操作系统唤醒,但最终却只有一个Worker进程成功接受连接,这会降低系统的整体性能。此外,如果有的Worker进程总是争抢连接失败,而有的Worker进程本身已经很忙碌了,却争抢成功,就会造成Worker进程之间负载的不均衡,也会降低服务器的处理能力与吞吐量。为了解决第一个问题,nginx引入了一把全局的accept_mutex锁,每个Worker进程在监听之前都会尝试获取accept_mutex锁,只有成功抢到锁的Worker进程才会真正监听端口并接受新的连接。关于第二个问题,nginx采用了一套负载均衡算法,比较繁忙的Worker进程会放弃对accept_mutex锁的争抢,专注于处理已有的连接。

模块化设计

Nginx由众多模块构成,每种模块各司其职,但所有的模块都遵循相同的接口规范,总体来说Nginx的模块按功能可以划分为如下5类

核心模块:Nginx中最重要的一类模块,每个核心模块定义了同一种风格类型的模块,包括

ngx_core_modulengx_


转载请注明:http://www.aierlanlan.com/rzdk/3254.html

  • 上一篇文章:
  •   
  • 下一篇文章: