文档章节

关于Apache与Nginx的优势比较

daniel-john
 daniel-john
发布于 2014/10/13 10:10
字数 766
阅读 257
收藏 11

不断有人跟我说Nginx比Apache好、比Apache快之类。Nginx更主要是作为反向代理,而非Web服务器使用。我翻译过一本关于反向代理的技术书籍,同时精通Apache API开发,对Nginx和Apache的工作原理都略有了解,粗谈一下看法。

  不管是Nginx还是Squid这种反向代理,其网络模式都是事件驱动。事件驱动其实是很老的技术,早期的select、poll都是如此。后来基于内核通知的更高级事件机制出现,如libevent里的epoll,使事件驱动性能得以提高。事件驱动的本质还是IO事件,应用程序在多个IO句柄间快速切换,实现所谓的异步IO。事件驱动服务器,最适合做的就是这种IO密集型工作,如反向代理,它在客户端与WEB服务器之间起一个数据中转作用,纯粹是IO操作(io操作不会阻塞进程),自身并不涉及到复杂计算。反向代理用事件驱动来做,显然更好,一个工作进程就可以run了,没有进程、线程管理的开销,CPU、内存消耗都小。

  所以Nginx、Squid都是这样做的。当然,Nginx也可以是多进程 + 事件驱动的模式,几个进程跑libevent,不需要Apache那样动辄数百的进程数。Nginx处理静态文件效果也很好,那是因为静态文件本身也是磁盘IO操作,处理过程一样。至于说多少万的并发连接,这个毫无意义。我随手写个网络程序都能处理几万的并发,但如果大部分客户端阻塞在那里,就没什么价值。

  再看看Apache或者Resin这类应用服务器,之所以称他们为应用服务器,是因为他们真的要跑具体的业务应用,如科学计算、图形图像、数据库读写等。它们很可能是CPU密集型的服务,事件驱动并不合适。例如一个计算耗时2秒,那么这2秒就是完全阻塞的,什么event都没用。想想MySQL如果改成事件驱动会怎么样,一个大型的join或sort就会阻塞住所有客户端。这个时候多进程或线程就体现出优势,每个进程各干各的事,互不阻塞和干扰。当然,现代CPU越来越快,单个计算阻塞的时间可能很小,但只要有阻塞,事件编程就毫无优势。所以进程、线程这类技术,并不会消失,而是与事件机制相辅相成,长期存在。

  总结之,事件驱动适合于IO密集型服务,多进程或线程适合于CPU密集型服务,它们各有各的优势,并不存在谁取代谁的倾向。再盲目的言之Nginx可以取代Apache的,该好好反思了。


本文转载自:http://www.php100.com/html/itnews/PHPxinwen/2012/0103/9606.html

共有 人打赏支持
daniel-john
粉丝 17
博文 132
码字总数 56017
作品 0
其他
程序员
加载中

评论(2)

daniel-john
daniel-john

引用来自“梦函”的评论

通常将apache+php不如nginx+php,因为应用服务器由php去了嘛
应用服务器由php去了是什么意思?
梦函
梦函
通常将apache+php不如nginx+php,因为应用服务器由php去了嘛
Magento 主机web server 的选择

我们安装Magento时, 都希望自己的Magento网站能运行飞快的, 在这就有着一个linux web程序的选择,下面是一些关于web server 的比较 server Apache Nginx Lighttpd Proxy代理 非常好 非常好...

rio
2010/05/07
0
0
Apache vs Nginx:基于实践经验的比较(外文翻译)

原文地址:Apache vs Nginx: Practical Considerations 简介 Apache和Nginx是世界上两个最流行的开源web服务器,他们一起支撑了互联网上超过50%流量。他们两个都支持多种负载模式并且可以和其...

我在睡觉
2016/11/10
0
0
Nginx中log变量及Tengine的log_unescape

Nginx变量 Nginx的log模块是很多人做日志输出的首选切入点。 Nginx默认语法写入服务器本地路径或NFS,用于以后的汇总分析;在此基础上,Tengine增强了日志目标,可以通过组合管道功能或syslo...

Lax
2013/12/27
0
0
Apache 与 Nginx 比较

Nginx 轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apac...

pcdog
08/13
0
0
web服务器该选择apache还是nginx

PHP小白必知: web服务器该选择apache还是nginx? 一、apache与nginx的区别: 1、二者最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可...

代金券优惠
05/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
1
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部