Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 싱글톤 디자인 패턴
- 가비지컬렉션
- Python
- 스레드풀
- uvicorn
- SQLAlchemy
- FastAPI
- golang
- 스케줄링
- 백엔드 개발자
- 쿠베네티스
- 메모리구조
- 분산처리
- K8S
- Alembic
- Django
- 회고
- 쿠버네티스
- alb
- 2022년
- nestjs
- 글또
- EKS
- nodejs
- 로드밸런서
- CPU스케쥴링
- 멀티스레드
- AWS
- 캐시서버
- gunicorn
Archives
- Today
- Total
서버에서 살아남기
AWS 로드밸런서 (ALB vs NLB) 본문
1. 로드밸런싱
- EC2로 가는 부하를 분산시켜주는 역할을 합니다.
- 단일 DNS로 가게끔 노출시켜 줍니다.
- 인스턴스 헬스체크를 통해 장애 처리를 원활하게 할 수 있게 해줍니다.
- 클라우드 내의 개인 트래픽과 공공 트래픽을 분리합니다.
2. 종류
1) Classic Load Balancer
- 2009년에 만들어졌으며 HTTP, HTTPS, TCP, SSL, Secure TCP를 지원합니다. 하지만 곧 서비스 지원이 종료되기 때문에 AWS는 사용을 권장하지 않습니다.
2) Application Load Balancer
- 2016년에 출시됐으며 HTTP, HTTPS, 웹소켓 프로토콜을 지원합니다.
3) Network Load Balancer
- 2017년에 출시됐으며 TCP, TLS, secure TCP, UDP 프로토콜을 지원합니다.
4) Gateway Load Balancer
- 2020년에 출시됐으며 네트워크 계층에서 작동합니다.
3. 보안그룹 규칙
- 로드밸런서에 유저들이 접근가능해야하기때문에 HTTP, HTTPS 두개의 포트에 소스는 전체 IP를 허용해야합니다.
- 인스턴스의 경우 HTTP 타입에 80포트를 허용해야하며, 소스는 IP가 아닌 로드밸런서의 보안 그룹으로 연결합니다.
위의 설정으로 EC2는 로드밸런서에서 오는 트래픽만 허용할 수 있게 됩니다.
4. ALB - Application Load Balancer
- 동일 EC2 인스턴스 상의 여러 애플리케이션에 부하를 분산합니다.
- HTTP/2와 WebSocket을 지원하며 HTTP에서 HTTPS로 리다이렉트가 가능합니다.
- Path 기반 URL(example.com/user)에 라우팅이 가능하고, 호스트네임 기반 URL 라우팅(example.com)이 가능하고 쿼리스트링 기반(example.com/user?id=1)라우팅이 가능합니다.
(해당 설정은 aws 로드밸런서 > 리스너 > rules 에서 설정이 가능합니다.)
4-1. ALB의 대상그룹(Target Group)
- EC2 인스턴스 (오토 스케일 그룹에 의해 관리됩니다.)
- ECS Tasks (ECS에 의해 관리됩니다.)
- IP 주소 (사설 IP 주소여야합니다.)
ALB는 여러 대상 그룹에 라우트 할 수 있으며 헬스 체크는 대상 그룹 레벨에서 이루어집니다.
🌟 알아두면 좋은 점
- 고정 호스트 네임이 부여됩니다. (xxx.xxx.com)
- 애플리케이션 서버는 클라이언트의 IP를 직접 보지 못하며 클라이언트의 실제 IP는 X-Forwarded-For 헤더에 삽입됩니다.
- 클라이언트 IP가 로드 밸런서와 직접 통신을 하고 로드 밸런서는 EC2와 통신 할 때 로드 밸런서의 IP로 통신합니다. 그래서 클라이언트의 정보를 얻기 위해서는 X-Forwarded-Port와 X-Forwarede-Proto를 확인해야합니다.
5. NLB - Network Load Balancer
- L4 로드 밸런서로 TCP와 UDP트래픽을 다룰 수 있습니다.
- 성능이 높고 초당 수백만 건의 요청을 처리합니다.
- 가용영역 별로 하나의 고정 IP를 가지며 여러개의 고정 IP를 가지고 있는 애플리케이션을 노출할 때 유용합니다.
❗️ L4 vs L7
- OSI 모델에서의 계층을 나타냅니다.
1) L4
: OSI 모델에서 전송 계층에 해당합니다. 이 계층은 TCP와 UDP와 같은 프로토콜을 사용하여 데이터를 세그먼트로 분할하고 재조립하는 역할을 합니다.
또한 에러 복구, 흐름 제어, 데이터 전송 순서 등을 관리합니다.
: L4 로드밸런서는 IP주소와 포트 번호를 기반으로 트래픽을 분산시킵니다.
2) L7
: OSI 모델에서 응용 계층에 해당합니다. 이 계층은 HTTP, FTP(파일 전송을 위한 프로토콜), SMTP(이메일 전송을 위한 인터넷 표준 프로토콜) 와 같은 특정 프로그램이나 애플리케이션을 위한 프로토콜로 사용됩니다.
: HTTP 헤더, 쿠키, 세션 정보 등 애플리케이션 계층의 정보를 분석하여 트래픽을 분산시킵니다.
5-1. NLB의 대상그룹(Target Group)
- EC2 인스턴스
- IP 주소 (프라이빗 IP)
- ALB (애플리케이션 로드 밸런서 앞에 네트워크 로드 밸런서를 배치하는 경우) > NLB를 둠으로써 고정 IP를 얻고, ALB를 둠으로써 HTTP유형의 트래픽을 처리합니다.