文档章节

关于Apache与Nginx的优势比较

daniel-john
 daniel-john
发布于 2014/10/13 10:10
字数 766
阅读 251
收藏 11
点赞 0
评论 2

不断有人跟我说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
web服务器该选择apache还是nginx

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

代金券优惠
05/02
0
0
网络编程的演进——从 Apache 到 Nginx

Apache Apache HTTP 服务器是 Robert McCool 在 1995 年写成,并在 1999 年开始在 Apache 软件基金会的 框架下进行开发。由于 Apache HTTP 服务器是基金会最开始的一个项目也是最为有名的一个...

xjtuhit
01/04
0
0
Nginx + Apache + Tomcat架构方式,为什么需要Apache?Apache的作用?

Nginx:一款能承受高并发的HTTP服务器,异步的,多个连接(万级别)可以对应一个进程,进行响应。基于事件驱动模型。 Nginx优点:负载均衡、反向代理、处理静态文件优势。 Apache:相对于Nginx...

Nathans
2014/11/06
8.6K
11
web服务器nginx和apache的对比分析

今天准备较详细的对比一下apache httpd与nginx两个web服务器的异同点、优缺点。由于我并不是做web开发的,所以有什么理解错误还请指出,想要了解它们是因为工作中有时候会用到它,有系统中用...

长平狐
2012/11/01
10.8K
5
Apache与Nginx的优缺点、性能比较,到底选择哪个比较好?

Apache与Nginx的优缺点、性能比较,到底选择哪个比较好? 1、nginx相对于apache的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而...

代金券优惠
05/03
0
0
51CTO专访清无:Nginx_lua的应用及性能对比

51CTO专访清无:Nginxlua的应用及性能对比 2012-07-13 10:57 小林 51CTO.com 字号:T | T 对于Web高性能服务器上的选择,这个是很多人头痛的问题。对于Apache、lighttpd、Nginx都用他们优点,...

epiclight
2015/06/01
0
0
nginx-1:安装配置nginx

Nginx: Nginx本身是一款静态WWW软件(html,js,css,jpg) 静态小文件高并发,同时占用的资源少。基于异步IO模型epoll 特点: 1、www web服务 http 80 2、负载均衡(反向反向代理proxy) ...

超级梦想家
01/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

c++ qt 组播总结

每个人都有不同的认知规律和习惯, 有的人喜欢搞一套严密的大理论, 论述起来滔滔不绝, 不管自己懂不懂, 反正读者/听者是没搞懂。 有的人喜欢从实践出发, 没看到代码, 不运行一下, 不看...

backtrackx
8分钟前
0
0
Sublime text2安装json格式化插件SublimePrettyJson[Windows]

一、下载SublimePrettyJson插件包 https://github.com/dzhibas/SublimePrettyJson 二、将下载的文件解压放到在package目录下面 C:\Users\lucky\AppData\Roaming\Sublime Text 3\Packages 每个......

lazy~
8分钟前
0
0
安装vue-cli 报4058错误

1. 4058是网络代理错误。 安装淘宝源修改一下就可以了: npm --registry https://registry.npm.taobao.org info underscore 改为cnpm执行: cnpm install --global vue-cli 安装成功: 试试版...

MrBoyce
9分钟前
0
0
CPU飙升分析

1、top -----看具体的进程 2、top -H -p pid ------该进程的线程 3、printf 0x%x 15248 ------将线程改为16进制 4、jstack 进程...

北极之北
12分钟前
1
0
新生代Eden与两个Survivor区的解释

聊聊JVM的年轻代 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我...

浮躁的码农
14分钟前
0
0
【JVM】JSTATD结合Java VisualVM进行远程监控JVM运行情况(二)

内存泄露指的是程序中动态分配内存给一些临时对象,但是对象不会被GC(java垃圾回收机制gabage collection)所回收,它始终占用内存。即被分配的对象很大但已无用; 内存溢出指的是程序运行过...

大白来袭
17分钟前
2
0
聊聊ribbon的超时时间设置

序 本文主要研究一下ribbon的超时时间设置 配置 实例 ribbon: ReadTimeout: 10000 ConnectTimeout: 10000 MaxAutoRetries: 0 MaxAutoRetriesNextServer: 1 eureka: enabled: ......

go4it
25分钟前
0
0
一行代码结果叹为观止,能做到这么极致的也只有python了

Python 这门语言非常的有趣,不仅可以做高大上的人工智能、大数据、机器学习。还可以用来做 Web、爬虫。还有其它很多的应用。今天我就给大家展示下一行 Python 代码都可以做些什么。 一行打印...

猫咪编程
29分钟前
2
0
KingShard使用

对于kingshard的功能,在git中可以看到明确的功能说明 主要功能: 1. 基础功能 支持SQL读写分离。 支持透明的MySQL连接池,不必每次新建连接。 支持平滑上线DB或下线DB,前端应用无感知。 支...

mickelfeng
31分钟前
0
0
Linux 下 查找某个字符串

如果你想在当前项目下 查找 "test" 这个字符串,可以这样: grep -rn "test" * * : 表示当前目录所有文件,也可以是某个文件名-r 是递归查找-n 是显示行号-R ...

nsns
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部