Multi Server Session Storage
Multi Server Session Storage
Multi Server Session Storage
- 여러 서버(WAS) 에서 세션 저장소를 사용하는 방법에는 여러 방법이 존재
- 이 때 각각의 WAS가 독립적인 세션 저장소를 사용하는 경우, 데이터의 불일치가 발생함 (정합성 문제)
- 이를 해결하기 위해 다음과 같은 여러 가지 방법 존재
Sticky Sesstion
- 세션을 고정시키는 방법으로, 로드 밸런서가 어떤 사용자의 요청을 처리하는 서버를 고정시키는 것
- 어떤 서버에 요청을 보낼 지는 쿠키를 확인하면 됨, L7에서 동작
- 세션이 유지되는 동안 동일한 서버와 통신하므로, 다른 웹 서버의 세션 저장소와의 정합성을 고려하지 않아도 됨
- 그러나 다음과 같은 단점 존재
- 로드 밸런싱이 제대로 수행되지 않고 특정 서버에 몰릴 수 있음
- 한 서버가 죽는 경우 해당 서버를 이용하는 사용자는 세션 정보를 잃어버림 (Stateless하지 않아서 생기는 문제)
Session Clustering
- Tomcat에서 사용하는 방법
- 각 서버의 세션 저장소에 변경된 사항이 발생한 경우, 해당 내용을 다른 서버의 세션 저장소에 모두 복사하는 방법
- 이후 다른 서버에 접속하더라도, 세션 정보가 복제되어 있으므로 정합성 문제를 해결 가능
- 또한 로드 밸런싱 역시 가능하며, 한 서버가 죽어도 운영 가능
- 그러나 다음과 같은 단점 존재
- 모든 서버가 동일한 내용을 가져야 하므로, 많은 메모리가 필요
- 또한 내용이 바뀔 때 마다 모든 서버의 값을 업데이트 해야 하므로, 서버 수에 비례해 트래픽이 증가
별도의 Session Storage
- 각 서버마다 세션 저장소를 가지는 것이 아닌, 모든 서버마다 하나의 세션 저장소를 이용하는 방법
- 한 서버가 장애가 발생해도 문제가 없으며, 정합성도 문제가 되지 않고, 값을 복제할 필요도 없음
- 또한 세션 저장소는 데이터 소멸에 따른 피해가 비교적 적기 때문에, 세션 저장소로 In-memory DB를 사용하는 것이 좋음
- 그럼에도 하나의 세션 저장소는 Single Point of Failure가 될 수 있음
- 이를 방지하기 위해 master-slave 구조 등을 활용해 서비스 장애시 slave DB를 master DB로 승격시켜 장애를 해결 가능
References
- https://hyuntaeknote.tistory.com/6
- https://hyuntaeknote.tistory.com/7