Introduction to Load Balancing
Substack
로드 밸런싱은 네트워크 트래픽을 여러 서버에 분산시켜서 한 서버에 과부하가 걸리지 않도록 하는 기술입니다. 저는 초창기부터 AWS Load Balancer를 사용해서 크게 로드 밸런싱 알고리즘을 고민한 적은 없었습니다. Load Balancer 자체에 대한 로드 밸런싱은 어떻게 이루어지는지에 대해 고민하다가 로드 밸런싱 알고리즘을 일부 살펴보았습니다.
1/ 로드 밸런싱의 기본적인 알고리즘으로는 라운드 로빈(Round Robin), 가중 라운드 로빈(Weighted Round Robin), 최소 연결(Least Connection), IP 해시(IP Hash) 등이 있습니다.
2/ 라운드 로빈은 들어오는 요청을 순차적으로 각 서버에 분배합니다. 별도로 성능이나 부하를 고민하지 않습니다. 그래서 타겟 서버의 성능이 서로 다른 경우에는 라운드 로빈 방식으로 트래픽을 제대로 분배하기 어렵습니다. 참고로, AWS ALB의 기본 라우팅 방식이 라운드 로빈입니다.
3/ 가중 라운드 로빈은 각 서버에 가중치를 부여하여 트래픽을 분배하는 방식입니다. 타겟 서버 선능에 따라서 가중치를 설정하여 가중치 높은 서버에 더 많은 요청을 할당합니다. 따라서 타겟 서버 성능이 다르다고 해도, 그에 맞게 트래픽을 분산시킬 수 있습니다.
4/ 최소 연결 방식은 현재 연결된 클라이언트 수가 가장 적은 서버에 요청을 보내는 방식입니다. 각 서버의 부하를 실시간으로 고려해서 트래픽을 분배하기 때문에, 보다 효과적으로 트래픽을 분배할 수 있습니다. 똑같지는 않지만 ALB에서 지원하는 LOR(Least Outstanding Requests) 알고리즘이 이와 유사하게 동작하는 방식입니다.
5/ IP 해시는 IP 주소를 해시 함수로 변환해서 특정 서버로 요청을 할당하는 방식입니다. 주로 세션을 유지해야하는 경우에 사용되고, 일반적인 애플리케이션에서는 잘 사용되지 않는 방식입니다. AWS ALB에서는 해당 방식을 지원하지 않지만, Sticky Session 기능을 통해서 비슷한 라우팅 방식을 구현할 수 있습니다.
6/ 로드 밸런서 자체에 대한 로드 밸런싱은 앞단에 DNS 로드 밸런싱을 통해 구현합니다. Active/Active 구조의 여러 로드 밸런서를 구동하고 DNS 레코드에 해당 서버들을 모두 추가합니다. 그러면 사용자가 서비스 접속을 위해서 DNS 질의를 할 때, 기본적으로 분산이 가능합니다. 이 밖에도 weighted나 latency 기반으로 트래픽을 분산하는 것도 가능합니다.
P.S. 이번에 로드 밸런서 알고리즘을 찾아보면서 AWS Load Balancer에 새롭게 Weighted Random 알고리즘이 추가된 것을 알게 되었습니다. Weighted Random은 Automatic Target Weights(ATW)를 사용해서 anomaly인 타겟을 파악하고, 에러가 적은 쪽에 더 많은 부하를 주는 방식입니다. 실제 애플리케이션의 상태에서 나오는 응답값을 사용하기 때문에 더욱 정교하게 부하를 분산시킬 수 있다고 하네요. (물론 테스트를 좀 해봐야할 것 같습니다)
https://techchallengearena.substack.com/p/introduction-to-load-balancing
#loadbalancing #aws #roundrobin #devops
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 6월 16일 오후 7:25