오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-01 02:52
관리 메뉴

우노

[Network] 로드밸런싱 알고리즘 종류 본문

Network & Security/Concept

[Network] 로드밸런싱 알고리즘 종류

운호(Noah) 2023. 5. 21. 21:07

부하 분산 알고리즘

  • 로드 밸런서가 리얼 서버로 부하를 분산할 때, 로드 밸런서에서는 사전에 설정한 분산 알고리즘을 통해 부하 분산이 이루어집니다.
  • 기본적인 부하 분산 알고리즘은 5가지 종류가 있습니다.
    • 라운드 로빈(Round Robin)
      • 현재 구성된 장비에 부하를 순차적으로 분산함
      • 총 누적 세션 수는 동일하지만 활성화 된(처리 중인) 세션 수는 달라질 수 있음
    • 최소 접속 방식(Least Connection)
      • 현재 구성된 장비 중 가장 활성화 된(처리 중인) 세션 수가 적은 장비로 부하를 분산함
    • 가중치 기반 라운드 로빈(Weighted Round Robin)
      • 라운드 로빈 방식과 동일하지만 각 장비에 가중치를 두어 가중치가 높은 장비에 부하를 더 많이 분산함
      • 처리 용량이 다른 서버에 부하를 분산하기 위한 분산 알고리즘
    • 가중치 기반 최소 접속 방식(Weighted Least Connection)
      • 최소 접속 방식과 동일하지만 각 장비에 가중치를 부여해 가중치가 높은 장비에 부하를 더 많이 분산함
      • 처리 용량이 다른 서버에 부하를 분산하기 위한 분산 알고리즘
    • 해시(Hash)
      • 해시 알고리즘을 이용한 부하 분산
  • 이 밖에도 기본적인 부하 분산 알고리즘을 응용한 다양한 부하 분산 알고리즘이 사용되고 있지만 ,
  • 가장 많이 사용되는 3가지 알고리즘에 대해서만 더 자세히 살펴보겠습니다.

라운드 로빈(Round Robin)

  • 라운드 로빈 방식은 특별한 규칙 없이 현재 구성된 장비에 순차적으로 돌아가면서 트래픽을 분산하는 방식입니다.
    • 즉, 서버 세 대가 있을 때, 첫 번째 요청은 1번 서버, 두 번째 요청은 2번 서버, 세 번째 요청은 3번 서버, 네 번째 요청은 다시 1번 서버로 할당합니다.
    • 순차적으로 모든 장비에 분산하므로 모든 장비에 누적 된 세션 수는 같아집니다.

최소 접속 방식(Least Connection)

  • 최소 접속 방식은 서버가 가진(처리 중인) 세션 부하를 확인해 그것에 맞게 부하를 분산하는 방식입니다.
  • 로드 밸랜서에서는 서비스 요청을 각 장비로 보내줄 때마다 세션 테이블이 생성되므로, 각 장비에 연결된 현재 세션 수를 알 수 있습니다.
  • 따라서, 최소 접속 방식은 각 장비의 세션 수를 확인해, 현재 세션이 가장 적게 연결된 장비로 서비스 요청을 보내는 방식입니다.
  • 서비스별로 세션 수를 관리하면서 분산해주므로, 각 장비에서 처리되는 활성화 세션 수가 비슷하게 분산 됩니다.

해시(Hash)

  • 해시 방식은 서버의 부하를 고려하지 않고, 클라이언트가 같은 서버에 지속적으로 접속하도록 하는 부하 분산 방식입니다.
  • 서버의 상태를 고려하지 않고, 해시 알고리즘을 이용해 얻은 결괏값을 기반으로 어떤 장비에 부하를 분산할지 결정합니다.
  • 따라서, 같은 알고리즘을 사용한다면 항상 동일한 결괏값을 가지고 서비스를 분산할 수 있습니다.
  • 이때 알고리즘 계산에 사용되는 값들을 지정할 수 있는데,
  • 주로 출발지 IP 주소, 목적지 IP 주소, 출발지 서비스 포트, 목적지 서비스 포트를 사용합니다.

결론

  • 라운드 로빈이나 최소 접속 방식은 비교적 비슷한 비율로 부하를 분산시킬 수 있다는 장점이 있습니다.
  • 하지만, 동일한 출발지로부터 로드 밸런서를 거친 서비스 요청이 처음에 분산된 서버와 그 다음에 분산된 서버가 달라질 수 있습니다.
  • 따라서, 각 서버에서 세션을 유지해야 하는 서비스는 정상적으로 서비스되지 않습니다.
  • 그와 반대로, 해시 방식은 알고리즘을 통해 계산한 값으로 서비스를 분산하므로 항상 동일한 장비로 서비스가 분산됩니다.
  • 따라서, 세션을 유지해야 하는 서비스에 적합한 분산 방식입니다.
  • 하지만, 알고리즘의 결괏값이 특정한 값으로 치우치게 되면, 부하 분산 비율이 한쪽으로 치우치게 될 수도 있습니다.
  • 최근에는 이런 경우가 별로 없지만, 서버 애플리케이션 개발에 여러 대의 서버가 사용될 것을 고려하지 않고 개발한 경우, 이 방식을 사용해야 합니다.
  • 흔히 이런 문제를 장바구니 문제라고 하는 데,
  • A 서버에 접속해 장바구니에 상품을 넣었는데 두 번째 접속할 때 B 서버로 접속되면 장바구니에 넣은 상품이 보이지 않을 때가 있습니다.

추가적으로,

  • 최소 접속 방식과 해시의 장점을 묶은 부하 분산 방법도 있습니다.
  • 라운드 로빈 방식이나 최소 접속 방식을 사용하면서 스티키 옵션을 주어 한 번 접속한 커넥션을 지속적으로 유지하는 기법입니다.
  • 즉, 처음 들어온 서비스 요청을 세션 테이블에 두고, 같은 요청이 들어오면 같은 장비로 분산해 세션을 유지하는 방법입니다.
  • 하지만 이렇게 하더라도 해당 세션 테이블에는 타임아웃이 있어, 타임아웃 이후에는 분산되는 장비가 달라질 수 있다는 것을 고려해야합니다.
  • 스티키 옵션을 사용할 때는 애플리케이션 세션 유지 시간이나 일반 사용자들의 애플리케이션 행동 패턴을 충분히 감안해야 합니다.
  • 따라서, 부하 분산을 위한 알고리즘을 선택할 때는, 제공되는 서비스의 특성을 잘 고려해 사용할 알고리즘을 결정해야 합니다.
  • 그리고 각 알고리즘에 필요한 속성값도 함께 잘 고려해야만 적절한 부하 분산을 할 수 있습니다.

참고

  • IT 엔지니어를 위한 네트워크 입문
Comments