不断有人跟我说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的,该好好反思了。

转载于:https://www.cnblogs.com/yaowukonga/p/3795585.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. Java常用四大线程池用法以及ThreadPoolExecutor详解
  2. 1.1.1 概念、组成、功能和分类
  3. 每日一皮:我当程序员的时候也是...
  4. Android Studio一直Download fastutil-x.x.x.jar
  5. POJ 1743 (后缀数组+不重叠最长重复子串)
  6. 日语学习-多邻国-时间
  7. 线上阿里云mysql慢_MySQL · 案例分析 · RDS MySQL线上实例insert慢常见原因分析-阿里云开发者社区...
  8. java 旅游网站项目实现_基于jsp的旅游网站a-JavaEE实现旅游网站a - java项目源码
  9. 使用FreeImage保存彩图,灰度图
  10. [读书笔记] 有效竞品分析
  11. E1--千兆以太网接口测试应用2022-09-07
  12. html学生项目总结反思,小学月考总结与反思(精选10篇)
  13. 利用GATK4.1 mutect2寻找体细胞突变(SNV和INDEL)
  14. 无法连接到服务器。错误代码 0x80072EFD
  15. deepin-wine
  16. 凌动z3735f运行64位linux,在z3735上装ubuntu,装完的经验
  17. 不要让回忆有负疚感——职业规划法则一
  18. ajax提交用流的方式,ajax 请求 后台返回的文件流
  19. 【厚积薄发系列】C++项目总结16—单例模式释放时机导致的崩溃问题分析
  20. 深度原创丨当互联网巨头从云端“抄底” BI 和大数据...

热门文章

  1. ViewPager使用讲解
  2. 笔记︱虚拟变量回归=差异显著(方差分析)+差异量化(系数值)
  3. Oracle11g创建表空间、创建用户、角色授权、导入导出表以及中文字符乱码问题
  4. 统计自然语言处理基础——学习摘要(1)
  5. gatling系列教程(翻译)-第三节(快速开始)
  6. 转:Java NIO系列教程(一)Java NIO 概述
  7. C# 关键字--using
  8. Beyond Compare可以进行二进制比较
  9. cordova构建项目命令小结
  10. Lucene中的一些基本概念