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

时间:2013-01-11 22:06:13

标签: node.js amazon-web-services

我正在为我们的Web应用程序的一小部分评估nodejs,它似乎很适合。我知道这个节点很年轻并且移动速度很快,但它似乎终于进入了“准备生产类别”。然而,谷歌搜索,我在生产部署上看到的大多数信息都是一年之久,仍然警告节点可能是多么脆弱,并且可能意外地出错,然后是一些重新启动的解决方案。这并不会让我感到害怕,但似乎缺乏关于“正确的方式”将官方放在那里的官方消息。

2 个答案:

答案 0 :(得分:4)

cluster似乎是一个不错的选择,尽管取决于您的操作系统,它可能具有较差的负载平衡性能。一个非常简单的版本是这样的:

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
}

这是一个不错的选择,因为它通过重新启动死进程为您提供了一些稳定性,并为您提供了共享负载的多个进程。请注意,cluster基本上修改了server.listen,以便工作人员都在监听来自主服务器的事件,该事件正在进行监听。这就是“免费”负载平衡的来源。

可在此处找到群集文档:http://nodejs.org/api/cluster.html

如果您希望能够触发某些事件,例如杀死并重新启动所有进程,或者终止所有进程并关闭,那么主进程可能需要处理几个信号。

答案 1 :(得分:0)

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

我在我的测试环境中尝试了这一点,虽然它有效,但它并不是一个简单易用的过程。特别是我在使用虚拟私有云为我的环境配置时遇到了一些问题。此外,由于服务有点新,因此没有大量的信息和故障排除建议可以免费获得 - 当然可以通过购买亚马逊的支持来解决。

Elastic Beanstalk部署似乎确实为您提供了以下内容:

  • 如果您符合免费套餐开发环境的条件。
  • 节点应用程序和节点架构的可扩展EC2部署。
  • 跨环境的一致部署(即dev,test,uat,production)。
  • 监测。
  • 部署的重复能力和自动化。