Elég a nevetségesen alacsony TTL használatából a DNS-nél

Az alacsony DNS késleltetés kulcsfontosságú tényező a gyors internetezéshez. Ennek minimalizálása érdekében fontos, hogy gondosan válasszuk ki a DNS-szervereket és anonim relék. De először is meg kell szabadulni a haszontalan lekérdezésektől.

Ezért a DNS-t eredetileg úgy tervezték, mint egy erősen gyorsítható protokollt. A zónaadminisztrátorok élettartamot (TTL) állítanak be egyes rekordokhoz, míg a feloldók ezt az információt használják a rekordok memóriában való tárolásához, hogy elkerüljék a szükségtelen forgalmat.

Hatékony a gyorsítótárazás? Néhány éve egy kis kutatásom azt mutatta, hogy nem tökéletes. Nézzük meg a jelenlegi helyzetet.

Az információ összegyűjtéséhez módosítottam Encrypted DNS Server a TTL érték megőrzésére a válaszhoz. Ez a rekordok minimális TTL-jeként van definiálva, minden bejövő lekérdezés esetén. Ez jó áttekintést ad a valódi forgalom TTL eloszlásáról, és figyelembe veszi a különböző lekérdezések népszerűségét. A módosított szerver néhány órán át működött.

Az eredményül kapott adathalmaz 1 583 579 rekordot tartalmaz (name, qtype, TTL, timestamp). Itt van a TTL teljes eloszlása (X tengely — TTL másodpercekben):

Elég a nevetségesen alacsony TTL használatából a DNS-nél

Kivéve a nem jelentős csúcsot 86 400-on (főleg az SOA rekordok esetén), meglehetősen nyilvánvaló, hogy a TTL-ek alacsony tartományban vannak. Nézzük meg közelebbről:

Elég a nevetségesen alacsony TTL használatából a DNS-nél

Rendben, az 1 óránál hosszabb TTL statisztikailag nem jelentős. Akkor koncentráljunk a 0−3600 közötti tartományra:

Elég a nevetségesen alacsony TTL használatából a DNS-nél

A legtöbb TTL 0-tól 15 percig terjed:

Elég a nevetségesen alacsony TTL használatából a DNS-nél

A túlnyomó többség 0-tól 5 percig terjed:

Elég a nevetségesen alacsony TTL használatából a DNS-nél

Ez nem túl jó.

A felhalmozott eloszlás még nyilvánvalóbbá teszi a problémát:

Elég a nevetségesen alacsony TTL használatából a DNS-nél

A DNS válaszok felében a TTL 1 perc vagy ennél kevesebb, háromnegyedük esetén pedig 5 perc vagy kevesebb.

De várjon, valójában mindenki még rosszabb. Hiszen ez a TTL az autoritatív szerverektől származik. Azonban az ügyfél feloldók (például routerek, helyi gyorsítótárak) a feljebb lévő feloldóktól kapják a TTL-t, ami minden másodpercben csökken.

Így az ügyfél valójában minden rekordot átlagosan az eredeti TTL feléig használhat, majd új lekérdezést küld.

Lehet, hogy ezek az nagyon alacsony TTL-ek csak a szokatlan lekérdezésekre vonatkoznak, és nem a népszerű weboldalakra és API-kra? Nézzük meg:

Elég a nevetségesen alacsony TTL használatából a DNS-nél

Az X tengely a TTL, az Y tengely a lekérdezések népszerűsége.

Sajnos a legnépszerűbb lekérdezések is a legrosszabbul gyorsíthatók.

Hozzávetőleg:

Elég a nevetségesen alacsony TTL használatából a DNS-nél

Verdikt: a helyzet valóban rossz. Már korábban is rossz volt, de még rosszabbá vált. A DNS gyorsítótárazás gyakorlatilag haszontalanná vált. Mivel egyre kevesebb ember használja a szolgáltatója DNS-értelmezőjét (tiszteletre méltó okokból), a késleltetés növekedése egyre észlelhetőbbé válik.

A DNS gyorsítótárazás csak olyan tartalom számára hasznos, amelyet senki sem látogat.

Ezen kívül vegye figyelembe, hogy a szoftver különböző módon értelmezheti az alacsony TTL-t.

Miért van ez?

Miért állítanak be ilyen alacsony TTL-t a DNS-bejegyzések számára?

  • A régi terhelésmegosztók az alapértelmezett beállításokkal maradtak.
  • Keringnek egy mítosz, hogy a DNS-alapú terhelésmegosztás a TTL-től függ (ez nem igaz – a Netscape Navigator óta a kliensek véletlenszerű IP-címet választanak a RR készletből, és áttérnek egy másikra, ha nem tudnak csatlakozni).
  • A DNS-szerver vagy terhelésmegosztó adminisztrátorai azt kívánják elérni, hogy hatékonyan telepítsék a felhasználók által megkívánt konfigurációt, nem pedig a weboldalak és szolgáltatások sebességének növelését.
  • Az alacsony TTL nyugalmat ad.
  • Az emberek kezdetben alacsony TTL-t állítanak be tesztelés céljából, majd elfelejtik megváltoztatni őket.
  • Nem vettem fel a "kikapcsolási tesztet", mivel ez egyre kevésbé releváns. Ha a felhasználókat egy másik hálózatra kell átirányítani, csak azért, hogy egy hibás oldalt jelenítsenek meg, amikor minden más összeomlott, talán elfogadható a több mint 1 perces késleltetés.

Ezen kívül a 1 perces TTL azt jelenti, hogy ha az illetékes DNS-szerverek több mint 1 percre leállnak, senki más nem tudja elérni a függő szolgáltatásokat. A redundancia nem segít, ha a hiba konfigurációs hiba vagy betörés miatt következik be. Másrészt, ésszerű TTL-nél sok kliens továbbra is a korábbi konfigurációt használja, és soha semmit nem tapasztal.

Az alacsony TTL-ért nagyrészt a CDN szolgáltatások és terhelésmegosztók a felelősek, különösen amikor CNAME-t kis TTL-el és hasonlóan alacsony (de független) TTL-bejegyzéseket kombinálnak:

$ 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

$ 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

Minden alkalommal, amikor lejár a CNAME vagy bármelyik A rekord, új kérést kell küldeni. Mindkettő 30 másodperces TTL-lel rendelkezik, de ez nem egyezik meg. A tényleges átlagos TTL 15 másodperc lesz.

De várj! Még rosszabb a helyzet. Egyes feloldók nagyon rosszul viselkednek ilyen helyzetben, alacsony TTL-ekkel:

$ 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

A Level3 feloldó valószínűleg BIND-ot használ. Ha folytatod ennek a kérésnek a küldését, mindig 1-es TTL-t fog visszaadni. Lényegében, raw.githubusercontent.com soha nem kerül tárolásra.

Íme egy másik példa egy ilyen helyzetre egy nagyon népszerű domain esetében:

$ 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

Legalább három CNAME rekord. Jaj. Az egyiknek normális TTL-je van, de ez teljesen haszontalan. A többi CNAME kezdeti TTL-je 60 másodperc, de a domainok akamai.net maximális TTL-je 20 másodperc, és egyik sem szinkronizált.

Mi a helyzet azokkal a domainekkel, amelyek folyamatosan lekérdezik az Apple eszközöket?

$ 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

Ugyanaz a probléma, mint a Firefoxnál, és a TTL a legtöbb időben 1 másodpercre ragad a Level3 feloldó használatakor.

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

A rekordnál safebrowsing.googleapis.com a TTL értéke 60 másodperc, mint a Facebook domaineknél. És megint, az ügyfél szempontjából ezek az értékek feleződnek.

Mi a helyzet a minimális TTL beállításával?

Használva a nevet, a kérés típusát, a TTL-t és az eredetileg tárolt időbélyeget, írtam egy szkriptet, hogy 1,5 millió kérést szimuláljak, amelyek egy gyorsítótárazó feloldón haladnak át, hogy felmérjem a lejárt gyorsítótárazási bejegyzés miatt küldött felesleges kérések mennyiségét.

A kérések 47,4%-a a meglévő bejegyzés lejárta után készült. Ez elfogadhatatlanul magas.

Mi lesz a hatása a gyorsítótárazásra, ha minimális TTL-t állítanak be?

Elég a nevetségesen alacsony TTL használatából a DNS-nél

Az X tengely a TTL minimális értékeit mutatja. Az ennél magasabb TTL-lel rendelkező bejegyzések nem érintettek.

Y tengely — az olyan kliensek által leadott kérések százaléka, akiknek már van tárolt bejegyzésük, de annak lejárt a határideje, és új kérést indítanak.

A "felesleges" kérések aránya 47%-ról 36%-ra csökken, ha a minimális TTL-t 5 percre állítják. Ha a minimális TTL-t 15 percre állítják, akkor ezek a kérések 29%-ra csökkennek. Az 1 órás minimális TTL 17%-ra csökkenti őket. Jelentős különbség!

Mi lenne, ha semmit sem változtatnánk a szerveren, hanem inkább a minimális TTL-t állítanánk be a klienst DNS-cache-jében (útválasztók, helyi feloldók)?

Elég a nevetségesen alacsony TTL használatából a DNS-nél

A szükséges kérések száma 47%-ról 34%-ra csökken, ha a minimális TTL 5 percre van állítva, 25%-ra csökken 15 perces minimum esetén, és 13%-ra 1 órás minimum mellett. Talán az optimális érték 40 perc.

Ennek a minimális változtatásnak a hatása óriási.

Mik a következmények?

Természetesen a szolgáltatás átírható egy új felhőszolgáltatóra, új szerverre, új hálózatra, követelve a kliensektől, hogy használják az új DNS-bejegyzéseket. És egy viszonylag alacsony TTL segít simán és észrevétlenül végrehajtani ezt az átmenetet. De amikor új infrastruktúrára váltunk, senki sem várja el, hogy a kliensek 1, 5 vagy 15 percen belül új DNS-bejegyzésekre álljanak át. A minimális TTL 40 percre állítása nem akadályozza meg a felhasználókat, hogy hozzáférjenek a szolgáltatáshoz.

Ez azonban jelentősen csökkenti a késleltetést, és javítja a bizalmas adatkezelést és megbízhatóságot, elkerülve a felesleges kéréseket.

Természetesen az RFC-k azt mondják, hogy szigorúan be kell tartani a TTL-t. De a valóság az, hogy a DNS rendszere túl hatékonnyá vált.

Ha autorizált DNS-szerverekkel dolgozik, kérjük, ellenőrizze a TTL-jeit. Valóban szüksége van ilyen nevetségesen alacsony értékekre?

Természetesen vannak megalapozott indokok a DNS-bejegyzések alacsony TTL-inek beállítására. De a DNS-forgalom 75%-ának számára, amely gyakorlatilag nem változik.

És ha bármilyen okból tényleg alacsony TTL-t kell használnia a DNS-hez, mindenképpen győződjön meg arról, hogy az Ön weboldalán nincs bekapcsolva a gyorsítótárazás. Ugyanezen okok miatt.

Ha helyi DNS-cache fut, például dnscrypt-proxy, amely lehetővé teszi a minimális TTL beállítását, használja ezt a funkciót. Ez rendben van. Semmi rossz nem fog történni. Állítson be minimális TTL-t körülbelül 40 perc (2400 másodperc) és 1 óra között. Teljesen ésszerű tartomány.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster