在php/ruby​​/etc + nginx上使用node.js + node http server有什么好处?

riz*_*oro 1 javascript php nginx node.js

我看到很多文档说node.js http服务器的主要优点是io架构,但是Nginx也经常使用io,所以使用node.js + node http server OVER php或其他语言与Nginx有什么优势?

j p*_*mel 8

任何答案的核心应该是声明'这取决于你想要做什么'.所以例如你可能会试图......

  • 在聊天室中支持10k并发客户端
  • 每月服务1M个静态页面
  • 为3k用户提供类似CMS的功能
  • 提供一个简单的博客类型网站,由小型企业使用
  • 支持数百万用户的重量级系统,如游戏
  • 建立一个消费者银行网站
  • 等等..

人们普遍认为,人们应该选择合适的技术来解决手头的问题 - 任何关于将一种技术与另一种技术相结合的优点的讨论,无论它们是否固有地处理事件IO,没有上下文都将具有有限的价值.任何决策过程.

在您的技术堆栈决策中另一个极具影响力的因素是可用于实现项目目标的技能和经验.

然而...

使用了您所指的所有技术后,我将举例说明我们认为已解决的问题以及选择某些配置的原因:

PHP + Nginx

是的PHP阻止了,但这并不是Facebook和其他人使用它作为核心Web应用程序语言的任何障碍.在更传统的LAMP堆栈中,A是Apache,你有一个众所周知且长期存在的问题,它可能在高流量条件下出现,你可能在入站到Apache的Web请求和连接到Apache的连接之间创建了一对一的关联.数据库.如果您需要为超过1000个并发客户端提供服务,并且您的数据库有1000个连接限制,我预计您将遇到困难.

这种资源匮乏为超载条件下的用户创造了一种突破性的体验.

在这种情况下,Nginx可以为您带来更大的收益,因为事件IO解除了Web请求和出站PHP数据库连接之间的相关性.有很多文献可以证实这一点.请记住,这不是魔术 - 这是通过如何配置NGinx和PHP - 您可以通过启用默认值轻松地挂起自己.

假设已经考虑了配置,NGinx的事件IO具有缓冲请求的净效果,以数据库可以处理的速率将它们分配给PHP.

PHP应用程序广泛使用Memcached等缓存来进一步支持读取繁重系统中的大量数据.

Node.js(纯HTTP)

我们为其支持的生产解决方案选择Node.js的原因是

  • 它不是关键任务(Node.js是新的,因此您不希望在其上运行您的银行系统)
  • 我们想要轻量级的东西
  • 我们想学习和实验 - 通常这个标准在许多商业系统中是不允许的

Node的新颖性以及它对IO编程概念的微妙意味着我们破坏了很多次,而且我们花费了更长时间才能使最终解决方案比我们坚持使用PHP更加方便.

Web应用程序的框架有点处于初期阶段

  • Express.js
  • Socketstream
  • Backbone.js的
  • 也许其他人......

考虑到他们的年轻程度,他们仍然在进行着非常多的工作.根据您要为项目实现的目标,它们可能会为您提供良好的服务,或者在您学习它们时耗费时间和精力.

例如,在Express.js中,简单的事情,如处理HTTP缓存标头,内容的GZIPing并不完全是标准的,所以如果这种东西是必不可少的,你将不得不开始制作定制的解决方案或寻找其他地方.

与NGinx或Apache不同,Node.js安装或使用它构建的应用程序没有任何原生功能可确保它在运行级别中启动.这意味着你必须找出一些解决方案来管理重启时的应用程序自动启动,以及其他恢复,使用Node.js之外的东西.(我们使用Monit)

Node.js + NGinx

你敢打赌,为什么不呢?NGinx更加成熟,因为我们需要在将它们转移到Node.js之前终止SSL连接,这就是我们所做的.额外的好处是现在NGinx可以通过GZIP内容.