Apache与Nginx

来源:互联网 发布:windows下开发ios 编辑:程序博客网 时间:2024/06/03 21:26

理论:

Nginx

轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源。
抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。
nginx 处理静态文件好,静态处理性能比 apache 高三倍以上。
nginx 的设计高度模块化,编写模块相对简单。
nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃。
nginx 作为负载均衡服务器,支持 7 层负载均衡。
nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器。
启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级。
社区活跃,各种高性能模块出品迅速。

Apache

apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache。
apache 发展到现在,模块超多,基本想到的都可以找到。
apache 更为成熟,少 bug ,nginx 的 bug 相对较多。
apache 超稳定。
apache 对 PHP 支持比较简单,nginx 需要配合其他后端用。
apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。
apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区。

总结
两者最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程。
一般来说,需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑 apache ,后者的各种功能模块实现得比前者,例如 ssl 的模块就比前者好,可配置项多。epoll(freebsd 上是 kqueue ) 网络 IO 模型是 nginx 处理性能高的根本理由,但并不是所有的情况下都是 epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的 select 模型或许比 epoll 更高性能。当然,这只是根据网络 IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。
更为通用的方案是,前端 nginx 抗并发,后端 apache 集群,配合起来会更好。

实测

nginx动态文件处理能力差?
这是我最困惑的地方,在google了nginx之后发现它的评价并没有想象中那么差劲,并且很多公司已经开始用nginx+PHP(fast-cgi)作为主流web服务器,于是我决定亲自试一试。

测试环境:
web服务器:192.168.0.235双核(Intel(R) Xeon(TM) CPU 3.00GHz)
测试客户端:192.168.30.149双核(Pentium(R) Dual-Core CPU E5200 @ 2.50GHz)

测试工具:
webbench-1.5 ,这里为何不用ab命令,因为测试时发现,在高并发下,ab命令可能会失败,在任务没有完成时,强制终止。所以我们要有一个容错的工具来进行测试。

直接进入主题:
a、首先来看一下静态文件的处理性能比较:
①处理数据量比较
这里写图片描述
x轴:并发量
y轴:每秒钟的数据处理量(byte/sec)
这里不过多解释,nginx的静态处理能力完胜apache。

②出错率比较
这里写图片描述
x轴:并发量
y轴:出错率(%)
nginx 出错率一直保持在%1左右,而apache表现处理不稳定性。

b、下面是我们最关心的动态文件处理性能比较:
①同样来看一下数据处理量比较
这里写图片描述
可以看出nginx的动态文件处理能力并不比apache差!!!
② 出错率比较
这里写图片描述
根据出错率来看,nginx明显低于apache,总的观察看来nginx无论是动态处理能力还是静态处理能力,都比apahce要强劲很多。

也许你有以下问题:

1.有人说nginx+fast-cgi不够稳定?
这个事实可以证实,目前新浪博客、新浪播客、网易新闻、腾讯网、搜狐博客等门户网站频道,六间房、56.com等视频分享网站,Discuz!官方论坛、水木社区等知名论坛,盛大在线、金山逍遥网等网络游戏网站,豆瓣、人人网、YUPOO相册、金山爱词霸、迅雷在线等新兴Web 2.0网站均用nginx做web服务器。

2.我们的系统已经很稳定了,为什么还要冒风险来用nginx做动态处理?
网站的系统架构犹如逆水行舟,不进则退。随着业务增长,谁不希望更多的消费者呢?怎样创造一个满意的环境给消费者?之前的测试完全是在nginx没有优化的前提下完成的,而在优化后Nginx 0.8.46 + PHP 5.2.14 (FastCGI)可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。这点每一个加班监控系统的兄弟们都会有感触吧。

最后附上一些数据:
这里写图片描述

参考链接:http://blog.csdn.net/jcjc918/article/details/46665919
参考链接:http://blog.csdn.net/lengzijian/article/details/7699444

3 0
原创粉丝点击