사용을 중지 엄청나게 낮은 DNS TTLs

DNS(도메인 이름 시스템)지연 시간은 핵심 구성 요소는 온라인 경험을 제공합니다. 또한 DNS 대기 시간을 최소화하기 위해 DNS 서버와 익명화 릴레이를 신중하게 선택하는 것이 중요한 역할을합니다. 그러나 대기 시간을 최소화하는 가장 좋은 방법은 시작하기 위해 쓸모없는 쿼리를 보내지 않도록하는 것입니다. DNS 가 첫날부터 크게 캐시 가능한 프로토콜로 설계된 이유입니다. 개별 레코드를 가질 시간 라이브(TTL),원래 설정에 의해 지역 관리자와 해결 프로그램을 사용하여 이 정보를 계속 이 기록에서 메모리가 불필요한 트래픽을 방지하기 위해.캐싱이 효율적입니까? 몇 년 전에 내가 만든 빠른 연구는 개선의 여지가 있음을 보여주었습니다. 오늘 저는 현재의 업무 상태를 새롭게 살펴보고 싶습니다.그렇게하기 위해 각 들어오는 쿼리에 대해 해당 레코드의 최소 TTL 로 정의 된 응답의 원래 TTL 을 저장하기 위해 암호화 된 DNS 서버를 패치했습니다. 이것은 우리에게 실제 트래픽의 TTL 분포의 좋은 개요를 제공하지만,또한 개별 쿼리의 인기를 차지한다.

그 패치 된 버전은 몇 시간 동안 실행되도록 남겨졌습니다. 결과 데이터 세트는 1,583,579(name,qtype,TTL,timestamp)튜플로 구성됩니다. 여기에는 전반적인 TTL distribution(X 축 TTL 초):

림 1–전반적인 TTL distribution(X-axis is TTL 초)입니다.

게 무시할 수 있는 충돌에서 86,400(주로 SOA 기록),그것은 분명 TTLs 은 낮은 범위에서. Let’s 확대:

림 2–TTL 배포 0~10,000 초

좋아,ttl 을 위에서 1 시간 통계적으로하지 않습니다. 에 대해 자세히 알아보도록 하겠 0~3,600 범위:

림 3–TTL 유통 0 3,600 초입니다.

어디서 가장 TTLs 앉아 0~15 분간:

림 4–TTL 배포 0~800 초입니다.

대부분은 0~5 분간:

그림 5–TTL 배포 0~300 초입니다.이 문제를 해결하려면 어떻게해야합니까? 누적 배포로 인해 문제가 더욱 분명해질 수 있습니다:

그림 6–누적분포의 TTL0~3,500 초입니다.

인터넷의 절반은 1 분 TTL 이하를,4 분의 3 은 5 분 TTL 이하를 갖습니다.그러나 잠깐,이것은 실제로 더 나쁩니다. 이들은 신뢰할 수있는 서버에 의해 정의 된 Ttl 입니다. 그러나 클라이언트 리졸버(예:라우터,로컬 캐시)에서 검색 한 Ttl 은 업스트림 리졸버가 1 초마다 감소하는 TTL 을 얻습니다. 따라서 평균적으로 클라이언트가 새 쿼리를 요구하기 전에 캐시 된 항목을 사용할 수있는 실제 기간은 원래 TTL 의 절반입니다.

이러한 매우 낮은 Ttl 은 드문 쿼리에만 영향을 미치며 인기있는 웹 사이트 및 Api 는 아닙니다. 보자:

그림 7—TTL 에서 초(X axis)대한 쿼리기(Y-axis).

불행히도 가장 인기있는 쿼리는 캐시하기에 가장 무의미합니다. 확대하자:

그림 8—ttl(초)(X 축)대 쿼리 인기도(Y 축).

평결:정말 나쁘거나 오히려 이미 나빴고 악화되었습니다. DNS 캐싱은 쓸모 옆에되고있다. ISP 의 DNS 리졸버를 사용하는 사람이 적 으면(좋은 이유로)대기 시간이 길어지면 더 눈에 띄게됩니다. DNS 캐싱은 아무도 방문하지 않는 콘텐츠에만 유용하게되었습니다. 또한 소프트웨어는 낮은 TTLs 를 다르게 해석 할 수 있습니다.

왜?

왜 DNS 레코드가 낮은 TTLs 로 설정되어 있습니까?

  • 레거시 로드 밸런서는 기본 설정으로 유지됩니다.
  • DNS 기반로드 밸런싱이 TTLs 에 의존한다는 도시 전설(그렇지 않습니다).
  • 관리자는 계획 작업이 덜 필요할 수 있으므로 변경 사항을 즉시 적용하기를 원합니다.
  • 로 DNS 또는 부하 분산 장치 관리자,당신의 의무를 효율적으로 배포의 구성 사람들은 묻지 않을 만드 웹사이트와 서비스를 빠르다.
  • 낮은 TTLs 는 마음의 평화를 제공합니다.

나는 이것이 점점 더 관련성이 떨어지면서 그 목록에’장애 조치 용’을 포함하지 않습니다. 하려는 경우 다음 방법 중 하나로 네트워크를 표시할 고래할 때 페이지 절대적으로 다른 모든 것은 불에,하나 이상의 거리 지연은 아마도 허용됩니다.

Cdn 및 로드 밸런서는 크게 비난을 때,특히 그들을 결합 CNAME 기록 짧은 TTLs 레코드도 짧지만(독립)TTLs:

$ drill raw.githubusercontent.comraw.githubusercontent.com. 9 IN CNAME github.map.fastly.net.github.map.fastly.net. 20 IN A 151.101.128.133github.map.fastly.net. 20 IN A 151.101.192.133github.map.fastly.net. 20 IN A 151.101.0.133github.map.fastly.net. 20 IN A 151.101.64.133

새로운 쿼리를 필요로 전송될 때마다 CNAME 나의 레코드를 만료됩니다. 그들은 둘 다 30 초 TTL 을 가지고 있지만 단계에 있지 않습니다. 실제 평균 TTL 은 15 초가됩니다.

하지만 기다려! 이것은 더 나쁘다. 일부를 확인 프로그램 동작 꽤 심하게에서 이러한 낮은-TTL-CNAME+low-TTL-레코드를 상황

$ drill raw.githubusercontent.com @4.2.2.2raw.githubusercontent.com. 1 IN CNAME github.map.fastly.net.github.map.fastly.net. 1 IN A 151.101.16.133

이 Level3 의 해결책에,나는 생각한다,실행할 수 있습니다. 해당 쿼리를 계속 보내면 반환 된 TTL 은 항상 1 이됩니다. 본질적으로,raw.githubusercontent.com 캐시되지 않습니다.

다음은 매우 인기있는 이름을 특징으로하는 low-TTL-CNAME+low-TTL-records 상황의 또 다른 예입니다:

$ drill detectportal.firefox.com @1.1.1.1detectportal.firefox.com. 25 IN CNAME detectportal.prod.mozaws.net.detectportal.prod.mozaws.net. 26 IN CNAME detectportal.firefox.com-v2.edgesuite.net.detectportal.firefox.com-v2.edgesuite.net. 10668 IN CNAME a1089.dscd.akamai.net.a1089.dscd.akamai.net. 10 IN A 104.123.50.106a1089.dscd.akamai.net. 10 IN A 104.123.50.88

CNAME 레코드가 3 개 미만입니다. 아야. 그 중 하나는 괜찮은 TTL 을 가지고 있지만 완전히 쓸모가 없습니다. 다른 CNAMEs 는 원래 TTL 이 60 초입니다.akamai.net 이름은 최대 TTL 이 20 초이며 그 중 어느 것도 위상에 있지 않습니다.

어떻게 당신의 애플 장치가 지속적으로 폴링하는 것은 어떻습니까?

$ drill 1-courier.push.apple.com @4.2.2.21-courier.push.apple.com. 1253 IN CNAME 1.courier-push-apple.com.akadns.net.1.courier-push-apple.com.akadns.net. 1 IN CNAME gb-courier-4.push-apple.com.akadns.net.gb-courier-4.push-apple.com.akadns.net. 1 IN A 17.57.146.84gb-courier-4.push-apple.com.akadns.net. 1 IN A 17.57.146.85

Firefox 와 동일한 구성이며 Ttl 은 Level3 의 resolver 를 사용할 때 대부분 1 에 붙어 있습니다.

드롭 박스는 어떻습니까?나는 이것을 할 수 없다.safebrowsing.googleapis.com 60 초의 TTL 이 있습니다. Facebook 이름에는 60 초 TTL 이 있습니다. 그리고 다시 한번,클라이언트 관점에서 볼 때 이러한 값은 절반으로 줄여야합니다.

최소 TTL 설정은 어떻습니까?

이 이름을 사용하여 쿼리 유형,TTL 및 타임 스탬프를 처음에 저장되 나는 스크립트는 시뮬레이션 1.5+백만 쿼리를 통해 캐시 확인 프로그램를 예상하는 쿼리를 전송되었으로 인해 만료되어는 캐쉬 항목입니다. 쿼리의 47.4%는 기존의 캐시 된 항목이 만료 된 후에 이루어졌습니다. 이것은 부당하게 높습니다.

최소 TTL 이 설정된 경우 캐싱에 미치는 영향은 무엇입니까?

그림 10—TTL 에서 초(X 축)에 대한 비율의 쿼리로 만든 클라이언트가 이미 캐시된 항목(Y-axis).

X 축은 설정된 최소 TTL 입니다. 원래 TTL 이 이 값보다 높은 레코드는 영향을 받지 않았습니다. Y 축은 캐시된 항목이 이미 있지만 새 쿼리가 만들어지고 캐시된 항목이 만료된 클라이언트가 만든 쿼리의 백분율입니다.

쿼리 수는 최소 5 분의 TTL 을 설정하는 것만으로 47%에서 36%로 떨어집니다. 최소 TTL 을 15 분으로 설정하면 필요한 쿼리 수가 29%로 떨어집니다. 1 시간의 최소 TTL 은 17%로 떨어집니다. 그것은 중요한 차이입니다!

는 방법에 대해 아무것도 변화하지 서버쪽,하지만 클라이언트는 DNS 캐시(라우터,지역의 해결과 캐시…)설정한 최소한 TTL 까요?

그림 11—TTL 에서 초(X 축)에 대한 비율의 쿼리로 만든 클라이언트가 이미 캐시된 항목(Y-axis).

필요한 쿼리 수는 최소 TTL 을 5 분으로 설정하여 47%에서 34%로,15 분 최소로 25%로,1 시간 최소로 13%로 떨어집니다. 40 분 어쩌면 달콤한 자리. 그 최소한의 변화의 영향은 엄청납니다.

의미는 무엇입니까?

의 물론,서비스로 전환할 수 있는 새로운 클라우드 업체로,새로운 서버는 새로운 네트워크를 요구하는 클라이언트가 사용하여 그대로–날짜 DNS records. 그리고 합리적으로 낮은 TTLs 를 갖는 것은 전이를 마찰이 없도록 만드는 데 도움이됩니다. 그러나 새로운 인프라로 이동하는 사람은 클라이언트가 1 분,5 분 또는 15 분 내에 새로운 DNS 레코드를 사용할 것으로 기대하지 않습니다.

5 분 대신 최소 TTL 을 40 분으로 설정하면 사용자가 서비스에 액세스하지 못하게됩니다. 그러나,그것은 과감하게 대기 시간을 줄이고,개선이 개인정보(자세한 질=더 추적 기회)및 신뢰성을 피함으로써 불필요한 쿼리를 처리합니다.

물론 RFCs 는 TTLs 를 엄격하게 존중해야한다고 말합니다. 그러나 현실은 DNS 가 비효율적이되었다는 것입니다.

신뢰할 수있는 DNS 서버를 운영하는 경우 TTLs 를 다시 방문하십시오. 당신은 정말로 이것들이 엄청나게 낮을 필요가 있습니까?

읽기:DNS TTL 값을 선택하는 방법

물론,낮은 DNS TTLs 를 사용하는 유효한 이유가 있습니다. 그러나 인터넷의 75%가 대부분 불변이지만 캐시에 무의미한 콘텐츠를 제공하는 것은 아닙니다. 는 경우,어떤 이유로,당신은 정말을 사용할 필요가 낮은 DNS TTLs,또한지 확인하는 캐쉬에서 작동하지 않습니다 웹 사이트 중 하나. 아주 같은 이유로.

최소 TTLs 를 설정할 수있는 dnscrypt-proxy 와 같은 로컬 DNS 캐시를 사용하는 경우 해당 기능을 사용하십시오. 이건 괜찮아. 나쁜 일은 일어나지 않을 것입니다. 최소 TTL 을 40 분(2400 초)에서 1 시간 사이의 무언가로 설정하십시오.

에 등장 원래 게시물에서 적응 00f.net

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다