为什么 Apache 事件 MPM 性能不佳?
Event MPM的设计与Nginx并不完全相同,但显然是为了让keepalives更站得住脚,并更快地发送静态文件。我的理解是,事件 MPM 有点用词不当,因为:
- 尽管连接已传递到 kqueue/epoll,
- 某些非常重要的模块(如mod_gzip和mod_ssl)将阻塞/消耗线程,直到响应完成,
- 对于大文件来说,这是一个问题,但对于PHP生成的HTML文档等来说可能不是。
不幸的是,Apache不断失去市场份额,大多数基准测试都对MPM事件进行了诅咒。基准测试是否有缺陷,或者事件MPM在Nginx上真的做得那么差?即使有这些限制,在正常流量(非恶意)和较小的文件下,它应该与Nginx有一定的竞争力。例如,在慢速连接上,通过php-fpm提供PHP生成的文档应该是竞争性的,因为文档将被缓冲(即使被sl'd和gzip'd)并异步发送。使用压缩或不压缩的SSL和非SSL连接都不应该与在Nginx中在这样的工作负载上工作有意义地不同。
那么,为什么它没有在各种基准测试中大放异彩呢?这是怎么回事?或者基准测试有什么问题?一个主要网站是否将其用作对它可以执行的权威的呼吁?