Nginx 与 PHP 合并部署与分开部署 哪种性能更好一些?Nginx 和 Apache 在 Windows 下的性能表现谁更好?

jackxiang 2012-12-20 23:12 | |
两台服务器, 两种情况:
1. 两台都同时部署 nginx + php-fpm
2. 一台部署nginx 一台部署 php-fpm, nginx将php请求反向代理给后面的 php-fpm 服务器

我的看法是:
第一种,配置在一起,虽然看似两台nginx可以承载更多的请求,但是由于nginx与php之间 tcp端口,CPU,Mem资源的争抢,很容易造成 nginx timeout, can't connect等错误,看似nginx收到了很多请求,但php正常处理返回的其实并没那么多。
第二种,资源分开,灵活性更高,nginx快速代理,php快速处理,可承载的有效并发会更高一些,高并发时,系统也会更稳定一些。

请问大家,以上两种情况,哪种可承载的有效并发会高一些?为什么? 大家平时会使用哪一种?

第一种好
nginx做haproxy保证高可用
nginx通过unix socket连接到后端的phpfpm,同时一台机器上面可以启用多个phpfpm进程(端口),保证充分利用资源

nginx不是瓶颈,phpfpm才是。

来自:http://www.zhihu.com/question/20030832

Nginx 和 Apache 在 Windows 下的性能表现谁更好?
nginx 的高性能依赖于 Linux 2.6 内核的 epoll [1] 或是 BSD 内核的 kqueue [2] 提供高效的网络套接字状态轮询服务【时间复杂度为 O(1) 】。在没有这两个服务的内核上则退化成为性能低下的 select 【*nix, Windows 都有、时间复杂度为 O(n) 】. Windows 没有 epoll 和 kqueue,nginx 在 Windows 上用 select 表现自然不佳。

Windows 上类似 epoll/kqueue 的服务是 I/O Completion Ports [3]【Solaris 上也有】,理论上讲是比 epoll 更加先进的服务,因为它同时支持套接字、文件、管道【kqueue 类似】,而 epoll 不支持文件。也就是说不能用 epoll 做本地文件的异步 I/O。但不幸的是没有成熟的开源网络服务器使用 I/O Completion Ports。

Apache 的性能不好一概而论。它有好多种模式,主要的两种是:1、prefork 使用的是多进程 [4];2、 worker 使用得是多进程+多线程 [5]。Windows NT 平台上线程的效率比较高【进程的效率则相对 *nix 下低】,所以使用多线程模式性能更优。Apache 还有个专门为 NT 优化的模式 [6],用的是单进程+多线程。

至于说多线程同步 I/O 相对于使用 epoll/kqueue 异步 I/O 两种方式孰优孰劣,有兴趣的朋友可以参考我在另外一个问题的回答 [7]。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/5865/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2012-12-20 23:14
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]