作者 | albon_arith

责编 | Elle

出品 | CSDN 博客

Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。

Nginx 的整体架构

Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处理网络请求与响应。

master进程主要用来管理worker进程,具体包括如下4个主要功能:

  1. 接收来自外界的信号。

  2. 向各worker进程发送信号。

  3. 监控woker进程的运行状态。

  4. 当woker进程退出后(异常情况下),会自动重新启动新的woker进程。

woker进程主要用来处理基本的网络事件:

  1. 多个worker进程之间是对等且相互独立的,他们同等竞争来自客户端的请求。

  2. 一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。

  3. worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。同时,nginx为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。

Ngnix 是如何实现高性能的?

事件驱动模型

基于异步及非阻塞的事件驱动模型,可以说是 Nginx 得以获得高并发、高性能的关键因素。这一点上和 Netty 类似,底层都是使用的 BSD kqueue、Linux epoll 及 Solaris event ports。

多进程机制

使用多进程的好处有两点:

  1. 进程之间不共享资源,不需要加锁,减少了使用锁对性能造成的影响,同时降低编程的复杂度,降低开发成本。

  2. 采用独立的进程,可以让进程互相之间不会影响,如果一个进程发生异常退出时,其它进程正常工作,master 进程则很快启动新的 worker 进程,确保服务不会中断,从而将风险降到最低。

内存池

为了避免出现内存碎片,减少向操作系统申请内存的次数、降低各个模块的开发复杂度,Nginx 设计了简单的内存池,它的作用主要是把多次向系统申请内存的操作整合成一次,这大大减少了 CPU 资源的消耗,同时减少了内存碎片。

模块化设计

高度模块化的设计是 Nginx 的架构基础。Openresty 就是在 Nginx 上引入了 lua 等第三方模块,使得扩展更加方便了。

原文:https://blog.csdn.net/hustspy1990/article/details/102989305

Nginx 原理和架构 | 原力计划相关推荐

  1. 一文带你认清数据仓库“维度模型设计”与“分层架构” | 原力计划

    作者 | Alice菌 责编 | 王晓曼 出品 | CSDN博客 数据仓库纬度模型设计 1. 纬度建模基本概念 维度模型是数据仓库领域大师Ralph Kimall所倡导,他的<数据仓库工具箱&g ...

  2. 轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划

    作者 | 楼下小黑哥 责编 | 王晓曼 出品 | CSDN博客 前言 最近由于业务需求,需要开发付款码功能,该接口底层将会聚合市面上主流钱包 APP 的付款码功能,如微信支付,支付宝支付. ps:付款 ...

  3. 疫情期间天天对你“开枪”的额温枪,你知道它的工作原理吗?| 原力计划

    冠状病毒疫情期间,大家都知道口罩脱销了,消毒酒精脱销了,其实医用的额温枪也脱销了,一枪难求.因为其快速测温(1秒测温),无接触测温的特点,在医院.机场.火车站.小区.海关等地方被广泛使用,额温枪成了名 ...

  4. DevOps:从「蒸汽时代」到「高铁时代」,SUNMI DevOps转型之路 | 原力计划

    作者 | 文振熙.刘文沣 责编 | 徐威龙 封图| CSDN 下载于视觉中国 商米科技成立于 2013 年,总部位于上海市杨浦区创智天地,是一家具有产品创新基因和互联网基因的公司.商米在短时间内迅速成 ...

  5. 8 种架构设计模式优缺点大曝光 | 原力计划

    作者 | 程序员Tony 责编 | 王晓曼 出品 | CSDN博客 什么是架构 我想这个问题,十个人回答得有十一个答案,因为另外的那一个是大家妥协的结果,哈哈,我理解,架构就是骨架. 人类的身体的支撑 ...

  6. es拼音分词 大帅哥_8 种架构设计模式优缺点大曝光 | 原力计划

    作者 | 程序员Tony责编 | 王晓曼出品 | CSDN博客什么是架构我想这个问题,十个人回答得有十一个答案,因为另外的那一个是大家妥协的结果,哈哈,我理解,架构就是骨架.人类的身体的支撑是主要由骨 ...

  7. 不知道路由器工作原理?没关系,来这看看!看不懂你捶我 | 原力计划

    作者 | 北海以北没有小王 头图 | CSDN付费下载自视觉中国 来源 | CSDN博客 路由器概述 首先我们先大致了解一下路由器的大致结构以及工作方式. 路由器体系结构 路由器体系结构如下图: 其中 ...

  8. 来!喝杯可乐!让你秒懂 MVP 架构模式 | 原力计划

    作者 | 星河Dac 责编 | 胡巍巍 出品 | CSDN博客 在Android传统模式开发中,随着Activity的功能增多,其代码也在不断增加.那么我们很可能会发现,如果我们再要往Activity ...

  9. 400 多行代码!超详细 Rasa 中文聊天机器人开发指南 | 原力计划

    作者 | 无名之辈FTER 责编 | 夕颜 出品 | 程序人生(ID:coder_life) 本文翻译自Rasa官方文档,并融合了自己的理解和项目实战,同时对文档中涉及到的技术点进行了一定程度的扩展, ...

最新文章

  1. CDH的几个包的下载地址
  2. Spring Boot + Dataway :接口不用写,配配就出来?
  3. 文件操作之按照字符读写文件
  4. Zookeeper服务端线程分析(单机)
  5. moss自定义内容查询webpart
  6. linux raid更换硬盘,linux系统raid1更换故障硬盘处理过程
  7. leetcode - Missing Ranges
  8. C#静态构造函数总结
  9. 可持久化3--可持久化01Trie
  10. ArrayList的容量
  11. valgrind 报告 ecpg内存泄露 (二)
  12. Java旅游管理系统本科生毕业设计任务书
  13. 毕业设计之 --- 基于Java web的动漫论坛设计与实现
  14. python爬虫监控平台_scrapy-monitor,实现爬虫可视化,监控实时状态
  15. 嵌入式系统词汇表(Embedded System Vocabulary List)
  16. Qt编写可视化大屏电子看板系统25-模块3设备监控
  17. Doxygen简介及使用说明
  18. react 电话344格式
  19. Mac OSX 打开原生自带读写NTFS功能[10.11.6 work, 10.14.4不work]
  20. 微信信息延迟问题如何解决?想不到有这么多原因,这下涨知识了

热门文章

  1. int main()和void main()的区别
  2. Cygwin编译自己定义OpenCV库报错:opencv_contrib: LOCAL_SRC_FILES points to a missing file
  3. JavaScript高级程序设计学习笔记--DOM
  4. 奇怪的比赛--蓝桥杯
  5. CDH QuickStart VM基本使用
  6. wcf afterreceiverequest获取body数据_阿里面试官的灵魂拷问:究竟如何保证API接口数据安全?...
  7. eclipse配置tomcat,并部署一个Java web项目到tomcat上
  8. Unity 宣布正式收购 Weta Digital
  9. 鸿星尔克因公司系统崩溃、恳请顾客退款;乔布斯首份手写求职信拍卖出222万;OpenAI 开源 Triton语言|极客头条...
  10. 美团遭遇反垄断调查;微信利用社交垄断封杀西瓜视频;Qt 6 for Python发布|极客头条...