【问题标题】:How to get Ngnix advantages with Java webservice如何利用 Java Web 服务获得 Nginx 的优势
【发布时间】:2013-07-18 21:44:02
【问题描述】:

在过去的几年里,我使用 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 是否会为每个请求打开一个新进程,而不是一个新线程?

【问题讨论】:

    标签: java php apache nginx


    【解决方案1】:
    1. 您理解正确。在这种情况下,nginx 充当反向代理,tomcat 充当应用服务器。大多数时候,瓶颈出现在应用层面:应用本身的应用服务器。
    2. PHP使用进程而不是线程来执行请求,每个请求都需要一个php-cgi进程来处理,只有当这个请求完成后,才会释放该进程来处理其他请求。对于php-fpm来说,它通常会预先fork很多子进程,就像一个pool,我们需要根据机器的真实QPS和stat来计算这个pool的大小。

    【讨论】:

      【解决方案2】:

      是的,你没看错,你在这里做的是在 tomcat 之上放置一个额外的层,所以你不会获得优势,你将获得的唯一优势是服务资产(图像和静态文件)不将它们传递给 apache,这可能会带来一点优势。

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

      【讨论】:

      • 好的,所以为了清楚起见,当使用 PHP 时,每个请求都会有不同的处理,但不是不同的线程?
      • 就像我说的它取决于库和它的配置,例如我使用php5-fpm,它确实会产生多个进程(在需要时),但每个进程可以同时处理不同的用户,因此进程数将远低于请求数。
      • @MohammadAbuShady: 使用 Nginx + tomcat 是否有利(使用 nginx 2 到 3 个 tomcat 服务器进行负载平衡)?
      • 1个nginx和2到3个tomcat?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 2011-11-15
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多