LÄg DNS-latens Àr nyckeln till snabb internetsurfning. För att minimera det Àr det viktigt att noggrant vÀlja DNS-servrar och . Men det första du behöver göra Àr att bli av med vÀrdelösa frÄgor.
Det Àr dÀrför DNS ursprungligen designades som ett mycket cachebart protokoll. Zonadministratörer stÀller in en tid att leva (TTL) för enskilda poster, och resolvers anvÀnder denna information nÀr de lagrar poster i minnet för att undvika onödig trafik.
Ăr cachning effektiv? För ett par Ă„r sedan visade min lilla research att den inte var perfekt. LĂ„t oss ta en titt pĂ„ det aktuella lĂ€get.
För att samla information har jag patchat för att lagra TTL-vÀrdet för svaret. Den definieras som den minsta TTL för dess poster, för varje inkommande begÀran. Detta ger en bra översikt över TTL-fördelningen av verklig trafik, och tar Àven hÀnsyn till populariteten för enskilda frÄgor. Den korrigerade versionen av servern fungerade i flera timmar.
Den resulterande datamÀngden bestÄr av 1 583 579 poster (namn, qtype, TTL, tidsstÀmpel). HÀr Àr den övergripande TTL-fördelningen (x-axeln Àr TTL i sekunder):

Bortsett frÄn en mindre stöt pÄ 86 400 (mest för SOA-poster) Àr det ganska uppenbart att TTL:erna Àr i det lÄga intervallet. LÄt oss ta en nÀrmare titt:

Ok, TTL över 1 timme Àr inte statistiskt signifikanta. LÄt oss sedan fokusera pÄ intervallet 0-3600:

De flesta TTL:er Àr mellan 0 och 15 minuter:

De allra flesta Àr frÄn 0 till 5 minuter:

Det hÀr Àr inte sÀrskilt bra.
Kumulativ fördelning gör problemet Ànnu mer uppenbart:

HÀlften av DNS-svaren har en TTL pÄ 1 minut eller mindre och tre fjÀrdedelar har en TTL pÄ 5 minuter eller mindre.
Men vÀnta, det Àr faktiskt Ànnu vÀrre. Detta Àr trots allt TTL frÄn auktoritativa servrar. Men klientupplösare (t.ex. routrar, lokala cachar) tar emot TTL frÄn uppströmslösare, och den minskar för varje sekund.
SÄledes kan klienten faktiskt anvÀnda varje post för i genomsnitt hÀlften av den ursprungliga TTL innan han skickar en ny begÀran.
Kanske pÄverkar dessa mycket lÄga TTL:er bara ovanliga förfrÄgningar och inte populÀra webbplatser och API:er? LÄt oss ta en titt:

X-axeln Àr TTL, Y-axeln Àr sökpopularitet.
TyvÀrr Àr de mest populÀra frÄgorna ocksÄ de sÀmst cachade.
LÄt oss zooma in:

Omdöme: Det Àr riktigt dÄligt. Det var redan dÄligt innan, men det blev Ànnu vÀrre. DNS-cachelagring har blivit praktiskt taget vÀrdelös. Eftersom fÀrre personer anvÀnder sin internetleverantörs DNS-resolver (av goda skÀl) blir ökningen av latens mer mÀrkbar.
DNS-cache har bara blivit anvÀndbart för innehÄll som ingen besöker.
Observera ocksÄ att programvaran kan tolka lÄga TTL.
Varför sÄ?
Varför Àr DNS-poster instÀllda pÄ en sÄ liten TTL?
- Ăldre lastbalanserare lĂ€mnas med standardinstĂ€llningar.
- Det finns myter om att DNS-belastningsbalansering beror pÄ TTL (detta stÀmmer inte - eftersom Netscape Navigator vÀljer klienter en slumpmÀssig IP-adress frÄn RR-uppsÀttningen och försöker transparent med en annan om de inte kan ansluta)
- Administratörer vill tillÀmpa Àndringar omedelbart, sÄ det Àr lÀttare att planera.
- Administratören för en DNS-server eller belastningsutjÀmnare ser sin uppgift som att effektivt distribuera den konfiguration som efterfrÄgas av anvÀndare, och inte pÄskynda driften av webbplatser och tjÀnster.
- LÄg TTL ger sinnesfrid.
- MÀnniskor satte initialt lÄga TTL för testning och glömmer sedan att Àndra dem.
Jag tog inte med "failover" i listan eftersom det blir mindre relevant. Om du behöver omdirigera anvÀndare till ett annat nÀtverk bara för att visa en felsida nÀr absolut allt annat Àr trasigt, Àr en fördröjning pÄ mer Àn 1 minut förmodligen acceptabel.
Dessutom innebÀr en minuts TTL att om auktoritativa DNS-servrar blockeras i mer Àn 1 minut, kommer ingen annan att kunna komma Ät beroende tjÀnster. Och redundans hjÀlper inte om orsaken Àr ett konfigurationsfel eller ett hack. à andra sidan, med rimliga TTL:er kommer mÄnga klienter att fortsÀtta att anvÀnda den tidigare konfigurationen och mÀrker aldrig nÄgot.
LÄga TTL:er Àr till stor del felet hos CDN-tjÀnster och lastbalanserare, sÀrskilt nÀr de kombinerar CNAME:er med lÄga TTL:er och poster med lika lÄga (men oberoende) TTL:er:
$ 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 CNAME eller nÄgon av A-posterna löper ut mÄste en ny begÀran skickas. BÄda har 30 sekunders TTL men det Àr inte samma sak. Den faktiska genomsnittliga TTL kommer att vara 15 sekunder.
Men vÀnta! Det Àr Ànnu vÀrre. Vissa resolvers beter sig vÀldigt dÄligt i den hÀr situationen med tvÄ lÀnkade lÄga TTL:er:
$ borra raw.githubusercontent.com @4.2.2.2 raw.githubusercontent.com. 1 I CNAME github.map.fastly.net. github.map.fastly.net. 1 IN A 151.101.16.133
Level3-resolvern körs förmodligen pÄ BIND. Om du fortsÀtter att skicka denna begÀran kommer den alltid att returnera en TTL pÄ 1. I huvudsak, raw.githubusercontent.com aldrig cachad.
HÀr Àr ett annat exempel pÄ den hÀr situationen 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. Ja. En har hyfsad TTL, men den Àr helt vÀrdelös. I andra CNAME Àr den initiala TTL 60 sekunder, men för domÀner akamai.net Den maximala TTL Àr 20 sekunder och ingen av dem Àr i fas.
Hur Àr det med domÀner som stÀndigt efterfrÄgar 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 Firefox och TTL kommer att fastna pÄ 1 sekund för det mesta nÀr du anvÀnder Level3 resolver.
Dropbox?
$ drill client.dropbox.com @8.8.8.8 client.dropbox.com. 7 I 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 I CNAME client.dropbox-dns.com. client.dropbox-dns.com. 1 IN A 162.125.64.3
Vid inspelningen safebrowsing.googleapis.com TTL-vÀrdet Àr 60 sekunder, samma som Facebook-domÀner. Och Äterigen, ur kundens synvinkel, halveras dessa vÀrden.
Vad sÀgs om att stÀlla in en lÀgsta TTL?
Med hjÀlp av namnet, förfrÄgningstypen, TTL och den ursprungligen lagrade tidsstÀmpeln skrev jag ett skript för att simulera 1,5 miljoner förfrÄgningar som gÄr genom en caching-resolver för att uppskatta mÀngden extra förfrÄgningar som skickas pÄ grund av en utgÄngen cachepost.
47,4 % av förfrÄgningarna gjordes efter att den befintliga posten hade löpt ut. Detta Àr orimligt högt.
Vad blir effekten pÄ cachning om ett lÀgsta TTL stÀlls in?

X-axeln Àr de minsta TTL-vÀrdena. Poster med original-TTL över detta vÀrde pÄverkas inte.
Y-axeln Àr procentandelen förfrÄgningar frÄn en klient som redan har en cachad post, men den har löpt ut och gör en ny begÀran.
Andelen "extra" förfrÄgningar minskas frÄn 47 % till 36 % genom att helt enkelt stÀlla in minsta TTL till 5 minuter. Genom att stÀlla in minsta TTL till 15 minuter sjunker antalet förfrÄgningar till 29 %. En minsta TTL pÄ 1 timme minskar dem till 17 %. Betydande skillnad!
Vad sÀgs om att inte Àndra nÄgot pÄ serversidan, utan istÀllet stÀlla in minsta TTL i klientens DNS-cachar (routrar, lokala resolvers)?

Antalet nödvÀndiga förfrÄgningar minskas frÄn 47 % till 34 % nÀr man stÀller in en minsta TTL pÄ 5 minuter, till 25 % med minst 15 minuter och till 13 % med minst 1 timme. Det optimala vÀrdet Àr kanske 40 minuter.
Effekten av denna minimala förÀndring Àr enorm.
Vilka Àr konsekvenserna?
Naturligtvis kan tjÀnsten migreras till en ny molnleverantör, en ny server, ett nytt nÀtverk, vilket krÀver att klienter anvÀnder de senaste DNS-posterna. Och en ganska liten TTL hjÀlper till att göra en sÄdan övergÄng smidigt och omÀrkligt. Men med övergÄngen till en ny infrastruktur förvÀntar sig ingen att kunderna ska migrera till nya DNS-poster inom 1 minut, 5 minuter eller 15 minuter. Att stÀlla in minimilivslÀngden till 40 minuter istÀllet för 5 minuter hindrar inte anvÀndare frÄn att komma Ät tjÀnsten.
Detta kommer dock att avsevÀrt minska latensen och förbÀttra integriteten och tillförlitligheten genom att undvika onödiga förfrÄgningar.
Naturligtvis sÀger RFC:erna att TTL mÄste följas strikt. Men verkligheten Àr att DNS-systemet har blivit för ineffektivt.
Om du arbetar med auktoritativa DNS-servrar, kontrollera dina TTL:er. Behöver du verkligen sÄ löjligt lÄga vÀrden?
Naturligtvis finns det goda skÀl för att stÀlla in smÄ TTL:er för DNS-poster. Men inte för de 75 % av DNS-trafiken som förblir praktiskt taget oförÀndrad.
Och om du av nÄgon anledning verkligen behöver anvÀnda lÄga TTL:er för DNS, se ocksÄ till att caching inte Àr aktiverat pÄ din webbplats. Av samma skÀl.
Om du har en lokal DNS-cache igÄng, som t.ex , som lÄter dig stÀlla in minsta TTL, anvÀnd denna funktion. Det hÀr Àr bra. Inget dÄligt kommer att hÀnda. StÀll in minsta TTL till cirka 40 minuter (2400 sekunder) och 1 timme. Ganska rimlig rÀckvidd.
KĂ€lla: will.com
