로드 밸런싱 및 복원 메커니즘으로 DNS Round Robin에 대한 정보를 제공하는 데 기여한 기여자 중 몇 명은 놀랍습니다. 일반적으로 작동하지만 작동 방식을 이해하고 모든 정보가 잘못되어 발생하는 실수를 피해야합니다.
1) 라운드 로빈에 사용되는 DNS 레코드의 TTL은 짧지 만 ZERO는 아니어야합니다. TTL을 0으로 설정하면 탄력성이 제공되는 주요 방법이 중단됩니다.
2) DNS RR은 분산되지만로드 균형을 유지하지는 않지만 대규모 클라이언트 기반에서는 DNS 서버를 독립적으로 쿼리하는 경향이 있기 때문에 우선 순위가 다른 DNS 항목으로 끝납니다. 이러한 다른 첫 번째 선택은 클라이언트가 다른 서버에 의해 서비스되고로드가 분산됨을 의미합니다. 그러나 이는 DNS 쿼리를 수행하는 장치와 결과를 보유하는 기간에 따라 다릅니다. 일반적인 예는 회사 프록시 뒤의 모든 클라이언트 (DNS 쿼리를 수행하는 클라이언트)가 모두 단일 서버를 대상으로하는 것입니다. 하중이 분산되지만 균형이 고르지 않습니다.
3) DNS RR은 클라이언트 소프트웨어가 올바르게 구현하는 한 복원력을 제공합니다 (TTL 및 사용자주의 기간이 너무 짧지 않음). 이는 DNS 라운드 로빈이 순서대로 서버 IP 주소 목록을 제공하기 때문에 클라이언트 소프트웨어는 연결을 수락하는 서버를 찾을 때까지 각 서버 IP 주소에 차례로 연결을 시도해야합니다.
따라서 첫 번째 선택 서버가 다운 된 경우 클라이언트 TCP / IP 연결이 시간 초과되고 TTL 또는주의 범위가 만료되지 않은 경우 클라이언트 소프트웨어는 목록의 두 번째 항목에 대해 다른 연결을 시도합니다. TTL이 만료되거나 목록의 끝에 도달합니다 (또는 사용자가 혐오감을 포기 함).
고장난 서버 목록 (오류)과 TCP / IP 연결 재시도 제한 (클라이언트 구성 오류)은 클라이언트가 실제로 작동하는 서버를 찾기 전에 오랫동안 만들 수 있습니다. TTL이 너무 짧으면 목록의 끝까지 작동하지 않으며 대신 새 DNS 쿼리를 발행하고 새 목록 (다른 순서로)이 제공됩니다.
때로는 클라이언트가 운이 좋지 않고 새 목록이 여전히 깨진 서버로 시작합니다. 시스템에 클라이언트 탄력성을 제공 할 수있는 최상의 기회를 제공하려면 TTL이 일반적인주의 기간보다 길고 클라이언트가 목록의 맨 아래에 오도록해야합니다.
클라이언트가 작동중인 서버를 찾으면 서버를 기억해야하며 다음 연결을 작성해야 할 때 (TLL이 만료되지 않은 한) 검색을 반복해서는 안됩니다. TTL이 길수록 클라이언트가 작업 서버를 검색하는 동안 지연이 발생하는 빈도가 줄어들어 더 나은 환경을 제공합니다.
4) DNS TTL은 자체적으로 발생합니다. DNS 레코드를 수동으로 변경하려는 경우 (예 : 장기간 중단 된 서버 제거) 짧은 TTL을 사용하면 변경 사항이 빠르게 전파 될 수 있습니다 (한 번 해본 후). 문제를 알기까지 걸리는 시간과 수동 변경을 수행하는 것과 TTL이 만료 될 때 일반 클라이언트가 작동중인 서버를 새로 검색해야한다는 사실 사이의 균형을 고려하십시오.
DNS 라운드 로빈은 두 가지 뛰어난 기능을 갖추고있어 광범위한 시나리오에서 매우 비용 효율적이며, 첫 번째는 무료이며, 두 번째는 거의 클라이언트 기반만큼 지리적으로 분산되어 있습니다.
다른 모든 '영리한'시스템이하는 새로운 '오류 단위'를 소개하지는 않습니다. 상호 연결된 요소의 전체로드에서 공통적 인 동시 장애가 발생할 수있는 추가 구성 요소가 없습니다.
'영리한'시스템은 훌륭하고 균형 잡힌 균형 조정 및 페일 오버 메커니즘을 제공하고 조정하는 훌륭한 메커니즘을 도입하지만 궁극적으로 원활한 경험을 제공하기 위해 사용하는 방법은 아킬레스 건입니다. 그럴 경우 시스템 전반에 걸친 완벽한 장애 경험을 제공 할 것입니다.
그렇습니다. DNS 라운드 로빈은 모든 정적 콘텐츠를 한 곳에서 호스팅하는 단일 서버를 넘어서는 첫 단계에있어 "충분히"충분합니다.