1. 무상태(stateless) 웹 계층
2. 데이터 센터
3. 메시지 큐
4. 로그, 메트릭 그리고 자동화
5. 메시지 큐, 로그, 메트릭, 자동화 등을 반영한 설계안
1. 무상태(stateless) 웹 계층
1-1) 무상태 웹 계층
웹 계층을 수평적(Scale-out, Click)으로 확장하는 방법을 고민해볼 순서임.
이를 위해 상태 정보(사용자 세션 데이터와 같은)를 웹 계층에서 제거해야 함.
바람직한 전략은 상태 정보를 관계형 데이터베이스나 NoSQL 같은 지속성 저장소에 보관하고
필요할 때 가져오도록하는 거임. 이렇게 구성된 웹 계층을 무상태 웹 계층이라 부름.
1-2) 상태 정보 의존적인 아키텍처
상태 정보를 보관하는 서버와 그렇지 않은 서버 사이에는 몇 가지 중요한 차이가 있음.
상태 정보를 보관하는 서버는 클라이언트 정보, 즉 상태를 유지하여 요청들 사이에 공유되도록 함.
무상태 서버에서는 이런 장치가 없음.
1-3) 상태 정보 의존적인 아키텍처
- 서버1
- 사용자 A에 대한 세션 데이터
- 사용자 A의 프로파일 이미지
- 서버2
- 사용자 B에 대한 세션 데이터
- 사용자 B의 프로파일 이미지
- 서버3
- 사용자 C에 대한 세션 데이터
- 사용자 C의 프로파일 이미지

1-3)-1. 문제점
- 같은 클라이언트로부터의 요청은 항상 같은 서버로 전송되어야 함.
- 대부분의 로드밸런서가 이를 지원하기 위해 고정 세션이라는 기능을 제공하고 있는데
- 이는 로드밸런서에 부담을 줌. 로드밸런서 뒷단에 서버를 추가하거나 제거하기가 어려움.
- 이들 서버의 장애를 처리하기도 복잡해짐.
1-4) 무상태 아키텍처

- 이 구조에서 사용자로부터의 HTTP 요청은 어떤 웹 서버로부터 전달될 수 있음.
- 웹 서버는 상태 정보가 필요할 경우 공유 저장소로부터 데이터를 가져옴.
- 상태정보는 웹 서버로부터 물리적으로 분리되어 있음.
- 이런 구조는 단순하고 안정적이며 규모 확장이 쉬움.
1-5) 무상태 웹 계층을 갖도록 기존 설계를 변경한 결과
1-5)-1. 변경 전

1-5)-2. 변경 후

- 세션 데이터를 웹 계층에서 분리하고 지속성 데이터(NoSQL)보관소에 저장하도록 만듦.
- 공유 저장소는 관계형 데이터베이스일 수도 있고,
- Memcached/Redis 같은 캐시 시스템일 수도 있고 NoSQL일 수도 있음.
- 자동규모 확장
- 트래픽 양에 따라 웹 서버를 자동으로 추가하거나 삭제하는 기능을 뜻함.
- 상태 정보가 웹 서버들로부터 제거되었으므로, 트래픽 양에 따라 웹 서버를 넣거나
- 빼기만 하면 자동적으로 규모를 확장할 수 있게 되었음.
- 가용성을 높이고 전 세계 어디서도 쾌적하게 사용할 수 있도록 하기 위해서는
- 여러 데이터 센터를 지원하는 것이 필수임.
2. 데이터 센터
2-1) 두 개의 데이터 센터를 이용하는 사례
- 장애가 없는 상황
- 사용자는 가장 가까운 데이터 센터로 안내되는데, 통상 이 절차를
- 지리적 라우팅(geoDNS-routing 또는 geo-routing)이라고 부름.
- 지리적 라우팅
- 사용자의 위치에 따라 도메인 이름을 어떤 IP 주소로 변환할지 결정할 수 있도록
- 해주는 DNS 서비스다.

2-2) 둘 중 하나가 심각한 장애를 겪을 경우
모든 트래픽은 장애가 없는 데이터 센테로 전송됨. 데이터 센터 2에 장애가 발생해
모든 트래픽이 데이터센터1로 전송되는 상황을 보여줌.

2-3) 다중 데이터 아키텍처를 만들 때 생기는 기술적 난제
2-3)-1. 트래픽 우회
올바른 데이터 센터로 트래픽을 보내는 효과적인 방법을 찾아야 한다.
GeoDNS 사용자에게서 가장 가까운 데이터 센터로 트래픽을 보낼 수 있도록 해줌.
2-3)-2. 데이터 동기화(synchronization)
데이터 센터마다 별도의 데이터베이스를 사용하고 있는 상황이라면 장애가 자동으로 복구되어
트래픽이 다른 데이터베이스로 우회된다 해도, 해당 데이터센터에는 찾는 데이터가 없을 수 있음.
- 보편적 전략
- 데이터를 여러 데이터센터에 걸쳐 다중화하는 거임.
- 넷플릭스가 여러 데이터센터에 걸쳐 데이터를 어떻게 다중화화
2-3)-3. 테스트와 배포(deployment)
여러 데이터 센터를 사용하도록 시스템이 구성된 상황이라면
웹 사이트 또는 애플리케이션을 여러 위치에서 테스트해보는 것이 중요함.
- 자동화된 배포 도구
- 모든 데이터 선터에 동일한 서비스가 설치되도록 하는 데 중요한 역할을 한다.
3. 메시지 큐
4. 로그, 메트릭 그리고 자동화
5. 메시지 큐, 로그, 메트릭, 자동화 등을 반영한 설계안