DNS Round Robin

DNS round robin을 알기 위해선 먼저 로드밸런싱과 라운드 로빈이라는 개념에 대해 알아야 합니다. 따라서 로드밸런싱과 라운드 로빈을 살펴보고 마지막으로 DNS round robin을 알아보겠습니다.

로드밸런싱

일반적으로 우리가 알고 있는 클라이언트와 서버는 인터넷을 통해 위와 같은 구조로 연결되어 있습니다.

하지만, 실제로 많은 사용자가 사용하는 서비스가 위와 같은 구조를 사용하는 것은 큰 문제점을 갖고 있습니다. 어떤 문제점이 있을까요?
이용자가 많은 서비스는 많은 양의 요청이 인터넷을 통해 서버에 들어오게 되고 서버는 엄청난 트래픽을 처리하게 됩니다. 이 과정에서 서버가 트래픽을 견디지 못한다면 결국 서버는 고장나버리는 것이죠.

즉, 실제로 런칭되는 서비스의 입장에선 이러한 트래픽 관리가 매우 중요한 일입니다.
트래픽을 관리하는 방법은 일반적으로 2가지 존재합니다.

  • 서버 성능 향상 (Scale Up)
  • 트래픽 분산 (Scale Out)

첫 번째 방법은 서버의 성능을 향상시키는 방법입니다. 이용하고 있는 서버를 더 비싸고 강력한 서버로 변경한다면 더 많은 트래픽을 감당하고 처리할 수 있을 것입니다.

두 번째 방법은 여러대의 서버를 준비하여 들어오는 트래픽을 여러 서버로 분산시키는 방법입니다. 하나의 서버에서 감당하던 트래픽을 여러 서버가 나눠서 처리하니 더 많은 트래픽을 감당할 수 있게 되겠죠.

로드밸런싱은 바로 두 번째 방법과 관련이 있습니다.
로드밸런싱의 방법은 간단합니다. 먼저 여러대의 서버를 준비하고, 클라이언트와 서버 사이에 트래픽을 분산시켜주는 장치를 넣어줍니다.

저렇게 클라이언트와 서버의 사이에서 트래픽을 분산하는 장치를 로드밸런서 라고 합니다. 그리고 이렇게 트래픽을 분산시키는 방법을 로드밸런싱이라고 부릅니다.

말 그대로 부하(load)를 분산/균형(balance)해주는 방법입니다.

Round Robin

Round Robin은 컴퓨터과학의 여러 분야에서 응용되는 대표적인 알고리즘입니다. 사실 너무 간단해서 알고리즘이라고 부르기도 좀 그런 방법론 입니다.

위에서 배운 로드밸런싱의 상황에 Round Robin알고리즘을 적용하는 상황을 생각해봅시다. Round Robin은 순서대로 돌아가며 적용하는 방법론으로 위의 상황에선 서버가 돌아가며 트래픽을 처리하게 됩니다. 그림으로 살펴보겠습니다.
클라이언트로부터 처음 요청이 들어오면 로드밸런서는 우선 첫 번째 서버에서 요청을 처리할 수 있도록 도와줍니다.
이후 두 번째 요청이 들어오면 이번엔 그 다음 서버가 요청을 처리하도록 조절합니다.
슬슬 감이 오시죠?
다음 요청이 들어오면 다시 그 다음 서버가 요청을 수행하도록 조절해줍니다.
즉, 라운드 로빈이란 순서대로 돌아가면서 일을 처리하는 방법론을 의미합니다.

이러한 방법은 서버가 서로 동일한 스팩일 경우 사용하는 것이 좋습니다. 만약 성능이 월등히 높은 서버가 있다면 그 서버에 트래픽을 더 많이 할당하는 것이 타당하겠죠? 그리고 세션(서버와의 연결)이 오래 지속되지 않는 경우에 사용하는 것이 좋습니다.

위 구조에서 로드밸런서에 들어오는 요청은 한 클라이언트에 대한 것이 아니라 무작위의 클라이언트에게 들어온 요청이라는 사실을 기억하시면 좋습니다. 이는 이제 우리가 살펴볼 DNS Round Robin과의 차이점이라고 할 수 있습니다.

DNS Round Robin

DNS Round Robin은 서버에 요청을 보낼 때 DNS에 서버의 아이피를 요청한다는 점에 착안하여 만들어진 방법입니다.
클라이언트가 어떤 요청을 보내기 위해선 DNS에 서버의 아이피를 먼저 요청해야 합니다.
DNS Round Robin은 이러한 요청이 들어올 때 DNS에서 각 서비스의 서버에 해당하는 ip를 round robin으로 제공해주는 방법입니다.
먼저 DNS는 첫 번째 서버의 ip를 클라이언트에게 응답합니다.
클라이언트는 당연히 응답받은 ip에 요청을 보내게 되고 그럼 첫 번째 서버가 그 요청을 담당하게 됩니다.
클라이언트가 2번째 요청을 보내기 위해 DNS에 다시 ip를 요청하면 이번엔 DNS에서 서비스의 2번째 서버에 해당하는 ip를 제공해줍니다.
그러면 당연히 이번엔 2번째 서버가 요청을 담당하게 됩니다.

이렇게 클라이언트가 요청하는 상황에서 DNS가 서버의 ip를 돌려가며 제공해주는 방법을 DNS Round Robin이라고 부릅니다.

이러한 방법은 다음과 같은 장점을 갖고 있습니다.

  • 중간 장비(로드밸런서) 없이도 서비스가 가능하다
  • 따라서 비용적인 부분이 줄어든다.
  • 간편하다.

실제로 DNS Round Robin은 제어판의 간단한 설정을 통해 클라이언트에서 간단하게 설정할 수 있습니다.

그러나 이러한 방법은 실제 서비스에서 사용되기엔 다소 무리가 존재합니다. 그 이유는 다음과 같은 단점이 존재하기 때문입니다.

  • 서버에 장애 발생시 감지가 힘들다.
  • 부하의 분산이 고르지 않다.
  • 서버에 이상이 있어도 부하를 분산시킨다.
  • DNS결과를 Caching하기 때문에 균등한 분산이 어렵다.

중간에 로드밸런서가 존재할 경우 일반적으로 트래픽을 담당하는 서버의 상태를 관찰하며 분산을 조절합니다. 하지만 DNS입장에선 이러한 서버의 상태를 실시간으로 관찰할 수 없기 때문에 장애 발생시 대처가 미흡합니다.

또한 로드밸런서는 클라이언트와 상관없이 들어오는 요청들을 분산시키지만, DNS Round Robin은 한 클라이언트의 요청이 보낼 때 마다 다른 서버에 보내지도록 만드는 방법입니다. 한 사람의 요청은 계속 분산되지만, 여러 사람이 요청을 보내는 경우 균등하게 부하를 분산시킨다고 보장할 수 없습니다.

마지막으로 DNS는 결과를 caching하기 때문에 요청마다 균등하게 분산시키기 어렵습니다. 물론 이는 설정을 통해 어느정도 해결이 가능합니다.

profile
웹 개발을 공부하고 있는 윤석주입니다.

0개의 댓글