Load Balancing

hyomkim·2021년 2월 8일
0

서비스를 개발하면서 서버를 생각하지 않는것은 불가능한 것이 현실입니다.
그렇기에 서버와 관련된 다양한 기술과 서비스가 개발되었습니다.

오늘은 그러한 기술 중 하나인 로드벨런스에 대하여 알아보고자 합니다.

언제 사용하는 기술일까요?

예를 하나 들어보겠습니다.

당신은 서버에 개발한 서비스를 올렸습니다.
초기에는 이용하는 유저의 수가 적어서 지금의 서버로도 충분히 감당할 수 있었습니다.
하지만 점점 입소문이 나고 평가가 좋아지면서 유저들이 몰리는 바람에 기존의 서버로는 감당이 힘들어 졌습니다.

이 상황에서 개발자는 많은 유저들을 수용하기위해 서버를 확장하려고 합니다.
이 때 서버를 확장하는 방법은 크게 두 가지가 있습니다.

  • Scale-up
    서버 자체의 성능을 향상시킵니다.

    PC로 비유하자면 cpu를 i5에서 i9으로 업그레이드 한다던가 램을 16GB에서 32GB로 올리는 것을 생각하면 됩니다.

  • Scale-out
    동일하거나 조금 더 낮은 사양의 서버를 추가합니다.

    PC로 비교하자면 i5성능의 PC한 대 였던것을 i5 혹은 i3의 성능을 가진 pc2대 이상으로 구성하는 것을 생각하면 됩니다.

이 중 로드밸런스 기술은 서버가 늘어나는 상황인 Scale-out에서 사용합니다.

그래서 뭘 하는 것 이고 무엇을 할 수 있나요?

로드 벨런스는 서버에 가해지는 로드를 개발자가 원하는 방향으로 각 서버에 균일하게 분배해 주는 기술입니다.

개발자의 선택에 따라 다양한 알고리즘으로 동작하게 되는데 간단하게 살펴보도록 하겠습니다.

  • Round Robin Method(라운드로빈 방식)
    서버에 들어온 요청을 순서대로 돌아가며 배정합니다.
    서버들 모두가 동일한 스펙을 가지고 있으면서 서버와의 연결(세션)이 짧은경우에 활용하기 좋습니다.

    안내자가 먼저 도착한 고객부터 순서대로 아무 메표소로나 안내해 주는 것을 생각하면 됩니다.
    (선착순의 개념입니다.)

  • Weighed Round Robin Method(가중 라운드로빈 방식)
    각 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분합니다.
    서버들의 성능이 서로 다른경우에 사용하는 방식입니다.

    같은 사람이라도 상관의 판단에 따라 특정 사람에게 일을 더 많이 주는것을 생각하면 됩니다.

  • IP Hash Method(IP 해시 방식)
    클라이언트의 IP주소를 특성 서버로 매핑하여 요청을 처리하는 방식입니다.
    사용자의 IP를 해싱해서 로드를 분배하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장합니다.

    헬스장에서 PT를 받는 회원이 회원번호를 통해 항상 동일한 개인 PT트레이너와 만나는 것을 생각하면 됩니다.

  • Least Connection Method(최소 연결 방식)
    요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에 우선적으로 트리팩을 배분합니다.
    자주 연결(세션)이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합한 방법입니다.

    행사장에 갔을 때 안내해주시는 분이 사람이 많은곳보다 좀 적은 곳으로 안내해 주는 것을 생각하면 됩니다.

  • Least Respons Time Method(최소 리스폰 타임 방식)
    서버의 현재 연갈 상태와 리스폰타임(응답시간, 서버에 요청을 보내고 최초 응답을 받을 때 까지 소요되는 시간)을 모두 고려해서 트래픽을 배분합니다.
    가장 적은 연결상태와 가장 짧은 응답시간을 보이는 서버에 우선적으로 로드를 배분합니다.

    행사장에 갔을 때 안내자가 여러 부스들 중에 부스의 담당자가 자리를 비우지 않고 꾸준하게 일처리를 하고 있어서 일처리가 끊기지 않으면서, 부스에 찾아온 관객 역시 딴짓하지 않고 부스 담당자의 질문에 즉각즉각 반응해주는 곳에 우선적으로 안내해 줍니다.

뒤에 알아볼 내용

로드 벨런스에 사용되는 로드 벨런서는 L4 로드 벨런서와 L7 로드 벨런서가 가장 많이 사용된다고 합니다.

이는 네트워크의 기본중의 기본이라고 할 수 있는 OSI 7 layers를 공부한 후에 내용을 추가하도록 하겠습니다.

Reference :
https://velog.io/@jisoo1170/Load-Balancing%EC%9D%B4%EB%9E%80
https://post.naver.com/viewer/postView.nhn?volumeNo=27046347&memberNo=2521903

profile
C++을 좋아하는 조금 모자란 사람이랍니다!

0개의 댓글