Comprendre le DNS round-robin
(blog.hyperknot.com)Comprendre le DNS round-robin
-
Qu’est-ce que le DNS round-robin ?
- En général, lorsqu’un site web est servi depuis un VPS, on ajoute un seul enregistrement A dans le panneau de contrôle du fournisseur DNS.
- Avec le DNS round-robin, on peut attribuer plusieurs serveurs au même sous-domaine afin de répartir la charge entre plusieurs serveurs et détecter automatiquement les serveurs hors ligne pour choisir un serveur en ligne.
- Cela offre une solution simple et élégante sans utiliser de load balancer, et sans coût supplémentaire.
-
Comment cela fonctionne-t-il en théorie ?
- Selon la RFC 8305 « Happy Eyeballs », le client doit trier les adresses avant d’établir une connexion.
- Il vérifie si les serveurs sont en ligne ou hors ligne, puis classe les serveurs en ligne selon leur temps de ping.
-
Comment cela fonctionne-t-il en pratique ?
- Trois VPS sont créés aux États-Unis, en Europe et à Singapour, avec dans Cloudflare trois enregistrements A proxyfiés et non proxyfiés.
- Chaque serveur renvoie une image colorée et son nom d’hôte.
Comportement des clients dans le choix du serveur
-
Chrome
- Sélectionne aléatoirement dans tous les emplacements, puis conserve ce choix.
- Réévalue la situation après quelques heures.
-
Firefox
- Comme Chrome, il choisit aléatoirement puis conserve ce choix.
-
Safari
- Choisit toujours correctement le serveur le plus proche.
-
curl
- Peut se tromper au début, mais corrige vers le serveur le plus proche au second lancement.
-
Cloudflare
- Choisit un emplacement aléatoire en fonction de l’adresse IP du client, puis conserve ce choix.
Comportement des clients en présence de serveurs partiellement hors ligne
- Tous les clients détectent les serveurs hors ligne et choisissent un serveur de remplacement.
- Cloudflare ne détecte pas les serveurs hors ligne et, si le serveur sélectionné est hors ligne, le service est lui aussi indisponible.
Améliorations souhaitées pour Cloudflare
- Il devrait détecter les serveurs hors ligne.
- Une fonction permettant de choisir le serveur avec la latence la plus faible serait nécessaire.
Résumé de GN⁺
- Le DNS round-robin est une méthode qui permet de répartir la charge sur plusieurs serveurs et de la mettre en œuvre simplement, sans recourir à un load balancer.
- Les navigateurs et clients diffèrent dans leur manière de choisir un serveur, et Safari se distingue en sélectionnant bien le serveur le plus proche.
- Dans le cas de Cloudflare, l’incapacité à détecter les serveurs hors ligne pose problème et mériterait d’être améliorée.
- Cet article est utile pour comprendre le fonctionnement du DNS round-robin et peut être intéressant pour explorer les différences entre les algorithmes de sélection de serveur.
1 commentaires
Avis Hacker News
J’ai demandé à l’équipe DNS une explication de la situation actuelle et je la partagerai dès que j’aurai une réponse. Le code change souvent, ce qui rend difficile une compréhension précise de l’état actuel. Le problème pourrait venir du maintien de la connexion entre l’IP cliente et les serveurs backend.
L’équilibrage de charge via DNS peut entraîner des problèmes complexes. Le client HTTP2 de golang peut rencontrer des problèmes lorsqu’il utilise le DNS RR. Il arrive que le client ne découvre pas de nouveaux serveurs.
MAX_CONNECTION_AGEpour déconnecter périodiquement les clients.Il manque une solution standard pour la découverte de services. La meilleure approche pourrait être d’implémenter un load balancer basé sur les requêtes et d’utiliser une IP virtuelle pour qu’il effectue des contrôles d’état.
Les enregistrements DNS SRV constituaient une première solution permettant d’attribuer une priorité à tous les services, mais ils ne sont pas utilisés dans les clients HTTP pour des raisons politiques. Les nouveaux enregistrements DNS HTTPS et SVCB sont proposés comme nouvelle solution pour l’équilibrage de charge.
Lorsqu’un serveur est hors ligne, le client passe à l’IP suivante si la connexion est refusée. Mais en pratique, le serveur peut ne pas répondre ou rester silencieux après la connexion. On se retrouve alors à dépendre du timeout côté client.
La fiabilité se décide côté client. Certains systèmes peuvent toujours renvoyer l’adresse IP la plus basse, ce qui peut poser problème. Le DNS-RR n’est pas un load balancer, et un load balancer est une meilleure solution.
Un décodeur a été écrit en Perl, avec l’idée que tout devrait être fait en Perl.
Le RR-DNS n’est utile que pour l’équilibrage de charge et ne détecte pas automatiquement la disponibilité des serveurs. Il faut ajouter de l’intelligence côté client.
Quand un serveur tombe en panne, les adresses IP étant réparties à l’échelle mondiale, les gens peuvent continuer à se connecter.
Dans les années 2000 chez Amazon, le DNS round-robin était utilisé pour les hôtes sur site. À l’époque, c’était la méthode d’équilibrage de charge la plus rapide. Mais le Wi-Fi constituait le principal goulot d’étranglement.
Cloudflare Load Balancing est mentionné, mais aucun test réel n’a été effectué. Cloudflare peut détecter automatiquement les serveurs hors ligne et basculer vers d’autres serveurs.