Node.js 将节点部署到AWS的生产部署的当前最佳实践是什么

Node.js 将节点部署到AWS的生产部署的当前最佳实践是什么,node.js,amazon-web-services,Node.js,Amazon Web Services,我正在为我们的web应用程序的一小部分评估nodejs,它似乎非常适合。我知道node很年轻,而且移动速度很快,但它似乎终于进入了“准备生产类别”。然而,在谷歌上搜索,我看到的关于生产部署的大多数信息都有一年的历史了,并且仍然警告说节点是多么脆弱,可能会意外出错,然后是一些重启的解决方案。这本身并没有吓跑我,但似乎缺乏关于“正确的方式”的官方说法来可靠地将节点放置在那里。集群似乎是一个不错的选择,尽管根据您的操作系统,它可能具有较差的负载平衡性能。一个非常简单的版本如下: var cluster

我正在为我们的web应用程序的一小部分评估nodejs,它似乎非常适合。我知道node很年轻,而且移动速度很快,但它似乎终于进入了“准备生产类别”。然而,在谷歌上搜索,我看到的关于生产部署的大多数信息都有一年的历史了,并且仍然警告说节点是多么脆弱,可能会意外出错,然后是一些重启的解决方案。这本身并没有吓跑我,但似乎缺乏关于“正确的方式”的官方说法来可靠地将节点放置在那里。

集群似乎是一个不错的选择,尽管根据您的操作系统,它可能具有较差的负载平衡性能。一个非常简单的版本如下:

var cluster = require('cluster')

if(cluster.isMaster) {
  var i, worker, workers;
  for(i = 0;i < numWorkers;i++) {
    worker = cluster.fork();
    workers[worker.process.pid] = worker;
  }
  cluster.on("exit", function(deadWorker) {
    delete workers[deadWorker.process.pid];
    worker = cluster.fork();
    workers[worker.process.pid] = worker;
  });
}
else {
  //be a real server process
}
var cluster=require('cluster'))
if(cluster.isMaster){
变量i,工人,工人;
对于(i=0;i
这是一个很好的选择,因为它通过重新启动死机进程为您提供了一些稳定性,并且为您提供了多个共享负载的进程。请注意,
cluster
基本上修改了server.listen,以便工作人员都在侦听来自主服务器的事件,而主服务器正在进行侦听。这就是“免费”负载平衡的来源

群集文档可在此处找到:


如果您希望能够触发某些事件,例如终止并重新启动所有进程,那么让主进程处理几个信号也是值得的,或者停止所有进程并关闭。

我目前正在将node.js应用程序投入生产,以实现一个高度可扩展的社交媒体应用程序。为了创建一个非平凡的部署解决方案,我目前正在使用AWS Elastic Beanstalk。节点AWS文档可在此处找到[http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.html].

我已经在我的测试环境中尝试过这个方法,尽管它有效,但它不是一个简单或易于遵循的过程。特别是,我在使用虚拟私有云进行环境配置时遇到了一些问题。此外,由于这项服务有点新,免费提供的信息和故障排除建议不多——当然可以通过从亚马逊购买支持来解决

弹性Beanstalk部署似乎为您提供了以下功能:

  • 如果您有资格使用免费的分层开发环境
  • 针对节点应用程序和节点体系结构的可扩展EC2部署
  • 跨环境(即开发、测试、uat、生产)的一致部署
  • 监测
  • 重复部署的功能和自动化

我也想听听这方面的情况。我听说过使用forever来运行节点,但仅此而已。这被标记为实验性的。你有在生产中使用这个的经验吗?@RussellLeggett是的,我在Trello()上工作,它使用
集群
,方式与此非常相似。我们已经使用它一年多了,我们看到的唯一问题(关于
集群
)是我在帖子中提到的负载平衡问题。@RussellLeggett我相信“稳定性:实验性”指的是节点版本之间的API稳定性,而不是运行稳定性,但我可能是错的。当然,API稳定性——这是有道理的。将它与“永远”脚本结合起来是有道理的,还是不会有主脚本崩溃的风险?