Hello, Android!

클러스터 본문

Node

클러스터

lwndnjs93 2021. 2. 6. 17:58

cluster모듈을 사용하게 디면, 싱글 프로세스로 동작하는 노드가

CPU의 코어를 모두 사용할 수 있게 된다

같은 포트를 공유하는 노드 프로세스를 여러개 두어

대량의 요청이 들어왔을때 분산 처리가 가능하여

서버에 부담을 덜어줄수 있다

 

전반적인 모습은 스레드를 사용했을때와 비슷한 모습이다

하지만 이번에는 스레드가 아닌 cpu의 코어 수 만큼의 워커 프로세스가 만들어진다

 

실행시 마스터 프로세스이기 때문에 numCPUs 코어의 수 만큼 cluser에 

워커 프로세스를 만든 뒤 exit 이벤트가 올때까지 기다린다

exit 이벤트의 콜백 함수 에서 worker, code, signal을 받으며 각각

 

- worker : 워커 프로세스

 

- code : 워커 프로세스가 종료되었을때 종료 코드

process.exit으로 종료하는 경우 exit의 매개변수를 출력한다

 

- signal : 프로세스를 종료시킨 시그널의 이름

 

만들어진 워커 프로세스들은 else에서 같은 포트의 서버를 만들어

클라이언트의 요청에 응답하게 된다

응답으로부터 1초 뒤 프로세스를 죽여

exit 이벤트를 발생시키게 하였다

프로세스의 수 만큼 요청을 보내면 더이상 워커 프로세스가 없어 응답하지 않는다

 

이와같이 클러스터를 사용하게 되면 예기치 못한 오류로 인해 서버가 멈추는 것을 막을수 있다

하지만 스레드는 서로 메모리 공유가 가능하지만, 프로세스간의 메모리 공유는 높은 비용이 필요하다

 

cluster 모듈의 속성, 메서드

- disconnect() : 모든 작업의 연결을 끊는다

 

- exitedAfterDisconnect : 워커가 .kill()또는 .disconnect()로 종료된 경우 true

다른 방법으로 종료된 경우 false

아직 살아있으면 undefined를 반환한다

 

- fork() : master에서 새로운 워커를 만든다

 

- id : 워커의 고유 id

 

- isConnected() : 워커가 마스터 프로세스에 연결되어 있으면 true 아니면 false를 반환한다

disconnect 이벤트가 발생하면 연결이 끊어진다

 

- isDead() : 워커 프로세스가 종료된 경우 true 살아있으면 false를 반환

 

- isMaster : 해당 프로세스가 마스터이면 true 아니면 false 반환

 

- isWorker : 해당 프로세스가 워커인 경우 true 아니면 false 반환

 

- kill() : 워커 프로세스를 죽인다

워커 프로세스를 정상적으로 연결 해제하려고 시도하기 때문에 연결 해제까지 무한대기에 빠질수 있다

무한대기에 빠지면 정상적인 연결 해제가 발생하지 않기때문에

정상적이지 않은 연결 해제가 필요한 경우 worker.process.kill()을 사용

 

- process : 전역 자식 프로세스를 반환

 

- schedulingPolicy : 프로세스들의 스케쥴링 정책을 설정한다 전역 설정이며 첫번째 워커가 생성되거나

setupMaster()가 호출되면 둘 중 먼저 실행되는 시점에 고정된다

윈도우를 제외한 모든 운영체제에서는 라운드로빈 스케쥴링이 기본값이다

 

- send() : 마스터는 특정 워커에게, 워커에서는 마스터에게 메세지를 보낸다

message 이벤트에서 메세지 수신이 가능하다

 

nodejs.org/api/cluster.html#cluster_worker_process

'Node' 카테고리의 다른 글

express에서의 라우팅과 미들웨어  (0) 2021.02.08
npm pakage.json  (0) 2021.02.08
쿠키와 세션  (0) 2021.02.05
RESTful서버  (0) 2021.02.04
http서버  (0) 2021.02.03