Node.js Cluster 모듈 개요 및 활용
Source
Evernote/ancom21c's notebook/NodeJS 클러스터(cluster)에 대한 정리.md
Summary
Node.js는 V8 엔진의 메모리 제한(32bit 512MB, 64bit 1.5GB)으로 인해 단일 프로세스의 성능에 한계가 있다. 이를 극복하기 위해 cluster 모듈을 사용하여 다중 프로세스(워커)를 생성하고 병렬 처리하며, 포트 공유를 통해 웹 애플리케이션의 부하를 분산한다. child_process와의 차이점은 cluster가 로드밸런싱과 포트 공유를 지원한다는 점이다. 주요 기능으로는 스케줄링 정책 설정(SCHED_RR 권장), 마스터/워커 역할 구분, IPC를 통한 프로세스 간 통신, 그리고 graceful shutdown을 통한 무중단 서비스(Zero Down-time) 구현이 있다. 일반적으로 CPU 코어 수만큼 워커를 생성하는 것이 성능상 최적이다.
Key Points
- Node.js 단일 프로세스는 V8 엔진의 메모리 제한으로 인해 다중 프로세스 아키텍처가 권장됨
- cluster 모듈은 포트 공유와 로드밸런싱을 지원하여 웹 서버 부하 분산에 적합함 (v0.12 이상 Round-Robin 권장)
- child_process.fork()는 단순 병렬 실행용, cluster는 로드밸런싱/포트 공유가 필요할 때 사용
- 마스터는 워커 생성/관리만 담당하고, 워커는 실제 비즈니스 로직을 수행하는 구조 권장
- 마스터와 워커는 IPC(Inter-Process Communication)를 통해 메시지 송수신이 가능함
- 워커에게 종료 메시지를 보내고 graceful shutdown 처리하면 무중단 서비스(Zero Down-time) 구현 가능
- 성능 최적화를 위해 일반적으로 CPU 코어 수(os.cpus())만큼 워커를 생성함