세션 클러스터링이란?

carlkim·2024년 1월 18일
1

WAS

목록 보기
9/12
post-thumbnail

세션 클러스터링 매우 중요한 개념 -- 오픈 시프트 쓸때

세션 클러스터링 쓰는데 이거 되냐는 질문이 날라온다 이 때 대답할 때 알아야 한다.

세션 클러스터링이란?

클러스터는 군집이나 무리를 뜻한다.

두 대 이상의 WAS가 동시에 한 가지 업무를 수행하도록 만드는 기술이다.

세션 클러스터링은 WAS가 두 대 이상 설치되어 있을을 경우 동일한 세션으로 세션관리를 하는 것을 의미한다.

동일한 세션으로 여러 곳에서 사용할 수 있게 관리하는 것.

조금 길게 설명하면

WAS가 2대 이상 설치가 되어있을 경우 세션을 공유하여 대체된 WAS에도 동일한 세션을 관리하는 것을 의미한다.

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

클러스터링이란?

클러스터링은 데이터 포인트를 비슷한 특성이나 속성을 가진 그룹 또는 클러스터로 그룹화하는 기술이다.

여러대의 서버를 한가지 업무를 수행하도록 만드는 행위.
여러대의 서버를 운용한다면 한 DB에서 시스템 장애가 나도 나머지 DB에서 역할을 수행할 수 있도록 하여 지속적인 서비스를 제공할 수 있다.

언제 세션 클러스터링을 쓸까?

  1. WAS가 두 대 이상일 때

동시 접속자가 많은 경우 하나의 WAS만으로는 모든 처리가 불가능하기 때문에 WAS를 묶어 분산처리 한다.
이 때 WAS는 한 곳에 세션을 몰아주거나 세션 서버를 따로 두어 관리하게 된다.

  1. 서버 단계에서 볼 때

아파치 서버를 두고 톰캣 서버를 연통시켜서 사용하는 방법이다. 아파치를 통해 세션을 공유한다.

2-1) Horizontal Clustering

2-2) Vertical Clustering

서버가 하나가 아닐 때 세션을 어디 저장하나?

세션 방식은 보통 서버에 로그인 정보를 저장한다.

방법 1. Sticky Session

로드밸런서가 세션 기간 동안 동일한 클라이언트의 request를 항상 동일한 서버로 라우팅 해주는 기능

예를 들어, User1 이 1번부터 3번까지의 서버 중 1번 서버에 세션을 생성하였다면, 이후에 User1이 보내는 모든 요청은 1번 서버로만 보내지게 된다. 즉, Load Balancer는 User가 첫 번째 세션을 생성한 서버로 모든 요청을 리다이렉트 하여 고정된 세션만 사용하게 한다.

이를 위해서 로드 밸런서는 요청을 받으면 가장 먼저 요청에 쿠키가 존재하는지 확인한다. 쿠키가 있으면 해당 요청이 쿠키에 지정된 서버로 전송된다. 쿠키가 없는 경우, 로드밸런서가 기존 로드 밸런싱 알고리즘을 기반으로 서버를 선정한다.

장점 :

-- 여러 서버들은 세션 데이터를 교환할 필요가 없다.
-- 정합성 이슈에서 자유로워 진다.

단점 :
--특정 사용자의 세션은 한 서버에 의존하기 때문에 특정 서버에 트래픽이 집중된다면 장애가 발생할 수 있다.

세션을 정보를 저장한 서버가 터지면 세션을 처리하는데 문제가 생긴다는 것.

방법 2. Tomcat 지원, Session Clustering

was가 2대 이상 설치되어 있을 경우 모든 세션 정보를 여러대의 서버에 다 가지고 있는 것.
세션이 변경될 때마다 세션정보를 모든 서버에 저장해야 한다.

장점 : 여러 대의 was가 있어도 동일한 세션으로 관리해 스티키 세션의 단점을 극복

단점 : 모든 서버에 세션정보를 다 저장해야하기 때문에 서버 메모리의 비효율이 생긴다.

또한 세션 정보를 추가해야 할 때 마다 모든 서버에 세션정보를 다 추가해야한다. -> 모든 서버에 네트워크 요청을 해야 해서 많은 네트워크 요청이 발생한다. 

서버에 대수가 늘어나는 만큼 더 많은 네트워크 요청이 생긴다.

세션 메모리에 있는 정보를 공유.
복제를 해주려면 서로 공유해야함, 두 명 있을 때는 괜찮은데 단점은 was 별로 수요가 다른데 더 많은쪽 메모리를 크게 사용해야하니까 메모리 사용량이 많아진다.
메모리 사용량이 점점 많아진다.
세션 클러스터링은 보통 4대 메모리가 많다하면 8대까지는 가는데 8대를 넘기지 않아야한다. --- 세션 복제하느라 바쁨
8대만 해도 8배이 메모리를 써야한다 --- 그래서 풀로 복제를 안하고 짝을 지어서 복제해서 사용하기도 함
이렇게 하면 8대를 써도 적은 메모리를 사용해도 된다 -- distribution duplicate 라함.

한 was가 죽어도 다른 was가 살아있으니 처리가 가능
그래도 세션클러스터링 해야겠다 하면 메모리 서버를 따로 둔다, 레디스같은 메모리 서버를 써서 메모리를 요청해서 쓴다.
대용량 커버하려면 이런 방법도 사용 할 수 있다
레디스, data grid 같은 것들이 있음

방법3. 레디스(Redis). 세션 서버를 레디스에 따로 두어 세션 스토리지를 관리하는 것

레디스는 InmemoryDB이며 Session Storage로 사용될 수 있다.
서버에 세션 정보를 저장하는 것이 아니라 외부에 레디스 서버를 띄우고 이 서버에 모든 세션정보를 저장하는 것이다.
was서버들이 레디스에서 세션정보를 읽어온다.

장점1.
스티키 세션의 단점 극복 : 
한 서버에 문제가 생겨도 외부에 세션정보를 저장했기 때문에 서버 장애 문제를 극복하고 한 대의 서버에 트래픽이 몰릴 일이 없다.
세션 클러스터링의 단점 극복 :
서버들끼리 네트워크 요청을 할 필요도 없고 서버를 스테이트리스(stateless)하게 유지할 수 있다

profile
가장 나답게 문제해결.

0개의 댓글