시스템의 웹 계층을 수평적으로 확장시키려면 웹 서버에서 상태 정보(세션데이터 등)을 제거해야 한다.
만약 상태정보를 가진 채로 웹 계층이 동작하면, 다음과 같은 일이 발생한다.
사용자가 http요청을 통해 웹에 접속하려고 할 때, 해당 사용자에 대한 상태 정보가 존재하는 서버에만 요청을 해야 결과 값이 반환된다.
로드밸런서는 이러한 기능을 지원하기 위해 고정 세션(sticky session)이라는 기능을 제공하지만, 이는 LB에 부담을 준다.
또한 특성 서버에만 부하가 몰리는 문제가 생길 수 있다.
이러한 문제에서 벗어나기 위해 무상태(stateless) 아키텍처를 구성한다.
웹 계층에서 상태 정보를 떼어내 RDBMS나 NoSQL과 같은 공유 저장소(shared storage)에 저장하고, 필요할 때 가져오는 방식으로 동작한다.
이 구조에서 사용자의 http요청은 아무 웹 서버로 전달되게 되고, 웹서버는 별도의 공유저장소에 상태 정보를 요청하게 된다.
공유 저장소는 RDBMS, NoSQL, Memcached/Redis와 같은 캐시 시스템일 수 있다.
이러한 구조는 단순하고, 안정적이고, 규모 확장이 용이하다.
시스템 전체 전개도는 다음과 같이 그릴 수 있다.
'시스템설계' 카테고리의 다른 글
[시스템 설계] 데이터센터 이중화 (0) | 2023.05.06 |
---|---|
캐시 전략 (Cache Strategy) 종류 (0) | 2023.05.03 |
[시스템 설계] 서버 응답시간(latency) 개선 (캐시, CDN) (0) | 2023.04.28 |
[시스템 설계] Failover 시스템 설계 (0) | 2023.04.27 |
Reverse Proxy, Forward Proxy (0) | 2023.04.26 |