📌 확장성 & 고가용성
확장성이란, 응용 프로그램이나 시스템이 적응을 통해 더 큰 부하를 처리할 수 있다는 것이다.
확장성의 종류로는 수직적 확장성과 수평적 확장성이 있다.
⬆️ 수직적 확장성
수직적 확장성이란, 인스턴스의 크기를 증가시키는 것을 뜻한다.
예를 들면, t2.micro 인스턴스를 t2.large로 변경하는 것이다.
수직적 확장성은 분산되지 않은 데이터베이스와 같은 시스템에서 흔하게 볼 수 있으나, 확장에 한계가 있다.
➡️ 수평적 확장성
수평적 확장성이란, 인스턴스나 시스템의 수를 늘리는 것을 뜻한다.
수평적 확장성은 분산 처리 시스템을 의미하며, 웹 애플리케이션이나 최신 애플리케이션에서 흔하게 볼 수 있다.
AWS에서는 Amazon EC2를 제공하기 때문에 수평적 확장이 쉽다.
🛠️ 고가용성
고가용성은 수평적 스케일링과 밀접한 연관성을 가지고 있다.
고가용성은 적어도 2개 이상의 가용 영역에서 애플리케이션이 실행되고 있다는 뜻이다.
어느 한 가용 영역이 마비가 되면, 다른 가용 영역에서 서비스를 제공하는 방식을 통해
데이터 센터 손실에 대비하는 것이 고가용성의 목표이다.
⚙️ EC2에서의 확장성 & 고가용성
수직적 확장성 : 인스턴스 크기 확장
수평적 확장성 : 인스턴스의 갯수 증가
고가용성 : 동일한 애플리케이션을 위해 여러 가용 영역의 인스턴스 실행
확장성 🆚 탄성
확장성이란, 하드웨어를 강하게 만들어 더 큰 부하도 견딜수 있도록 하는 것이다.
탄성이란, 시스템이 확장 가능한 경우 부하에 따라 자동으로 크기를 조정할 수 있는 것이다.
📡 Load Balancing
부하 분산기란, 인터넷 트래픽을 다운스트림의 다중 서버나 EC2 인스턴스에 전달하는 서버이다.
✅ 부하 분산기를 사용하는 이유
- 여러 다운스트림 인스턴스에 부하를 분산시킬 수 있다.
- 애플리케이션의 단일 엑세스 지점을 공개할 수 있다.
- 다운스트림 인스턴스의 오류를 매끄럽게 처리할 수 있다.
- 인스턴스들의 상태를 정기적으로 체크한다.
- 웹사이트에 대한 SSL 종료를 제공한다.
- 여러 가용 영역에 대한 고가용성을 제공한다.
📠 ELB
ELB란 Elastic Load Balancer의 약어로, 관리되는 부하 분산기이다.
AWS는 ELB의 작동을 보장하고 업그레이드, 유지, 고가용성에 대한 관리를 책임지며,
사용자는 부하 분산기의 동작을 위해 몇 가지만 구성하면 된다.
ELB대신 자신만의 부하 분산기를 사용한다면 비용이 절약되긴 하지만, 결국엔 수고가 많이 들게 된다.
✅ AWS에서 제공하는 부하 분산기 종류
- Application Load Balancer - OSI 7계층
- Network Load Balancer - OSI 4계층
- Gateway Load Balancer - OSI 3계층
- Classic Load Balancer - OSI 4 & 7계층
[부하 분산기의 종류별 특징]
Application Load Balancer | Network Load Balancer | Gateway Load Balancer |
HTTP / HTTPS / gRPC 프로토콜 (OSI 7계층) |
TCP / UDP 프로토콜 (OSI 4계층) |
IP 패킷의 GENEVE 프로토콜 (OSI 3계층) |
HTTP 라우팅 기능 제공 | 고성능임 | 방화벽으로 트래픽을 경로화 함 |
정적 DNS 사용 | 정적 IP 사용 | 침입 감지 |
🏘️ ASG
ASG란 Auto Scaling Group의 약어이다.
실제 세계에선 웹사이트와 애플리케이션의 부하가 변화할 수 있고,
클라우드에서는 서버를 아주 빠르게 생성하고 없앨 수도 있다.
ASG는 이와 같은 배경에서 등장하게 되었다.
ASG를 사용하게 되면, 클라우드 원칙에 따라 최적의 용량에서만 실행되기 때문에 비용 절감이 가능하다.
✅ ASG의 목표
- 증가한 부하에 맞게 인스턴스를 추가하는 스케일 아웃
- 감소한 부하에 맞게 인스턴스를 제거하는 스케일 인
- 어느 시점에서든 실행중인 최소, 최대의 머신이 있다는 것을 알 수 있게 해주는 것
- 새로운 인스턴스를 부하 분산기에 자동적으로 등록하는 것
- 비정상적인 인스턴스 대체
✅ ASG의 스케일링 전략
- Maunal Scaling : ASG의 크기를 수동으로 업데이트한다.
- Dynamic Scaling : 변화하는 요구에 맞게 자동적으로 반응한다.
- Predictive Scaling : 미래의 트래픽을 머신러닝을 이용해 예측하고, 예측에 맞게 사전에 자동으로 적당한 수의 인스턴스를 공급한다. 따라서 부하가 시계열 패턴을 보여서 예측가능할 경우에 유용하다.
✅ Dynamic Scaling의 종류
- Simple / Step Scaling : CloudWatch 알람이 작동하는 경우, 상황에 맞게 ASG용량에 단위를 추가하거나 제거한다.
- Target Tracking Scaling : 설정한 수치에 맞게 자동적으로 스케일을 조정한다.
- Scheduled Scaling : 알려진 사용자 패턴에 따라 스케일링을 예측하여 진행한다.