Cloud/AWS
[SAA] 고가용성 및 스케일링성
Scalability & High Availability
- 확장성은 응용 프로그램/시스템에 적응하여 더 큰 부하를 처리할 수 있음을 의미
- 두 가지 종류의 확장성
1) 수직적 확장성
2) 수평적 확장성 (= 탄력성)
- 확장성은 고가용성과 연결되지만 다름
Vertical Scalability
- 수직 확장성은 인스턴스의 크기를 늘리는 것 (키우는 것) 을 의미
- 예) 분당 다섯 통의 전화를 받을 수 있는 신입 상담원과 분당 열 통의 전화를 받을 수 있는 경력 상담원
이 때 신입 상담원을 경력 상담원만큼 키워줘야 더 빠르고 잘하게 되므로 이것이 바로 수직적 확장성
예) 우리의 앱이 t2.micro에서 작동하고 앱을 확장해 t2.large에서 작동하길 원한다면 수직적 확장성 사용
- 데이터베이스와 같은 비분산 시스템 (RDS, ElatiCache) 을 가지고 있을 때 일반적으로 수직 확장성을 사용
- 수직적 크기를 얼마나 늘릴 수 있느냐에는 하드웨어의 한계에 달려있음
Horizontal Scalability
- 수평적 확장성은 애플리케이션의 인스턴스/시스템 수를 늘리는 것을 의미
- 예) 다른 상담원을 고용
- 수평적 확장성은 분산시스템
- 웹 애플리케이션이나 모던 애플리케이션을 가지고 있을 때 일반적으로 사용
- Amazon EC2와 같은 클라우드 오퍼링으로 새로운 EC2 인스턴스를 빠르게 생성 가능
High Availability
- 고가용성은 일반적으로 수평적 확장과 함께 사용되지만 항상 그렇지는 않음
- 고가용성은 앱이나 시스템을 적어도 두 개의 데이터 센터 혹은 AWS에서 두 개의 AZ에서 작동하고 있다는 뜻
- 고가용성의 목표는 데이터 센터 손실에서 살아남을 수 있도록 하는 것으로 하나의 센터가 작동 불가되더라고 여전히 가동
- 예) 뉴욕에 있는 첫 번째 빌딩에 상담원 3명, 샌프란시스코에 있는 두 번째 빌딩에 상담원 3명
- RDS Multi ZA 의 경우 고가용성은 수동적일 수 있고, 수평적 확장의 경우 활동적일 수 있음
(Passive for RDS Multi ZA, Active for horizontal scaling)
High Availability & Scalability For EC2
- 수직 확장 : 인스턴스 크기 증가 (= 확장/축소)
예) t2.nano (0.5G of RAM, 1 vCPU) → u-12tb1.metal (12.3TB of RAM, 448 vCPUs)
- 수평적 확장 : 인스턴스 수 증가 (= 스케일 아웃/인)
예) 자동 확장 그룹, 로드 밸런서에 사용
- 고가용성 : 다중 AZ에서 동일한 애플리케이션에 대한 인스턴스 실행
예) 멀티 AZ를 가진 자동 확장 그룹, 다중 AZ를 가진 로드 밸런서에 사용