代码之家  ›  专栏  ›  技术社区  ›  Morgan Cheng

nginx应该与支持异步编程模型的语言结合吗?

  •  1
  • Morgan Cheng  · 技术社区  · 14 年前

    我发现互联网上有很多比较nginx和apache的文章。然而,所有这些比较都是基于运行PHP代码的Web服务器的压力测试。我想这主要是由于Apache通常使用PHP作为LAMP架构进行部署。

    据我所知,nginx是为了解决 C10K problem 基于事件的架构。也就是说,nginx应该为m个并发请求提供n个线程/进程。n应该比m小得多。这与需要m个线程/进程来服务m个并发请求的Apache大不相同。

    对于PHP代码,编程模型不是异步的。每个Web请求将占用一个线程/进程,以便PHP处理它。所以,我不理解将nginx和apache与php代码进行比较的意义。

    nginx的基于事件的体系结构必须优于apache,特别是当请求涉及I/O操作时。例如,请求需要合并来自多个其他Web服务的结果。对于apache+php,每个请求可能需要几秒钟的时间等待I/O操作完成。这将消耗大量的线程/进程。对于nginx,如果使用异步编程,这不是问题。

    使用支持异步编程模型的语言部署nginx是否更有意义?

    我不确定哪种编程语言可以从nginx挖掘出最大的潜力,但它肯定不是php。

    2 回复  |  直到 14 年前
        1
  •  1
  •   rzab    14 年前

    首先,nginx不直接支持任何应用程序执行。 它可以服务于静态文件,代理请求到任何其他Web服务器和其他一些小东西。 历史上,nginx旨在处理许多网络连接,是的,但其基本原理是: 在Apache响应慢速连接的请求之前,它什么也做不了。 Apache的工作人员是有限的,所以当有很多速度较慢的客户机时,任何新客户都必须等到 工人完成转移并继续接受新请求。 所以经典的设置是nginx接受外部请求,将它们代理到本地apache; Apache处理请求并返回对nginx的响应,以便传输到客户机。 因此,Apache不再与客户打交道。

    关于图片中的问题和nginx。利用起来并不难 这些天的系统事件框架。这是Linux的epoll,freebsd的kqueue 以及其他。在应用程序级别有很多选择,对于python来说, 例子。所以你所要做的就是用这些框架编写应用程序, 其中1)通常将您置于异步世界,2)为您提供一种方法 要构建HTTP服务,准备好成为nginx的后端。 这可能就是你的目标所在。

    所以,C10K对nginx来说似乎不是问题, 也不适用于围绕这些框架构建的应用程序。 例如FriendFeed的Tornado服务器: python编写,根据系统使用epoll和kqueue, 我记得,可以轻松处理高达8K的问题。有一些基准 后来又想进一步扩大规模。

    Ruby世界一定在酝酿关于所有异步趋势的东西, 如果还没有,他们可以想出办法。 鲁比的乘客和混血儿,不管在埃森斯他们是什么(我想知道这一点)。 使用nginx,这需要为nginx编写模块。 因此,社区将nginx考虑在内,并在需要时做额外的工作。

    顺便说一句,当WebSockets大规模部署时,php与push保持相关。哦,好吧。

        2
  •  0
  •   46bit    14 年前

    关键是潜力无关紧要。PHP是Web开发的一个标准,人们通常关心的是服务器,所以只是因为ngnix或apache经过优化,可以运行一种模糊的编程语言。 y 比另一个快一倍是无关紧要的,除非它是PHP。