설정
upstream backend {
server 127.0.0.1 weight=5;
server 127.0.0.2 weight=3;
server 127.0.0.3 weight=4;
server 127.0.0.4;
}
Nginx의 upstream에서 weight 값을 지정하면 해당 비율에 가깝게 요청이 분산된다. 별도로 weight를 지정하지 않은 서버는 기본값인 1로 동작한다.
위 설정의 전체 가중치는 5 + 3 + 4 + 1 = 13이다. 따라서 요청 수가 충분히 많아질수록 각 백엔드로 전달되는 요청은 대략 5:3:4:1 비율에 가까워진다.
결과
| Target | 100회 투입 | 200회 투입 | 500회 투입 | 1500회 투입 |
|---|---|---|---|---|
| Backend #1 | 38 | 76 | 188 | 565 |
| Backend #2 | 23 | 47 | 120 | 360 |
| Backend #3 | 31 | 61 | 151 | 455 |
| Backend #4 | 8 | 16 | 41 | 120 |
실험 결과도 설정한 가중치와 거의 비슷한 분포를 보인다. 예를 들어 1500회 요청 기준으로 보면 Backend #1은 약 565회, Backend #2는 약 360회, Backend #3은 약 455회, Backend #4는 약 120회를 처리했다. 이는 각각 가중치 5, 3, 4, 1에 대응하는 비율과 대체로 일치한다.
다만 요청 수가 적을 때는 라운드 로빈 과정에서 약간의 차이가 발생할 수 있다. 따라서 가중치 기반 분산이 의도대로 동작하는지 확인할 때는 100회처럼 작은 표본만 보기보다, 500회 또는 1500회처럼 충분한 횟수로 테스트하는 편이 더 안정적이다.