Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Analyser graphiquement l'affinité d'un client DNS pour un serveur

Première rédaction de cet article le 3 mai 2010


À la réunion OARC de Prague le premier mai, la vidéo spectaculaire (sans laquelle les réunions sont tristes) était due à Duane Wessels (Verisign) qui a cherché à représenter graphiquement l'affinité des clients DNS pour les serveurs de la racine. L'idée est de mettre les serveurs dans un espace 3D. Le client qui envoie des requêtes à tous les serveurs équitablement est placé au centre de l'espace. Plus il a d'affinité pour un serveur (plus il lui envoie de requêtes), plus il se déplace en direction de ce serveur.

Un résolveur DNS normal (par exemple BIND), choisit le serveur le plus rapide de la liste disponible. Ainsi, la racine ayant treize serveurs, BIND les interroge tous, puis se souvient du plus rapide, et lui reste fidèle. Par contre, lorsqu'il faut choisir entre les différentes instances d'un nuage anycast, le résolveur ne voit pas les différentes instances et c'est BGP qui fait tout.

La présentation ne consistait pas seulement en images fixes, l'animation permet de voir le déplacement des clients, par exemple lorsqu'une instance d'un nuage anycast stoppe, les clients se déplacent vers les autres (en moins de deux minutes, merci, BGP).

Le code et les données sont disponibles publiquement, en http://www.verisignlabs.com/~wessels/Affinity/. Mais attention, ce n'est pas forcément facile à interpréter. Pour vous donner une idée, vous pouvez commencer par voir les transparents puis par regarder deux films tournés pendant la présentation, en http://www.youtube.com/watch?v=pIIFmYvx8Dc et http://www.youtube.com/watch?v=Gsr0HYOLk2w. Ensuite, si vous êtes alléchés, vous pouvez vous lancer dans la compilation et l'exécution.

Le tout a été développé en OpenGL (et c'est très convaincant, comme exemple qui donne envie d'utiliser ce système) avec les traces DNS des requêtes aux serveurs racine. D'abord, pour compiler, en prenant l'exemple d'un système Debian, il vous faudra les bibliothèques OpenGL (libglu1-mesa-dev). Ensuite, vous éditez le Makefile (par défaut, les variables sont pour MacOS, j'ai donc dû les commenter suivant les commentaires) et vous tapez make.

Une fois que cela compile, la syntaxe générale pour l'utilisation est :

affinity geom.dat frame.dat < dnsquery.dat

Mais, en pratique, il vaut mieux suivre les suggestions de l'auteur et donner quelques valeurs différentes aux paramètres. La démonstration à l'OARC a été faite avec :

affinity -c 0.6 -d 1.5 -i 0.1 -r 10 ...

Voyons quelques exemples. D'abord, avec l'ensemble des serveurs racines. Les données sont dans le répertoire data/Roots-20100323. Prenons le fichier roots-dodec.dat comme cadre (comme il y a plus de huit serveurs racine, roots-cube.dat ne donne pas de bons résultats) et 20100324.125000.dat.bz2 comme données. Une fois le téléchargement fait, lançons le tout (on décomprime à la volée car les fichiers sont gros et on n'a pas forcément envie de les stocker) :

% bunzip2 -c 20100324.125000.dat.bz2 | \
      ./affinity -c 0.6 -d 1.5 -i 0.1 -r 10 -w roots-dodec.dat

On voit alors une jolie image. Presser 's' la met en route et un deuxième 's' lui donne sa vitesse de croisière. On peut alors faire tourner le dodécaèdre et admirer la fidélité des clients de I.root-servers.net (alors que G.root-servers.net n'attire pas grand'monde).

Essayons ensuite avec les instances d'un nuage anycast. Les données sont en /data/A-20100209. Prenons le fichier de placementdes serveurs a-geo.dat et le fichier de données 20100210.180000.dat.bz2.

bunzip2 -c 20100210.180000.dat.bz2 | \
   ./affinity -c 0.6 -d 1.5 -i 0.1 -r 10 -w a-geo.dat world_borders.dat

affichera alors l'affinité des clients des instances de A.root-servers.net. À mon avis, c'est en se plaçant au dessus du Pôle Nord qu'on a la meilleure vue. On voit par exemple les clients du nœud de Francfort qui sont tentés de temps à temps par celui de New York. Après, il faut passer du temps et explorer.

A.root-servers.net n'a pas beaucoup d'instances. On peut essayer avec J.root-servers.net, dans le répertoire /data/J-20100323 mais il a plutôt le problème inverse et l'animation est donc assez confuse.

En gros, la conclusion de ces images est que les clients DNS sont très fidèles à une instance particulière d'un nuage anycast (BGP est finalement plutôt stable et, dans ce cas, le client ne contrôle pas quelle instance il utilise) alors que les clients sont plus volages en ce qui concerne le serveur racine utilisé (attention, la visualisation a des pièges, le centre étant plus petit, il donne l'impression d'une forte densité et que les clients y sont plus nombreux, sans doute faudrait-il une échelle logarithmique pour compenser cet effet).

Merci à Marco Davids pour l'aide.

Sur certains systèmes, il faut apparemment appliquer le patch suivant :


266,267c266,267
<         gluPerspective(50.0, (float) width / height, 1, 1024);
<         gluLookAt(0, 0, 4, 0, 0, 0, 0.0, 1.0, 0.0);
---
>         //gluPerspective(50.0, (float) width / height, 1, 1024);
>         //gluLookAt(0, 0, 4, 0, 0, 0, 0.0, 1.0, 0.0);

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)