JavaScript 기반 개발 플랫폼인 Node.js는 개발자가 JavaScript를 사용하여 서버 측 애플리케이션을 구축할 수 있도록 지원합니다. 단일 스레드, 이벤트 기반 아키텍처는 여러 스레드나 프로세스의 오버헤드 없이 수많은 동시 요청을 효율적으로 관리하는 핵심 강점입니다.
장점에도 불구하고 Node.js의 단일 스레드 특성에는 한계가 있습니다.
해결책은? Node.js의 Master-Worker 패턴(클러스터 모드라고도 함) 이 분산 시스템 설계에서는 여러 작업자 프로세스를 감독하는 마스터 프로세스를 사용합니다. 주인은 작업자를 관리하고 모니터링하고 작업자는 개별 작업을 처리합니다.
Node.js는 Master-Worker 구현을 위해 cluster
모듈을 활용합니다. 이 모듈은 여러 하위 프로세스 생성을 단순화하고 제어 및 프로세스 간 통신을 위한 메커니즘을 제공합니다. 분석 내용은 다음과 같습니다.
cluster
모듈을 가져와서 현재 프로세스가 마스터인지 워커인지 확인합니다.cluster.fork()
를 사용하여 작업자 프로세스를 생성하고 이벤트 리스너를 연결하여 상태와 메시지를 모니터링합니다.process.send()
을 통해 마스터와 통신합니다.이 기본 예는 cluster
모듈을 보여줍니다.
<code class="language-javascript">const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.log(`Master ${process.pid} is running`); // Spawn workers. for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died`); }); } else { // Workers share a TCP connection (e.g., HTTP server). http .createServer((req, res) => { res.writeHead(200); res.end('Hello from Worker!'); }) .listen(8000); console.log(`Worker ${process.pid} started`); }</code>
마스터 프로세스는 마스터인지 확인합니다(cluster.isMaster
사용). 그렇다면 CPU 코어 수와 동일한 작업자를 생성합니다. 각 작업자는 자체 메모리와 V8 인스턴스를 갖춘 독립적인 프로세스입니다. 작업자는 HTTP 서버를 설정하고 요청을 수신합니다. exit
이벤트는 작업자 충돌을 처리하여 마스터가 작업자를 다시 시작할 수 있도록 합니다.
Nginx를 역방향 프록시 및 로드 밸런서로 사용하여 여러 Node.js 프로세스에 요청을 분산함으로써 확장성을 강화합니다.
Nginx 구성 예:
<code class="language-nginx">http { upstream node_cluster { server 127.0.0.1:8000; server 127.0.0.1:8001; server 127.0.0.1:8002; # ... more Node.js processes } server { listen 80; location / { proxy_pass http://node_cluster; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } }</code>
Nginx는 node_cluster
에 나열된 Node.js 프로세스 간에 요청을 균등하게 분배합니다.
요약하자면 cluster
모듈을 사용하여 구현된 Node.js의 Master-Worker 패턴은 다중 프로세스 애플리케이션을 구축하고 성능과 안정성을 향상시키는 간단하면서도 강력한 방법을 제공합니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 호환
무제한 무료 프로젝트 배포
뛰어난 비용 효율성
간소화된 개발자 작업 흐름
손쉬운 확장성과 고성능
문서에서 자세히 알아보세요!
X에서 우리를 팔로우하세요: @LeapcellHQ
저희 블로그에서 자세한 내용을 읽어보세요
위 내용은 NodeJS의 마스터-작업자 패턴: 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!