Auto-hébergement : impact de DynDNS, latence et temps de résolution

Bof, aucun souci, mon site est optimisé à mort (donc il est forcément rapide)

Nan… (Mais ça, vous le saviez déjà.)

Même si ab ou Siege indiquent fièrement que votre serveur web est capable de débiter 78 pages par seconde1, vos visiteurs ne seront pas forcément servis aussi rapidement, loin de là.

Pour toute question relative à l’optimisation (poussée) de votre site/blog/forum/autre, vous devriez trouver votre bonheur sur le blog « Performance web » : c’est une véritable mine d’or, les conseils sont avisés et, même si certaines techniques peuvent être parfois ardues à mettre en place, cela en vaut la peine.

Mais là n’est pas le sujet : aujourd’hui on va causer requêtes DNS et de leurs impacts sur les nouveaux visiteurs, ceux qui arrivent sur votre site avec un cache DNS vide.

M’en fous : tous les navigateurs récents préchargent les noms de domaines

Bien tenté mais cela ne marche pas à tous les coups :

  • Si vos visiteurs bookmarkent votre site, le « DNS prefetching » ne fonctionne pas
  • Même punition si vous utilisez un sous-domaine distinct pour héberger vos images/vidéos/etc
  • Vous avez un compte gratuit chez DynDNS mais pas de bol, le TTL est de 60 secondes

Bon, là, normalement, vous m’avez vu venir avec mes gros sabots : DynDNS fournit un service de DNS dynamique fort utile (et qui fonctionne en plus) mais malheureusement et toutes les 60 secondes, vos visiteurs vont devoir se cogner le temps nécessaire à la résolution de votre nom de domaine2

Mode opératoire à la bourrin et prises de mesures pas vraiment règlementaires

Au lieu d’y aller à complètement l’aveugle, je me suis concocté un petit script à l’arrache pour comptabiliser les différents temps de résolution : pendant 24 heures et toutes les 2 minutes, le script s’est chargé d’enregistrer 7 mesures différentes. Au final on obtient un fichier CSV avec 720 enregistrements.

(Pour simplifier les exemples je vais utiliser « mon-blog.fr » et « mon-compte[2].dyndns-at-home.com » mais dans la réalité les tests ont été faits avec le NDD de ce blog et deux comptes DynDNS distincts)

#!/bin/bash

/etc/init.d/pdns-recursor restart > /dev/null
sleep 30
INIT1=`dig www.google.com | grep time | colrm 1 15 | sed -e 's/msec//'`
sleep 5
INIT2=`dig www.google.fr | grep time | colrm 1 15 | sed -e 's/msec//'`
sleep 5
HOST1=`dig alias.mon-blog.fr | grep time | colrm 1 15 | sed -e 's/msec//'`
sleep 5
SERVER1=`dig NS mon-blog.fr +short | head -n 1`
sleep 5
HOST2=`dig www.mon-blog.fr @${SERVER1} | grep time | colrm 1 15 | sed -e 's/msec//'`
sleep 5
HOST3=`dig images.mon-blog.fr @${SERVER1} | grep time | colrm 1 15 | sed -e 's/msec//'`
sleep 5
SERVER2=`dig NS dyndns-at-home.com +short | head -n 1`
sleep 5
HOST4=`dig mon-compte.dyndns-at-home.com @${SERVER2} | grep time | colrm 1 15 | sed -e 's/msec//'`
sleep 5
HOST5=`dig mon-compte2.dyndns-at-home.com @${SERVER2} | grep time | colrm 1 15 | sed -e 's/msec//'`
sleep 5
HOST6=`dig alias.mon-blog.fr @91.121.161.184 | grep time | colrm 1 15 | sed -e 's/msec//'`
sleep 5
HOST7=`dig alias.mon-blog.fr @8.8.8.8 | grep time | colrm 1 15 | sed -e 's/msec//'`

echo -e "`date "+%F %T"`\tinit\t$INIT1\t$INIT2\tcname\t$HOST1\t$SERVER1\t$HOST2\t$HOST3\t$SERVER2\t$HOST4\t$HOST5\tFAI\t$HOST6\tGoogle\t$HOST7" >> dns.csv
exit 0

Étape 1 : initialisation

PowerDNS recursor se charge des requêtes DNS (en mode récursif) ainsi que de la mise en cache : on commence donc par le relancer, histoire de démarrer avec un cache complètement vide. (Sauf pour les serveurs racines qui sont codés au sein du binaire et préchargés à chaque lancement)

Ensuite on fait deux requêtes DNS sur google.com et google.fr afin de récupérer les serveurs de noms de ces deux TLD : il n’y a quasiment aucune chance qu’un visiteur n’ait pas déjà en cache les Name Servers correspondants.

Étape 2 : résolution d’alias.mon-blog.fr en mode récursif avec PowerDNS

Le domaine « mon-blog.fr » est hébergé chez Gandi, les entrées « www » et « images » pointent vers une IP fixe, le sous domaine « alias.mon-blog.fr » est par contre un alias (CNAME) vers « mon-compte.dyndns-at-home.com » qui à son tour pointe vers une IP dynamique.

Au niveau de la zone DNS, en simplifiant, ça nous donne à peu près ça :

www 14400 IN A xxx.xxx.xxx.xxx
images 14400 IN A xxx.xxx.xxx.xxx
alias 14400 IN CNAME mon-compte.dyndns-at-home.com.

Donc, en faisant un « dig alias.mon-blog.fr », voici en résumé ce qui se passe :

  1. Interrogation d’un des Name Servers du TLD « .fr » (ex : d.nic.fr) pour connaître les NS qui gèrent « mon-blog.fr » (on obtient alors les NS de Gandi : [a|b|c].dns.gandi.net)
  2. Interrogation d’un des DNS de Gandi (ex : b.dns.gandi.net) pour résoudre « alias.mon-blog.fr » (à partir de là on obtient « mon-compte.dyndns-at-home.com »)
  3. Interrogation d’un des Name Servers du TLD « .com » (ex : e.gtld-servers.net) pour connaître les NS qui gèrent « dyndns-at-home.com » (on obtient les NS de DynDNS : ns[1|2|3|4|5].dyndns.org)
  4. Interrogation d’un des DNS de DynDNS (ex : ns4.dyndns.org) pour résoudre « mon-compte.dyndns-at-home.com » (Bingo, on a enfin notre IP dynamique)

C’est le pire cas de figure car il faut résoudre deux noms, « alias.mon-blog.fr » et ensuite « mon-compte.dyndns-at-home.com », le tout en récursif. Comme on le verra plus bas, les résultats sont très mauvais et cela remet presque en cause le fait d’utiliser son propre serveur DNS cache.

Étape 3 : dig www.mon-blog.fr et images.mon-blog.fr en utilisant les DNS de Gandi

D’abord on récupère le premier Name Server de Gandi qui tombe (c’est du round robin) et ensuite on l’interroge directement pour les deux sous-domaines (www et images) qui pointent vers une IP fixe.

Étape 4 : dig mon-compte[2].dyndns-at-home.com avec les DNS de DynDNS

Même procédé : on récupère au hasard un des Name Servers de DynDNS puis on l’interroge directement pour les deux sous-domaines qui pointent vers une IP dynamique.

Étape 5 : dig alias.mon-blog.fr avec les DNS de son FAI

En l’occurrence il s’agit d’OVH donc on lui demande gentiment de se débrouiller avec « alias.mon-blog.fr ».

Étape 6 : dig alias.mon-blog.fr avec les DNS de Google

Même punition mais cette fois c’est Google qui s’y colle.

Les résultats du bousin après 24 heures même que je m’y attendais pas trop

La colonne « 95% » représente la moyenne obtenue après avoir enlevé 5% des valeurs les plus élevées, le but étant d’écrêter les valeurs parasites qui ne sont pas représentatives.

Petite vue d’ensemble

J’ai vérifié trois fois les chiffres mais rien à faire, Gandi et DynDNS ont des moyennes « bizarrement » stables.

La grande surprise (qui me laisse perplexe d’ailleurs) vient de Google qui serait (colonne 95%) plus rapide que les serveurs de DynDNS eux mêmes… Donc, soit j’ai complètement foiré les tests, soit ils sont vraiment très forts. Si quelqu’un a une explication rationnelle, je suis preneur !

OVH s’en tire plutôt pas mal tandis que powerDNS est complètement à la ramasse : c’est bien joli d’avoir son propre serveur DNS (au moins il fait cache et il n’est pas menteur celui-là) mais côté perfs, on repassera.

Requête DNS min moy max 95%
www.mon-blog.fr (Gandi) 40 ms 78 ms 4879 ms 43 ms
images.mon-blog.fr (Gandi) 41 ms 78 ms 4596 ms 43 ms
alias.mon-blog.fr (Google) 48 ms 79 ms 383 ms 69 ms
alias.mon-blog.fr (OVH) 37 ms 162 ms 541 ms 152 ms
alias.mon-blog.fr (PowerDNS) 61 ms 1139 ms 4961 ms 1014 ms
mon-compte.dyndns-at-home.com (DynDNS) 48 ms 157 ms 518 ms 149 ms
mon-compte2.dyndns-at-home.com (DynDNS) 49 ms 156 ms 308 ms 149 ms

And the winner is…

Bon, là, je crois que c’est clair : chez Gandi, mis à part quelques valeurs hors normes (~5%), le temps moyen d’une résolution est de 43 millisecondes si vous disposez d’une IP fixe.

dig www.mon-blog.fr min moy max 95%
a.dns.gandi.net (34.2% – Paris) 40 ms 46 ms 413 ms 41 ms
b.dns.gandi.net (33.2% – Paris) 41 ms 88 ms 4879 ms 43 ms
c.dns.gandi.net (32.6% – Paris) 41 ms 101 ms 4331 ms 44 ms
dig images.mon-blog.fr min moy max 95%
a.dns.gandi.net (34.2% – Paris) 41 ms 46 ms 400 ms 45 ms
b.dns.gandi.net (33.2% – Paris) 41 ms 73 ms 2577 ms 43 ms
c.dns.gandi.net (32.6% – Paris) 41 ms 117 ms 4596 ms 44 ms

Impact de la localisation des serveurs chez Dyndns

La première chose qui saute aux yeux chez DynDNS, ce sont les valeurs « min » et « max » qui sont très proches : les résultats obtenus sont d’une stabilité remarquable.

La seconde chose frappante est que, contrairement à Gandi, le délai moyen d’une résolution DNS varie de 1 à 6 en fonction du serveur interrogé. (Logique si l’on regarde où sont situés les DNS)

dig mon-compte.dyndns-at-home.com min moy max 95%
ns1.dyndns.org (18.6% – New York) 112 ms 115 ms 122 ms 114 ms
ns2.dyndns.org (21.8% – Chicago) 141 ms 146 ms 518 ms 144 ms
ns3.dyndns.org (21.1% – USA mais où ?) 182 ms 187 ms 198 ms 187 ms
ns4.dyndns.org (20.1% – Amsterdam) 48 ms 50 ms 73 ms 50 ms
ns5.dyndns.org (18.4% – Hong Kong) 281 ms 292 ms 307 ms 291 ms
dig mon-compte2.dyndns-at-home.com min moy max 95%
ns1.dyndns.org (18.6% – New York) 112 ms 115 ms 122 ms 114 ms
ns2.dyndns.org (21.8% – Chicago) 141 ms 144 ms 158 ms 144 ms
ns3.dyndns.org (21.1% – USA mais où ?) 181 ms 186 ms 209 ms 187 ms
ns4.dyndns.org (20.1% – Amsterdam) 49 ms 51 ms 149 ms 50 ms
ns5.dyndns.org (18.4% – Hong Kong) 281 ms 292 ms 308 ms 291 ms

La conclusion de la mort qui tue (enfin non, comme d’hab, ça dépend)

  1. Si vous avez une IP fixe, optez pour un registrar avec des serveurs DNS en France (à moins de viser l’international)
  2. Si vous avez une IP dynamique, la logique voudrait que vous utilisiez directement votre sous domaine (ex : mon-blog.dyndns-at-home.com) mais dans les faits, je vous le déconseille fortement.
  3. Et enfin, si vous êtes totalement blindé de pognon et que l’auto-hébergement c’est juste un passe-temps comme un autre, payez-vous les services d’un registrar prestataire proposant des DNS anycast3

Plus sérieusement, si vous avez un nom de domaine et des alias (CNAME) vers un ou plusieurs sous-domaine DynDNS, vos visiteurs devront attendre, en moyenne, bien plus longtemps que si vous aviez « juste » un domaine et une IP fixe.

Mais, comme on ne peut pas connaître les serveurs DNS utilisés par chaque visiteur (FAI, Google, OpenDNS, autre ?), impossible de savoir précisément quel est l’impact réel.

En d’autres termes, ce billet ne sert strictement à rien (mais je l’assume quand même)

A+

  1. 78 pages par seconde c’est un exemple : Nginx ou Varnish sont capables de cracher bien plus, beaucoup plus même
  2. En utilisant DynDNS, vous disposez seulement d’un sous-domaine, sauf si vous optez pour les services payants
  3. Rho là là ! Si on peut plus déconner…

Il y a 4 commentaires de gens bizarres, ce sont sûrement des drogués

Oui Jean-Pierre, je souhaite publier un commentaire assassin sur ce blog minable

(Votre adresse email ne sera jamais publiée, divulguée, revendue, broyée, atomisée, etc.)