首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js:如何实现上线app的平滑重启?

Node.js:如何实现上线app的平滑重启?
EN

Stack Overflow用户
提问于 2011-07-03 18:28:39
回答 3查看 454关注 0票数 0

是否有可能在根本不停机的情况下创建node.js应用程序的平滑重启?

谢谢;)

EN

回答 3

Stack Overflow用户

发布于 2012-08-10 02:18:26

我采用了一种类似于PartlyCloudy的方法,但只是在同一进程上使用多个节点线程,并使用操作系统作为负载均衡器,而不是单独的。

所以我的"app.coffee“代码中有偷来的代码:

我只添加了一个"setTimeout“。在5-20秒的时间内,我的8核上可能有16个分支,而不是8个,但这对我来说比停机更好。

代码语言:javascript
复制
var childProcesses, cluster, i, numCPUs, signals, _i;

cluster = require('cluster');
numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  childProcesses = [];
  for (i in numCPUs) {
    childProcesses[i] = cluster.fork();
  }
  signals = ["SIGINT", "SIGTERM", "SIGQUIT"];
  for (i in signals) {
    process.on(signals[i], function() {

      // THIS IS WHAT KEEPS IT UP
      setTimeout(function() {
        var j;
        for (j in childProcesses) {
          childProcesses[j].kill();
        }
        process.exit();
      }, 20000);

    });
  }
  cluster.on('exit', function(worker, code, signal) {
    childProcesses.push(cluster.fork());
  });
} else {
  app.listen(3000);
}
票数 2
EN

Stack Overflow用户

发布于 2011-07-03 19:35:10

根据您的用例、应用程序风格和状态,您还可以启动多个运行同一应用程序的节点进程,并在前面放置一个反向代理/负载均衡器(即HAProxy)。在进程崩溃的情况下,只要节点尚未重启,负载均衡器就会将新请求分派到其他进程。这也通过利用多核提高了性能。然而,会话等共享状态可能更难处理(即外部使用Redis)。

票数 1
EN

Stack Overflow用户

发布于 2011-07-03 19:12:47

在你的脚本崩溃的情况下,你每次都会有停机,这是不可能防止的。但是,您可以使用forever.js在脚本崩溃时自动重新启动脚本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6562341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档