Madala latentsusega DNS on kiire veebitöötluse jaoks oluline tegur. Selle minimeerimiseks on oluline hoolikalt valida DNS-serverid ja . Kuid kÔigepealt tuleks vabaneda tarbetutest pÀringutest.
Just sel pÔhjusel loodi DNS algselt tugevalt vahemÀlutatavaks protokolliks. Domeenide administraatorid seadistavad eraldi kirgede eluea (TTL), ning resolverid kasutavad seda teavet, et vÀltida tarbetut liiklust, salvestades kirjed mÀllu.
Kas vahemÀlu on efektiivne? MÔni aasta tagasi nÀitas minu vÀike uuring, et see ei ole ideaalne. Vaatame praegust olukorda.
Teabe kogumiseks olen ma parandanud TTL vÀÀrtuse salvestamiseks vastuse jaoks. See mÀÀratakse kui iga sissetuleva pĂ€ringu maksimaalne TTL. See annab hea ĂŒlevaate tĂ”elise liikluse TTL jaotusest ning arvestab ka individuaalsete pĂ€ringute populaarsust. Parandatud server töötas mitu tundi.
Tulemuste andmestik koosneb 1 583 579 kirjest (name, qtype, TTL, timestamp). Siin on TTL ĂŒldine jaotus (X-telg on TTL sekundites):

Kui jĂ€tta kĂ”rvale vĂ€ike tipp 86 400 juures (peamiselt SOA kirjed), siis on ĂŒsna selge, et TTL-d on madalas vahemikus. Vaadakem lĂ€hemalt:

Noh, TTL ĂŒle 1 tunni pole statistiliselt olulised. Keskendume seega vahemikule 0â3600:

Enamik TTL-e on vahemikus 0 kuni 15 minutit:

Suurem osa on 0 kuni 5 minuti jooksul:

See pole sugugi hea.
Kumulatiivne jaotus teeb probleemi veelgi selgemaks:

Pooltel DNS-vastustest on TTL 1 minut vÔi vÀhem, ja kolm neljandikku on 5 minutit vÔi vÀhem.
Aga oota, tegelikult on asi veel hullem. LÔppude lÔpuks on need TTL autoriteetsed serverid. Siiski saavad kliendiresolverid (nÀiteks ruuterid, kohalikud vahemÀlud) TTL kÔrgematelt resolveridelt, ja see vÀheneb iga sekundi jooksul.
Seega vÔib klient tegelikult kasutada iga kirjet keskmiselt pool algsest TTL-ist, pÀrast mida saadab ta uue pÀringu.
VÔib-olla kehtivad need vÀga madalad TTL-d ainult ebatavaliste pÀringute kohta, mitte populaarsete veebisaitide ja API-de kohta? Vaadakem seda:

X-telg on TTL, Y-telg on pÀringute populaarsus.
Kahjuks on kÔige populaarsemad pÀringud ka kÔige halvemini vahemÀlustatud.
LĂ€heneme:

Otsus: kĂ”ik on tĂ”esti halb. Oli juba varem halb, kuid nĂŒĂŒd on veel hullem. DNS-i vahemĂ€lestamine on praktiliselt kasutu. Kuna ĂŒha vĂ€hem inimesi kasutab oma teenusepakkuja DNS-i lahendajat (mĂ”istlikel pĂ”hjustel), muutub viivituse suurenemine silmatorkavamaks.
DNS-i vahemĂ€lestamine on kasulik ainult sisu jaoks, mida keegi ei kĂŒlasta.
Pöörake tÀhelepanu ka sellele, et tarkvara vÔib madalaid TTL-e.
Miks nii?
Miks on DNS-kirjetele seatud nii madal TTL?
- Vanad koormuse tasakaalustajad jÀid vaikeseadetega.
- KĂ€ivad mĂŒĂŒdid, et DNS-i koormuse tasakaal sĂ”ltub TTL-ist (see ei ole nii - alates Netscape Navigatori ajast valivad kliendid juhusliku IP-aadressi RR-hulgast ja katsetavad teist, kui ei saa ĂŒhendust)
- Sysadminid soovivad muudatusi koheselt rakendada, sest nii on lihtsam planeerida.
- DNS-serveri vĂ”i koormuse tasakaalustaja administraatori ĂŒlesanne on efektiivselt tĂ€ita kasutajate nĂ”udmisi seoses konfiguratsiooniga, mitte kiirendada veebisaitide ja teenuste tööd.
- Madala TTL (eluea) vÀÀrtuse kasutamine toob rahu ja kindlustunde.
- Inimesed seavad alguses madalad TTL-id testimiseks ja unustavad hiljem neid muuta.
Ma ei lisanud âkatkestuste töötlemistâ loetellu, kuna see on ĂŒha vĂ€hem aktuaalne. Kui on vaja suunata kasutajad teise vĂ”rku lihtsalt veateate lehe kuvamiseks, kui kĂ”ik muu on rikki lĂ€inud, siis on tĂ”enĂ€oliselt lubatav viivitus, mis ĂŒletab 1 minuti.
K darĂŒber jjutis idol alh va yedol, et kui autoriteetsed DNS-serverid on blokeeritud enam kui 1 minutiks, ei pÀÀse keegi enam juurde sĂ”ltuvatele teenustele. Ja ĂŒleliigsus ei aita, kui pĂ”hjus on konfiguratsiooni viga vĂ”i rĂŒnnak. Teisest kĂŒljest, mĂ”istlike TTL-idega jĂ€tkab paljude kliendid eelmise konfiguratsiooni kasutamist ega mĂ€rkagi midagi.
Madala TTL definitsioon on suuresti seotud CDN-teenuste ja koormuse tasakaalustajatega, eriti kui need ĂŒhendavad CNAME-d madalate TTL-dega ja kirjed, millel on samuti madalad (kuid iseseisvad) TTL-d:
$ 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
Iga kord, kui CNAME vĂ”i ĂŒkski A-kirjest on aegunud, tuleb saata uus pĂ€ring. MĂ”lemal on 30-sekundiline TTL, kuid need ei ĂŒhti. Tegelik keskmine TTL on 15 sekundit.
Aga oota! Asi on veel hullem. MÔned resolverid kÀituvad sellises olukorras kahte madala TTL-iga kirjadega vÀga halvasti:
$ 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
Resolver Level3 töötab tÔenÀoliselt BIND-il. Kui jÀtkate selle pÀringu saatmist, tagastatakse alati TTL, mis on vÔrdne 1. Sisuliselt, raw.githubusercontent.com ei cache'ita kunagi.
Siin on veel ĂŒks nĂ€ide sellisest olukorrast vĂ€ga populaarsel domeenil:
$ 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
VĂ€hemalt kolm CNAME kirjet. Ăks neist on head TTL, kuid see on tĂ€iesti kasutu. ĂlejÀÀnud CNAME algne TTL on 60 sekundit, kuid domeenide puhul akamai.net maksimaalne TTL on 20 sekundit, ja ĂŒkski neist ei ole faasis.
Kuidas on nende domeenidega, mis pidevalt kĂŒsivad Apple'i seadmeid?
$ 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
Sama probleem nagu Firefoxil, ja TTL jÀÀb suurema osa ajast 1 sekundi peale kasutades Level3 resolverit.
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
Kande safebrowsing.googleapis.com TTL vÀÀrtus on 60 sekundit, nagu Facebooki domeenide puhul. Ja taas, kliendi seisukohalt, need vÀÀrtused vÀhenevad poole vÔrra.
Kuidas oleks minimaalne TTL seadistamine?
Kasutades nime, pĂ€ringu tĂŒĂŒpi, TTL-i ja algselt salvestatud ajatemplit, kirjutasin skripti, et simuleerida 1,5 miljoni pĂ€ringu lĂ€bitulekut lĂ€bi vahemĂ€llu salvestava resolvri, et hinnata liialdavate pĂ€ringute mahtu, mis saadetakse aegunud vahemĂ€lu kande tĂ”ttu.
47,4% pÀringutest tehti pÀrast olemasoleva kande aegumist. See on pÔhjendamatu kÔrge.
Milline mÔju on vahemÀllu salvestamisele, kui kehtestada minimaalne TTL?

X-telg nÀitab minimaalsete TTL vÀÀrtuste arvu. Kanded, mille algne TTL on sellest vÀÀrtusest kÔrgem, ei ole mÔjutatud.
Y-telg nÀitab protsenti klientidest, kellel on juba vahemÀllus salvestatud kandi aegumine ja kes teevad uue pÀringu.
âLiialdavateâ pĂ€ringute osakaal langeb 47% -lt 36%-le, kui kehtestada minimaalne TTL 5 minutiks. Minimaalne TTL 15 minutiks vĂ€hendab nende pĂ€ringute arvu 29%-le. 1 tunni minimaalne TTL vĂ€hendab nende arvu 17%-le. Oluline erinevus!
Kuidas oleks, kui mitte midagi serveri poolel muuta, vaid hoopis seada minimaalne TTL kliendi DNS-vahemÀludes (ruuteri, kohalike resolv rugged)?

NÔutavate pÀringute arv vÀheneb 47%-lt 34%-le, kui seate minimaalne TTL 5 minutiks, 25%-le, kui minimaalne on 15 minutit, ja 13%-le, kui minimaalne on 1 tund. Optimaalne vÀÀrtus vÔiks olla 40 minutit.
Selle minimaalsete muutuste mÔju on tohutu.
Millised on tagajÀrjed?
Muidugi saab teenuse ĂŒle viia uuele pilvepakkujale, uuele serverile, uuele vĂ”rgule, nĂ”udes klientidelt uute DNS-kirjete kasutamist. Ja piisavalt madal TTL aitab sujuvalt ja mĂ€rkamatult seda ĂŒleminekut teostada. Kuid kui kolida uuele infrastruktuurile, ei oota keegi, et kliendid ĂŒlemineksid uutele DNS-kirjetele 1 minuti, 5 minuti vĂ”i 15 minuti jooksul. Minimaalse eluaja seadmine 40 minutiks 5 minuti asemel ei takista kasutajatel teenusele juurde pÀÀsemast.
Siiski vÔimaldab see oluliselt vÀhendada viivitust ja parandada privaatsust ning usaldusvÀÀrsust, vÀltides mittevajalikke pÀringuid.
Muidugi ĂŒtlevad RFC-d, et TTL-i tuleks jĂ€rgida rangelt. Kuid reaalsus on see, et DNS-sĂŒsteem on muutunud liiga ebatĂ”husaks.
Kui töötate autoriteetsete DNS-serveritega, palun kontrollige oma TTL-i. Kas teil on tÔeliselt vaja nii naeruvÀÀrselt madalaid vÀÀrtusi?
Muidugi, on tÔsiseid pÔhjuseid seada DNS-kirjadele madalad TTL-d. Kuid mitte 75% DNS-i liiklusest, mis praktiliselt ei muutu.
Ja kui mingil pĂ”hjusel peate tĂ”eliselt kasutama madalaid TTL-e DNS-is, veenduge, et teie saidil ei oleks vahemĂ€lu sisse lĂŒlitatud. Samadel pĂ”hjustel.
Kui teil töötab kohalik DNS-vahemÀlu, nagu , mis vÔimaldab seada minimaalseid TTL-e, kasutage seda funktsiooni. See on tÀiesti okei. Midagi halba ei juhtu. Seadke minimaalne TTL umbes 40 minuti (2400 sekundi) ja 1 tunni vahel. TÀiesti mÔistlik vahemik.
Allikas: habr.com
