nginx软件的动态访问瓶颈有哪些?Linux云计算

    /    2019-03-13

1 与其他软件的对比

先来看看Apache软件的特点,如下

·  Apache2.2版本非常稳定强大,据官方说,Apache2.4版本性能更强。

·  Prefork模式取消了进程创建开销,性能很高。

·  处理动态业务数据时,因关联到后端的引擎和数据库,瓶颈不在Apache上。

·  高并发时消耗系统资源相对多一些。

·  基于传统的select模型,高并发能力有限。

·  支持扩展库,可通过DSOapxs方法编译安装额外的插件功能,不需要重新编译Apache

·  功能多,更稳定,更安全,插件也多。

·  市场份额在逐年递减

再来看看Nginx软件的特点,如下:

· 基于异步网结I/O 型(epollk kqueue

· 具备支持高性能,高并发的特性,并发连接可达数万。

· 对小文件(小于1 MB的静态文件)高并发支持很好,性能很高

· 不支持类似 ApacheDSO模式、扩展库必须编译进主程序(缺点)

· 进程占用系统资源比较低。

· 支持Web、反向ProxyCache三大重点功能,幷且都很优秀。

· 市场份额在逐年快速增加。

最后是Lighttpd的特点,如下:

·  基于异步网络 I/ O模型,性能、并发都与 Nginx相近。

·  扩展库是 SO模式,比Nginx灵活

·  目前国内的使用率比较低,安全性没有 ApacheNginx好。

·  通过插件(mod_secdownload)可实现文件 URL地址加密(优点)

·  社区不活跃,市场份额较低,

最主要的区别(select & epoll

        NGINX 使用的是epoll 和Kqueue 异步网络I/O模型,而apache使用的是传统的select模型

比喻:

第一个比喻:

       假设你在大学读书,住的宿舍楼有很多房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友到各房间挨个去找,直到找到你为止。而epoll版宿管大妈会先记下每位入住同学的房间号,你的朋友来找你时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满宿舍楼找人了。如果同时来了100个人,都要找自己住这栋楼的同学,select版和epoll版宿管大妈,谁的效率更高,就很明显了。

第二个比喻:

        select的调用复杂度是线性的,即O(n)。举个例子,一个保姆照看照看一群孩子,如果把孩子是否需要尿尿比作网络I/O事件,select的作用就好比这个保姆挨个询问每个孩子"你要尿尿吗?”如果孩子回答是,保姆则把孩子领出来放到另外一个地方。当所有孩子询问完之后,保姆领着这些要尿尿的孩子去上厕所(处理网络I/O事件).在epoll机制下,保姆不再需要挨个询问每个孩子是否需要尿尿。取而代之的是,如果孩子需要尿尿,他就自己主动站到事先约定好的地方,而保姆的职责就是查看事先约定好的地方是否有孩子。如果有小孩,则领着孩子去上厕所(网络事件处理)。因此,epoll的这种机制,能够高效地处理成千上万的并发连接,并且性能不会随着连接数増加而下降太多。

3 apache selectnginx epoll技术对比图

指标

select

epoll

性能

随着连接数的增加性能急剧下降。处理成千上万的并发连接数,性能很差

随着连接数的增加,性能基本上没有下降。处理成千上万连接时性能很好

连接数

连接数有限制,处理的最大连接数不超过1024,如果要处理的连接数超过1024个,则需要修改FD_SETSIZE宏,并重新编译

连接数无限制

内在处理机制

线性轮询

回调callback

开发复杂性


(2)

分享至