欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2024-01-03 17:07:16
...

回复内容:

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

性能好只是 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)

上一篇:

下一篇: