본 글은 educative.io 의 Grokking Modern System Design Interview 코스의 Load Balancer 챕터 내용을 정리한 글입니다.
Introduction
지난 레슨에서 로드밸런싱은 데이터센터 내에서만 동작하는 것으로 보여졌다. 하지만 로드밸런싱은 글로벌과 로컬 스케일 둘 다에 필요한데, 두 경우가 어떻게 다른지 알아보자.
- Global server load balancing (GSLB)
- GSLB 는 여러 지역에 걸쳐 트래픽 부하를 분산시킨다
- Local load balancing
- 데이터 센터 내에서 일어나는 로드밸런싱을 말한다. 이 경우는 데이터센터 내의 서버들의 효율성과 더 나은 자원 활용에 중점을 둔다
Global server load balancing
GSLB 는 전세계적으로 들어오는 트래픽 부하를 특정 데이터센터로 적절하게 분산되도록 해준다. 예를들어 특정 데이터센터에 파워 또는 네트워크 장애가 발생한 경우 모든 트래픽이 다른 데이터센터로 재라우팅 되어야 한다. GSLB 는 사용자의 지리적 위치, 지역마다 다른 호스팅 서버수, 데이터센터의 상태 등을 고려하여 어디로 전달할지 결정한다.
다음 챕터에서 GSLB가 어떻게 자동 영역 장애복구를 제공하는지 확인할 것이다. GSLB 는 사내에 온프레미스로 설치하거나 LBaaS 를 통해 제공받을 수도 있다.
밑의 그림은 GSLB가 서로 다른 3개 데이터센터로 요청을 전달하는 것을 나타낸다. 각 데이터센터 내의 로컬 LB 레이어가 GSLB 와의 제어부 연결 (control plane connection) 을 유지하여 GSLB 에 로컬 LB 와 서버팜의 상태 정보를 제공한다. GSLB 는 이 정보와 각 지역별 설정, 모니터링 정보를 활용하여 트래픽 부하를 어디로 전달할지 결정한다.
Load balancing in DNS
DNS 가 어떻게 GSLB 역할을 할 수 있는지 알아보자. DNS 는 DNS 쿼리에 여러개의 IP 주소로 응답할 수 있다. 지난 챕터에서 nslookup 의 결과를 보면서 DNS 를 통한 로드밸런싱이 가능함을 확인했다. DNS 는 쿼리 응답의 IP 주소를 재정렬하기 위해 간단한 기술을 사용한다. 이를 통해 서로 다른 유저는 재정렬된 IP 주소를 갖게되고, 그 결과로 사용자 요청이 서로 다른 서버로 전달된다. 이러한 방법을 통해 DNS 는 요청의 부하를 서로 다른 데이터센터로 분산시킬 수 있고, GSLB 역할을 한다고 할 수 있다. 특히 DNS 는 로드밸런싱을 수행하기 위해 아래와 같이 라운드로빈을 사용한다.
아래 그림에서 빨강, 노랑 파랑, 남색 유저 순서대로 DNS 에 쿼리를 요청했고, DNS 는 라운드 로빈을 사용하여 DC1, 2, 3, 1 번 순서로 IP 주소 응답을 내려준 결과 각 DC 에 부하가 고르게 분산되었다.
그러나 라운드로빈에는 다음과 같은 제한이 있다.
- 서로 다른 ISP 는 서로 다른 수의 유저를 갖는다. 따라서 많은 고객이 이용하는 ISP 는 캐시된 동일한 IP를 고객들에게 제공할 것이고, 그 결과로 최종 서버들에 균등하지 않은 부하를 발생시킬 수 있다.
- 라운드로빈 로드밸런싱 알고리즘은 최종 서버가 장애나는 상황을 고려하지 않기 때문에 캐시된 엔트리가 만료되는 TTL 까지는 장애난 서버의 IP 주소로도 계속해서 부하를 전달한다. 이런 경우 서비스의 가용성이 타격받을 수 있다.
이러한 한계에도 불구하고 라운드로빈은 여전히 많은 DNS 서비스 제공자들이 사용하고 있다. 또한 서로 다른 데이터센터들간에 로드밸런싱을 효과적으로 하기 위해 DNS는 캐시된 엔트리에 짧은 TTL 을 사용하고 있다.
Application Delivery Controller (ADC)
DNS 는 GSLB 의 유일한 형태가 아니다. GSLB 를 수행하는 더 나은 방법은 ADC(Application delivery controller)와 클라우드 기반 로드 밸런싱(cloud-based load balancing) 이다.
ADC 는 Application Delivery Network (ADN) 의 일부이며 로드밸런싱을 포함한 다양한 서비스를 제공하는 LB 의 슈퍼셋으로 볼 수 있다. ADC 의 주요 태스크는 서버팜의 로드를 줄이기 위해 웹 가속 (web acceleration) 을 수행하는 것이다. 계층 3과 7 사이의 잘 알려진 서비스로는 캐싱, SSL 오프로딩, 프록시/리버스 프록시 서비스, IP 트래픽 최적화 등이 있다. ADC 는 GSLB 또한 구현한다.
The need for local load balancers
DNS 는 로드밸런싱에 아주 중요한 역할을 하지만 다음과 같은 한계가 있다.
- DNS 패킷의 작은 크기 (512B) 는 모든 가용한 서버의 IP 를 담기에 충분하지 않을 수 있다.
- 클라이언트의 행동에 대한 통제가 제한된다. 클라이언트는 수신된 IP 주소 중 하나를 임의로 고를 것이다. 수신된 IP 주소 중 일부는 바쁜 데이터센터에 속해있을 수 있다.
- 클라이언트는 커넥션을 맺을 가장 가까운 주소를 선택할 수 없다. DNS geolocation 또는 anycasting 과 같은 솔루션을 구현할 수 있지만 간단하진 않다.
- 장애가 발생할 경우 캐싱 때문에 (특히 TTL 값이 긴 경우) DNS 를 통한 장애복구가 느릴 수 있다.
이러한 문제들 때문에 로컬 LB 의 형태로 로드밸런싱 레이어가 필요하다.
Question
: DNS 는 GSLB 로 간주될 수 있을까?
→ 그렇다. global traffic management (GTM) 을 하는데는 두가지 방법이 있다
- ADC 를 통한 GTM
- 몇몇 ADC들은 GSLB 를 구현한다. 이 경우 ADC 는 호스팅서버를 실시간으로 확인하여 DC 의 용량과 상태를 기반으로 요청을 전달한다.
- DNS 를 통한 GTM
- DNS 는 클라이언트의 IP 위치를 분석하여 GSLB 를 수행한다. 도메인네임에 대한 IP 를 요청하는 사용자들에게 요청 위치에 지리적으로 가까운 데이터센터의 IP 를 전달하여 DNS 기반 GSLB 를 수행한다
'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 #1 - Introduction to Load Balancers (0) | 2023.03.26 |
Domain Name System (1) | 2023.03.19 |