繁体   English   中英

Node.js:如何创建启动应用程序的“平滑”重启?

[英]Node.js: How to create “smooth” restart of launched app?

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

谢谢;)

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

所以我的“app.coffee”代码中有代码被盗:

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

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);
}

根据您的用例、应用程序样式和状态,您还可以启动多个节点进程运行同一个应用程序并在前面放置一个反向代理/负载均衡器(即 HAProxy)。 如果一个进程崩溃,负载均衡器就会将新的请求分派给其他进程,只要节点还没有重新启动。 这还通过利用多个内核来提高性能。 然而,诸如会话之类的共享状态可能更难处理(即在外部使用 Redis)。

如果您的脚本崩溃,您每次都会有停机时间,这是无法防止的。 但是您可以使用forever.js在脚本崩溃时自动重新启动脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM