본 글은 educative.io 의 Grokking Modern System Design Interview 코스의 Load Balancer 챕터 내용을 정리한 글입니다.
What is load balancing?
일반적인 데이터 센터에는 초당 백만건 정도의 요청이 도착할 수 있다. 이러한 요청들을 처리하기 위해서는 수천 또는 수십억대의 서버들이 부하를 나눠갖기 위해 협업해야 한다.
load balancer (LB) 는 클라이언트의 요청을 사용 가능한 서버들에 균등하게 분배하는 일을 한다. 이를 통해 서버가 과부하되거나 죽는걸 방지한다.
로드밸런싱 레이어는 방화벽 이후 데이터센터 내에서 처음 마주치는 부분이다. 서비스가 초당 수백~수천건의 요청만 처리해도 된다면 로드밸런서가 필요 없을수도 있다. 하지만 클라이언트 요청이 증가하면서 로드밸런서는 아래와 같은 기능을 제공해야 한다
- 확장성 (Scalability)
- 서버를 추가하는 것으로 앱이나 서비스의 용량을 원활하게 늘릴 수 있어야 한다.
- 가용성 (Availability)
- 몇개의 서버가 다운되거나 장애가 발생하더라도 시스템은 여전히 가용해야 한다. 로드밸런서의 기능 중 하나는 서버의 장애 (faults and failures) 를 숨기는 것이다.
- 성능 (Performance)
- 로드밸런서는 요청을 더 적은 부하를 갖는 서버로 전달하여 사용자가 더 빠른 응답시간을 가질 수 있도록 한다. 이는 성능뿐 아니라 자원활용도 또한 향상시킨다
Placing load balancers
보통 LB 는 클라이언트와 서버 사이에 존재한다. 요청은 LB 레이어를 통해 서버로 갔다가 클라이언트로 돌아간다. 하지만 로드밸런스가 사용되는 다른 포인트도 있다.
잘 알려진 3개의 서버 그룹이 있다고 가정해보자. 웹, 앱, DB 서버군이라고 하자. 이 서버들에 트래픽을 분산시키기 위해서는 로드밸런서가 다음과 같은 방법으로 사용될 수 있다.
- 앱의 최종 사용자와 웹서버/앱 게이트웨이 사이에 LB 를 배치
- 웹서버와 비즈니스 로직을 수행하는 앱서버 사이에 LB 를 배치
- 앱서버와 DB 서버 사이에 LB 를 배치
실제로 로드밸런서는 여러 서버인스턴스를 갖는 어떤 두 서비스 사이에라도 위치할 수 있다.
Services offered by loadbalancers
LB 는 위에 기술한 내용 외에도 아래와 같은 서비스들도 제공한다
- Health checking (상태점검)
- LB 는 heartbeat protocol 을 사용하여 서버의 상태와 신뢰성을 모니터링하고, 나아가 사용자 경험을 향상시킨다.
- TLS termination (TLS 종료)
- LB는 클라이언트와의 TLS 종료를 처리하여 최종 서버의 부담을 줄인다
- Predictive analytics (예측 분석)
- LB 는 LB 를 통과하는 트래픽에 대한 분석 또는 통계를 통해 트래픽 패턴을 예측할 수 있다
- Reduced human intervention (인간의 개입 감소)
- LB 자동화로 장애 처리시 발생하는 시스템 관리 공수를 줄인다
- Service Discovery (서비스 검색)
- LB 는 서비스 레지스트리를 조회하여 클라이언트의 요청을 적당한 호스팅 서버로 전달할 수 있다
- Security (보안)
- LB 는 OSI 모델의 서로 다른 계층 (3,4,7) 에서 DoS (서비스 거부) 와 같은 공격을 완화할 수 있다
전체적으로 LB 는 시스템 디자인 측면에서 유연성, 신뢰성, 중복성 및 효율성을 제공한다.
Question
: 로드밸런서가 장애가 날 경우는? 로드밸런서는 SPOF 가 아닌가?
→ 로드밸런서는 일반적으로 재해 복구의 수단으로서 쌍을 지어서 배포된다. 하나의 로드밸런서가 실패하고, 장애를 복구할 대상이 없으면 전체적인 서비스가 다운될 것이다. 일반적으로 고가용서을 유지하기 위해 기업들은 로드밸런서 클러스터를 사용하여 로드밸런서끼리 heartbeat 통신을 통해 서로의 상태를 점검할 수 있도록 한다. primary LB 가 장애가 날 경우 백업 LB 가 바턴을 넘겨받을 수 있다. 하지만 전체 클러스터가 장애가 발생한 긴급상황의 경우 수동 재라우팅이 필요할 수도 있다.
'System Design' 카테고리의 다른 글
Databases #2 - Data Replication (0) | 2023.04.16 |
---|---|
Databases #1 - RDB vs NoSQL (1) | 2023.04.16 |
Load Balancer #3 - Advanced Details of Load Balancers (0) | 2023.03.29 |
Load Balancer #2 - Global and Local Load Balancing (0) | 2023.03.26 |
Domain Name System (1) | 2023.03.19 |