是否有可能在根本不停机的情况下创建node.js应用程序的平滑重启?
谢谢;)
发布于 2012-08-10 02:18:26
我采用了一种类似于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);
}发布于 2011-07-03 19:35:10
根据您的用例、应用程序风格和状态,您还可以启动多个运行同一应用程序的节点进程,并在前面放置一个反向代理/负载均衡器(即HAProxy)。在进程崩溃的情况下,只要节点尚未重启,负载均衡器就会将新请求分派到其他进程。这也通过利用多核提高了性能。然而,会话等共享状态可能更难处理(即外部使用Redis)。
发布于 2011-07-03 19:12:47
在你的脚本崩溃的情况下,你每次都会有停机,这是不可能防止的。但是,您可以使用forever.js在脚本崩溃时自动重新启动脚本。
https://stackoverflow.com/questions/6562341
复制相似问题