Server

[Server] Session Clustering

허몽구 2024. 1. 28. 13:45

 

1. Session Clustering (세션 클러스터링) 이란?

세션 클러스터링이란, WAS가 2대 이상 설치되어 있을 경우 세션을 공유하여 세션 데이터를 여러 서버 간에 분산하여 고가용성 및 부하 분산을 구현하는 기술이다.

설명만 들으면 무슨 소리인지 감이 안 잡힐 수도 있기에... 예를 들자면,

L4 스위치가 사용자를 접속했던 WAS로 유도해주지만, 접속자 수가 초과할 경우 다른 WAS를 사용하게 되는데 이때 세션 불일치 문제가 발생할 수 있다.

이때 세션 클러스터링을 통해 세션 불일치를 해결해줄 수 있다.

 

세션이 뭔지 모르는 분들을 위해 간단하게 설명해자면 사용자의 상태를 유지하기 위한 정보를 저장하는데 사용하며,

사용자가 웹 사이트를 탐색하는 동안 일시적으로 저장되는 데이터를 말한다.

 

세션 클러스터링은 여러 서버 간에 세션 데이터를 동기화하여, 한 서버에서 발생한 세션 변경 사항이 다른 서버에서도 공유되도록 한다.

이를 통해 사용자가 서버 간에 이동하더라도 세션 데이터를 유지할 수 있다.

이는 사용자 경험을 향상시키며, 특정 서버에 장애가 발생하더라도 다른 서버에서 세션을 계속 제공함으로써 고가용성을 제공한다.

 

그래도 이해가 잘 안 된다면..

 

2. Clustering (클러스터링) 이란?

여러 대의 서버를 한 가지 업무를 수행하도록 만든 것이다. 

여러 대의 서버를 운용하면 하나의 DB에서 시스템 장애가 발생하더라도, 나머지 DB에서 역할을 수행할 수 있도록 하여 지속적인 서비스를 제공할 수 있다.

 

https://jane096.github.io/project/how-to-solve-server-overload-p2/

 

사진을 참고로 간단히 말하자면 각각의 WAS에 있는 세션을 묶어 동일한 세션으로 관리하는 방법이라고 생각하면 된다.

 

3. 특징

세션  클러스터링은 다음과 같은 특징이 있다.

 

1) 고가용성

세션 클러스터링은 여러 서버 간의 세션 데이터를 분산하여 저장하므로 하나의 서버에 장애가 발생하더라도 다른 서버에서 세션 데이터를 제공할 수 있다. 이는 애플리케이션의 고가용성을 보장하며 사용자에게 중단 없는 서비스를 제공한다.

 

2) 부하 분산

로드 밸런서를 사용하여 클라이언트 요청을 여러 서버로 균등하게 분산시킨다.

그럼으로써 서버 간에 부하를 분산하고 시스템 전체적으로 성능을 최적화할 수 있다.

 

3) 스케일 아웃

세션 클러스터링은 서버의 수를 동적으로 확장할 수 있는 Scale-out (스케일 아웃) 방식을 지원한다. (이는 다음 포스팅에 자세히 설명하도록 하겠다!)

사용자 수나 트래픽이 증가할 경우 새로운 서버를 추가하여 성능을 확장할 수 있다.

 

4) 데이터 일관성

세션 클러스터링은 여러 서버 간에 세션 데이터를 일관되게 유지하기 위한 동기화 메커니즘을 제공한다.

세션 데이터의 변경이 한 서버에서 다른 서버로 효율적으로 전파되어 모든 서버 간에 동일한 정보를 제공한다.

 

5) 스티키 세션

일부 로드 밸런서 및 클러스터링 솔루션은 스티키 세션을 지원한다.

스티키 세션은 특정 사용자의 요청이 항상 동일한 서버로 라우팅되도록 하는 기능으로, 세션 클러스터링에서 사용자 경험을 향상시키는 데 사용된다.

 

6) 세션 유실 방지

클러스터 내에서 어떤 서버가 다운되었을 때, 해당 서버에서 처리하던 세션 데이터가 유실되지 않도록 안전하게 전환된다.

이를 통해 사용자는 중요한 세션 데이터를 유지하면서 서비스를 계속 이용할 수 있다.

 

7) 확장성

세션 클러스터링은 서버를 추가하거나 제거함으로써 시스템을 쉽게 확장할 수 있다.

이는 트래픽이나 사용자 수의 증가에 따라 조정할 수 있어 유연성을 제공한다.

 

4. 단점

반면 단점에는 어떤 것들이 있을까?

 

1) 네트워크 부하

서버 간에 세션 데이터를 동기화하기 위해서는 네트워크 트래픽이 발생한다.

특히 세션 데이터가 자주 변경되는 경우, 네트워크 부하가 증가할 수 있다. 이는 대규모 애플리케이션에서 고려해야 할 사항이다.

 

2) 일관성 유지의 어려움

서버 간에 세션 데이터를 일관되게 유지하기 위해서는 동기화 메커니즘이 필요하다.

동기화가 제대로 이루어지지 않으면 서버 간에 데이터 불일치가 발생할 수 있다.

 

3) 확장성 한계

특히 고가용성을 위한 복잡한 구성이나 데이터베이스 스토리지를 사용하는 경우, 확장성에 제약이 있을 수 있다.

 

4) 데이터 손실 위험

일부 세션 클러스터링 구현에서는 서버 간의 통신 오류나 장애로 인해 세션 데이터가 손실될 수 있다.

이러한 상황에 대한 대비책이나 복구 메커니즘이 필요하다.

 

5) 클러스터 관리 오버헤드

클러스터링 환경에서 서버를 추가하거나 제거하는 작업, 장애 시 복구 등 클러스터 관리에는 추가적인 오버헤드가 발생할 수 있다.

 

 

세션 클러스터링을 사용하기 위해서는 비용이나 프로젝트의 규모, 네트워크 등 고려한 후 사용하는 것이 좋아보인다.

(극단적으로 사용자가 10명... 이러면 굳이 사용할 필요가 없다는 것이다.)

 

 


 

요즘 서버에서 세션 클러스터링 관련된 것을 마주쳐서 공부할 겸 정리해봤다.

사용 중인 WAS가 2대 이상이라 세션 클러스터링이 효율적인 것 같다!

WAS는 그냥 웹 어플리케이션 서버... 여기서 더 깊게 들어가서 공부하지 않았는데 의외로 공부할 것이 많은 것 같다....