Load Balancing
을 사용하지 않고 하나의 EC2
만을 사용한다면 위의 그림과 같을 것이다. 로드밸런싱을 사용하지 않는다면 EC2 인스턴스에 고정된 아이피를 부여해야 한다.
그리고 하나의 인스턴스에는 하나의 도메인만 연결할 수 있기 때문에 사용자가 많아져 서버에 과부하가 생기게 되는 문제점이 존재한다.
이럴 때는 아래와 같은 방법이 존재한다.
하지만 위의 방법도 단점은 존재한다. 스케일 업
의 경우는 인스턴스 사양을 업데이트 하는 동안에는 서비스를 할 수 없다
는 것이고, 스케일 아웃
의 경우는 서버가 늘어날 때마다 새로운 도메인이 필요
하다는 것이다.
이러한 단점들을 해결할 수 있는 것이 로드 밸런싱(Load Balancing)
이다.
로드 밸런싱(Load Balancing)
이란 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하등을 고려하여
적절히 분산처리하여 해결해 주는 서비스이다.
위와 같이 한 곳의 엔드포인트로 들어오는 트래픽을 각 인스턴스로 분산시켜주는 것을 볼 수 있다.
- 애플리케이션 트래픽을 여러 대의 EC2에 자동으로 트래픽을 분산시킨다.
- 트래픽이 많아지면 자동으로 성능 좋은 EC2로 확장해준다.
- EC2의 인스턴스 상태를 자동 감지해서 오류가 있는 시스템은 배제시킨다.
로드밸런서는 Layer 4계층
에서 작동하는 클래식 로드밸런서
와 Layer 7계층
에서 작동하는 애플리케이션 로드배런서
가 있다.
먼저 타겟 그룹이란 EC2 인스턴스를 오토스케일링 할 수 있는 단위로 사용된다.
클래식 로드밸런서의 단점은 서버의 기본주소가 바뀌면 로드밸런서를 새로 생성해야하며 하나의 주소에 하나의 대상그룹으로 보내게 된다.
또한 Layer 4계층에서 작동하기 때문에 데이터를 수정, 변경할 수 없기때문에 포트나 헤더를 변경할 수 없다.
일단 order 모듈
과 shop 모듈
의 인스턴스가 따로 존재하기에 2개의 로드밸런서가 필요하기 때문에 비용도 2배로 들어가게 된다.
클래식 로드밸런서
와 다르게 애플리케이션 로드 밸런서
는 패스나 포트등에 따라 다른 대상그룹으로 매핑할 수 있다. 마이크로 아키텍쳐를 구성하기에도 좋다.
-
- 로드밸런서에는
상태확인
을 할 수 있다. 상태확인은 대상그룹에 원하는 경로와 포트를 설정하여 정상적으로 원하는 HTTP 응답이 오는지 확인하게 해준다. 만약 정상적으로 응답이 오지 않는 인스턴스가 있다면 비정상 상태의 인스턴스를 제외한 다른 인스턴스로만 트래픽을 분산한다.
- 로드밸런서에는
-
대상그룹
or타켓그룹
은 일반적으로 오토스켈링을 위한 검사 단위이다. 각각의 대상그룹에 있는 인스턴스들은 정의된 상태 검사를 수행한다.
-
- 갑작스러운 트래픽 집중에 서버, 스토리지 등의 자원이 자동으로 확장되면서 안정적인 서비스를 유지하는 것
클래식 로드밸런서
는 단순한 형태이기 때문에 요청을 어느 대상 그룹으로 보낼지 정도만 알면 되지만 애플리케이션 로드밸런서는 좀 더 신경써야 할 것이 있다.
각각의 포트에따라 다르게 구성할 수 있으며 동일한 포트라도 패스등에 따라 다르게 분기할 수 있다.
ALB에는 리스너를 포트와 프로토콜별로 분기처리할 수 있다.
일단은 여기까지만 정리하고,, 좀 더 자세한 내용은 게속 추가로 보충해야겠다.