Scalability & High Availabilty
- Scalability(확장성)란 어플리케이션 혹은 시스템에게 주어지는 대량의 부하를 적응형으로 처리할 수 있음을 의미
- AWS에는 두 가지 방식의 확장성 방식이 존재
- Vertical Scalability (수직 확장)
- Horizontal Scalability (수평 확장)
- 확장성은 고가용성과 관련되어있지만, 같은 개념은 아님
Vertical Scalability
- 수직 확장은 인스턴스의 용량을 증가시키는 것을 의미
- 예) t2.micro 스펙으로 생성된 인스턴스를 t2.large 스펙으로 확장 시키는 경우
- 데이터베이스와 같은 분산되지 않은 시스템에 일반적으로 사용하는 스케일 방식
- RDS, ElastiCache 와 같은 서비스는 수직 확장을 제공
- 사용자는 스케일의 하드웨어적 한계점을 지정할 수 있음
Horizontal Scalability
- 수평 확장은 인스턴스의 수를 증가시키는 것을 의미
- 수평 확장이 적용되는 시스템은 분산 시스템임을 암시
- 웹 어플리케이션 또는 현대적인 어플리케이션에서 일반적으로 적용할 수 있는 확장 방식
- Cloud 컴퓨팅 기술이 발전함에 따라 어플리케이션의 수평 확장이 용이해졌음
High Availability
- 고가용성은 일반적으로 수평 확장과 함께 사용된다.
- 고가용성은 어플리케이션 혹은 시스템을 최소한 2개 이상의 데이터 센터에서 운영하는 것을 의미한다.
- 고가용성의 목적은 데이터센터 유실에서부터 어플리케이션 혹은 시스템을 보호하는 것이다.
Load Balancing
Load Balancing 이란
- 여러 대의 서버 앞단에서 트래픽을 관리해주는 별도의 서버
- 사용자는 로드 밸런서로의 Request/Response 교환, Serving을 담당하는 다운스트림 서버의 위치는 확인할 필요가 없음
Load Banalcer 사용 이유
- 여러 대의 다운스트림 인스턴스에 트래픽을 분산하여 처리
- 어플리케이션에 접근 할 수 있는 지점을 하나로 통합
- 특정 다운스트림 서버에 문제가 발생하더라도 서비스 제공에는 문제가 발생하지 않음
- public 트래픽을 분산된 private 트래픽으로 처리
Elestic Load Balancer
- ELB는 AWS에 의하여 관리되고 있는 로드밸런서 서비스이다.
- 자체적으로 로드밸런서를 도입할 경우 ELB 서비스 사용에 비하여 경제적으로 유리할 수도 있지만, 많은 노력이 필요함
- ELB는 AWS에서 제공하는 다양한 서비스들(EC2, ECS, ACM, Route53 등)과 함께 사용할 수 있다.
- Load Balancer에 대한 전문적인 지식이 없는 개발자라도 AWS가 제공하는 설정값들을 사용하여 Load Balancing 할 수 있음
Health Checks
- Health Check란 쉽게 말해 어플리케이션의 동작 유무를 확인하는 작업이다.
- Load Balancer는 수시로 어플리케이션의 Health Check를 진행하여 동작 여부를 확인하고, 사용 가능한 서버들을 대상으로 트래픽을 분산한다.
Application Load Balancer(ALB)
- Application Load Balancer(ALB)는 OSI7 Layer의 7계층에서 동작하는 로드벨런서이다. (HTTP)
- 아래 2경우의 로드밸런싱 적용 가능
- target group으로 지정된 다중 HTTP 어플리케이션
- 동일한 서버에서 동작중인 다중 어플리케이션
- HTTP/2와 웹 소켓을 지원
- 리다이렉트 기능 지원
- Routing Table
- URL 경로 라우팅: example.com/users || example.com/posts 등으로 설정 후 각 경로별로 라우팅
- URL 호스트네임 라우팅: sample1.example.com || sample2.example.com 등으로 설정 후 각 호스트네임별로 라우팅
- URL 쿼리 스트링, 헤더 라우팅
- ALB는 micro service 또는 container 기반의 어플리케이션에 적합하다.