nodejs cluster를 분석해보자
서론
nodejs에는 cluster모드가 있다.
cluster모드를 쉽게 지원해주는 pm2 라이브러리를 이용해서 사용 해 보겠습니다.
다음은 테스트 목록이다.
- 포트가 중복된 경우 (같은 프로젝트는 어차피 같으니 서로 다른 프로젝트라고 가정)
- 이 상황에서 cluster모드와 pork모드의 차이
본론
cluster모드를 실행하기 위해서 미리 같은 port를 사용하고, return 값만 다른 3개의 폴더를 서로 다른 프로젝트라고 가정하고 준비 해 놓았습니다.
폴더 dist, dist2, dist3
결과 난 1이야, 난 2이야, 난 3이야
일단 pm2로 cluster모드를 사용하기 위해서 명령어를 입력해줍니다.
pm2 start dist/main.js -i 1
pm2 start dist2/main.js -i 1
pm2 start dist3/main.js -i 1
모두 정상 작동이 됩니다.
그런데 node dist/main.js 로 실행하면 port 충돌로 에러가 납니다.
pork모드를 사용한 pm2 실행 명령어도 마찬가지 입니다.
하지만 cluster모드로 실행한 저 3개의 프로세스는 모두 잘 동작하고 있습니다.
여기서 cluster모드를 사용하면 내부적으로 로드밸런서를 생성 한 후에, 프로세스마다 서로 다른 임시port를 발급 해주는걸 유추 해 볼 수 있습니다.
자 그럼 cluster모드에 로드밸런서를 이용해주기 위하여 확인을 해봅시다.
postman을 열어서 테스트를 해줍니다.
그런데 1, 2, 3이 번갈아가면서 나오는게 아니라 3만 나오는게 아닙니까?
여기서 원인을 생각 해 보니, 두가지가 나옵니다.
- 로드밸런싱을 지원하지 않는다
- 부하가 걸렸을때만 로드밸런싱을 이용한다.
일단 jmeter를 이용하여 부하를 걸어보도록 하겠습니다.
설정은 아래와 같습니다.
아래는 결과 값입니다.
|
|
|
|
|---|
결론
- cluster모드는 포트가 중복되도 에러가 나지 않는다.
- 로드밸런싱은 부하가 걸렸을때만 동작한다.
이상입니다.