DNS Round Robin
DNS roudn robin에 대해 알아보기 전에 먼저 로드 밸런싱
과 round robin
에 대해 알아보자.
로드 밸런싱
클라이언트가 인터넷을 통해 서버에 접속하고자 할 때, 많은 양의 요청이 한번에 서버에 들어오게 되면 과부하가 생길 수 있다. 이를 방지하기 위해 트래픽
을 관리해야 하는데 이 방법에는 크게 두 가지가 있다.
- 서버 성능 향상(Scale Up)
- 트래픽 분산(Scale Out)
어떤 동네에 아파트 한 채가 있고, 더 많은 가구를 수용하고 싶을 때 scale up
은 기존의 아파트에 몇 층을 더 쌓는 것이고 scale out
은 아파트를 새로 짓는 것이라고 생각하면 된다.
서버 성능 향상
은 말 그대로 서버 자체의 성능을 향상시키는 것이다. 더 비싸고 좋은 서버를 쓰면 된다.
트래픽 분산
은 트래픽을 여러대의 서버로 분산시키는 방법을 말한다. 혼자서 트래픽을 전부 감당하지 않아도 되니 비싼 서버를 쓸 필요도 없고, 더 많은 트래픽을 감당할 수 있다.
로드 밸런싱
이 바로 트래픽 분산 방법이다.
이름에서도 알 수 있듯이 로드 밸런싱은 부하를 여러 곳으로 나누어 적절히 균형을 유지하는 것이다.
Round Robin
라운드 로빈
은 FCFS(First Come First Service)
스케줄링을 기반으로 하여 CPU를 할당하되, 각 프로세스는 한 번에 쓸 수 있는 CPU 시간 크기 즉, 시간 할당량
이 지나면 시간 종료 인터럽트에 의해 CPU를 뺏기게 되는 선점 방식
이다. CPU를 반환한 프로세스는 준비 큐의 맨 끝으로 이동해서 다시 자기 차례가 될 때까지 기다리고, 큐의 맨 앞에 있던 애가 CPU를 할당받게 된다.
DNS Round Robin
DNS 라운드 로빈
은 별도의 소프트웨어 혹은 하드웨어 로드밸런싱 장비를 사용하지 않고, DNS만을 이용하여 트래픽을 분산하는 기법이다.
사용자가 브라우저에 도메인 네임을 입력하면 DNS가 여러 개의 서버 IP 중 하나를 라운드 로빈 방식으로 선택하여 사용자에게 알려주는 것이다. 라운드 로빈 DNS 서버의 IP 주소는 마치 야구 타자 선수들이 각 차례가 끝나면 줄의 뒤쪽으로 이동하는 것과 같다.
장점
- 중간 장비(ex. 로드밸런서)가 필요없음
- 비용이 적고 간편함
단점
- 서버 장애 탐지 어려움
서버 중 하나가 다운되더라도 DNS 서버는 해당 서버의 IP를 라운드 로빈 방식으로 유지한다. 따라서 서버가 6대이고 한 대가 오프라인으로 전환되면 특정 사용자는 다운된 서버로 연결되어 서비스가 거부된다.
- 균등한 분산이 어려움
일부 고급 라운드 로빈 서비스는 응답하지 않는 서버를 감지하여 라운드 로빈 순환에서 제거할 수 있다. 하지만 캐싱 문제를 해결할 방법이 없다. DNS는 결과를캐싱
하기 때문에 동일한 요청에 대해서 항상 동일한 IP 주소로 접속하게 되고, 따라서 균등한 부하 분산이 어렵다.
캐싱
문제를 현실에 빗대어 생각해보자.지하철
로 여의도를 가고자 할 때, 여의도를 가기 위해서는5호선
또는9호선
을 이용할 수 있다. 그리고 나는 최근에 9호선으로 여의도를 갔다온 경험이 있다고 해보자.
만약 현재 9호선이 열차 문제로 지연되고 있다면, 5호선으로 돌아가는 편이 나을 것이다. 하지만 그럼에도 나는 9호선을 이용할 것이다. 왜냐? 내 머리가로컬 DNS 서버
라고 한다면, 나는 여의도로 갈 수 있는 노선을 9호선으로만기억(캐싱)
하고 있기 때문!
DNS Scheduling Algorithm
DNS 라운드 로빈 방식의 단점을 해결하는 몇 가지 스케줄링 기법이 있다. 대표적인 두 가지만 알아보자.
WRR(Weighted Round Robin)
전체적인 방식은 라운드 로빈과 유사하지만, 각 서버에 가중치
를 두어 분산 비율
을 결정한다. 가중치가 클수록 자주 선택되기 때문에 처리 능력이 높은 서버에 높은 가중치를 설정하는 것이 좋다.
Least Connection
접속 클라이언트 수
가 가장 적은 서버를 선택한다. 따라서 로드밸런서
에서 실시간으로 connection 수를 관리하거나 각 서버에서 주기적으로 알려주는 것이 필요하다.