[AWS] 로드밸런서

민정·2023년 7월 25일
0

AWS

목록 보기
8/11

📍 Scale Out

사용자가 많아지면 1대의 웹서버로는 트래픽을 감당할 수 없다. 이런 경우에 웹 서버의 개수를 늘려 문제를 해결할 수 있다.

그렇다면 인터넷에서 들어온 요청을 여러대의 웹서버에 연결시켜주는 역할을 누가할까? 그렇다. 로드밸런서가 한다.

Scale Up과 Scale Out

  • Scale Up = 수직 스케일링(Vertical Scaling)
    기존의 서버의 사양을 높여 성능을 업그레이드 하는 것
    ex. 디스크 추가, CPU, 메모리 업그레이드
    ex. EC2의 인스턴스 사양을 micro에서 medium으로 업그레이드

  • Scale Out = 수평 스케일링(Horizonal Scaling)
    장비의 개수를 늘려 성능을 업그레이드하는 것
    ex. 클라우드 서비스의 auto scaling

📍 로드 밸런서의 역할

1. 요청 분산

인터넷으로부터 들어온 요청을 여러대의 웹 서버에 균등하게 분산한다.

2. SSL 처리

안전하게 정보를 송수신하기 위해 사용하는 HTTPS라는 프로토콜에서 SSL(Secure Socket Layer)을 이용한다.

브라우저와 서비스 사이에서 오고가는 데이터 패킷은 암호 화 및 복호화되어 송수신된다. 그런데, 복잡한 계산인 암호화 및 복호화까지 웹서버에서 담당한다면, 웹서버에 부하가 걸려 제 성능을 다하지 못할 수 있다.

따라서, SSL 처리는 웹서버 대신 로드밸런서가 처리해주는 것이다.

3. 부정 요청 대응

부정요청 대응 또한, 웹서버에서 할 수도 있지만, 웹서버가 제 성능을 다 할 수 있도록 부정요청 처리는 로드밸런서에서 한다.
로드밸런서에는 부정한 접근에 대응하는 전용시스템이 제공된다.
-> AWS의 WAF(Web Application Firewall)인듯하다.

또한, 여러대의 개별 웹서버에서 부정요청 대응에 대한 대책을 마련하는 것보다 여러대의 웹서버 앞단에 위치한 로드밸런서에서 대책을 마련하는 것이 더 관리 point가 줄어든다.


📍 AWS에서 제공하는 로드밸런서 종류

Application Load Balancer (ALB)

  • L7 레이어(Application Layer)에서 동작하는 로드밸런서
  • HTTP, HTTPS를 이용한 접근을 분산하는 데 최적화되어있다.
  • SSL 처리 수행, 특정 URL 패턴과 같은 복잡한 조건을 사용한 분산 대상지 처리가 가능하다.

Network Load Balancer (NLB)

  • L4 레이어(Network Layer)에서 동작하는 로드밸런서
  • 소켓 통신등을 분산시킬 때 이용

Classic Load Balancer

  • ALB, NLB가 등장하기 전에 쓰이던 오래전의 로드밸런서로, 기존의 AWS 시스템을 사용해야만 하는 특별한 경우가 아닌이상 잘 쓰이지 않는다.

📍 로드밸런서를 이용한 요청 라우팅

외부로부터 요청받은 특정 프로토콜과 포트번호 조합을, 내부의 웹서버가 받는 프로토콜과 포트 번호로 변환하는 작업을 로드밸런서가 수행한다. 이 작업을 요청 라우팅이라고 한다.

리눅스 등의 OS에서는 0~1023까지의 포트 번호로 데이터를 받으려면 root 권한을 가진 사용자로 프로그램을 작동해야한다.
만약! 악의적인 사용자에게 프로그램을 빼앗길 경우, 해당 root 권한 또한 빼앗기는 셈이 된다.
따라서 로드 밸런서 내부에 있는 웹서버는 보통 1024 이상의 포트번호를 이용해 일반 권한을 가진 사용자로 애플리케이션을 작동한다.

보통 자바언어 기반 프로그램은 8080, 루비언어 기반은 3000을 사용한다고 한다.

📍 AWS에서 ALB

대상 그룹

해당 요청을 어떤 웹서버(EC2)혹은 웹서버들에게 보낼 것인지 그룹핑한 것

리스너 및 라우팅 설정

input으로 들어온 프로토콜과 포트번호를 어떤 프로토콜과 포트번호로 라우팅하여 output으로 보낼지 rule을 설정한다.

ALB의 경우, 특정 url로 들어온 요청에 대해서 특정 대상그룹으로 요청을 세밀하게 라우팅할 수 있다.


나는 어떻게 사용하고 있나...

devprod으로 배포환경을 2개로 분리하고 있다.
따라서 dev EC2가 속한 dev target group, prod EC2가 속한 prod target group 총 2개를 생성했다.
또한, 서브도메인으로 dev, prod에 대한 target group 접근을 구분하고 있다.

그래서 RULE 설정을 어떻게 하고 있나...

즉, dev-api.snackexercise.comdev target 그룹으로, api.snackexercise.comprod target 그룹으로 라우팅 되도록 RULE을 설정했다.

또한, https로 들어온 요청은 http로 라우팅되도록 RULE을 설정하였다.

0개의 댓글