로드밸런싱— [트래픽 증가를 대처하는 방법 1]

QQQ
nodejs backend
Published in
3 min readMar 25, 2021

백엔드 입장에서 트래픽 증가를 대처하는 방법을 하나하나 알아보려 합니다.

#목차
1.
로드 밸런싱 (pm2/ nginx 등) [ NOW ]
2. 캐싱
3. 데이터베이스 분햘, 샤딩, 읽기전용 복제본
4. 모니터링
5. 부하 테스트
6. 마이크로 서비스

Chapter 1. 로드 밸런싱

“요청을 여러 백엔드 서버로 네트워크 트래픽을 분산시키는 것”

로드 밸런서가 하는 일

크게 3가지 입니다.
1. 클라이언트의 요청을 여러 대의 서버로 분산시킵니다.
2. 온라인 상태인 서버에만 요청을 전송하여 신뢰성과 고가용성을 줍니다.
3. 수요에 따라(요청의 양에 따라) 서버를 추가하거나 제거할 수 있는 유연성을 제공해줍니다. — from NGINX 링크

보통의 로드 밸런서는 “Round Robin 알고리즘”을 이용하기 때문에 특별한 우선순위 없이 유저/클라이언트의 요청을 들어오는 순서대로 처리합니다.

PM2

PM2를 이용한 로드 밸런싱은 정말 쉽습니다.

기존에 pm2로 서버를 실행시키던 방식에서 아주 조금만 설정하면 됩니다.

기존에는 $ pm2 start app.js 형태로 서버를 실행시켰다면 pm2 start app.js -i max 로 “-i max” 만 추가하면 서버가 돌아가는 머신의 cpu 갯수만큼 프로세스가 생성됩니다.

pm2 start app.js -i max

혹은 pm2 설정 파일을 따로 만들어 두어 실행때마다 정해진 설정에 맞춰 실행하게 할 수도 있습니다.

// pm2.config.js
module.exports = {
app: [{
script: "app.js",
instances: "max", // max는 최대의 cpu 갯수, cpu갯수만큼 숫자로 입력해도
}] // 됩니다. ex. "instances: 1" 1개의 프로세스만 생성
}

$ pm2 start pm2.config.js 실행하면 아래처럼 cpu갯수만큼 프로세스가 실행됩니다.

PM2를 이용하여 아주 간단하게 로드밸런서를 구성했습니다.

PM2는 작업 가능한 프로세스로 알아서 판별한 후 요청을 전달합니다. 사실 PM2는 node.js의 cluster module을 바탕으로 만들어져있습니다. 그래서 node.js와 함께 이용하기 엄청 쉽습니다.

다음 챕터: “2. 데이터베이스 분햘, 샤딩, 읽기전용 복제본” (예정)

--

--