AWS 서비스 정리 | Elastic Load Balancer(ELB)

Jihun Kim·2022년 1월 19일
0

aws

목록 보기
12/16
post-thumbnail

Load Balancer에 대해 알아보기 전에, Load Balancing이란 무엇인지 확인해 보도록 한다.



Load Balancing이란?

사용자 수가 늘어나게 되면 서버에 많은 부하(load)가 걸려 혼자서 많은 트래픽을 감당할 수 없게 된다.

이 때, 트래픽에 대처할 수 있는 방법은 크게 2가지가 있다.

  • Scale up: 하드웨어의 성능을 올리는 방법

  • Scale out: 여러 대의 서버로 나누는 것

    → 하드웨어 성능을 올리는 것보다 서버 하나를 더 추가하는 것의 비용이 더 저렴하다. 또한, 여러 서버 덕분에 무중단 서비스 제공이 가능하다.

    → 이 때, scale out한 여러 대의 서버에 트래픽을 균등하게 분산시켜 주는 역할을 하는 것이 Load Balancer 이다.


Load Balancing의 종류


Load Balancing의 종류에는 크게 L4와 L7이 있는데 이는 OSI 7계층과 관련이 있다. 따라서, 계층별로 프로토콜을 정리한 표를 첨부했다.


L4

  • 4계층(전송계층)을 사용한다.

    → TCP, UDP 포트 정보를 바탕으로 한다.

    → 한 대의 서버에 각기 다른 포트 번호를 부여해 다수의 서버 프로그램을 운영한다면 최소 L4 이상을 사용해야 한다.

  • IP 주소와 포트 번호를 기준으로 부하 분산이 가능하다.

    → 또한, MAC 주소, 전송 프로토콜에 따라 트래픽을 나눌 수도 있다.

  • 패킷 레벨(데이터 안을 까보지 않음)에서 로드를 분산해 속도가 빠르며 효율이 높다.

  • 섬세한 라우팅은 불가능하지만 L7 로드 밸런서보다 저렴하다.

  • AWS의 NLB(Network LoadBalancer)에 해당한다.


L7

  • 7계층(응용계층)을 사용한다.

  • URL 또는 HTTP 헤더를 기준으로 부하 분산이 가능하다.

    → 클라이언트의 요청을 보다 세분화해 서버에 전달한다.

    → 사용자 요청을 기준으로 특정 서버에 트래픽을 분산할 수 있다.

    → 패킷 내용을 확인해 해당 내용에 따라 부하를 특정 서버로 분산시킨다.

    → 따라서, 기능 단위로 분산이 가능하다.

  • 기능 단위 분산이기 때문에 섬세한 라우팅이 가능하다.

    → 특정한 패턴을 지닌 바이러스를 감지해 네트워크를 보호할 수 있다.

    → 비정상적 트래픽을 필터링 할 수 있다.

  • 패킷을 열어 데이터를 확인하는 과정을 거쳐야 하므로 복호화를 해야 한다.

    → 이 때문에 L4에 비해 더 많은 비용이 든다.

  • AWS의 ALB(Application LoadBalancer)에 해당한다.



Load Balancing 알고리즘

  • 라운드 로빈
    • 서버에 들어온 요청을 순서대로 돌아가며 서버에 배정하는 방식이다.

    • 클라이언트의 요청을 순서대로 분배한다.

      → 각 서버가 서로 동일한 스펙을 가지며, 클라이언트와 서버의 연결이 오래 지속되지 않을 때 사용하는 것이 적합하다.


  • 가중 라운드 로빈
    • 각 서버에 가중치를 매긴다.

      → 실제 서버에 서로 다른 처리 용량을 지정한다.

      → 가중치(정수값)가 높은 서버에 클라이언트 요청을 우선 배분한다.

      → 가중치가 높을수록 더 많은 트래픽을 감당한다.

    • 서버 트래픽 처리 능력이 상이할 경우 사용한다.


  • IP 해시 방식
    • 클라이언트의 IP 주소를 특정 서버로 매핑해 요청을 처리한다.

    • 사용자의 IP를 해싱해 로드를 분배한다.

      → 사용자가 항상 동일한 서버에 연결된다.


  • 최소 연결 방식
    • 요청이 들어온 시점에 연결상태가 가장 적은 서버에 우선 트래픽을 배분한다.

    • 서버와의 연결(세션) 시간이 길어지거나 서버에 분배된 트래픽이 일정하지 않은 경우 사용하기에 적합하다.

      → 동적으로 변하는 요청에 대한 부하를 분산하는 것이 가능하다.

      → 동적인 분산 알고리즘을 사용하는데, 현재 연결 수를 동적으로 카운트 할 수 있따.


  • 최소 리스폰 타임 방식(Least Response Time Method)
    • 서버의 현재 연결 상태와 응답 시간을 고려해 트래픽을 분배한다.

      → 즉, 연결이 가장 적으며 가장 짧은 응답시간을 보이는 서버에 우선적으로 부하를 배분한다.



Load Balancer의 종류

위에서 설명했듯이, L4와 L7에 따라 나뉘는데 L4 로드 밸런싱을 사용하는 것이 NLB이고 L7 로드 밸런싱을 사용하는 것이 ALB이다. 레거시로는 CLB(Classic LoadBalancer)가 있는데 이는 EC2 인스턴스 간에 간단한 트래픽 부하를 분산하는 로드 밸런서이다.



NLB(Network Load Balancer)

  • L4 로드 밸런서이다.
  • 통신
    • 클라이언트 IP와 서버 사이에서 서버로 들어오는 트래픽은 로드 밸런서를 통한다.
    • 서버에서 클라이언트로 나가는 트래픽은 로드 밸런서를 통하지 않으며 클라이언트 IP와 직접 통신한다.
  • 보안
    • NLB에는 security group이 적용되지 않는다.

      → 따라서, 서버에 적용된 security group을 통해 보안이 가능하다.

  • IP
    • 로드 밸런서에 대한 고정 IP 주소를 지원한다.

      → 따라서, DNS name과 IP 주소 모두 사용할 수 있다.

  • 속도
    • 네트워크 계층까지만 확인하기 때문에 ALB보다 빠르다.
    • 라우팅이 단순하며 트래픽이 극도로 많으면 ALB보다 NLB를 사용해야 한다.

ALB(Application LoadBalancer)

  • L7 로드 밸런서이다.
  • 통신
    • 클라이언트 IP와 서버 사이에 들어오고 나가는 모든 트래픽이 로드 밸런서와 통신한다.
  • 보안
    • security group을 통해 따로 보안이 가능하다.
  • IP
    • 변동 IP이다.

      → 클라이언트에서 액세스 할 ELB의 DNS name을 이용해 접근해야 한다.

      → Name server 또는 Route53에서 CNAME을 사용해야 도메인 네임 연동이 가능하다.

  • 로드 밸런서에 대한 경로 기반(path-based) 라우팅이 지원된다.




참고

1) Load balancing 관련 설명

https://post.naver.com/viewer/postView.nhn?volumeNo=27046347&memberNo=2521903

https://dev.classmethod.jp/articles/load-balancing-types-and-algorithm/

https://velog.io/@jisoo1170/Load-Balancing이란

https://hidaol.tistory.com/22

https://nesoy.github.io/articles/2018-06/Load-Balancer

2) Load balancer 관련 설명

https://medium.com/ankercloud-engineering/10-reasons-why-you-should-think-about-using-an-aws-application-loadbalancer-945f57816c34

https://medium.com/awesome-cloud/aws-difference-between-application-load-balancer-and-network-load-balancer-cb8b6cd296a4

3) aws 공식문서

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html

→ 설명이 좀 복잡하게 되어 있다...

profile
쿄쿄

0개의 댓글