로드밸런싱이란?
로드밸런싱은 서버에 가해지는 부하(=로드)를 여러 대의 컴퓨터로 분산(=밸런싱)해주는 장치 또는 기술을 통칭합니다.
서버의 로드를 클러스터링된 서버 별로 적절하게 나누어주는 것으로도 볼 수 있습니다.
클러스터링은 아래에서 자세하게 보겠지만 똑같은 구성의 서버를 여러 대 두는 것을 말합니다.
위와 같이 로드 밸런싱은 클라이언트의 요청에 따라 적절한 서버를 선택하여 해당 서버로 응답을 하게됩니다.
그러면 로드 밸런서가 '적절한 서버'를 고르는 기준은 무엇일지 생각해보면 좋을 것 같습니다.
'적절한 서버'를 고르는 기준으로는 다양한 기법이 있습니다.
적절한 서버를 고르는 로드밸런싱 알고리즘
- 라운드로빈 방식
서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식입니다.
여러 대의 서버가 동일한 스펙을 가지고 있고, 서버와의 연결이 오래 지속되지 않는 경우 활용하기 적합합니다. - 가중 라운드로빈 방식
각 서버 별로 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분합니다.
각 서버의 트래픽 처리 능력이 상이한 경우 사용되는 방식입니다. - IP 해시 방식
클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식입니다.
IP를 해싱해서 분배하기 때문에 클라이언트가 항상 동일한 서버로 연결되는 것을 보장합니다. - 최소 연결 방식
요청이 들어온 시점에 가장 적은 연결 상태를 보이는 서버에 우선적으로 트래픽을 배분합니다.
자주 세션이 길어지거나 서버에 분배된 트래픽들이 일정하지 않는 경우에 적합한 방식입니다. - 최소 리스폰타임
서버의 현재 연결 상태와 응답시간(서버에 요청을 보내고 최초 응답을 받을 때 까지의 소요되는 시간)을 모두 고려하여 트래픽을 배분합니다. 가장 적은 연결 상태와 가장 짧은 응답시간을 보이는 서버에 우선적으로 로드를 배분하는 방식입니다.
각각 장단점이 있으니 시스템에 가장 알맞는 알고리즘을 선택하는게 좋아보입니다.
로드 밸런서를 사용할 때 해결하기 어려운 문제 중 하나는 세션 데이터를 관리하는 것입니다.
해결 방안 중 하나로는 Sticky Session이 있습니다.
Sticky Session이란?
첫 요청에 대해 응답을 준 서버가 추후의 요청에 대해서도 해당 서버가 처리하여 세션을 유지시키는 방식입니다.
Cookie를 사용하거나 알고리즘 중 하나인 IP 해시 방식을 사용할 수 있습니다.
하지만 이 방식은 해당 서버가 죽으면 세션이 소실되고 특정 서버에만 과부하가 올 수 있다는 단점이 있습니다.
이러한 단점은 Session Clustering 방식을 통해 어느정도 해결이 가능합니다.
클러스터란?
클러스터는 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터의 집합을 말합니다.
클러스터의 특징
클러스터는 웹 서비스와 같은 일반적인 비즈니스 목적에 대한 요구부터 많은 계산이 요구되는 과학 계산에 이르기 까지 다양한 용도로 구성될 수 있다고 합니다.
크게 작업 부하 분산(Load-Balancing) 클러스터와 고가용성(High-availability) 클러스터로 나뉩니다.
작업 부하 분산 클러스터는 서버를 병렬적으로 구성하여 서버에 대한 부하를 줄이기 위해 사용합니다.
고가용성 클러스터는 Fail-Over 시스템을 구축하기 위하여 사용합니다.
이러한 부분 덕에 특정 장비에 문제가 생기거나 애플리케이션에 문제가 생기더라도 전체적인 서비스에는 영향을 주지 않게 제어가 가능합니다.
Session 유지에 대한 문제
위에서 로드 밸런서 사용 시 Session Clustering 방식을 통해 세션을 유지시킬 수 있다고 했습니다.
Session Clustering은 클러스터의 의미대로 여러 서버의 세션을 동일한 세션으로 관리하는 것으로 볼 수 있습니다.
이 방식은 Sticky Session의 단점은 해결해주었지만 scale-out 관점에서 새로운 서버가 추가 될 때 마다 기존에 존재하던 서버에 새로운 서버의 IP/PORT를 입력해서 클러스터링해줘야 한다는 단점이 있습니다.
그렇기에 세션 서버를 별도로 두어 관리하는 방법도 존재하기는 하지만 해당 세션 서버에 대한 중요도가 올라간다는 점에서 고려해봐야 할 부분인 것 같습니다.
출처
https://m.post.naver.com/viewer/postView.nhn?volumeNo=27046347&memberNo=2521903