서버 용량 산정 계산기 쉽게 이해하기 — 개념과 원리
용량 산정은 최대 트래픽을 여유 있게 처리하면서 서버 한 대가 빠져도 서비스가 버티려면 서버(또는 컨테이너, 인스턴스)가 몇 대 필요한지를 정하는 일입니다. 이 계산기는 최대 부하, 서버 한 대의 처리 능력, 여유율, N+x 이중화 수를 합쳐 필요한 서버 대수를 정수로 알려 줍니다.
계산 방법
서버 수 = ⌈최대 부하 ÷ (서버당 처리 능력 × (1 − 여유율 ÷ 100))⌉ + x
- 최대 요청/초: 하루 평균이 아니라 예상되는 가장 높은 지속 부하입니다.
- 서버당 처리 능력: 목표 응답 시간을 지키면서 한 대가 처리하는 요청/초로, 부하 시험으로 측정하는 것이 가장 좋습니다.
- 여유율: 순간 부하와 지연에 대비해 비워 두는 비율입니다. 30%는 각 서버를 최대 70%까지만 쓰겠다는 뜻입니다.
- N+x: 서버 x대가 고장 나거나 점검 중이어도 남은 N대로 최대 부하를 감당하기 위한 예비 대수입니다.
- ⌈ ⌉는 올림입니다. 서버를 소수점 단위로 둘 수는 없기 때문입니다.
원리
사용률을 100% 가까이 올리면 위험합니다. 대기행렬 이론에 따르면 사용률이 가득 찰수록 대기 시간이 가파르게 늘어나, 작은 트래픽 변동에도 응답 시간이 크게 튑니다. 여유율은 각 서버를 안정적인 구간에 머물게 합니다. 올림은 목표치를 소수점만큼 놓치지 않게 해 주고, 예비 서버는 올림 뒤에 더합니다. 고장 난 서버의 몫 전체를 넘겨받으려면 예비 서버도 온전한 한 대여야 하기 때문입니다.
예제 풀이
- 입력값은 최대 2,000 요청/초, 서버당 300 요청/초, 여유율 30%, N+1입니다.
- 서버 한 대의 실사용 능력은 300 × (1 − 0.30) = 210 요청/초입니다.
- 기본 대수는 2,000 ÷ 210 = 9.52이므로 올려서 10대입니다.
- 예비 1대를 더하면 10 + 1 = 11대입니다.
| 서버 1대가 처리하는 요청/s | 필요한 서버 수 |
|---|---|
| 75 | 40 |
| 150 | 21 |
| 225 | 14 |
| 300 | 11 |
| 375 | 9 |
| 450 | 8 |
| 600 | 6 |
결과 해석
11대가 2,000 요청/초를 나누면 한 대당 약 182 요청/초로, 시험한 능력의 약 61%로 운영됩니다. 한 대가 고장 나도 남은 10대가 약 200 요청/초씩 처리하므로 210 한도 아래에 머뭅니다. 트래픽 전망, 코드 성능, 인스턴스 종류가 바뀌면 다시 계산하고, 서버를 더 두는 비용과 장애 비용을 함께 비교하십시오.
흔한 실수
- 최대 부하 대신 평균 부하를 넣는 경우
- 실제 업무가 아닌 제조사 벤치마크 수치를 서버당 능력으로 쓰는 경우
- 데이터베이스, 캐시, 로드 밸런서 같은 공용 병목을 빠뜨리는 경우
- 모든 서버를 한 랙이나 한 가용 영역에 몰아 두어 한 번의 사고로 여러 대를 잃는 경우
자주 묻는 질문
여유율은 얼마나 두어야 하나요?
트래픽 변동 폭과 증설 속도에 따라 다릅니다. 자동 확장이 빠른 팀은 더 높은 사용률로 운영하기도 합니다.
N+1이면 충분한가요?
소규모 클러스터에서는 흔한 기준이지만, 규모가 크거나 여러 영역에 걸친 서비스는 N+2나 영역 하나 전체를 잃는 경우를 대비합니다.
자동 확장을 쓰면 이 계산이 필요 없나요?
아닙니다. 최소·최대 대수와 새 인스턴스가 뜨는 동안 부하를 받아 낼 용량은 여전히 정해야 합니다.
출처: J. D. C. Little, A Proof for the Queuing Formula: L = λW, Operations Research 9(3), 1961 · B. Beyer 외 편, Site Reliability Engineering, O'Reilly Media, 2016