웹 계층을 수평적으로 확장하기 위해서는 상태 정보(사용자 세션 데이터와 같은)를 웹 계층에서 제거하여야 합니다. 바람직한 전략은 상태 정보를 관계형 데이터베이스나 NoSQL 같은 지속성 저장소에 보관하고, 필요할 때 가져오도록 하는 것입니다. 이렇게 구성된 웹 계층을 무상태 웹 계층이라 부릅니다.
상태 정보 의존적인 아키텍처
상태 정보를 보관하는 서버는 클라이언트 정보, 즉 상태를 유지하여 요청들 사이에 공유되도록 합니다. 무상태 서버는 이런 장치가 없습니다.
상태 정보 의존적인 아키텍처
- 사용자 A의 세션 정보나 프로파일 이미지 같은 상태 정보는 서버 1에 저장됩니다.
- 요청이 서버 2로 저장되면 인증은 실패할 것인데, 서버 2에 사용자 A에 관한 데이터는 보관되어 있지 않기 때문입니다.
- 마찬가지로, 사용자 B로부터의 HTTP 요청은 전부 서버 2로 전송되어야 하고, 사용자 C로부터의 요청은 전부 서버 3으로 전송되어야 합니다.
문제점
같은 클라이언트로부터의 요청은 항상 같은 서버로 전송되어야 한다는 것입니다. 대부분의 로드밸런서가 이를 지원하기 위해 고정 세션(sticky session)이라는 기능을 제공하고 있는데, 이는 로드밸런서에 부담을 줍니다.
무상태 아키텍처
- 이 구조에서 사용자로부터의 HTTP 요청은 어떤 웹 서버로도 전달될 수 있습니다.
- 웹 서버는 상태 정보가 필요할 경우 공유 저장소(shared storage)로부터 데이터를 가져옵니다.
- 따라서 상태 정보는 웹 서버로부터 물리적으로 분리되어 있습니다.
- 이런 구조는 단순하고, 안정적이며, 규모 확장이 쉽습니다.
무상태 웹 계층을 갖도록 기존 설계를 변경한 결과
- 세션 데이터를 웹 계층에서 분리하고 지속성 데이터 보관소에 저장하도록 만들었습니다.
- 이 공유 저장소는 관계형 데이터베이스일 수도 있고, Memcached/Redis 같은 캐시 시스템일 수도 있으며, NoSQL일 수도 있습니다.
- 여기서는 NoSQL을 사용하였는데, 규모 확장이 간편해서입니다.
- ①의 자동 규모 확장(autoscaling)은 트래픽 양에 따라 웹 서버를 자동으로 추가하거나 삭제하는 기능을 뜻합니다.
- 상태 정보가 웹 서버들로부터 제거되었으므로, 트래픽 양에 따라 웹 서버를 넣거나 빼기만 하면 자동으로 규모를 확장할 수 있게 되었습니다.
참조
'System Design' 카테고리의 다른 글
[사용자 수에 따른 규모 확장성] 메시지 큐 (0) | 2021.09.08 |
---|---|
[사용자 수에 따른 규모 확장성] 데이터 센터 (0) | 2021.09.07 |
[사용자 수에 따른 규모 확장성] 콘텐츠 전송 네트워크(CDN) (0) | 2021.09.02 |
[사용자 수에 따른 규모 확장성] 캐시 (0) | 2021.09.01 |
[사용자 수에 따른 규모 확장성] 수직적 규모 확장 vs 수평적 규모 확장 (0) | 2021.08.31 |
댓글