DNS Load Balancing
DNS 로드밸런싱은 별도의 하드웨어 장비나, 소프트웨어 없이 사용자가 DNS를 이용하여 도메인 정보를 조회하는 시점에서 트래픽을 분산하는 기법이다.
DNS Load Balancing 기법 중에 Round robin 방식은 부하 분산의 대표적인 알고리즘인데, 순서대로 돌아가면서 (보통 시간 단위) 각각의 서버로 트래픽을 분산시켜서 처리하는 알고리즘이다.
즉, 사용자가 도메인 주소를 브라우저에 입력하게되면 DNS가 여러개의 IP 리스트 중에서 랜덤으로 IP를 하나 알려준다.
장단점
장점
- 중간 장비(로드밸런서 등) 없이도 서비스가 가능하다.
- 간편하다.
단점
- 서버의 수 만큼 공인 IP 주소가 필요하다.
- 서버에 장애가 발생해도 감지하지 않고 부하를 분산시킨다.
- 일반적인 로드밸런싱은 Health check를 수반한다. 라운드 로빈 DNS는 별도로 Health check를 하지 않는다.
- DNS 결과를 Caching해서 재사용하기 때문에 균등한 분산이 어렵다.
L4 스위치
DNS round robin은 서버가 서로 동일한 스펙일 경우 사용하는 것이 타당하다. 만일, 성능이 월등히 좋은 서버가 있다면 그 서버에 트래픽을 많이 할당해야 한다.
L4의 부하 분산 방법 중에 WBR(Weighted round robin) 방식을 사용하면 각각의 웹 서버에 가중치를 설정해서 분산 비율을 변경할 수 있다.
마찬가지로, Least connection 방식은 접속 클라이언트 수가 가장 적은 서버를 선택하도록 하는 방식이다. 이를 사용하면 균등하게 부하를 분산할 수 있지만 로드 밸런서에서 각 서버의 커넥션 수를 알아야 하므로, DNS 라운드 로빈만으로는 구현할 수 없다.
그외에도 다양한 분산 알고리즘을 지원한다.
- Response Time
- 가장 응답시간이 빠른 쪽의 서버 IP를 알려준다.
- Hash
- 클라이언트 IP를 기반으로 서버를 배당한다. (같은 서버만 배정받으므로 세션 문제 X)
- Bandwith based Loadbalancing
- 서버들과의 대역폭을 고려하여 분산한다.
추가적으로
DNS 라운드 로빈은 서버의 장애 여부를 판단하지 않고, 회복도 할 수 없기 때문에 무중단서비스에는 어울리지 않는다.
그래서 Health check 기능이 포함된 AWS Route53 같은 서비스를 찾게 된다.
추가적으로 세션이 오래 지속되지 않는 경우에만 사용하는 것이 좋다.
접속중이던 클라이언트가 DNS에 의해 다른 서버 IP를 할당받아 다른 서버에 접속이 되면 기존 세션이 끊어질 수 있다.
이 때는 세션 클러스터링을 설정하거나, L7 스위치를 통해 쿠키에 저장된 정보를 이용해서 다른 서버 IP말고 사용자가 가진 세션을 보관하고 있는 서버로 접속하게 하거나, 세션 스토리지로 In-memory DB를 사용하는 방법 등이 있다.
Reference1: https://m.blog.naver.com/sehyunfa/221691155719
'Operation > Network' 카테고리의 다른 글
Network - HTTP 1.0과 HTTP 1.1의 차이 (지속성, 파이프라이닝, ...) (0) | 2022.09.29 |
---|---|
CORS 총정리!! (+ Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true 해결) (0) | 2022.04.22 |
API - CSV(엑셀 파일) 내보내기 성능 개선 및 부하 테스트 (0) | 2022.04.16 |
HTTP - 청크 인코딩(Transfer-encoding: chunked) [Size가 큰 테이블, 이미지 등 내려주기] (0) | 2022.03.28 |
메일 서비스 작동 원리 (with 구글, 네이버 등) (0) | 2022.03.05 |