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

  不管是Nginx还是Squid这种反向代理,其网络模式都是事件驱动。事件驱动其实是很老的技术,早期的select、poll都是如此。后来基于内核通知的更高级事件机制出现,如libevent里的epoll,使事件驱动性能得以提高。事件驱动的本质还是IO事件,应用程序在多个IO句柄间快速切换,实现所谓的异步IO。事件驱动服务器,最适合做的就是这种IO密集型工作,如反向代理,它在客户端与WEB服务器之间起一个数据中转作用,纯粹是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

【转】关于Apache与Nginx的优势比较相关推荐

  1. 转:关于Apache与Nginx的优势比较(经典)

    不断有人跟我说Nginx比Apache好.比Apache快之类.Nginx更主要是作为反向代理,而非Web服务器使用.我翻译过一本关于反向代理的技术书籍,同时精通Apache API开发,对Nginx ...

  2. 谈谈varnish、squid、apache、nginx缓存的对比

    1.Squid,很古老的反向代理软件,拥有传统代理.身份验证.流量管理等高级功能,但是配置太复杂.它算是目前互联网应用得最多的反向缓存代理服务器,工作于各大古老的cdn上. 2.Varnish是新兴的 ...

  3. Apache与Nginx的优缺点比较

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

  4. Apache与nginx的优缺点对比

    本篇文章给大家分享的是有关Apache与nginx的优缺点对比,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧.  一.apache相对于n ...

  5. Apache与Nginx网络模型

    Nginx的高并发得益于其采用了epoll模型,与传统的服务器程序架构不同,epoll是linux内核2.6以后才出现的.下面通过比较Apache和Nginx工作原理来比较. 传统Apache都是多进 ...

  6. Linux之Apache与Nginx的对比比较:并发性能 消耗机器资源 处理静态资源 模块 稳定性

    nginx相对于apache的优点 轻量级,同样起web 服务,比apache 占用更少的内存及资源  抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx ...

  7. 转: 三大WEB服务器对比分析(apache ,lighttpd,nginx) (2008年的旧文,仅供参考之用)...

    from:  http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html 三大WEB服务器对比分析(apache ,lighttp ...

  8. Web服务(Apache、Nginx、Tomcat、Jetty)与应用(LAMP、CMS-WordPressGhost、Jenkins、Gitlab)

    Web服务和应用是目前信息技术领域的热门技术.如何使用Docker来运行常见的Web服务器(包括Apache.Nginx.Tomcat等),以及一些常用应用(LAMP.CMS等).包括具体的镜像构建方 ...

  9. Tomcat结合Apache、Nginx实现高性能的web服务器

    一.Tomcat为什么需要与apache.nginx一起结合使用? Tomcat虽然是一个servlet和jsp容器,但是它也是一个轻量级的web服务器.它既可以处理动态内容,也可以处理静态内容.不过 ...

最新文章

  1. 【Linux】一步一步学Linux——id命令(94)
  2. Effective C++ 条款44
  3. with 关键字实现递归查询
  4. 手动写sonar plugin 一直File is not a plugin.
  5. HP LaserJet 1010卡纸解决方法
  6. MyBatisPlus_删除篇_入门试炼_04
  7. 《剑指offer》第三十五题(复杂链表的复制)
  8. 程序员需要学习太多数学知识吗?
  9. Spring Security学习
  10. Android ROM 制作教程
  11. WordPress中文SEO优化建议
  12. 峰值信噪比公式_关于 PSNR (Peak Signal-to-Noise Ratio) 峰值信噪比的个人理解
  13. MarkDown快捷教程
  14. appcan外部网页css,Appcan开发之页面布局与CSS排版
  15. python算积分蒙特卡罗_python编程通过蒙特卡洛法计算定积分详解
  16. 迄今为止见过最好的职业规划
  17. LibreOffice/Calc:单元格设置下拉菜单
  18. quick-cocos 3.5 lua banding c++
  19. Win11打字不显示选字框怎么办?Win11打字不显示选字框的解决方法
  20. Python滚动条如果滚不动

热门文章

  1. 常考的 21 条 Linux 命令
  2. Spring Cloud 2020.0.4 发布!
  3. 2021年6月程序员工资排行榜,南京这是怎么了?有啥大动作吗?
  4. 大厂,常用,四款,大屏可视化工具
  5. Mybatis 强大的结果映射器ResultMap
  6. 赫夫曼树建立c语言源程序编译结果详细解释,c语言构建哈夫曼树(附运行结果图)[本站推荐]...
  7. win10安装jdk1.8
  8. MultiResUNet笔记
  9. 深度学习推理时融合BN,轻松获得约5%的提速
  10. Missing key(s) in state_dict