로드밸런싱 알고리즘 훑어보기

로드 밸런싱은 네트워크 트래픽을 여러 서버에 분산시켜서 한 서버에 과부하가 걸리지 않도록 하는 기술입니다. 저는 초창기부터 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

Introduction to Load Balancing

Substack

Introduction to Load Balancing

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 6월 16일 오후 7:25

 • 

저장 22조회 2,443

댓글 0

    함께 읽은 게시물

    [비전공자에서 독학으로 시니어 엔지니어가 된 이야기 1탄]

    20대 중반에 나를 만나 코딩을 알게 되어 2년 독학으로 엔지니어가 된 남편 이야기. 독학 준비 중인 사람들에게 도움되고자 공부 팁을 공유할 겸 독학 현실 이야기도 함께 해봅니다. 남편은 패키징 산업 공학 전공으로 졸업 후 IT 감사원으로 컨설팅 회사에 입사했습니다. (IT 감사원 경력이 엔지니어가 되는데 큰 도움이 되었는데, 그건 나중에..) 개발자인 저를 만나고 테크 쪽에 관심을 갖기 시작했고, 코딩 독학을 결정하게 되었습니다. 하지만 혼자 공부해서 개발자가 되기에는 버거웠고, 무엇보다도 남동생이 컴공 공부하다가 어려워서 포기한 것을 알기에, 선뜻 개발자가 되는 건 망설여졌습니다. 또한 이미 경력이 좀 있어서 “이걸 살려서 할 수 있는 방법이 없을까?”라는 고민을 하게 되었습니다. 당시 근무하던 회사는 커리어에 도움되지 않다고 판단하고 이직을 결정합니다. 약 3개월의 준비 후 경력을 살리면서 보안에 대해 배울 수 있는 사이버 컴플라이언스 컨설턴트로 테크 컨설팅 회사에 입사했습니다. 전 회사는 IT 기업이 아니어서 듣는 정보가 부족했지만, 테크/IT 쪽으로 이직하면서 많은 정보를 듣기 시작합니다. 직장 동료... 더 보기

     • 

    댓글 1 • 저장 60 • 조회 6,352


    < 1등을 베끼는 당신이 1등이 될 수 없는 이유 >

    1. 당신 자신을 믿어라. 결코 모방하지 마라.

    ... 더 보기

    퇴근길 지하철에서 중년 사내와 20대 후반의 한 젊은이가 필자의 앞에 나란히 앉아 있었다. “자리가 사람을 만드는 법이지.” 중년 사내가 젊은이에게 건네는 말 한마디가 내 귀에 들려왔다. 그 순간 나는 묘한 추억에 빠져들었다.

    ... 더 보기

    [김인수 기자의 사람이니까 경영이다]자리가 무능한 사람을 만든다는데 - 매일경제

    매일경제

    [김인수 기자의 사람이니까 경영이다]자리가 무능한 사람을 만든다는데 - 매일경제


    야근의 관성

    제가 한국에서 직장 생활을 시작하고 가장 먼저 배운 것은 아이러니하게도 야근이었습니다. 신입이었던 제게 야근은 선택의 문제가 아니었거든요. 선배들에게 야근은 너무나 당연한 루틴이었고, 저녁 5시가 되면 "퇴근 안 해?"가 아니라 "저녁 뭐 먹을까?"라는 질문을 던졌습니다. 누가 정해놓은 것처럼 부장님이 퇴근해야 과장님이, 과장님이 퇴근해야 대리님이, 대리님이 퇴근해야 비로서 저 같은 신입도 퇴근 생각을 할 수 있었습니다.

    ... 더 보기

     • 

    저장 16 • 조회 4,384


    인프라 엔지니어의 교과서 개정 2판

    ... 더 보기

    조회 811