요약

  • 두 번째 권위 서버 이름과 IPv4 주소 하나, IPv6 주소 하나를 추가하자 테스트당 평균 관측 쿼리 수가 3.43에서 2.57로 떨어졌고, 단일 쿼리로 끝난 테스트의 비중은 58%에서 71%로 올라갔다.
  • APNIC은 원인을 확립하지 않았다. 이 결과는 하나의 공용 리졸버 주소를 하나의 안정적인 리졸버 프로세스, 클라이언트 또는 재시도 상태로 다루는 관행에 대한 반증이다.
  • 방어 가능한 인시던트 기록은 클라이언트 요청, 디스패처, 백엔드 엔진, 캐시 판단, 권위 서버 목적지, 응답과 재시도를 하나의 해석 체인으로 연결해야 한다.
관측 항목권위 서버 1대권위 서버 2대
테스트 수254,894,985150,221,951
총 쿼리 수875,316,423385,725,364
테스트당 쿼리 수3.432.57
쿼리 1회 테스트 비중58%71%
반복 테스트의 평균 반복 횟수3.802.56

작은 구성 변경이 큰 행동 지표를 움직였다

결과는 깨끗한 개입에서 출발했다.APNIC Labs의 실험에서 설명한 통제 조건에서 실험용 존은 이중 스택 권위 서버 한 대를 두고 있었다. 이후 구성은 자체 IPv4 주소와 IPv6 주소를 가진 또 다른 권위 서버 이름을 추가했다. 응답은 여전히 정상이었다. 이 실험은 장애 테스트도 아니었고 NXDOMAIN과 SERVFAIL의 비교도 아니었다.

그런데도 권위 서버 로그는 뚜렷하게 변했다. 약 2억 5천 5백만 건에 이르는 통제 테스트에서 단일 서버 구성은 8억 7천 5백만 건의 쿼리를 받았는데, 테스트당 평균 3.43건이었다. 서버가 두 대가 되자 1억 5천만 건의 테스트가 3억 8천 6백만 건의 쿼리, 즉 테스트당 2.57건을 만들었다. 단일 쿼리 테스트는 58%에서 71%로 늘었고, 반복된 테스트의 평균 반복 횟수는 3.80에서 2.56으로 내려갔다.

이 수치는 보편적인 성능 평가가 아니다. 두 표본은 서로 다른 규모를 다루며, 이 실험은 사용자 스텁과 권위 서버 경계 사이의 모든 상태를 노출할 수 없다. 그 가치는 불연속성에 있다. 목적지 쪽의 변경이 권위 서버 쪽에서 보기에 재귀 리졸버의 행동처럼 보이던 것을 바꾼 것이다.

타이밍은 단순한 타임아웃 이야기에 맞지 않는다

반복의 대부분은 빠르게 도착했다. 단일 서버 조건에서는 중복의 약 85%가 첫 1초 안에 도착했고, 이중 서버 조건에서는 약 75%가 그랬다. 두 경우 모두 약 90%는 5초 안에 도착했다. 단일 서버 분포에는 약 100, 310, 800밀리초 부근에 뚜렷한 피크가 있었다. 이중 서버 분포는 기존 피크를 유지하면서 50, 370, 750밀리초 부근에 새로운 피크를 더했다.

가장 큰 차이는 10~70밀리초 구간, 특히 10~40밀리초 구간에 있었다. 이 간격은 전형적인 쿼리별 UDP 타임아웃으로 편하게 설명하기에는 너무 짧다. 10밀리초 안의 “연발식” 반복도 약 17%에서 12%로 줄었다. 따라서 타이밍 증거는 하나의 종단점이 기다렸다 만료되어 다시 시도하는 일 이상을 가리킨다.

인접한APNIC의 부정 응답 연구는 유용한 경계를 제공한다. 그 연구에서 응답 등급은 증폭을 뚜렷하게 바꾸었다. 정상 응답은 테스트당 평균 3.43회였지만 SERVFAIL은 51.73회, 무응답은 83.46회였다. 그 작업은 실패 처리와 캐싱을 다룬다. 두 번째 네임서버 관측은 권위 토폴로지가 바뀐 상태에서의 정상 응답을 다룬다. 둘을 혼동하면 현재 결과를 실제보다 설명하기 쉽게 만들 뿐이다.

하나의 주소는 스케줄링 시스템을 숨길 수 있다

APNIC은 그럴듯하면서도 명시적으로 입증되지 않은 가능성을 제시한다. 일부 공용 재귀 서비스는 재귀 엔진 팜 앞에 디스패처를 둔다. 클라이언트는 하나의 공용 IP 주소로 보내고, 프런트 엔드가 백엔드를 고른다. 두 개 이상의 백엔드가 관련 캐시 항목을 가지지 않았거나, 완전한 상태를 공유하지 않은 채 같은 논리적 요청을 수행할 수 있다. 권위 서비스 입장에서 이들의 패킷은 여전히 같은 공용 출발지 주소 아래 보일 수 있다.

이는 특이한 토폴로지가 아니라 평범한 토폴로지다. 공식dnsdist 매뉴얼은 쿼리를 받아 다운스트림 서버로 보내고 응답을 중계하는 DNS 인식 로드 밸런서를 설명한다. 그 선택 정책에는 least-outstanding, 해싱, 가중 선택이 포함되고, 튜닝 지침은 여러 리스너·응답 스레드와 동일한 다운스트림을 두 번 이상 등록하는 것까지 논의한다. 이 사실들은 가능성을 확립할 뿐, 귀속을 확립하지 않는다. APNIC의 트레이스에 측정된 어떤 리졸버가 dnsdist를 돌렸다는 증거도, 백엔드 디스패치가 그 감소를 일으켰다는 증거도 없다.

이 구분이 중요하다. 공용 주소는 라우팅에는 훌륭하다. 그러나 모든 관측을 하나의 주체로 묶는 기본 키로는 부적합하다. NAT, 애니캐스트, 로드 밸런싱, 스레드 풀, 백엔드 재시도, 상태 복제는 모두 여러 실행 맥락을 하나의 종단점처럼 보이게 하거나, 하나의 논리적 해석을 여러 패킷처럼 보이게 할 수 있다.

쿼리 튜플은 필요하지만 여전히 불충분하다

이 실험은 같은 쿼리 이름과 쿼리 타입의 또 다른 관측을 반복으로 센다. 프로토콜 작업은 더 많은 판별 요소를 제공한다.RFC 9520은 서버, 주소, 전송 계층을 분리하고 QNAME, QTYPE, QCLASS로 이루어진 쿼리 튜플을 정의한다.RFC 1035는 요청자가 응답과 미결 쿼리를 대조하는 데 쓰는 16비트 메시지 ID를 더한다.

그런 필드들조차 행위 전체를 재구성하지 못한다. 메시지 ID는 디스패처에서 다시 쓰일 수 있고, 서로 다른 백엔드가 같은 값을 고를 수 있다. 권위 서버 관측자는 업스트림 패킷을 만들지 않은 캐시 히트, 최초의 클라이언트 트랜잭션, 선택된 백엔드, 만료된 로컬 타이머, 해석 완료를 선언한 판단을 볼 수 없다. 권위 서버 패킷 기록은 실제 증거지만 하나의 현실 계층, 즉 그 권위 인터페이스에 도착한 일에만 속한다.

더 강한 모델은 접수증의 체인이다. 클라이언트 접수증은 요청과 그 기한을 식별한다. 디스패처 접수증은 선택된 백엔드를 기록한다. 재귀 엔진은 캐시 상태, 위임 상태, 자신의 QNAME/QTYPE/QCLASS 작업 항목을 기록한다. 각 발신 시도는 서버 이름, 주소, 전송 계층, 발송 시각을 기록한다. 각 수신 응답은 등급과 검증 결과를 기록한다. 재시도 접수증은 추가 시도를 승인한 타이머나 오류를 기록한다. 완료 접수증은 논리적 해석을 닫고 돌려준 답을 최초 요청과 연결한다.

이 체인 전체를 한 조직이 소유한다는 보장은 없다. 바로 그 때문에 운영자는 가장 쉬운 공유 필드인 공용 리졸버 주소가 빠진 결합 키인 척하도록 두어서는 안 된다.

중복성과 관측 가능성은 서로 다른 질문에 답한다

RFC 2182는 존이 여러 권위 서버를 필요로 하는 이유와 토폴로지적·지리적 분리가 중요한 이유를 설명한다. 동시에 서버가 늘수록 운영 비용이 커진다고 경고한다. APNIC의 결과는 그 공학적 논리를 “두 대가 더 빠르다”로 대체하지 않는다. 대신 다른 질문을 던진다. 권위 선택지가 넓어진 뒤에 왜 리졸버 인구가 관측 가능한 사본을 더 적게 보냈는가?

답은 선택 다양성, 주소 패밀리별 행동, 디스패처 스케줄링, 공유 캐시 상태, 레이싱 또는 이 연구에서 보이지 않는 다른 기제일 수 있다. 신중한 운영자는 이 대안들을 남겨 둔다. 경험적 주장은 강력하고 좁다. 분포가 바뀌었다는 것. 원인에 대한 주장은 여전히 열려 있다.

출처