node.js 응용 프로그램을 가동 중단없이 원활하게 다시 시작할 수 있습니까?Node.js : 시작한 앱을 "부드럽게"다시 시작하려면 어떻게해야하나요?
감사합니다) 당신이 매번 다운 타임이있을 것이다 스크립트의 충돌의 경우
node.js 응용 프로그램을 가동 중단없이 원활하게 다시 시작할 수 있습니까?Node.js : 시작한 앱을 "부드럽게"다시 시작하려면 어떻게해야하나요?
감사합니다) 당신이 매번 다운 타임이있을 것이다 스크립트의 충돌의 경우
, 그것은 막을 수 없습니다. 그러나 forever.js을 사용하면 스크립트가 충돌 할 때마다 자동으로 스크립트를 다시 시작할 수 있습니다.
사용 사례, 응용 프로그램 스타일 및 상태에 따라 동일한 응용 프로그램을 실행하는 여러 노드 프로세스를 시작하고 역방향 프록시 /로드 밸런서를 앞에 배치 할 수 있습니다 (예 : HAProxy). 프로세스가 충돌하는 경우로드 밸런서는 노드가 아직 재시작되지 않은 한 다른 프로세스에 새 요청을 전달합니다. 또한 다중 코어를 사용하여 성능을 향상시킵니다. 그러나 세션과 같은 공유 상태 (예 : Redis를 외부 적으로 사용)는 처리하기가 더 어려울 수 있습니다.
나는 PartlyCloudy와 비슷한 접근법을 사용했지만 동일한 프로세스에서 다중 노드 스레드를 사용하고 별도의 부하 분산 장치 대신 OS를 부하 분산 장치로 사용했습니다.
나는 단지 "의 setTimeout을"추가 :
은 그래서에서 도난 내 "app.coffee"코드에서 코드가 있습니다. 5 ~ 20 초 동안 8 개 대신 8 개의 코어에 16 개의 포크가있을 수 있지만 다운 타임보다 나을수록 좋습니다.
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);
}