[네트워크] DNS round robin 방식 ?

HenryHong·2022년 7월 26일
0
post-custom-banner

DNS

우선 DNS round robin 이라는 개념을 알기 위해서는 DNS 가 무엇인지를 알아야 합니다.
DNS 란 Domain Name System 의 약자로서 IP 네트워크에서 사용하는 시스템입니다.
일반적인 URL 상에서 영문을 사용해서 진입하나 기본적으로 접속을 위하여 URI 는 ip 주소가 서버를 가르켜야 합니다.

이를 문자와 주소체계를 상호 확인 및 변환 할 수 있는 시스템을 DNS 라고 합니다.

간단하게 예시를 들자면 우리가 네이버에 접속하려고 한다고 합시다.
그러면 원칙적으로 우리는 네이버의 IP 주소를 알고있어야 하며, 그 아이피 주소를 통하여 접속해야 합니다.
하지만 우리는 일반적인 대명사로서 naver.com 을 사용합니다.
그러면 DNS Server 는 naver.com 이 가리키는 IP 를 브라우저에게 반환합니다.
즉 DNS Server 는 웹 서버 주소에 해당하는 IP 주소 테이블을 가지고 있는 서버라고 보면 됩니다.
DNS 과정을 풀어 설명하면 다음과 같습니다.

1. DNS Query

DNS 서버에서 Domain Name 이용하여 IP 를 받아옵니다.
이때 Domain Name Server 접속하는 유저에 대해서 Round Robin 방식으로 IP 를 할당합니다.

2. IP Communication

IP 를 받아온 유저는 리퀘스트 메시지 발송을 통하여 정상적으로 네트워크 통신을 실시합니다.

DNS round robin

round robin 이란 DNS 서버 구성 방식 중 하나입니다.
Domain 에 대한 IP 요청 쿼리 시 round-robin 방식으로 IP 를 반환합니다.

  • Round Robin

시분할 시스템을 위해 설계된 선점형 스케줄링의 하나로서, 프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum/Slice)로 CPU를 할당하는 방식의 CPU 스케줄링 알고리즘입니다.
쉽게 말하면 자바에서 스레드가 운영체제의 스케쥴러에 의하여 컴퓨터 자원을 사용할 수 있는 기회를 할당 받는 것과 같은 맥락입니다.
각 프로세스에 일정시간을 할당하고, 할당된 시간이 지나면 그 프로세스는 잠시 보류한 뒤 다른 프로세스에게 기회를 주고, 또 그 다음 프로세스에게 하는 식으로, 돌아가며 기회를 부여하는 운영방식이라 풀어 말할 수 있겠습니다.

즉 DNS 서버에 대한 Round Robin 형식으로 구성할 경우 로드 벨런서가 필요가 없습니다.
부하에 대한 걱정을 할 필요가 없다는 뜻입니다.
(왜냐? 자동적으로 시간에 따라서 스케쥴링이 변환되기 때문에!)

하지만 이러한 방식은 여러가지 단점을 가지고 있습니다.

1. 서버의 수 만큼 공인 IP 주소가 필요합니다.

부하 분산을 위해 서버의 대수를 늘리기 위해서는 그 만큼의 공인 IP 가 필요합니다.

2. 균등하게 분산되지 않습니다.

모바일 사이트 등에서 문제가 될 수 있는데, 스마트폰의 접속은 캐리어 게이트웨이 라고 하는 프록시 서버를 경유 합니다.
프록시 서버에서는 이름변환 결과가 일정 시간 동안 캐싱되므로 같은 프록시 서버를 경유 하는 접속은 항상 같은 서버로 접속됩니다.
또한 PC 용 웹 브라우저도 DNS 질의 결과를 캐싱하기 때문에 균등하게 부하분산 되지 않습니다.
DNS 레코드의 TTL 값을 짧게 설정함으로써 어느 정도 해소가 되지만, TTL 에 따라 캐시를 해제하는 것은 아니므로 반드시 주의가 필요하다.

3. 서버가 다운되도 확인이 불가능합니다.

DNS 서버는 웹 서버의 부하나 접속 수 등의 상황에 따라 질의결과를 제어할 수 없다.
웹 서버의 부하가 높아서 응답이 느려지거나 접속수가 꽉 차서 접속을 처리할 수 없는 상황인 지를 전혀 감지할 수가 없기 때문에 어떤 원인으로 다운되더라도 이를 검출하지 못하고 유저들에게 제공됩니다.
이때문에 유저들은 간혹 다운된 서버로 연결이 되기도 하죠.
DNS 라운드 로빈은 어디까지나 부하분산 을 위한 방법이지 다중화 방법은 아니므로 다른 S/W 와 조합해서 관리할 필요가 있다.

이를 위한 극복 방법은 다음과 같습니다.

다중화 구성 방식 (Synchronous Time-Division Multiplexing)

AP 서버에 VIP(Virtual IP)를 부여해서 다중화를 구성한다. 각 AP 서버를 Health Check후 이상이 감지되면 VIP를 정상 AP 서버로 인계하는 방식을 사용한다.
즉 DNS Server Table 에 실시간으로 AP 서버의 상태를 확인할 수 있는 칼럼 및 함수를 추가하여 요청될 경우 서버 상태를 확인하여 우회루트를 제공하거나 에러를 전송하는 방식을 말합니다.

가중치 편성 방식 (Weighted round robin)

각각의 웹 서버에 가중치를 가미해서 분산 비율을 변경한다. 물론 가중치가 큰 서버일수록 빈번하게 선택되므로 처리능력이 높은 서버는 가중치를 높게 설정하는 것이 좋다.
또 다른 방법으로는 로드 밸런서의 도입을 통하여 다음과 같은 구성도 가능합니다.

최소 연결 방식 (Least connection)

접속 클라이언트 수가 가장 적은 서버를 선택한다. 로드밸런서에서 실시간으로 connection 수를 관리하거나 각 서버에서 주기적으로 알려주는 것이 필요하다.

결론

DNS 가 단순한 IP - 문자열 편성으로만 알고 있었습니다.
하지만 이러한 DNS 를 통하여 실질적으로 서버의 상태와 클라이언트와의 의사소통을 통하여
살아있는 서버로의 우회나 서버의 상태를 알리고 그에 대해 생각해 볼 수 있는 좋은 경험이었습니다.
추가적으로 로드 밸런서에 대해서 직감적으로 와닿지 않는 부분은 차후 더 공부해보도록 하겠습니다.

profile
주니어 백엔드 개발자
post-custom-banner

0개의 댓글