May 4, 2020

463 words 3 mins read

로드밸런서란 무엇인가?

    로드밸런서를 이해하기 전에 로드 밸런싱의 개념을 잡자!

    로드밸런싱( Load balancing)이란?

    로드 밸런싱이란 한 서버의 부하(Load)를 막기 위해, 여러 서버에 접속을 분배하는 기능이다.

    하나의 서비스에 발생하는 트래픽이 많을 때 여러 대의 서버 노드로 트래픽을 분산처리해서 서버의 부하(Load)를 해결해주는 기능이다.

    예를 들어

    주문대에 사람들이 몰렸을 경우 점원이 한 명만 있다면 한명 앞으로 계속 줄을 서면서 그 한 명의 부하가 늘어날 수 있다.

    loadbalencer_img01

    로드 밸런싱을 하게 된다면 여러명의 점원이 주문을 받게 되고 앞 쪽의 로드 밸런서는 들어오는 손님을 적절하게(알고리즘을 이용해서) 각 점원 앞으로 분배 시켜주는 역할을 하게 되는 것이다.

    loadbalencer_img02
    이렇게 로드밸런서가 앞 단에서 뒤의 점원들(노드들)에게 적절하게 손님(트래픽)들을 분배 해주면 장점이 생긴다.

    하나의 점원이 없어 지더라도 다른 점원이 주문을 받고있기 때문에 서비스에 문제가 없다.

    또한 서비스 중에서도 중단 없이 점원 하나를 더 늘려서 대기열을 더 빠르게 처리할 수 있다.

    이걸 로드밸런싱의 장점이라고 하면 아래와 같이 정리가 된다.

    로드밸런싱의 장점

    • 하나의 노드가 다운 되더라도 다른 노드들이 동작하므로 서비스를 지속할 수 있다.
    • 고가의 서버로 스펙을 올리지 않아도(Scale-up) 다수의 노드를 증설해 사용할 수 있다(Scale-out)
    • 노드를 증설 할 시에도 서비스 중단 없이 증설이 가능하다.

    스케쥴링 알고리즘

    로드밸런싱을 할 때 아래와 같은 스케쥴링 알고리즘에 따라 트래픽을 분배한다.

    • Round-robin Algo. (순차방식)
      • 패킷을 각 노드들에 순차적으로 분배하는 방식
      • 다른 알고리즘에 비해 처리속도가 빠르지만 서버 노드가 모두 동일한 처리량을 가지고 있어야한다.
    • Weighted round-robin Algo. (가중치 순차방식)
      • 패킷을 각 노드들에 순차적으로 분배하지만 노드마다 가중치를 두어 처리량을 조절
      • 가중치가 높은 서버에 더 높은 처리량을 준다.
    • Least-Connetion Algo.
      • 접속 수가 적은 서버를 선택해서 처리를 분배한다.
      • Connetion을 동적으로 카운팅한다. 동적으로 변하는 요청에 부하를 분산시킨다.
      • 각 노드에 연결되어있는 Connetcion 수만을 단순하게 카운팅하여 Connetcion수가 적은 곳에 꽂아준다.
    • Weight Least-Connetion Algo.
      • 각 노드의 처리량을 고려해서 Connetcion 수를 조절해서 할당하는 알고리즘
      • Least-connetcion이 단순 connetion 카운팅을하는 거였다면 이 알고리즘은 connetcion수/처리가능한 connetion 의 퍼센트 치를 계산해 적절히 부하를 분산해준다.

    등등등 여러 알고리즘이 존재

    로드밸런서(Load balancer)란?

    로드밸런서란 로드밸런싱을 해주는 장비로 서비스 노드들 앞단에 붙어서 패킷을 노드들에 트래픽을 분배해주는 역할을 한다.

    로드밸런서 종류

    • L4 로드 밸런서 L4란 네트워크 레이어중에 Layer 4계증(Transport Layer) 을 뜻한다.
      주로 L4의 로드밸런서라 함은 스위치(Switch)장비를 말한다.
      IP와 Port기반으로 로드밸런싱을 한다.

    • L7 로드 밸런서
      L7 이란 네트워크 레이어 중에 Layer 7계층 (Application Layer)을 뜻한다.
      주로 http의 라우팅을 처리한다.
      동작 방식은 다음과 같다.

    Persistence with Cookies : 주로 쿠키를 활용한 Connection Persistence 를 유지하며, 쿠키 정보를 분석한다. WAS 로 이루어지는 연결에 대해 해당 연결을 동일한 서버로 연결되게끔 해준다.

    Context Switching : 클라이언트가 요청한 리소스에 대해 Context 를 전환할 수 있다. 가령 Static 이미지 리소스 등에 대해 Load Balancer 가 확장명에 따른 분류로 Image Server 로 연결해줄 수 있다.

    Content Rewriting : 전달받은 Request 를 변환해서 재전송이 가능하다.

    그 외에도 프록시 처리(X-forwarded-for) 및 보안 로직 처리 등도 이루어진다.

    추가적으로

    AWS에서는 ELB(Elastic Load balaner)라는 서비스로 로드밸런서 서비스를 제공한다.

    AWS 로드밸런서의 종류는 ALB(Application Loadbalancer), NLB(Network Loadbalancer, CLB(Classic Laodbalancer)로 나뉜다.

    L7 로드밸런서는 ALB이고

    L4는 NLB이다.

    CLB의 경우 L4/L7 이지만 예전 버젼의 많은 기능을 지원하지않는 서비스 이다.

    AWS의 경우 http로 로드밸런싱을 하는 ALB의 사용을 권장한다.

    출처: https://jins-dev.tistory.com/entry/L4-L7-로드밸런싱Load-Balancing-에-대하여

    comments powered by Disqus