GN⁺: 라운드 로빈 DNS 이해하기
(blog.hyperknot.com)라운드 로빈 DNS 이해하기
-
라운드 로빈 DNS란 무엇인가?
- 일반적으로 웹사이트를 VPS에서 제공할 때, DNS 제공자의 제어판에 단일 A 레코드를 추가함.
- 라운드 로빈 DNS에서는 동일한 서브도메인에 여러 서버를 지정하여 부하를 여러 서버에 분산하고, 오프라인 서버를 자동으로 감지하여 온라인 서버를 선택할 수 있음.
- 로드 밸런서를 사용하지 않고도 간단하고 우아한 솔루션을 제공하며, 비용이 들지 않음.
-
이론적으로 어떻게 작동하는가?
- RFC 8305 "Happy Eyeballs"에 따르면, 클라이언트는 연결 전에 주소를 정렬해야 함.
- 서버가 온라인인지 오프라인인지 확인하고, 온라인 서버를 핑 시간에 따라 정렬함.
-
실제로 어떻게 작동하는가?
- 미국, 유럽, 싱가포르에 3개의 VPS를 생성하고, Cloudflare에 3개의 프록시 및 비프록시 A 레코드를 만듦.
- 각 서버는 색상 이미지와 호스트 이름을 제공함.
클라이언트의 서버 선택 행동
-
Chrome
- 모든 위치에서 무작위로 선택하지만, 선택 후에는 고정됨.
- 몇 시간 후에 다시 평가함.
-
Firefox
- Chrome과 유사하게 무작위로 선택하고 고정됨.
-
Safari
- 항상 가장 가까운 서버를 올바르게 선택함.
-
curl
- 처음에는 올바르지 않을 수 있지만, 두 번째 실행 시 가장 가까운 서버로 수정됨.
-
Cloudflare
- 클라이언트 IP를 기반으로 무작위 위치를 선택하고 고정됨.
부분적으로 오프라인 서버가 있는 경우의 클라이언트 행동
- 모든 클라이언트는 오프라인 서버를 감지하고 대체 서버를 선택함.
- Cloudflare는 오프라인 서버를 감지하지 못하고, 선택된 서버가 오프라인이면 오프라인 상태로 제공됨.
Cloudflare 개선 사항
- 오프라인 서버를 감지해야 함.
- 가장 낮은 지연 시간을 가진 서버를 선택하는 기능이 필요함.
GN⁺의 정리
- 라운드 로빈 DNS는 여러 서버에 부하를 분산시키고, 로드 밸런서를 사용하지 않고도 간단하게 구현할 수 있는 방법임.
- 브라우저와 클라이언트의 서버 선택 방식은 다양하며, 특히 Safari는 가장 가까운 서버를 잘 선택함.
- Cloudflare의 경우 오프라인 서버를 감지하지 못하는 문제점이 있으며, 이는 개선이 필요함.
- 이 글은 라운드 로빈 DNS의 작동 방식을 이해하는 데 유용하며, 서버 선택 알고리듬의 차이를 탐구하는 데 흥미로울 수 있음.
Hacker News 의견
-
DNS 팀에게 현재 상황에 대한 설명을 요청했으며, 답변을 받으면 공유할 예정임. 코드가 자주 변경되어 현재 상황을 정확히 알기 어려움. 클라이언트 IP와 백엔드 서버 간의 연결 유지가 문제의 원인일 수 있음.
-
DNS 로드 밸런싱은 복잡한 문제를 야기할 수 있음. golang HTTP2 클라이언트가 RR DNS를 사용할 때 문제가 발생할 수 있음. 클라이언트가 새로운 서버를 발견하지 못하는 경우가 있음.
- 모든 백엔드 서버가 다운되면 클라이언트는 첫 번째로 연결된 서버에 고정되어 다른 서버로 이동하지 않음.
- grpc-go에서도 유사한 문제가 발생하며, 서버 측에서
MAX_CONNECTION_AGE
를 설정하여 주기적으로 클라이언트를 연결 해제할 수 있음.
-
서비스 발견을 위한 표준 솔루션이 부족함. 요청 기반 로드 밸런서를 구현하고 가상 IP를 사용하여 로드 밸런서가 상태 검사를 수행하도록 하는 것이 최선의 방법일 수 있음.
-
SRV DNS 레코드는 모든 서비스에 우선순위를 지정할 수 있는 초기 솔루션이었으나, 정치적 이유로 HTTP 클라이언트에서 사용되지 않음. 새로운 HTTPS 및 SVCB DNS 레코드가 로드 밸런싱을 위한 새로운 솔루션으로 제안됨.
-
서버가 오프라인일 때 클라이언트는 연결이 거부되면 다음 IP로 이동함. 그러나 실제로는 서버가 응답하지 않거나 연결 후 침묵할 수 있음. 클라이언트 타임아웃에 의존하게 됨.
-
클라이언트 측에서 신뢰성이 결정됨. 일부 시스템은 항상 가장 낮은 IP 주소를 반환하여 문제가 발생할 수 있음. DNS-RR은 로드 밸런서가 아니며, 로드 밸런서가 더 나은 솔루션임.
-
Perl로 디코더를 작성했으며, 모든 것이 Perl로 되어야 한다고 주장함.
-
RR-DNS는 로드 밸런싱에만 유용하며, 자동으로 서버 가용성을 감지하지 않음. 클라이언트에 스마트 기능을 추가해야 함.
-
서버가 다운되면 전 세계적으로 분산된 IP 주소가 있어 사람들이 계속 접속할 수 있음.
-
2000년대 Amazon에서는 온사이트 호스트에 대해 라운드 로빈 DNS를 사용했음. 당시에는 가장 빠른 로드 밸런싱 방법이었음. 그러나 와이파이가 가장 큰 병목 현상이었음.
-
Cloudflare Load Balancing에 대한 언급이 있지만, 실제 테스트는 하지 않음. Cloudflare는 오프라인 서버를 자동으로 감지하고 다른 서버로 전환할 수 있음.