콘텐츠로 이동

부하 분산 방식 및 알고리즘

1. 정적 부하 분산 방식 (Static Load Balancing)

서버의 현재 상태보다는 미리 정해진 규칙에 따라 요청을 배분하는 방식입니다.

라운드 로빈 (Round Robin)

  • 원리: 각 서버에 순차적으로 요청을 하나씩 할당합니다. 모든 서버에 요청을 다 보내면 다시 처음으로 돌아갑니다.
  • 장점: 가장 쉽고 흔하게 사용됩니다.
  • 전제 조건: 모든 서버의 사양(성능)이 동일하고, 각 요청이 서버에 주는 작업량이 일정해야 효과적입니다.

가중 라운드 로빈 (Weighted Round Robin)

  • 원리: 서버마다 처리 능력에 따라 가중치를 부여합니다. 가중치가 높은 서버가 더 많은 트래픽을 받습니다.
  • 활용 사례: * 서버들의 하드웨어 성능이 서로 다를 때.
  • 카나리 배포(Staging): 새 버전의 서버 한 대에만 낮은 가중치를 주어 적은 트래픽으로 테스트한 뒤 점진적으로 확대할 때 유용합니다.

소스 IP 해시 (Source IP Hash)

  • 원리: 사용자의 IP 주소를 해시 함수에 넣어 나온 결과값에 따라 특정 서버로 연결합니다.
  • 장점: 동일한 사용자는 항상 동일한 서버로 연결되므로 세션 유지(Sticky Session)가 가능합니다.
  • 활용 사례: 장바구니 정보 유지, 비디오/오디오 스트리밍 시 캐시 데이터 활용 등 연속성이 필요한 경우.

2. 정적 부하 분산 방식의 주요 단점

정적 방식의 가장 큰 문제는 "서버의 실제 상태를 실시간으로 고려하지 않는다"는 점입니다. 이로 인해 다음과 같은 부작용이 발생할 수 있습니다.

자원 불균형 및 과부하 위험

  • 내용: 모든 요청이 동일한 자원을 소모한다고 가정하지만, 실제로는 단순 조회(GET)와 복잡한 계산/쓰기(POST) 요청의 부하가 다릅니다.
  • 결과: 라운드 로빈 방식을 사용할 경우, 특정 서버에만 무거운 작업이 몰려도 부하 분산 장치는 이를 인지하지 못하고 계속 요청을 보냅니다. 결국 특정 서버만 과부하가 걸리는 현상이 발생합니다.

연쇄적 오류 (Cascading Failure) 발생

  • 내용: 특정 서버가 과부하로 인해 응답 불능 상태가 되면, 부하 분산 장치는 해당 서버를 클러스터에서 제외합니다.
  • 결과: 죽은 서버가 처리해야 했던 트래픽이 남은 서버들로 전가됩니다. 남은 서버들 역시 늘어난 부하를 견디지 못하고 차례로 다운되면서, 결국 시스템 전체가 마비되는 최악의 상황으로 이어질 수 있습니다.

서버 성능 차이 반영의 한계

  • 내용: 가중 라운드 로빈으로 어느 정도 보완은 가능하지만, 서버의 CPU 점유율이나 메모리 상태가 급격히 변하는 상황에는 대처할 수 없습니다.
  • 결과: 설정된 가중치는 고정되어 있기 때문에, 서버 환경이 유동적인 클라우드 환경 등에서는 효율적인 자원 배분이 어렵습니다.

소스 IP 해시의 편중 현상

  • 내용: 특정 IP 대역에서 대량의 트래픽이 유입될 경우(예: 대규모 기업이나 학교 네트워크), 해시 결과값이 특정 서버로 몰릴 수 있습니다.
  • 결과: 특정 서버만 비정상적으로 바빠지는 '핫스팟' 현상이 생겨도 세션 유지를 위해 해당 서버로만 트래픽을 보내야 하므로 유연한 대처가 불가능합니다.

요약하자면: 정적 방식은 "실제 서버가 얼마나 바쁜지(작업량)"를 적극적으로 살피지 않기 때문에, 복잡한 서비스 환경에서는 시스템의 안정성을 해칠 위험이 큽니다.


3. 동적 부하 분산 방식 (Dynamic Load Balancing)

서버의 실제 작업량과 상태를 실시간으로 모니터링하여 최적의 서버를 선택합니다.

최소 연결 (Least Connections)

  • 원리: 현재 활성화된 네트워크 연결 수가 가장 적은 서버로 요청을 보냅니다.
  • 특징: 연결이 많다는 것은 해당 서버가 바쁘다는 의미이므로, 상대적으로 한가한 서버에 일을 더 많이 줍니다.

가중 응답 시간 (Weighted Response Time)

  • 원리: 부하 분산 장치가 서버에 주기적으로 상태 확인(Health Check)을 보내 응답 시간을 측정합니다.
  • 특징: 응답이 빠른 서버는 가중치를 높게, 응답이 느린(바쁜) 서버는 가중치를 낮게 조절하여 트래픽을 분산합니다.

에이전트 기반 모니터링 (Agent-based)

  • 원리: 각 서버에 특별 요원(Agent) 프로그램을 설치하여 CPU, 네트워크, 디스크, 메모리 사용량 등을 실시간으로 수집합니다.
  • 특징: 부하 분산 장치가 가장 정교하고 최적화된 판단을 내릴 수 있게 해줍니다.