한 웹 사이트에 접속자가 한 두명이 아닌 수천명이 접속한다면 서버는 모든 접속자에게 응답해주려고 하지만 결국 동작을 멈추게 될 것이다.
예를 들면, 선착순 이벤트에서 동시 접속자 수가 급격하게 증가했을 때 서버가 죽는 것이 이와 같은 경우다.
scale-up
: 하드웨어의 성능을 높여 서버가 빠르게 동작하도록 하는 방식scale-out
: 여러 대의 서버가 나눠서 동작하도록 하여 성능을 개선하는 방식
scale-out
방식은 scale-up
방식에 비해 비용이 적게 들고 여러 대의 서버 덕분에 무중단 서비스를 제공할 수 있다.
로드밸런싱과 클러스터링은 모두 scale-out
방식이다.
로드밸런싱이란 트래픽이 많을 때 가상 IP를 통해 여러 서버에 접속하도록 분배하는 기능이다.
로드밸런싱을 이용하면 한 서버가 내려가더라도 이중화시킨 다른 서버에서 서비스를 지속하도록 할 수 있기 때문에 접속자들이 문제 없이 서비스를 이용할 수 있다.
로드밸런싱의 문제는 세션(Session) 이다.
세션이 저장된 서버가 아닌 다른 서버에 접속하게 되는 경우, 해당 클라이언트의 세션이 유지되지 않기 때문이다.
세션을 고정(session sticky)함으로써 이를 해결 할 수 있다. 이 방법으로 특정 사용자의 요청이 전달될 노드를 고정시킬 수 있다.
하지만 고정된 세션의 노드에 장애가 발생하면 고정한 의미가 없어지기 때문에 장애가 발생하여 비활성화된 노드에 대한 고려가 필요하다.
-
Round Robin : 단순히 Round Robin으로 분산하는 방식이다.
-
Least Connections : 연결 개수가 가장 서버를 선택하는 방식으로 트래픽으로 인해 세션이 길어지는 경우 권장한다.
-
Source : 사용자의 IP를 Hashing하여 분배하는 방식으로 사용자가 항상 같은 서버로 연결되는 것을 보장한다.
여러 대의 컴퓨터를 병렬로 연결하여 하나의 컴퓨터처럼 사용할 수 있게 해준다.
특정 장비에 문제가 생기거나 실행중인 애플리케이션에 문제가 발생하더라도 서비스에 영향을 미치지 않도록 해준다.
로드밸런싱은 한 쪽 서버에 부담이 가지 않도록 트래픽을 분산해주는 역할을 한다.
반면, 클러스터링은 여러 개의 서버를 하나로 묶어 성능을 높여 많은 양의 트래픽을 처리하도록 하는 것이다.
클러스터링은 각 노드 간의 상태를 공유하기 떄문에 클러스터링된 서버 중 하나가 죽더라도 기존의 세션 연결이 끊기지 않고 다른 서버로 failover
된다.
WAS
가 2대 이상 설치되어 있을 경우, 각각의 WAS
가 다른 세션을 가질 수 있다. 이는 세션에 대한 처리 불일치가 일어날 수 있다.
이에 따라 각 WAS
에 대한 세션을 하나의 세션으로 관리하게 함으로써 새로운 WAS
에 접속하더라도 세션에 대한 불일치를 막는다. 이를 세션 클러스터링이라고 한다.
이외에도 Redis
를 사용하여 세션 서버를 따로 두고 세션을 일치시키는 방법도 있다.