2011-07-03 6 views

답변

0

, 그것은 막을 수 없습니다. 그러나 forever.js을 사용하면 스크립트가 충돌 할 때마다 자동으로 스크립트를 다시 시작할 수 있습니다.

1

사용 사례, 응용 프로그램 스타일 및 상태에 따라 동일한 응용 프로그램을 실행하는 여러 노드 프로세스를 시작하고 역방향 프록시 /로드 밸런서를 앞에 배치 할 수 있습니다 (예 : HAProxy). 프로세스가 충돌하는 경우로드 밸런서는 노드가 아직 재시작되지 않은 한 다른 프로세스에 새 요청을 전달합니다. 또한 다중 코어를 사용하여 성능을 향상시킵니다. 그러나 세션과 같은 공유 상태 (예 : Redis를 외부 적으로 사용)는 처리하기가 더 어려울 수 있습니다.

2

나는 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); 
} 
관련 문제