Une faible latence DNS est la clĂ© dâune navigation Internet rapide. Pour le minimiser, il est important de sĂ©lectionner soigneusement les serveurs DNS et . Mais la premiĂšre Ă©tape consiste Ă se dĂ©barrasser des requĂȘtes inutiles.
C'est pourquoi DNS a été conçu à l'origine comme un protocole hautement mis en cache. Les administrateurs de zone définissent une durée de vie (TTL) pour les entrées individuelles, et les résolveurs utilisent ces informations lors du stockage des entrées en mémoire pour éviter un trafic inutile.
La mise en cache est-elle efficace ? Il y a quelques annĂ©es, mes petites recherches ont montrĂ© que ce n'Ă©tait pas parfait. Jetons un coup d'Ćil Ă l'Ă©tat actuel des choses.
Pour collecter les informations que j'ai corrigĂ©es pour enregistrer la valeur TTL de la rĂ©ponse. Il est dĂ©fini comme la durĂ©e de vie minimale de ses enregistrements pour chaque demande entrante. Cela donne un bon aperçu de la rĂ©partition TTL du trafic rĂ©el et prend Ă©galement en compte la popularitĂ© des requĂȘtes individuelles. La version corrigĂ©e du serveur a fonctionnĂ© pendant plusieurs heures.
L'ensemble de données résultant comprend 1 583 579 enregistrements (nom, qtype, TTL, horodatage). Voici la distribution globale du TTL (l'axe X correspond au TTL en secondes) :

Mis à part une légÚre augmentation à 86 400 (principalement pour les enregistrements SOA), il est assez clair que les TTL se situent dans la fourchette basse. Regardons de plus prÚs:

D'accord, les TTL supĂ©rieurs Ă 1 heure ne sont pas statistiquement significatifs. Concentrons-nous ensuite sur la plage 0â3600 :

La plupart des TTL durent de 0 Ă 15 minutes :

La grande majorité est de 0 à 5 minutes :

Ce n'est pas trĂšs bon.
La distribution cumulative rend le problÚme encore plus évident :

La moitié des réponses DNS ont un TTL de 1 minute ou moins, et les trois quarts ont un TTL de 5 minutes ou moins.
Mais attendez, c'est en fait pire. AprÚs tout, il s'agit de TTL provenant de serveurs faisant autorité. Cependant, les résolveurs clients (par exemple les routeurs, les caches locaux) reçoivent une durée de vie des résolveurs en amont, et elle diminue chaque seconde.
Ainsi, le client peut rĂ©ellement utiliser chaque entrĂ©e pour, en moyenne, la moitiĂ© de la durĂ©e de vie initiale avant d'envoyer une nouvelle requĂȘte.
Peut-ĂȘtre que ces TTL trĂšs faibles ne sâappliquent quâaux requĂȘtes inhabituelles et non aux sites Web et API populaires ? Jetons un coup d'oeil :

L'axe X est le TTL, l'axe Y est la popularitĂ© des requĂȘtes.
Malheureusement, les requĂȘtes les plus populaires sont aussi les pires Ă mettre en cache.
Zoomons :

Verdict : c'est vraiment mauvais. C'était déjà mauvais avant, mais c'est encore pire. La mise en cache DNS est devenue pratiquement inutile. Comme de moins en moins de personnes utilisent le résolveur DNS de leur FAI (pour de bonnes raisons), l'augmentation de la latence devient plus perceptible.
La mise en cache DNS est devenue utile uniquement pour le contenu que personne ne visite.
Veuillez également noter que le logiciel peut interpréter les faibles TTL.
Pourquoi est-ce?
Pourquoi les enregistrements DNS sont-ils définis sur une durée de vie si faible ?
- Les anciens équilibreurs de charge ont conservé leurs paramÚtres par défaut.
- Il existe des mythes selon lesquels l'équilibrage de charge DNS dépend du TTL (ce n'est pas vrai - depuis l'époque de Netscape Navigator, les clients ont choisi une adresse IP aléatoire parmi un ensemble de RR et en ont essayé une autre de maniÚre transparente s'ils ne peuvent pas se connecter)
- Les administrateurs souhaitent appliquer les modifications immédiatement, ce qui facilite la planification.
- L'administrateur d'un serveur DNS ou d'un équilibreur de charge considÚre que sa tùche consiste à déployer efficacement la configuration demandée par les utilisateurs, et non à accélérer les sites et les services.
- Les faibles TTL vous offrent une tranquillité d'esprit.
- Les gens définissent initialement des durées de vie faibles pour les tests, puis oublient de les modifier.
Je n'ai pas inclus le "failover" dans la liste car cela devient de moins en moins pertinent. Si vous devez rediriger les utilisateurs vers un autre réseau simplement pour afficher une page d'erreur alors qu'absolument tout le reste est cassé, un délai de plus d'une minute est probablement acceptable.
De plus, une durĂ©e de vie d'une minute signifie que si les serveurs DNS faisant autoritĂ© sont bloquĂ©s pendant plus d'une minute, personne d'autre ne pourra accĂ©der aux services dĂ©pendants. Et la redondance nâaidera pas si la cause est une erreur de configuration ou un hack. En revanche, avec des durĂ©es de vie raisonnables, de nombreux clients continueront Ă utiliser la configuration prĂ©cĂ©dente et ne remarqueront jamais rien.
Les services CDN et les équilibreurs de charge sont en grande partie responsables des faibles durées de vie, en particulier lorsqu'ils combinent des CNAME avec des durées de vie faibles et des enregistrements avec des durées de vie tout aussi faibles (mais indépendantes) :
$ 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
Chaque fois que le CNAME ou l'un des enregistrements A expire, une nouvelle demande doit ĂȘtre envoyĂ©e. Les deux ont un TTL de 30 secondes, mais ce n'est pas la mĂȘme chose. La durĂ©e de vie moyenne rĂ©elle sera de 15 secondes.
Mais attendez! C'est encore pire. Certains résolveurs se comportent trÚs mal dans cette situation avec deux TTL faibles associés :
$ percer raw.githubusercontent.com @4.2.2.2 raw.githubusercontent.com. 1 EN CNAME github.map.fastly.net. github.map.fastly.net. 1 DANS UN 151.101.16.133
Le résolveur Level3 fonctionne probablement sur BIND. Si vous continuez à envoyer cette demande, un TTL de 1 sera toujours renvoyé. raw.githubusercontent.com n'est jamais mis en cache.
Voici un autre exemple dâune telle situation avec un domaine trĂšs populaire :
$ 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
Au moins trois enregistrements CNAME. Oui. On a un TTL décent, mais c'est complÚtement inutile. Les autres CNAME ont une durée de vie initiale de 60 secondes, mais pour les domaines akamai.net le TTL maximum est de 20 secondes et aucun d'entre eux n'est en phase.
Quâen est-il des domaines qui interrogent constamment les appareils Apple ?
$ 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
MĂȘme problĂšme que Firefox et TTL seront bloquĂ©s Ă 1 seconde la plupart du temps lors de l'utilisation du rĂ©solveur Level3.
Boßte de dépÎt ?
$ percer client.dropbox.com @8.8.8.8 client.dropbox.com. 7 DANS CNAME client.dropbox-dns.com. client.dropbox-dns.com. 59 IN A 162.125.67.3 $ forage client.dropbox.com @4.2.2.2 client.dropbox.com. 1 EN CNAME client.dropbox-dns.com. client.dropbox-dns.com. 1 DANS UN 162.125.64.3
A l'enregistrement safebrowsing.googleapis.com La valeur TTL est de 60 secondes, comme les domaines Facebook. Et encore une fois, du point de vue du client, ces valeurs sont réduites de moitié.
Que diriez-vous de définir un TTL minimum ?
En utilisant le nom, le type de requĂȘte, la durĂ©e de vie et l'horodatage stockĂ© Ă l'origine, j'ai Ă©crit un script pour simuler 1,5 million de requĂȘtes passant par un rĂ©solveur de mise en cache afin d'estimer le volume de requĂȘtes inutiles envoyĂ©es en raison d'une entrĂ©e de cache expirĂ©e.
47,4 % des demandes ont Ă©tĂ© faites aprĂšs l'expiration d'un dossier existant. Câest dĂ©raisonnablement Ă©levĂ©.
Quel sera l'impact sur la mise en cache si la durée de vie minimale est définie ?

L'axe X correspond aux valeurs TTL minimales. Les enregistrements dont la durée de vie source est supérieure à cette valeur ne sont pas affectés.
L'axe Y reprĂ©sente le pourcentage de requĂȘtes provenant d'un client qui a dĂ©jĂ une entrĂ©e en cache, mais qui a expirĂ© et qui fait une nouvelle requĂȘte.
La part des requĂȘtes « supplĂ©mentaires » est rĂ©duite de 47 % Ă 36 % en fixant simplement le TTL minimum Ă 5 minutes. En fixant le TTL minimum Ă 15 minutes, le nombre de ces requĂȘtes chute Ă 29 %. Un TTL minimum de 1 heure les rĂ©duit Ă 17%. DiffĂ©rence significative!
Que diriez-vous de ne rien changer cÎté serveur, mais plutÎt de définir le TTL minimum dans les caches DNS des clients (routeurs, résolveurs locaux) ?

Le nombre de requĂȘtes requises passe de 47 % Ă 34 % avec un TTL minimum de 5 minutes, Ă 25 % avec un minimum de 15 minutes et Ă 13 % avec un minimum de 1 heure. Peut-ĂȘtre que 40 minutes sont optimales.
Lâimpact de ce petit changement est Ă©norme.
Quelles en sont les implications?
Bien entendu, le service peut ĂȘtre dĂ©placĂ© vers un nouveau fournisseur de cloud, un nouveau serveur, un nouveau rĂ©seau, obligeant les clients Ă utiliser les derniers enregistrements DNS. Et un TTL assez petit permet d'effectuer une telle transition en douceur et imperceptiblement. Mais avec la transition vers une nouvelle infrastructure, personne ne s'attend Ă ce que les clients migrent vers de nouveaux enregistrements DNS en 1 minute, 5 minutes ou 15 minutes. DĂ©finir la durĂ©e de vie minimale Ă 40 minutes au lieu de 5 minutes n'empĂȘchera pas les utilisateurs d'accĂ©der au service.
Cependant, cela réduira considérablement la latence et améliorera la confidentialité et la fiabilité en évitant les demandes inutiles.
Bien entendu, les RFC disent que le TTL doit ĂȘtre strictement respectĂ©. Mais la rĂ©alitĂ© est que le systĂšme DNS est devenu trop inefficace.
Si vous travaillez avec des serveurs DNS faisant autorité, veuillez vérifier vos TTL. Avez-vous vraiment besoin de valeurs aussi ridiculement basses ?
Bien entendu, il existe de bonnes raisons de définir de petites durées de vie pour les enregistrements DNS. Mais pas pour les 75 % du trafic DNS qui restent quasiment inchangés.
Et si, pour une raison quelconque, vous avez vraiment besoin d'utiliser des TTL faibles pour le DNS, assurez-vous en mĂȘme temps que la mise en cache n'est pas activĂ©e sur votre site. Pour les mĂȘmes raisons.
Si vous disposez d'un cache DNS local en cours d'exĂ©cution, tel que qui vous permet de dĂ©finir des TTL minimum, utilisez cette fonction. C'est bon. Rien de grave nâarrivera. RĂ©glez la durĂ©e de vie minimale sur environ 40 minutes (2400 1 secondes) et XNUMX heure. Une fourchette tout Ă fait raisonnable.
Source: habr.com
