LÄg DNS-fördröjning Àr en nyckelfaktor för snabb internetanvÀndning. För att minimera den Àr det viktigt att noggrant vÀlja DNS-servrar och . Men först och frÀmst bör man bli av med onödiga förfrÄgningar.
DÀrför skapades DNS ursprungligen som en starkt cachad protokoll. Zonadministratörer sÀtter livslÀngd (TTL) för individuella poster, och resolverar anvÀnder denna information nÀr de lagrar poster i minnet för att undvika onödig trafik.
Ăr cachningen effektiv? För ett par Ă„r sedan visade min lilla studie att den inte Ă€r perfekt. LĂ„t oss titta pĂ„ den nuvarande situationen.
För att samla information har jag patchat för att bevara TTL-vÀrdet för svaret. Det definieras som den minimi TTL av dess poster för varje inkommande förfrÄgan. Detta ger en bra översikt av TTL-fördelningen för den verkliga trafiken och tar Àven hÀnsyn till populÀriteten av individuella förfrÄgningar. Den patchade versionen av servern kördes i flera timmar.
Det resulterande datasetet bestÄr av 1 583 579 poster (namn, qtyp, TTL, tidsstÀmpel). HÀr Àr den övergripande fördelningen av TTL (X-axeln Àr TTL i sekunder):

Bortsett frÄn det lilla toppvÀrdet pÄ 86 400 (frÀmst för SOA-poster) Àr det ganska uppenbart att TTL ligger i det lÄga intervallet. LÄt oss titta nÀrmare:

Okej, TTL över 1 timme Ă€r statistiskt ovidkommande. LĂ„t oss fokusera pĂ„ intervallet 0â3600:

De flesta TTL ligger mellan 0 och 15 minuter:

Den övervÀldigande majoriteten ligger mellan 0 och 5 minuter:

Detta Àr inte bra.
Den kumulativa fördelningen gör problemet Ànnu mer uppenbart:

I hÀlften av DNS-svaren Àr TTL 1 minut eller mindre, och för tre fjÀrdedelar Àr det 5 minuter eller mindre.
Men vÀnta, det Àr faktiskt Ànnu vÀrre. Dessa Àr TTL frÄn auktoritativa servrar. Men klientresolverare (t.ex. routrar, lokala cachar) fÄr TTL frÄn överordnade resolverare, och den minskar med varje sekund.
DÀrför kan klienten i genomsnitt anvÀnda varje post under hÀlften av den ursprungliga TTL, efter vilket ett nytt förfrÄgan skickas.
Kanske gÀller dessa mycket lÄga TTL bara ovanliga förfrÄgningar, och inte populÀra webbplatser och API:er? LÄt oss se:

X-axeln Àr TTL, Y-axeln Àr populariteten hos förfrÄgningarna.
TyvÀrr Àr de mest populÀra förfrÄgningarna ocksÄ de som cachas sÀmst.
LÄt oss zooma in:

Dom: det Àr verkligen dÄligt. Det har alltid varit dÄligt, men nu har det blivit Ànnu sÀmre. DNS-caching har blivit praktiskt taget vÀrdelöst. Eftersom fÀrre och fÀrre mÀnniskor anvÀnder sin leverantörs DNS-resolver (av legitima skÀl) blir ökningen av latens mer mÀrkbar.
DNS-caching har blivit anvÀndbart endast för innehÄll som ingen besöker.
Observera ocksÄ att programvaran kan sÀtt lÄga TTL.
Varför sÄ?
Varför sÀtts en sÄ lÄg TTL för DNS-poster?
- FörÄldrade lastbalanserare har kvar standardinstÀllningar.
- Det gÄr myter om att lastbalansering via DNS beror pÄ TTL (det gör den inte - Ànda sedan Netscape Navigator vÀljer klienter en slumpmÀssig IP-adress frÄn en uppsÀttning RR och försöker osynligt en annan om de inte kan ansluta)
- Administratörer vill tillÀmpa förÀndringar omedelbart, eftersom det Àr mycket enklare att planera.
- DNS-serverns eller lastbalanserarens administratör ser det som sin uppgift att effektivt distribuera den konfiguration som anvÀndare begÀr, snarare Àn att snabba upp webbplatser och tjÀnster.
- LÄga TTL ger sinnesro.
- Folk sÀtter initialt lÄga TTL för testning och glömmer sedan att Àndra dem.
Jag inkluderade inte "felhantering" i listan, eftersom det blir mindre aktuellt. Om du behöver omdirigera anvÀndare till ett annat nÀtverk bara för att visa en felmeddelandesida nÀr allt annat Àr trasigt, Àr kanske en latens pÄ över 1 minut acceptabel.
Dessutom betyder en minut TTL att om de auktoritativa DNS-servrarna blockeras i mer Àn 1 minut, kan ingen annan fÄ tillgÄng till beroende tjÀnster. Och redundans hjÀlper inte om orsaken Àr en konfigurationsfel eller hack. à andra sidan, med rimliga TTL fortsÀtter mÄnga klienter att anvÀnda den tidigare konfigurationen och mÀrker aldrig nÄgot.
LÄga TTL ansvarar i hög grad för CDN-tjÀnster och lastbalanserare, sÀrskilt nÀr de kombinerar CNAME med lÄga TTL och poster med samma lÄga (men oberoende) TTL:
$ drill raw.githubusercontent.com raw.githubusercontent.com. 9 IN CNAME github.map.fastly.net. github.map.fastly.net. 20 IN A 151.101.128.133 github.map.fastly.net. 20 IN A 151.101.192.133 github.map.fastly.net. 20 IN A 151.101.0.133 github.map.fastly.net. 20 IN A 151.101.64.133
Varje gÄng en CNAME- eller nÄgon av A-posterna gÄr ut, mÄste en ny förfrÄgan skickas. De har bÄda en TTL pÄ 30 sekunder, men de matchar inte. Den faktiska genomsnittliga TTL kommer att vara 15 sekunder.
Men vÀnta! Det Àr fortfarande vÀrre. Vissa resolverare beter sig vÀldigt dÄligt i en sÄdan situation med tvÄ relaterade lÄga TTL:
$ drill raw.githubusercontent.com @4.2.2.2 raw.githubusercontent.com. 1 IN CNAME github.map.fastly.net. github.map.fastly.net. 1 IN A 151.101.16.133
Level3-resolveraren arbetar sannolikt med BIND. Om du fortsÀtter att skicka denna förfrÄgan, kommer TTL alltid att returneras som 1. I grund och botten, raw.githubusercontent.com kan aldrig cacheras.
HÀr Àr ett annat exempel pÄ en sÄdan situation med en mycket populÀr domÀn:
$ drill detectportal.firefox.com @1.1.1.1 detectportal.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.106 a1089.dscd.akamai.net. 10 IN A 104.123.50.88
Minst tre CNAME-poster. Aj. En har en acceptabel TTL, men det Àr helt vÀrdelöst. I andra CNAME Àr den ursprungliga TTL 60 sekunder, men för domÀnerna akamai.net Àr den maximala TTL 20 sekunder, och ingen av dem Àr synkroniserade.
Hur Àr det med domÀner som stÀndigt queryar Apple-enheter?
$ drill 1-courier.push.apple.com @4.2.2.2 1-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.84 gb-courier-4.push-apple.com.akadns.net. 1 IN A 17.57.146.85
Samma problem som med Firefox, och TTL kommer för det mesta att fastna pÄ 1 sekund nÀr man anvÀnder Level3-resolveraren.
Dropbox?
$ drill client.dropbox.com @8.8.8.8 client.dropbox.com. 7 IN CNAME client.dropbox-dns.com. client.dropbox-dns.com. 59 IN A 162.125.67.3 $ drill client.dropbox.com @4.2.2.2 client.dropbox.com. 1 IN CNAME client.dropbox-dns.com. client.dropbox-dns.com. 1 IN A 162.125.64.3
I posten safebrowsing.googleapis.com Àr TTL-vÀrdet 60 sekunder, precis som för Facebook-domÀner. Och Äterigen, sett ur ett kundperspektiv, minskar dessa vÀrden med hÀlften.
Hur Àr det med att stÀlla in en minimal TTL?
Genom att anvÀnda namnet, begÀrningstypen, TTL och den ursprungligen sparade tidsstÀmpeln skrev jag ett skript för att simulera 1,5 miljoner förfrÄgningar som passerade genom en cache-resolver för att bedöma mÀngden onödiga förfrÄgningar som skickades pÄ grund av en utgÄngen cache-poster.
47,4% av förfrÄgningarna gjorde efter att den befintliga posten hade gÄtt ut. Det Àr orimligt högt.
Vad kommer att bli effekten pÄ caching om en minimal TTL sÀtts?

X-axeln representerar de minimi TTL-vÀrden. Poster med ursprungliga TTL-vÀrden över detta pÄverkas inte.
Y-axeln visar procentandelen förfrÄgningar frÄn klienter som redan har en cachelagrad post, men vars giltighetstid har löpt ut och som gör en ny förfrÄgan.
Andelen "överskotts" förfrÄgningar minskar frÄn 47% till 36% genom att enkelt stÀlla in en minimal TTL pÄ 5 minuter. Vid en minimal TTL pÄ 15 minuter minskar antalet dessa förfrÄgningar till 29%. En minimal TTL pÄ 1 timme sÀnker dem till 17%. En betydande skillnad!
Vad sÀgs om att inte förÀndra nÄgot pÄ serversidan, utan istÀllet stÀlla in minimala TTL-vÀrden i klienternas DNS-cacher (routrar, lokala resolvers)?

Antalet nödvÀndiga förfrÄgningar minskar frÄn 47% till 34% vid en minimal TTL pÄ 5 minuter, till 25% med ett minimum pÄ 15 minuter och till 13% med ett minimum pÄ 1 timme. Kanske Àr det optimala vÀrdet 40 minuter.
Effekten av denna minimala förÀndring Àr enorm.
Vad fÄr detta för konsekvenser?
SjÀlvklart kan tjÀnsten överföras till en ny molnleverantör, en ny server, ett nytt nÀtverk, vilket krÀver att kunderna anvÀnder de senaste DNS-posterna. En tillrÀckligt lÄg TTL hjÀlper till att göra en sÄdan övergÄng smidig och osynlig. Men med övergÄngen till en ny infrastruktur förvÀntar sig ingen att kunderna skal byta till nya DNS-poster inom 1 minut, 5 minuter eller 15 minuter. Att sÀtta en minimal livslÀngd pÄ 40 minuter istÀllet för 5 minuter hindrar inte anvÀndarna frÄn att fÄ Ätkomst till tjÀnsten.
Men detta kommer att kraftigt minska latensen och förbÀttra sekretessen och pÄlitligheten, genom att undvika onödiga förfrÄgningar.
SjÀlvklart sÀger RFC att man strikt ska följa TTL. Men verkligheten Àr att DNS-systemet har blivit för ineffektivt.
Om du arbetar med auktoritativa DNS-servrar, kontrollera vÀnligen dina TTL-vÀrden. Behöver du verkligen sÄ löjligt lÄga vÀrden?
SjÀlvklart finns det goda skÀl att stÀlla in smÄ TTL-vÀrden för DNS-poster. Men inte för 75% av DNS-trafiken som praktiskt taget inte förÀndras.
Och om du av nÄgon anledning verkligen behöver anvÀnda lÄga TTL-vÀrden för DNS, se ocksÄ till att det inte finns nÄgot cachelagring aktiverat pÄ din webbplats. Av samma skÀl.
Om du har en lokal DNS-cache som fungerar, sÄsom , som lÄter dig stÀlla in en minimal TTL, anvÀnd denna funktion. Det Àr okej. Inget dÄligt kommer att hÀnda. StÀll in en minimal TTL pÄ ungefÀr mellan 40 minuter (2400 sekunder) och 1 timme. En helt rimlig spann.
KĂ€lla: habr.com
