Node.js
특징
- Node.js는 싱글 스레드(Thread)로 동작하고, 단일 CPU 코어에서 실행됨
- 이는 서버의 CPU가 멀티 코어(8, 16 코어 등)여도 단 하나의 코어만 사용함
Cluster
특징
- CPU 코어를 모두 활용하여 병렬 처리 작업이 가능케 해주는 Node.js 모듈
- CPU 당 하나의 Worker 생성 (기본값)
- Master 와 Worker 로 구성되며, Master 는 Worker 를 관리함
- Master 가 죽는 경우 모든 Worker 는 죽게됨
- 아래와 같은 번들 플러그인이 제공됨
- cli : 클러스터를 관리할 수 있는 명령창
- debug : 클러스터에 대한 디버깅 정보
- logger : Master, Worker 로그
- pidfiles : Master, Worker pidfiles 쓰기
- reload : 파일 변경 시 작업자를 다시 로드
- repl: 실시간 관리 수행
- stats: repl 플러그인에 실시간 통계 추가
예제 코드
- app.js
var http = require('http');
module.exports = http.createServer(function(req, res){
console.log('%s %s', req.method, req.url);
var body = 'Hello World';
res.writeHead(200, { 'Content-Length': body.length });
res.end(body);
});
- server.js
var cluster = require('cluster')
, app = require('./app');
cluster(app)
.use(cluster.logger('logs'))
.use(cluster.stats())
.use(cluster.pidfiles('pids'))
.use(cluster.cli())
.use(cluster.repl(8888))
.listen(3000);
PM2
특징
- *로드 밸런서가 내장된 Node.js 애플리케이션용 프로덕션 프로세스 관리자
- 어플리케이션을 영구적으로 유지하고 일반적인 시스템 관리 작업을 용이하게 할 수 있음
- 클러스터 모드 : 여러 프로세스를 시작하고 이들 사이에서 HTTP/TCP/UDP 쿼리를 로드 밸런싱하여, 전체 성능(16코어 시스템에서 10배)과 안정성(처리되지 않은 오류의 경우 더 빠른 소켓 재조정)이 향상됨
* 클러스터 모드는 Node.js 의 Cluster Module 을 통해 동작함
- 무중단 서비스 : Hot Reload를 사용하면 다운타임 없이 어플리케이션을 업데이트 할 수 있음
- 프로그램의 예상치 못한 종료 시 자동 재시작을 지원함
- 표준, 원시, JSON 및 형식화된 로그 지원 및 모니터링 도구를 지원함
PM2 프로세스 관리창 [3]
※ 로드 밸런서란?
: 서버에 가해지는 부하를 적절하게 분산해주는 장치나 기술을 의미한다. 예를들어 서버 A, B, C 는 1초당 100 의 작업량을 소화할 수 있다 가정하고 서버에 180 의 작업량이 부과됐다면 로드밸런서는 전체 작업량을 나눠 각 서버당 작업량을 60 씩 할당하여 나누어 처리하는 것이다.
설치 방법
npm install pm2 -g
사용 방법
- 앱 시작
$ pm2 start app.js
또는 다른 응용프로그램을 실행할 경우
$ pm2 start bashscript.sh
$ pm2 start python-app.py --watch
$ pm2 start binary-file -- --port 1520
- 프로세스 관리
$ pm2 restart <파일명 | 네임스페이스 | 아이디 | 'all' | json 파일명>
$ pm2 reload <파일명 | 네임스페이스 | 아이디 | 'all' | json 파일명>
$ pm2 stop <파일명 | 네임스페이스 | 아이디 | 'all' | json 파일명>
$ pm2 delete <파일명 | 네임스페이스 | 아이디 | 'all' | json 파일명>
- 클러스터 모드
$ pm2 start <파일명 | 네임스페이스 | 아이디 | 'all' | json 파일명> -i <프로세스 개수>
만약 4개의 CPU를 사용하여 실행하려는 경우
pm2 start app.js -i 4
모든 CPU를 사용하고 싶다면 'max' 혹은 -1 사용
pm2 start app.js -i max
pm2 는 미리 지정해둔 설정값 파일(.json)로도 실행할 수 있음
- setting.json
{
apps : [{
script : "app.js",
instances : "max",
exec_mode : "cluster"
}]
}
아래와 같이 실행함
pm2 start setting.json
- 로그 표시
실시간으로 로그를 표시할 경우
$ pm2 logs
이전 로그 기록을 보려는 경우
$ pm2 logs --lines 200
- 터미널 기반 대시보드
Here is a realtime dashboard that fits directly into your terminal
$ pm2 monit
# Reference
[1] npmjs, package/cluster 0.7.7
URL : https://www.npmjs.com/package/cluster
[2] docker + PM2 + winston.js를 활용한 무중단 운영 시스템 구축하기
URL : https://loy124.tistory.com/388
[3] npmjs, package/pm2 5.1.2
URL : https://www.npmjs.com/package/pm2
[4] keymetrics, pm2 documentation
URL : https://pm2.keymetrics.io/docs/usage/quick-start
[5] Tistory, short-term, PM2의 Cluster mode는 어떻게 동작할까요?
URL : https://short-term.tistory.com/6
'Programming > JS & TS' 카테고리의 다른 글
[Javascript] Skill up (0) | 2022.01.12 |
---|---|
[Back-End] Node.js 에서 환경 변수 파일을 사용하려면? (0) | 2022.01.06 |
[Back-End] Web 운영을 위한 로그 관리 (0) | 2022.01.05 |
[Back-End] 이메일 프로토콜 (SMTP, IMAP, POP) & Nodemailer 사용법 (0) | 2022.01.04 |
[Javascript] '...' (Triple dots) 문법이란 (0) | 2021.12.23 |
댓글