다중 서버에서의 Session

이한수·2022년 8월 1일
0

참고 : https://hyuntaeknote.tistory.com/4?category=867120
https://hyuntaeknote.tistory.com/6?category=867120
https://hyuntaeknote.tistory.com/7?category=867120

모든 내용과 이미지는 해당 블로그를 참조하였습니다.

🎉 Scale-Up / Scale-Out

Scale-Up

단일 서버의 성능을 증가시키는 방식으로써, 철저하게 ACID가 지켜져야하는 환경에 적합합니다..

장점

  • 여러 대의 서버를 관리하는 것이 아니므로 데이터 정합성으로 부터 자유롭다.

단점

  • 하나의 서버 장비에 설치 가능한 CPU,메모리,디스크 수의 제한이 있다.
  • 특정 수준을 넘어가면 성능 증가폭이 미미하다.
  • 비용이 비싸다.
  • 한 대의 서버가 모든 트래픽을 감수해야 한다.

Scale-Out

동일한 사양의서버를 추가하여 성능을 증가시키는 방식으로써 , 다수의 처리를 동시 병행적으로 행해야 하는 경우 적합합니다..

장점

  • 확장에 유연하다.
  • 트래픽을 분산 시킬 수 있다.

단점

  • 데이터 정합성 문제.
  • 로드 밸런싱을 구현해야 한다.

데이터 정합성 문제가 가장 까다로운 문제입니다.
로그인을 할 때, 하나의 서버에 세션을 관리한다고 가정하겠습니다.

세션은 하나의 서버에 저장되는데, 여러 대의 서버가 있을 경우,
로드 밸런싱에 의해, 세션이 저장되지 않은 서버로 요청이 갈 경우
인증된 사용자가 아니게 됩니다.

🎉 Sticky Session 방식

고정된 서버로 모든 요청을 처음 세션을 생성한 서버로 보내는 것을 의미합니다.

정합성 문제로부터 자유로워 질수는 있으나, 트래픽이 집중되는 경우 문제가 생길 수 있습니다.

세션이 있는 서버로 트래픽이 몰릴 경우, 사용자는 세션이 없는 다른 서버를 이용할 수 없기 때문입니다.

또한, 해당 서버의 장애가 발생할 경우 세션 정보를 잃어버려 가용성이 떨어집니다.

🎉 세션 클러스트링

All-to-all Session Replication

생성된 세션을 모든 서버의 세션저장소로 복제하는 방식입니다.

이렇게 되면 , 사용자는 고정된 서버로 요청을 보낼 필요가 없어집니다.

뿐만 아니라, 상대적으로 트래픽과 장애로부터 자유로워 집니다.

하지만, 모든 서버에 복제해야 하므로, 많은 메모리를 낭비하게 됩니다.

고로 , 해당 방식은 4개 이상의 서버를 가진 경우에는 추천하지 않는다고 합니다.

primary-secondary Session Replication

생성된 세션 객체를 Secondary(Backup)서버에는 전체를 복사하고

그 나머지 서버는 JSESSION ID만을 복제하는 것입니다.

이전 방식에 비해 상대적으로 메모리를 덜 낭비할 수 있으며 , 특

정 서버의 장애를 대비할 수 있습니다.

하지만 , JSESSION ID만을 받고 , 세션 객체를 가지고 있는

Primary 서버에 요청하여 해당 객체를 받아와야 한다는 단점이 있

습니다.

🎉 세션 저장소의 분리

별도의 세션 저장소를 사용하는 것을 의미합니다.

해당 방식의 경우 , 정합성 문제 , 복사 비용등을 모두 해결할 수 있습니다.

적합한 세션 저장소는??

세션 저장소를 분리함으로써 , 많은 문제들이 해결되었지만
이 또한 문제점을 언급하자면, 분리된 세션 저장소를 방문해야 한다는 점입니다.

성능에 영향을 최소화 하기 위해서는 세션 저장소로써 적합한 데이터 베이스를 선택해야 합니다.

이 때 크케 In-Memory 방식과 디스크 기반 방식이 있습니다.

디스크 기반

MySQL,Oralcle 등과 같은 관계형 데이터 베이스가 있습니다.

디스크에 저장되어 영구적으로 보관할 수 있지만, 속도가 느리고

휘발성 데이터인 세션을 저장하기에 적합하지 않습니다.

스토리지 엔진에 따라서 메모리에 저장하기도 합니다.

In-Memory 기반

메모리에 저장하고 관리합니다.

또한 디스크 기반보다 빠른 속도를 자랑합니다.

물론, 메모리에 저장되기에 전원이 공급되지 않게 되면 모두 날라가 버리게 되지만

일부 In-Memory 데이터 베이스에서는 Replication이라는 기능을 통해 failover를 지원한다고 합니다.

즉, 장애에 대비하여 Master DB를 Slave DB에 복제하여 Master

DB에서 장애가 발생할 경우 Slave DB로 대체하는 것입니다.

🎉 세션에 적합한 In-Memory DB

세션 객체가 저장되는 방식과 유사하게 Key-Value 형태로 데이터를 저장하는 데이터베이스가 있습니다.

이를 Key-Value 데이터베이스 혹은 Key-Value Model NoSQL
이라고 합니다.

관계형 DB처럼 복잡한 조회 연산을 지원하지는 않지만, 단일 키 처리만을 지원하기에 고속 읽기와 쓰기에 최적화된 경우가 많습니다.

세션 또한 간단한 연산을 통해 처리할 수 있기에, Key-Value 형태의 DB가 적합하다고 볼 수 있습니다.

그 중에서도 가장 많이 사용되는 것이 Redis와 Memcached입니다.

Redis와 Memcached의 경우 , 나중에 학습 후 포스팅하겠습니다.

profile
성실하게

0개의 댓글