首頁 >後端開發 >php教程 >请问nginx比apache性能高为什么apache现在依然流行?

请问nginx比apache性能高为什么apache现在依然流行?

WBOY
WBOY原創
2016-06-17 08:31:03991瀏覽

回复内容:

“性能是个筐,什么都往里装”

性能好只是 IO 性能好。而 Apache 的 CPU 性能更好。

对于纯 IO 型的静态资源,显然 Nginx 更适合。

就算 Nginx 并发数再高,如果这些请求不能被及时处理,后续请求一样要排队,说白了就是吞吐不行。 谢邀

看数据说话

Apache vs. Nginx vs. Microsoft-IIS usage statistics

Usage broken down by ranking
rank 前100万的,apache使用量大于nginx
rank 前10万的,nginx使用量大于apache

从趋势看
nginx 在走高,apache在降低


在来看下官方changelog
nginx.org/en/CHANGES
从2004年10月提交0.1.0版本,功能hin弱
围观下apache zh.wikipedia.org/wiki/A
1996年就是主流了。

对于商业公司的技术选型来说,在性能没有压倒性优势的对比时候,稳定性高于一切。
在来看下 wiki Nginx 的history,流量大站是在12年以后才换成nginx。
也就是主流的流量大站换方案到现在也就4年左右。

考虑到很多流量大站的并不是技术驱动,而是商业驱动。换方案的成本。在没有压倒性优势和低成本方案的情况下。apache可以运作就够了。

对于新兴的互联网公司嘛。。 一个是io密集型,一个是计算密集型,根本无法比较,性能高这个结论从何而来? 成熟有时候比单方面的优势更为重要。 只是初学者觉得Apache流行把。业界企业没有用的



简直了,评论里人都是怎么理解的,能不能对比问题看答案。。 谢邀
因为大部分开发人员的电脑是WINDOS……
另外,现在服务器端基本都是NGINX吧? 要分使用场景 要说为何流行,要先明白这两个东西被经常按怎样的方式来运行。

Apache 很有年头了,该支持的运行模式都支持,CGI、动态编译、静态编译,你想怎样都可以,唯独架构老旧、性能不佳而令人诟病。相比而言,Nginx 作为后起之秀,在异构的模式上选择了一条路走到黑,以 FastCGI 方式运行其上的 PHP 拥有非常好的调度性能,并且因为是异构,Nginx 本身挂掉的概率也变得更小,FPM 在此时充当了冤大头,这也是目前 Nginx 的主流应用模式。

话说回来 Apache 呢,大概用它的人应该都是以动态编译的方式在各种环境中运行的吧,动态编译决定了 PHP 是以 Apache 的动态模块按同步的模式来运行的,两者相辅相成、同生共死,但凡出现什么疑难杂症,基本可以忽略 ApachePHP 中间层的问题,因为在编译时已完成合体、没什么好说的。并且,因为是同步架构,PHP 也能更直接的控制 HTTP 协议层的各种请求和响应行为,例如 PHP 直接操作输出缓冲区一秒一个字节的回显给客户端浏览器,这是 Nginx + FPM + PHP 这种异构模式所做不到的(因为 CGI 层有独立的 PHP 不可控的数据缓冲地带),同时,因为 Apache 本身也具有十分多的动态机制,例如 Rewrite 可以放在 .htaccess 内直接修改而不用重启 httpd 等等,使得 Apache 整体上对于需要弹性的运行环境天然具有更良好的操作体验,非常适合开发环境。

以上说的都是优点,再说说缺点,动态编译到一起后,httpd 每处理一次请求,可想而知后面是带着了多么大的一串资源在跑一次请求会话,一个进程运行期间的每个环节(httpd->php->exts)所占的资源,都会对同一进程的其它环节相当于上了一把互斥锁,靠后的 php 没跑完,那这个进程的 httpd 前端就别想再受理其它请求,一旦遇到高密集请求的情况,一方面是没处理完的进程各个体积臃肿滞留在内存里吃着 CPU,另一方面是新的请求要求 httpd fork 出更多子进程以应对,因果轮回,Panic 去吧。

所以,结合优缺点,以及对周围的观察,仍然使用 Apache 的可能有以下几种情况:
1、本地开发环境,需要灵活配置和机动响应,对性能不敏感;
2、性能要求不十分高、弹性需求大于性能需求的小型生产环境;
3、情怀驱使、不见性能黑洞心不死的老派人员。

其它场景还有什么,那就只剩高性能、高稳定密集型的生产环境了,这确实不是 Apache 所擅长的,不出问题则已,出问题了就是一个大型故障点、很难控制,即便你玩 mpm=worker 也不行(线程模式的 PHP 出问题只会更糟,而且它真的更容易出问题 -_,-)。Apache 架构太笨重了,Nginx 针对这个领域做了它该做的、并且做得十分出色,但是 Nginx 依然很年轻,所以 Apache 仍会在未来以它相对更深厚的沉淀在一些场景下有它的用武之处。

综上,为个人认为 Apache 老不死、死不透的一些原因,部分阐述会有片面之词,欠妥之处还望指正。 我想认真地答一次题了。

Nginx 确实适合做静态资源分发,性能确实比 Apache 比要高很多,我在 MacBook Pro 本地使用 ab 进行并发测试,单张 200KB 图片,并发量 8W 对 2W,四倍。

另一方面,Apache + mod_php 已经成熟到开箱无需配置绝大多数性能够用的场景下稳定跑 N 年不挂。nginx + PHP-FPM 说开箱即用还差得远。本地压测普通 PHP 网站,Apache 岿然不动,PHP-FPM 挂的一塌糊涂。当然,我明白这是缺乏个性配置、没有一对多负载均衡、缺少监控工具的原因,但是绝大多数的网站访问量是非常低的,在这种场景下,显然 Apache 更省事儿。

其实大家都不傻,能简单地解决问题,谁又想去不断折腾呢?Apache、Nginx 各有各的场景罢了,现在 Nginx + Apache 前后端搭配不也挺多的嘛哈哈。可怜的 PHP-PFM :-D 因为有xmap(好像是叫这个吧,是一个套餐,x忘了是什么了,m是mysql,a就是Apache,p当然是php)
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn