밸런싱에 대해서 알아보자!
밸런싱이란?
한대의 서버 컴퓨터만으로 다수의 클라이언트를 수용할 수 없기 때문에, 적절하게 다른 서버로 배치해주는 방법을 말합니다. 서버 이용자가 한두명이면 상관이 없지만, 백만명으로 서버 이용자가 늘었다면 어떻게 될까?
이러한 문제를 해결하기 위해서는 어떻게 해야할까요?
이 상황에서 여러 서버에게 균등하게 트래픽을 분산시켜주는 장치(Load Balancer)를 사용해야하는데,
이것을 로드밸런싱(Load Balancing) !! 이라고 합니다.
- 여러 대의 서버(server)에게 균등하게 트래픽(Traffic)을 분산시켜주는 역할을 하는 것이
로드 밸런서(Load Balancer)!! 라고 합니다.
로드 밸런서가 서버를 선택하는 방식
- 라운드 로빈 방식(Round Robin) : CPU 스케줄링의 라운드 로빈 방식을 사용
- 적은 수 연결 방식(Least Connections) : 1) 연결 개수가 가장 적은 서버 선택, 2) 트래픽으로 세션이 길어지는 경우 권장
- 소스(Source) : 사용자 IP를 해싱하여 분배, 특정 사용자가 항상 같은 서버로 연결되는 것 보장
로드 밸런싱(Load Balancing)이란?
- 여러 서버에 부하를 나누어주는 역할을 합니다.
- 서비스를 운영하는 사이트의 규모에 따라 웹 서버를 추가로 증설하면서(Scale up) 로드 밸런서로 관리해주며 웹 서버의 부하를 해결합니다.
- 로드 밸런서(Load Balancer)를 클라이언트와 서버 사이에 두고, 부하가 일어나지 않도록 여러 서버에 분산시켜주는 방식입니다.
- 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산 처리하여 서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스 입니다.
서비스 이용자가 증가함에 따라서 트래픽을 다루는 방법
증가하는 클라이언트에 대한 모든 트래픽을 1대의 서버 컴퓨터로 감당할 수 없기때문에 서버를 다루는 2가지 방법이 있습니다.
Scale-up & Scale-out
- Scale-up
- 하드웨어의 성능을 올리는 방법, 하드웨어의 성능을 올리는 방법(Scale-up)입니다.
- 단점으로는 비용이 많이 듭니다.
- Scale-out
- 여러대의 서버가 나눠서 일하도록 하는 방법, 서버를 여러대로 증설(Scale-out)을 하면 무중단 서비스를 제공하는 환경 구성이 용이하다.
- 하나의 Server 보다는 여러 대의 Server가 나눠서 일을 하는 방법.
- 하드웨어 향상하는 비용보다 서버 한대 추가 비용이 더 적은 장점과, 여러 대의 서버 덕분에 무중단 서비스를 제공합니다.
Load Balancer 장애 대비는 어떻게 할까요?
- Load Balancer를 이중화하여 장애를 대비할 수 있습니다.
장애가 났을 경우 시나리오
- 이중화된 Load Balancer들은 서로 Health Check를 합니다.
- Main Load Balancer가 동작하지 않으면 가상IP(VIP, Virtual IP)는 여분의 Load Balancer로 변경됩니다.
- 여분의 Load Balancer로 운영하게 됩니다.
로드 밸런서 장애 대비
서버를 분배하는 로드 밸런서에 문제가 생길 수 있기 때문에 로드 밸런서를 이중화하여 대비한다.
- Active 상태와 Passive 상태
예상 질문
로드 밸런싱을 사용하는 이유를 설명해주세요
서비스 이용자가 한 두명일 때는 상관이 없지만, 수천 수백만으로 늘었을때 서버의 트래픽을 감당할 수 없을 때 사용하는 방법이며, 과부하된 서버 트래픽을 여러대의 서버로 분산시켜주는 방식을 로드 밸런싱이라고 합니다.
서버를 다루는 방법은요?
Scale-up과 Scale-out이 있습니다. Scale-up은 하드웨어의 성능을 올리는 방식이며, 단점으로는 비용이 많이 듭니다.
Scale-out은 서버의 개수를 늘리는 방법입니다. Scale-up에 비해서 비용이 적게 들며, 여러대의 서버로 무중단 서비스를 진행할 수 있습니다.
reference
'CS > 네트워크' 카테고리의 다른 글
HTTP Method 정리 (0) | 2022.01.18 |
---|---|
프록시(Proxy)란 ????????! (0) | 2022.01.17 |
웹사이트에 접속할 때 일어나는 상황에 대해서 (0) | 2022.01.15 |
쿠키(Cookie) & 세션(Session)의 차이에 대해서 알아보자! (0) | 2022.01.14 |
동기(Synchronous) & 비동기(Asynchronous)의 차이점? (0) | 2022.01.13 |