nginx架构笔记1

转载请注明: TheViper http://www.cnblogs.com/TheViper 

摘自<<深入理解nginx模块开发与架构解析>>

Nginx进程间关系

nginx使用一个master进程管理多个worker进程。一般情况下,worker进程数与服务器的cpu核心数相等。worker进程提供真正的服务,master进程只负责监控管理worker进程。

master-worker方式启动多个进程的好处:

1.由于master进程仅专注于自己的管理工作,可以完全的管理worker进程,当任意一个worker进程发生错误,master进程可以立刻启动新的worker进程继续服务。

2.多个worker进程充分利用现在的多核架构,实现微观上真正的多核并发处理。把worker进程数设置成与服务器的cpu核心数相等,是因为更多的worker数,只会导致进程来竞争cpu资源了,从而带来不必要的上下文切换。而且,nginx为了更好的利用多核特性,提供了cpu亲缘性的绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。另外,一个worker进程可以同时处理的请求数只受限于内存大小,不同的worker进程间处理并发请求时几乎没有同步锁的限制,worker进程通常不会进入睡眠状态。由此,进程间切换的代价最小。

优化性能的配置项

1.nginx worker进程数

默认:worker_processes 1;

2.绑定nginx worker进程到指定cpu内核(配置仅对linux系统有效)

为什么要绑定?假定每个worker进程都是非常繁忙的,如果多个worker进程都在抢同一个cpu,就会出现同步问题。反之,如果每个worker进程都独享一个cpu,就在内核的调度策略上实现了完全的并发。

例如,有4个cpu内核,可以配置成:

worker_processes 4;

worker_cpu_affnity 1000 0100 0010 0001

3.ssl硬件加速

语法:ssl_engine_device;

可以使用openssl engine -t 查看是否有ssl硬件加速设备

4.系统调用gettimeofday的执行频率

语法:timer_resolution t;

默认情况下,每次内核事件调用(epoll,select,poll,kquene等)返回时,都会执行一次gettimeofday,实现用内核的时钟来更新nginx中的缓存时钟。

5.nginx worker进程优先级设置

语法:worker_priority nice;

默认:worker_priority 0;

在unix系统中,当许多进程都处于可执行状态时,将按照所有进程的优先级来决定本次内核选择哪一个进程执行。进程所分配的cpu时间片大小也与进程优先级有关。优先级越高,进程分配到的时间片也越大。这样,优先级高的进程会占有更多的系统资源。

优先级由静态优先级和内核根据进程执行情况所做的动态调整共同决定。nice值是进程的静态优先级,取值范围是-20到+19,-20是最高优先级。因此,如果希望nginx占有更多的系统资源,可以把值设置的小一些,但不建议比内核进程的nice值(通常为-5)更小。

事件驱动架构

定义:由一些事件发生源产生事件,由一个或多个事件收集器来收集,分发事件,然后很多事件处理器会注册自己感兴趣的事件,进而消费这些事件。

对于nginx,一般由网卡,磁盘产生事件,nginx的事件模块负责事件的收集,分发。而所有的模块都可能是事件的消费者,它们首先需要向事件模块注册感兴趣的事件类型,这样,当有事件产生时,事件模块会把事件分发到相应的模块中进行处理。

对于传统的web服务器,一个连接建立之后,在其关闭之前的所有操作,是按序执行每个操作的批处理模式,这样每个请求在连接建立后都将始终占据系统资源,直到连接关闭才会释放资源。而占据的这段时间可能会非常长,而且这段时间占用着内存,cpu等资源也许并没有意义,这就造成服务器资源的极大浪费,影响系统可以处理的并发数。传统服务器把一个进程或线程作为事件的消费者.

nginx采用了异步非阻塞的方式来处理请求,事件消费者是某个模块。只有事件收集,分发器才有资格占用进程资源,它们会在分发某个事件时调用事件消费模块使用当前占用的进程资源。

从上面可以看到两者的区别:传统服务器的每个事件消费者独占一个进程资源,nginx的事件消费者只是被事件分发器进程短期调用而已,这样每个用户的请求所产生的事件会被及时响应,服务器吞吐量也大大增加,但要注意,每个事件消费者不能有阻塞行为,否则会导致长时间占用事件分发者进程,使其他事件得不到及时响应。

如果您觉得本文的内容对您有所帮助,您可以打赏我:

时间: 2024-07-29 09:35:42

nginx架构笔记1的相关文章

nginx架构笔记2

转载请注明: TheViper http://www.cnblogs.com/TheViper 摘自 tengine的Nginx开发从入门到精通 还是本屌无法看懂大部分内容,暂且记下看的懂的. nginx是以多进程(一个master进程和多个worker进程)的方式来工作的,当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式.(关于进程与线程的不同,可以参见http://www.cnblogs.com/TheViper/p/4180551.html

Nginx基础笔记

Nginx基础笔记 资源 安装 ubuntu下 编译安装 基本操作 HTTP基本配置 配置说明 配置文件目录结构 配置文件结构 模块 模块化 index模块 Log模块 Real IP模块 Access模块 Rewrite模块 Proxy模块 upstream模块 其他 配置静态化目录 负载均衡 控制页面缓存 nginx的内置变量 nginx小结 资源 资源 Nginx 官网 Nginx 官方下载地址 Nginx最佳实践配置项目 地址 Nginx Configuration wiki 教程 ag

Keepalived+Nginx架构详解

Keepalived+Nginx架构 keepalived是一个类似于layer3.4.7交换机制的软件,也就是我们平时说的第3层.第4层和第7层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器.Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web.Mysql服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复

[转载] 深入 nginx 架构

原文: http://www.cnbeta.com/articles/402709.htm 了解 nginx 架构帮助我们学习如何开发高性能 web 服务. 为了更好地理解设计,你需要了解NGINX是如何工作的.NGINX之所以能在性能上如此优越,是由于其背后的设计.许多web服务器和应用服务器使用简单的线程的(threaded).或基于流程的 (process-based)架构, NGINX则以一种复杂的事件驱动(event-driven)的架构脱颖而出,这种架构能支持现代硬件上成千上万的并发

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root、alias、index配置

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root.alias.index配置 实验环境: centos 测试节点IP:172.16.3.101 基于端口的虚拟主机: vim /etc/nginx/nginx.conf # 向里面的http {}里面加入如下内容   server { # server定义一个虚拟主机         listen 8080; # 监听本机所有IP端口8080         server_name www.test.com; # 虚拟主机名为:w

Nginx架构的企业级应用

Nginx架构的企业级应用 ==================================================== 实现HA高可用集群 实现LB负载均衡集群 Nginx实现反向代理 Nginx实现动静分离 ================================================== 需求: 客户端访问静态的请求,由nginx反向代理给后端的Apache服务器: 客户端访问动态的请求,由nginx反向代理给后端的php-fpm(fastCGI)服务器,而且

2.nginx架构及工作流程

nginx是模块化设计: 模块大致可以分为: 1.核心模块(core) 2.基础模块(http,mail) 3.第三方模块(upstream,proxy,fastcgi) 功能:1.核心模块为nginx作为webserver,web or mail proxy提供一个大的基础 2.基础模块是核心模块与扩展模块的抽象衔接,同时完成某协议的功能 3.第三方模块,在对应基础模块的基础上,完成特定功能 nginx架构: nginx对于一个http请求的处理流程: 1.tcp/ip连接建立 2.woerk

Nginx 架构和基础原理

Nginx 的应用场景 Nginx 的应用场景主要有三个: 静态资源服务 反向代理服务 API 服务 静态资源服务 Nginx 可以通过本地文件系统提供静态资源的服务,例如纯静态的 HTML 页面等. 反向代理服务 很多应用服务的运行效率是很低的,QPS,TPS,并发等都是受限的,所以需要把很多应用服务组成一个集群,向用户提供高可用性的服务,这个时候需要 Nginx 的反向代理功能,而应用服务的动态扩容需要负载均衡功能,另外一个,Nginx 层还需要做缓存.因此反向代理服务主要是三个功能: 反向

Nginx学习笔记01Nginx简要介绍与目录说明

1.1. Nginx简要介绍 (1)Nginx是Web服务器. Apache.IIS:经典的通用Web服务器. Lighttpd.Nginx:轻量级Web服务器. Tomcat.Jetty:面向Java的Web服务器. (2)Nginx的优点. Nginx最吸引人的优点在于以下三个方面: (a)支持高并发. 单机10万并发. (b)低内存消耗.10000个非活跃连接仅消耗2.5MB内存. (c)热部署.24x7不间断服务. (3)Nginx的架构特点. (a)多进程架构:1个Master进程+N