`

Nginx学习笔记(一) Nginx架构

阅读更多
原帖地址:http://www.cnblogs.com/coder2012/p/3141469.html

Nginx架构

  Nginx全程是什么? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

daemon守护线程

  nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。

  当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式。

  master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。

  worker进程则是处理基本的网络事件。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。

  worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。更多的worker数,只会导致进程来竞争cpu资源了,从而带来不必要的上下文切换。而且,nginx为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。

  惊群现象

  每个worker进程都是从master进程fork过来。在master进程里面,先建立好需要listen的socket之后,然后再fork出多个worker进程,这样每个worker进程都可以去accept这个socket(当然不是同一个socket,只是每个进程的这个socket会监控在同一个ip地址与端口,这个在网络协议里面是允许的)。一般来说,当一个连接进来后,所有在accept在这个socket上面的进程,都会收到通知,而只有一个进程可以accept这个连接,其它的则accept失败。

相对于线程,采用进程的优点

  进程之间不共享资源,不需要加锁,所以省掉了锁带来的开销。

  采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快重新启动新的worker进程。

  编程上更加容易。

  多线程的问题

  而多线程在多并发情况下,线程的内存占用大,线程上下文切换造成CPU大量的开销。想想apache的常用工作方式(apache也有异步非阻塞版本,但因其与自带某些模块冲突,所以不常用),每个请求会独占一个工作线程,当并发数上到几千时,就同时有几千的线程在处理请求了。这对操作系统来说,是个不小的挑战,线程带来的内存占用非常大,线程的上下文切换带来的cpu开销很大,自然性能就上不去了,而这些开销完全是没有意义的。

异步非阻塞

  异步的概念和同步相对的,也就是不是事件之间不是同时发生的。

  非阻塞的概念是和阻塞对应的,阻塞是事件按顺序执行,每一事件都要等待上一事件的完成,而非阻塞是如果事件没有准备好,这个事件可以直接返回,过一段时间再进行处理询问,这期间可以做其他事情。但是,多次询问也会带来额外的开销。

  总的来说,Nginx采用异步非阻塞的好处在于:

  • 不需要创建线程,每个请求只占用少量的内存
  • 没有上下文切换,事件处理非常轻量

  淘宝tengine团队说测试结果是“24G内存机器上,处理并发请求可达200万”。

 

本文链接

分享到:
评论

相关推荐

    nginx学习笔记.zip

    **Nginx学习笔记概述** Nginx是一款高性能的HTTP和反向代理服务器,也是一款邮件代理服务器。它以其稳定性、高性能以及丰富的模块配置而受到广泛赞誉,常用于网站的负载均衡、静态文件处理和SSL加密等场景。本学习...

    Nginx学习笔记.zip

    这个“Nginx学习笔记.zip”压缩包文件包含了一系列关于Nginx的教程资源,分别命名为“第1节课”到“第5节课”,暗示着一个逐步深入的学习过程。 在第一节课中,我们通常会了解Nginx的基本概念和安装步骤。Nginx的...

    Nginx学习笔记

    【Nginx学习笔记】 Nginx是一款由俄罗斯开发者Igor Sysoev设计的高性能、高并发的Web服务器和反向代理服务器。最初应用于俄罗斯知名网站www.rambler.ru,随后开源,采用类BSD许可,使得全球用户都能使用。Nginx以其...

    5Nginx学习笔记1

    Nginx学习笔记1 Nginx是当前使用最广泛的Web服务器之一,它提供了强大的服务器功能和灵活的配置方式。本文档将介绍Nginx的基本概念、安装过程、配置方法和常见问题解决方案。 一、Nginx的基本概念 Nginx是一个...

    nginx学习笔记

    ### Nginx 学习笔记 #### Nginx 集群与分布式服务架构 在当前互联网技术高速发展的背景下,单台服务器已经无法满足日益增长的业务需求。为了解决这一问题,分布式服务架构应运而生。分布式服务架构通过将服务部署...

    nginx学习笔记及相关资料

    "nginx学习笔记及相关资料"这个压缩包中可能包含了关于Nginx的配置示例、教程文档、实战案例等,帮助学习者深入理解Nginx的工作原理,掌握配置和管理技巧,提升解决实际问题的能力。 总之,Nginx是一个强大且灵活的...

    nginx学习笔记.docx

    ### Nginx 学习笔记知识点总结 #### 一、Nginx 简介及安装 **Nginx** 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协议下发行。其特点是占有内存少,并发能力强,...

    4.Nginx 架构实战篇.学习笔记整理分享给需要的同学

    4.Nginx 架构实战篇.学习笔记整理分享给需要的同学

    Linux服务-nginx学习资料

    1,Nginx学习大纲:分基础篇;进阶篇;架构篇;模块篇几个阶段学习,每个阶段的内容个侧重点不同,如nignx指令,nginx配置;nginx服务集成;nginx集群,负载均衡,反向代理,Lua等等。 2,Nginx案例:学习Nginx离不...

    Linux云计算 运维架构师学习笔记

    ### Linux云计算运维架构师学习笔记 #### Tomcat与云计算架构师技能树 ##### Tomcat简介与功能 **Tomcat**是Apache软件基金会Jakarta项目的一个关键组成部分,它由Apache、Sun和其他公司及个人共同开发而成。Sun...

    nginx安装所需依赖和安装包

    关于《最牛逼的Python爬虫学习笔记.pdf》,虽然与Nginx的安装无关,但它是Python爬虫学习的重要资源。Python爬虫是数据抓取和分析的有效工具,可以配合Nginx进行日志分析或其他自动化任务。 总结来说,Nginx的安装...

    小滴课堂笔记_Nginx_SSM_springcloud

    小滴课堂笔记包含了对这些技术的深入学习资料,例如 Nginx 专题课程学习笔记,涵盖了 Nginx 的基本配置、反向代理、负载均衡等内容;SSM 课程笔记则可能包含 Spring、SpringMVC 和 Mybatis 的整合教程,讲解如何搭建...

    Java架构方面面试及学习笔记.rar

    这份"Java架构方面面试及学习笔记.rar"资源包含了广泛的Java后端技术,有助于加深对Java架构的理解和提升相关技能。 1. **Java后端知识**:Java作为服务器端开发的主流语言,其后端知识涵盖了类加载机制、垃圾回收...

    深入理解Nginx模块开发与架构解析第2版LinuxUnix技术丛书.pdf

    《深入理解Nginx模块开发与架构解析》第二版是一本专为Linux和Unix系统设计的技术丛书中关于Nginx的深度指南。这本书全面涵盖了Nginx的核心概念、内部架构以及模块开发,对于想要深入了解Nginx工作原理、优化性能或...

    强烈推荐 Linux云计算 运维架构师学习笔记

    Linux云计算运维架构师学习笔记不仅针对初学者提供了学习资料,同样也适合资深工程师进行深入研究和实践。 Linux云计算涉及到的操作系统多为Linux发行版,其开源、安全、高效的特点,使其在云计算领域广受欢迎。...

    nginx:nginx源代码+学习笔记

    结合学习笔记,你可以更深入地探索Nginx的每一个角落,理解其设计理念和优化技巧。笔记中可能包括了对关键函数的注解、性能优化点的解析以及常见问题的解决方案。 总的来说,学习Nginx源代码不仅有助于提升Web...

    Java架构学习笔记Xmind图.zip

    Java架构学习笔记Xmind图.zip是一个包含Java架构学习精华的压缩文件,其中很可能包含了详细的思维导图,用于梳理和组织Java开发中的各种架构概念和技术。这个压缩包可能旨在帮助Java开发者,尤其是初学者或进阶者更...

    Java架构面试专题汇总(含答案)和学习笔记.zip

    这个压缩包包含的学习笔记和习题集全面覆盖了Java架构师所需的核心知识点,下面我们将深入探讨其中的关键内容。 1. **Java基础** - **数据类型与变量**:理解基本数据类型、引用数据类型,以及它们在内存中的存储...

Global site tag (gtag.js) - Google Analytics