如何通过Java Web服务获得Nginx的优势

时间:2013-07-18 21:44:03

标签: java php apache nginx

在过去的几年里,我为我的服务器使用了Apache httpd服务器。

据我所知 - 使用Nginx的最大优势是Apache为每个HTTP请求打开一个不同的线程 - 这可能会非常快速地加载我的服务器,而Nginx使用其他一些技术(事件驱动)以获取最大值我服务器的内存和硬件。

到目前为止一切顺利。

我正在构建一个新的Web服务,我希望有大量的HTTP流量,所以我决定使用Nginx。

作为一名优秀的Java程序员,我更喜欢Java而不是PHP,但在我的情况下使用它有一个概念问题:

在所有帖子中,我发现在其上使用Java的方法是使用Nginx + Tomcat(或其他JavaServer)+ Java包装应用程序 - 所以,如果我理解正确 - 我将无法获得Nginx的优势因为Tomcat将为每个请求打开一个新线程,以便使用Java Web服务。

问题:

  1. 我理解正确吗?
  2. 在PHP中使用Nginx是否为每个请求打开了一个新进程,而不是新的线程?

2 个答案:

答案 0 :(得分:1)

  1. 你理解正确。在这种情况下,nginx充当反向代理,tomcat充当应用服务器。在大多数情况下,瓶颈出现在应用程序级别:应用程序本身的应用程序服务器。
  2. PHP使用进程没有线程来执行请求,每个请求都需要一个php-cgi进程来处理,只有当这个请求完成时,该进程才会被释放来处理其他请求。对于php-fpm,它通常预先分叉许多子进程,比如池,我们需要根据真实的QPS和机器状态来计算这个池的大小。

答案 1 :(得分:0)

是的,你得到了正确的,你在这里做的是在tomcat上面放一个额外的层,所以你不会得到优势,你将获得的唯一优势是提供资产(图像和静态文件)没有将它们传递给apache,这可能会带来一些优势。

为什么php有这个优势:因为当使用nginx而不是运行php作为apache(mod_php)的模块时,我们安装了一个单独的服务器php-fcgi或php-fpm,所以它独立于apache生成worker或thread的方法管他呢。