큰 꿈은 파편이 크다!!⚡️

[시스템 디자인 학습] Load balancer 본문

기타 CS

[시스템 디자인 학습] Load balancer

wood.forest 2024. 11. 10. 16:59

연차가 이쯤되니 시스템 디자인 인터뷰도 준비해야해서 급히 공부를 하고 있다.   
로드 밸런서.. 일할때는 의식해본 적도 없고 백엔드 영역이라고 생각해서 굳이 따로 해보려하지도 않았는데 보고있는 시.디 인터뷰 목록에 나와있길래 조금 더 자세히 이해할 수 있는 시간이 되었다. 역시 풀스택의 길은 멀고 험한가보다 ㅎ  

 


Load Balancer (LB)

단어 그대로, Load(부하)를 Balance(조절)해주는 역할을 하는 시스템 디자인의 한 요소이다.   
~몇천 RPS(Request Per Second, 초당 요청 수) 까지는 LB가 필요하지 않을 수도 있기 때문에 꽤나 트래픽이 있는 제품이 아니고서야 타의적으로 경험해보기는 쉽지 않은 듯 하다.  
LB는 서버와 클라이언트 사이에 위치하되, 한 레이어만 구성하지는 않는다.  
  

서버와 클라이언트 사이에 위치

 

 

여러 레이어에 걸쳐 위치



LB의 이점  

- Scalability:  서버를 추가해 시스템을 쉽게 확장할 수 있다.
- Availability: 특정 서버가 죽더라도 다른 서버들에서 요청을 처리하기 때문에 사용자는 서비스를 계속 사용할 수 있다.  
- Performance: 효율적인 트래픽 분배 및 자원 관리를 통해 사용자는 요청에 대한 응답을 빠르게 받을 수 있다.  
  
  

LB의 역할  

- Health checking: heartbeat protocol(서버나 네트워크 장치 간의 연결 상태를 확인하기 위해 주기적으로 “하트비트” 신호를 주고받는 프로토콜)을 사용하여 엔드 서버의 상태와 신뢰성을 모니터링한다.
- TLS termination: 클라이언트와의 TLS termination 처리를 담당하여 엔드 서버의 부담을 줄여준다.
- Predictive analytics: 트래픽을 통해 얻은 통계를 분석하거나, 트래픽을 모니터링하면서 트래픽 패턴을 예측할 수 있다.

 

 

LB 알고리즘

LB는 클라이언트 요청을 특정 알고리즘에 따라 분배한다.

- Round-robin scheduling: 각 요청을 서버 풀 내의 서버들에게 순차적으로 돌아가면서 전달한다.
- Weighted round robin: 일부 서버가 클라이언트 요청을 처리하는 능력이 더 높다면 사용하는 것이 좋다. 각 노드에 가중치를 부여하고, 로드 밸런서는 노드의 가중치에 따라 클라이언트 요청을 전달하며, 가중치가 높을수록 더 많은 요청을 할당한다.
- Least connections: 모든 서버가 동일한 용량을 가지고 있어도 특정 서버에 부하가 고르지 않게 걸릴 가능성이 있다. (ex. 일부 클라이언트의 요청은 처리하는 데 더 오래 걸림) => 새로 도착한 요청을 더 적은 기존 연결을 가진 서버에 할당한다.
- Least response time: 성능에 민감한 서비스에 필요하다. 응답 시간이 가장 짧은 서버가 클라이언트 요청을 처리하도록 보장한다.
- IP hash: 일부 애플리케이션은 IP 주소에 따라 사용자에게 다른 수준의 서비스를 제공한다. => IP 주소를 해싱하여 사용자 요청을 서버에 할당한다.
- URL hash: 애플리케이션의 일부 서비스는 특정 서버에서만 제공될 수 있다. => 특정 URL에서 요청하는 클라이언트는 특정 클러스터나 서버 그룹에 할당한다.
- Randomized: 임의로 서버를 선택하여 요청을 분배한다.
- Weighted least connections: 각 서버의 가중치를 고려하여 Least connections 알고리즘을 적용한다.

 

 

Static / Dynamic algorithms: 서버 상태를 관리하는 알고리즘

- Static algorithms: 서버의 상태 변화를 고려하지 않으므로 서버의 기존 설정 정보를 바탕으로 작업을 할당한다.
- Dynamic algorithms: 서버와의 통신을 통해 서버의 상태를 모니터링하여 활성 서버에만 요청을 전달한다. 서버 상태를 바탕으로 작업을 할당하기때문에 구조가 복잡해지더라도 더 유용하다.

 

 

Stateful / Stateless LB: 클라이언트와 서버 간의 세션 정보를 관리하는 방법

- Stateful load balancing: 클라이언트와 서버 간의 세션 상태를 유지한다. 세션 정보를 모든 로드 밸런서에 걸쳐 공유하고, 유지하며 전달 결정을 내리기 때문에 복잡해지고 확장성이 제한될 수 있다.

Stateless load balancing: 상태를 유지하지 않기 때문에 빠르다. 일관된 해싱을 사용하여 전달 결정을 내리지만, 인프라가 변경될 경우(ex. 새로운 서버가 추가됨) 어려움이 있을 수 있어, 로컬 상태를 유지하는 것이 필요할 수 있다. 이는 로드 밸런서 내부에서만 상태를 유지하는 방향이 된다.

 

 

 

반응형