`

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学习笔记

    nginx集群,分布式服务架构,特点:热部署,可高并发连接,低内存消耗,处理响应快,可靠性高等

    Linux服务-nginx学习资料

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

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

    Java架构方面学习笔记,java后端知识、并发多线程、dubbo、springMVC,SpringBoot、MySql调优、Nginx、Redis、Zookeeper

    Java架构面试笔试专题资料及经验(含答案)和学习笔记.zip

    Java架构面试笔试专题资料及经验(含答案)和学习笔记: ActiveMQ消息中间件面试专题.pdf Dubbo面试专题及答案(下).pdf Dubbo面试及答案(上).pdf java后端面试题答案.pdf Java基础面试题.pdf java多线程并发编程...

    linux全套学习笔记_博雅运维

    linux全套学习笔记_博雅运维,适合linux初学者,包含用户管理,进程管理,分区管理,vim,磁盘阵列,LVM逻辑卷,dns,ftp,nfs,samba,dhcp,apache,mysql,php,nginx,iptables,selinux,lamp,lnmp架构,phpmyadmin,...

    note:learning note 学习笔记

    个人学习笔记 计算机学科基础 - 数据结构和算法 数据结构 哈希表 优先队列 后缀数组 红黑树 线段树 链表 栈 二叉树 图 算法 DFS、BFS 回溯法 排序 二分搜索 DP 贪心 KMP 目录 建设中... 掌握科班必备知识 c 语言 ...

    注意:学习笔记

    注意学习笔记HTTP权威指南TCP / IP详解卷一:协议// 1,2,3可以先看1,其中8,9章是重点深入理解Linux内核//比较难Lniux内核设计与实现//相对简单Nginx核心知识100讲深入理解Nginx;模块开发与架构解析大型网站技术...

    华为工程师linux的笔记-第3章 .pdf

    Linux进阶篇总共包含6个章节,第9章到第14章学习内容分别包括:HTTP协议详解、Apache WEB服务器企业实战、MySQL数据库服务器企业实战、LAMP企业架构实战、Zabbix分布式监控系统实战、Nginx高性能WEB服务器实战等。...

    最全的Java程序员知识(专业知识+面试+视频教程)学习资料合集.zip

    Java架构面试专题及架构学习笔记 Dubbo服务框架面试专题及答案整理文档 BAT面试常问80题 23种设计模式知识要点整理 面试必备—API接口安全 面试必备—服务器推送技术 面试必备—匠心独运手写MyBatis框架 面试必备—...

    华为工程师linux的笔记-第5章.pdf

    Linux进阶篇总共包含6个章节,第9章到第14章学习内容分别包括:HTTP协议详解、Apache WEB服务器企业实战、MySQL数据库服务器企业实战、LAMP企业架构实战、Zabbix分布式监控系统实战、Nginx高性能WEB服务器实战等。...

    java学生宿舍管理系统源码-zcnote:笔记类,包括mysql,php,nginx,linux,go,python,算法等等

    java学生宿舍管理系统 ...微服务学习笔记系列 Go微服务实战系列 搜索引擎elasticsearch 操作系统 数据结构和算法 leetcode 树 架构模式 消息中间件 rabbitmq rocketmq 网络编程 设计模式 目录自动生成器

    华为工程师linux的笔记-第2章 .pdf

    Linux进阶篇总共包含6个章节,第9章到第14章学习内容分别包括:HTTP协议详解、Apache WEB服务器企业实战、MySQL数据库服务器企业实战、LAMP企业架构实战、Zabbix分布式监控系统实战、Nginx高性能WEB服务器实战等。...

    Linux 运维 入门到高级

    linux企业实战运维入门到高级系列 ubuntu Centos 面试题合集 MySQL Nginx 搭建私有Yum仓库 搭建本地第三方源epel 升级内核 脚本合集 修改自动获取ip .ubuntu换国内源 CentOS...仅用于学习交流分享,如有争议请联系下架

    华为工程师linux的笔记-第6章.pdf

    Linux进阶篇总共包含6个章节,第9章到第14章学习内容分别包括:HTTP协议详解、Apache WEB服务器企业实战、MySQL数据库服务器企业实战、LAMP企业架构实战、Zabbix分布式监控系统实战、Nginx高性能WEB服务器实战等。...

    华为工程师linux的笔记-第7章.pdf

    Linux进阶篇总共包含6个章节,第9章到第14章学习内容分别包括:HTTP协议详解、Apache WEB服务器企业实战、MySQL数据库服务器企业实战、LAMP企业架构实战、Zabbix分布式监控系统实战、Nginx高性能WEB服务器实战等。...

    华为工程师linux的笔记-第8章.pdf

    Linux进阶篇总共包含6个章节,第9章到第14章学习内容分别包括:HTTP协议详解、Apache WEB服务器企业实战、MySQL数据库服务器企业实战、LAMP企业架构实战、Zabbix分布式监控系统实战、Nginx高性能WEB服务器实战等。...

    华为工程师linux的笔记-第9章.pdf

    Linux进阶篇总共包含6个章节,第9章到第14章学习内容分别包括:HTTP协议详解、Apache WEB服务器企业实战、MySQL数据库服务器企业实战、LAMP企业架构实战、Zabbix分布式监控系统实战、Nginx高性能WEB服务器实战等。...

    华为工程师linux的笔记-第10章 .pdf

    Linux进阶篇总共包含6个章节,第9章到第14章学习内容分别包括:HTTP协议详解、Apache WEB服务器企业实战、MySQL数据库服务器企业实战、LAMP企业架构实战、Zabbix分布式监控系统实战、Nginx高性能WEB服务器实战等。...

    华为工程师linux笔记-第1章.pdf

    Linux进阶篇总共包含6个章节,第9章到第14章学习内容分别包括:HTTP协议详解、Apache WEB服务器企业实战、MySQL数据库服务器企业实战、LAMP企业架构实战、Zabbix分布式监控系统实战、Nginx高性能WEB服务器实战等。...

Global site tag (gtag.js) - Google Analytics