우노
[Network] 로드밸런싱 알고리즘 종류 본문
부하 분산 알고리즘
- 로드 밸런서가 리얼 서버로 부하를 분산할 때, 로드 밸런서에서는 사전에 설정한 분산 알고리즘을 통해 부하 분산이 이루어집니다.
- 기본적인 부하 분산 알고리즘은 5가지 종류가 있습니다.
- 라운드 로빈(Round Robin)
- 현재 구성된 장비에 부하를 순차적으로 분산함
- 총 누적 세션 수는 동일하지만 활성화 된(처리 중인) 세션 수는 달라질 수 있음
- 최소 접속 방식(Least Connection)
- 현재 구성된 장비 중 가장 활성화 된(처리 중인) 세션 수가 적은 장비로 부하를 분산함
- 가중치 기반 라운드 로빈(Weighted Round Robin)
- 라운드 로빈 방식과 동일하지만 각 장비에 가중치를 두어 가중치가 높은 장비에 부하를 더 많이 분산함
- 처리 용량이 다른 서버에 부하를 분산하기 위한 분산 알고리즘
- 가중치 기반 최소 접속 방식(Weighted Least Connection)
- 최소 접속 방식과 동일하지만 각 장비에 가중치를 부여해 가중치가 높은 장비에 부하를 더 많이 분산함
- 처리 용량이 다른 서버에 부하를 분산하기 위한 분산 알고리즘
- 해시(Hash)
- 해시 알고리즘을 이용한 부하 분산
- 라운드 로빈(Round Robin)
- 이 밖에도 기본적인 부하 분산 알고리즘을 응용한 다양한 부하 분산 알고리즘이 사용되고 있지만 ,
- 가장 많이 사용되는 3가지 알고리즘에 대해서만 더 자세히 살펴보겠습니다.
라운드 로빈(Round Robin)
- 라운드 로빈 방식은 특별한 규칙 없이 현재 구성된 장비에 순차적으로 돌아가면서 트래픽을 분산하는 방식입니다.
- 즉, 서버 세 대가 있을 때, 첫 번째 요청은 1번 서버, 두 번째 요청은 2번 서버, 세 번째 요청은 3번 서버, 네 번째 요청은 다시 1번 서버로 할당합니다.
- 순차적으로 모든 장비에 분산하므로 모든 장비에 누적 된 세션 수는 같아집니다.
최소 접속 방식(Least Connection)
- 최소 접속 방식은 서버가 가진(처리 중인) 세션 부하를 확인해 그것에 맞게 부하를 분산하는 방식입니다.
- 로드 밸랜서에서는 서비스 요청을 각 장비로 보내줄 때마다 세션 테이블이 생성되므로, 각 장비에 연결된 현재 세션 수를 알 수 있습니다.
- 따라서, 최소 접속 방식은 각 장비의 세션 수를 확인해, 현재 세션이 가장 적게 연결된 장비로 서비스 요청을 보내는 방식입니다.
- 서비스별로 세션 수를 관리하면서 분산해주므로, 각 장비에서 처리되는 활성화 세션 수가 비슷하게 분산 됩니다.
해시(Hash)
- 해시 방식은 서버의 부하를 고려하지 않고, 클라이언트가 같은 서버에 지속적으로 접속하도록 하는 부하 분산 방식입니다.
- 서버의 상태를 고려하지 않고, 해시 알고리즘을 이용해 얻은 결괏값을 기반으로 어떤 장비에 부하를 분산할지 결정합니다.
- 따라서, 같은 알고리즘을 사용한다면 항상 동일한 결괏값을 가지고 서비스를 분산할 수 있습니다.
- 이때 알고리즘 계산에 사용되는 값들을 지정할 수 있는데,
- 주로 출발지 IP 주소, 목적지 IP 주소, 출발지 서비스 포트, 목적지 서비스 포트를 사용합니다.
결론
- 라운드 로빈이나 최소 접속 방식은 비교적 비슷한 비율로 부하를 분산시킬 수 있다는 장점이 있습니다.
- 하지만, 동일한 출발지로부터 로드 밸런서를 거친 서비스 요청이 처음에 분산된 서버와 그 다음에 분산된 서버가 달라질 수 있습니다.
- 따라서, 각 서버에서 세션을 유지해야 하는 서비스는 정상적으로 서비스되지 않습니다.
- 그와 반대로, 해시 방식은 알고리즘을 통해 계산한 값으로 서비스를 분산하므로 항상 동일한 장비로 서비스가 분산됩니다.
- 따라서, 세션을 유지해야 하는 서비스에 적합한 분산 방식입니다.
- 하지만, 알고리즘의 결괏값이 특정한 값으로 치우치게 되면, 부하 분산 비율이 한쪽으로 치우치게 될 수도 있습니다.
- 최근에는 이런 경우가 별로 없지만, 서버 애플리케이션 개발에 여러 대의 서버가 사용될 것을 고려하지 않고 개발한 경우, 이 방식을 사용해야 합니다.
- 흔히 이런 문제를 장바구니 문제라고 하는 데,
- A 서버에 접속해 장바구니에 상품을 넣었는데 두 번째 접속할 때 B 서버로 접속되면 장바구니에 넣은 상품이 보이지 않을 때가 있습니다.
추가적으로,
- 최소 접속 방식과 해시의 장점을 묶은 부하 분산 방법도 있습니다.
- 라운드 로빈 방식이나 최소 접속 방식을 사용하면서 스티키 옵션을 주어 한 번 접속한 커넥션을 지속적으로 유지하는 기법입니다.
- 즉, 처음 들어온 서비스 요청을 세션 테이블에 두고, 같은 요청이 들어오면 같은 장비로 분산해 세션을 유지하는 방법입니다.
- 하지만 이렇게 하더라도 해당 세션 테이블에는 타임아웃이 있어, 타임아웃 이후에는 분산되는 장비가 달라질 수 있다는 것을 고려해야합니다.
- 스티키 옵션을 사용할 때는 애플리케이션 세션 유지 시간이나 일반 사용자들의 애플리케이션 행동 패턴을 충분히 감안해야 합니다.
- 따라서, 부하 분산을 위한 알고리즘을 선택할 때는, 제공되는 서비스의 특성을 잘 고려해 사용할 알고리즘을 결정해야 합니다.
- 그리고 각 알고리즘에 필요한 속성값도 함께 잘 고려해야만 적절한 부하 분산을 할 수 있습니다.
참고
- IT 엔지니어를 위한 네트워크 입문
'Network & Security > Concept' 카테고리의 다른 글
[Network] L4 로드 밸런서 vs L7 로드 밸런서 (0) | 2025.01.07 |
---|---|
[Network] HTTP, HTTPS 및 SSL/TLS 암호화 프로토콜 (0) | 2024.04.08 |
[Network] CIDR 계산 방법 (1) | 2023.03.25 |
[Network] 통신사별 DNS 서버 아이피 주소 (SKT, KT, LG, 구글) (0) | 2023.02.23 |
[Network] OpenID Connect(OIDC), OAuth 2.0 차이 (0) | 2023.02.18 |
Comments