개발 etc

백엔드 아키텍처 기초 3 - 웹 계층 수평적 확장

묠니르묘묘 2023. 6. 27. 14:35

 

백엔드 아키텍처 기초 1에서는 규모에 따른 웹 계층을 수평적 확장하는 방법을 알아봤다.

웹 서버를 Scale Out 하더라도 로드 밸런서를 통해 트래픽 분산을 시키는 방법이다.

하지만 사용자 상태 정보와 같은 점은 생각하지 않았다.

이번에는 그에 관해 고민하고 정리한다.

 

웹 서버끼리 상태 정보는 어떻게 하나요?

 

🚀 무상태(stateless) 웹 계층

  • 상태 정보를 웹 계층에서 제거하고, DB 같은 지속성 저장소에 보관하고 필요할 때 가져오는 것

 

📚 상태 정보 의존적인 아키텍처

  • 서버는 클라이언트(사용자)의 상태 정보를 유지하여 요청들 사이에 공유되도록 함

상태 정보 의존적인 아키텍처

  • 같은 클라이언트(사용자)로부터의 요청은 항상 같은 서버로 전송되어야 하는 단점 존재
    • 즉, 사용자 A가 서버 2에 요청하면 새로 로그인을 해야 함
    • 이를 위해 로드밸런서가 고정 세션(sticky session) 기능 제공
    • 하지만 고정 세션도 하나의 서버에만 트래픽이 몰릴 수 있는 문제점 존재
    • 또한, 고정 세션을 사용하면 서버 추가 및 제거도 까다로울 수 있음

 

📚 무상태 아키텍처

  • 클라이언트 요청은 어떤 웹 서버로도 전달될 수 있음
  • 웹 서버는 상태 정보가 필요할 경우 공유 저장소에서 데이터 가져옴
  • 즉, 상태 정보는 웹 서버로부터 물리적으로 분리되어 있음

무상태 아키텍처

  • 이 구조는 단순하고 안정적이며 규모 확장 쉬움
  • 공유 저장소는 RDBMS, Memcached/Redis, NoSQL 일 수 있음
    • 자동 규모 확장(autoscaling)이 지원되는 저장소 사용을 추천

 

🚀 무상태  웹 계층이 추가된 아키텍처 설계

  • 상태 정보가 웹 서버들로부터 제거
  • 트래픽 양에 따라 웹 서버 추가 및 제거만 해도 자동으로 규모 확장 가능