博客
关于我
Nginx学习笔记(一) Nginx架构
阅读量:791 次
发布时间:2023-02-15

本文共 1139 字,大约阅读时间需要 3 分钟。

Nginx架构

Nginx("engine x")是一个高性能的HTTP和反向代理服务器,同时也是IMAP/POP3/SMTP代理服务器。作为一个高效的网络应用,它在现代网络环境中发挥着重要作用。

Nginx在启动后,以daemon守护线程的方式在Unix系统中运行。其后台进程包含一个master进程和多个worker进程。在Unix系统中,Nginx默认采用多进程方式管理,这种模式在性能上具有显著优势。

master进程的主要职责是管理worker进程。它负责接收来自外界的信号,向各worker进程发送管理指令,并监控worker进程的运行状态。在worker进程出现异常情况时,master进程会自动启动新的worker进程,确保服务的持续性。

而每个worker进程则负责处理基本的网络事件。多个worker进程之间是对等的,它们竞争来自客户端的请求。每个请求只能在单个worker进程中处理,worker进程之间相互独立。为了充分利用多核计算资源,Nginx支持CPU绑定选项,可以将某个进程绑定到特定的CPU核上,从而减少上下文切换带来的性能损失。

在Nginx的工作机制中,每个worker进程都是从master进程fork出来的。master进程首先建立需要监听的socket,然后再fork出多个worker进程。每个worker进程都可以监控同一个IP地址和端口的socket。根据网络协议的特性,只有一个进程可以接收连接,其它进程会在accept操作上失败。

相比于线程模型,Nginx采用进程的优势在于:

  • 进程之间不共享资源,不需要加锁,避免了锁带来的额外开销。
  • 独立的进程结构使得一个进程的异常不会影响其它进程,服务能够在单进程故障时快速恢复。
  • 编程上更加直观,适合处理I/O密集型任务。
  • 而多线程模型在高并发场景下存在显著的性能问题。每个请求都需要独占一个线程,线程的内存占用随请求数量增加而快速提升。线程上下文切换会导致CPU开销增加,影响整体性能。在高并发下,线程模型难以应对内存占用和上下文切换带来的性能瓶颈。

    Nginx采用异步非阻塞模型,这种模式下的事件处理更加高效。异步指的是事件之间不是同时发生的,而非阻塞则意味着在事件未准备就绪时,可以立即返回处理其他任务。这种组合方式使得每个请求只占用极小的内存资源,不需要等待前一个事件完成。

    相比传统的线程模型,Nginx的异步非阻塞模型具有明显优势:

  • 不需要创建线程,每个请求仅占用少量内存。
  • 没有上下文切换,事件处理更加轻量化。
  • 据淘宝tengine团队的测试结果,Nginx在24G内存的环境下,可以处理并发请求高达200万。这种性能表现充分体现了Nginx在高并发场景下的卓越优势。

    转载地址:http://ircfk.baihongyu.com/

    你可能感兴趣的文章
    mysql进阶 with-as 性能调优
    查看>>
    mysql部署错误
    查看>>
    MySQL锁与脏读、不可重复读、幻读详解
    查看>>
    MySQL集群解决方案(4):负载均衡
    查看>>
    mysql面试题学校三表查询_mysql三表查询分组后取每组最大值,mysql面试题。
    查看>>
    MySQL面试题集锦
    查看>>
    mysql颠覆实战笔记(八)--mysql的自定义异常处理怎么破
    查看>>
    mysql驱动、durid、mybatis之间的关系
    查看>>
    mysql驱动支持中文_mysql 驱动包-Go语言中文社区
    查看>>
    MySQL高可用切换_(5.9)mysql高可用系列——正常主从切换测试
    查看>>
    MYSQL高可用集群MHA架构
    查看>>
    MySQL高级-MySQL并发参数调整
    查看>>
    MySQL高级-MySQL查询缓存优化
    查看>>
    MySQL高级-SQL优化步骤
    查看>>
    MySQL高级-视图
    查看>>
    MySQL高级-触发器
    查看>>
    mysql高级查询~分页查询
    查看>>
    MySQL(2)DDL详解
    查看>>
    MySQL:MySQL执行一条SQL查询语句的执行过程
    查看>>
    Mysql:SQL性能分析
    查看>>