Round robin DNS: eenvoudige lastverdeling zonder load balancer
Kort antwoord
Round robin DNS betekent dat je meerdere A- of AAAA-records voor dezelfde hostname vermeldt, zodat verschillende clients naar verschillende servers worden gestuurd. Resolvers roteren of randomiseren doorgaans welk adres ze teruggeven, waardoor het verkeer over de vermelde servers wordt verspreid zonder dat er een load balancer tussen zit. Het is een simpele truc, en een beperkte.
Hoe het werkt
Normaal gesproken verwijst een hostname naar één A-record en één IP-adres. Niets houdt een zone tegen om in plaats daarvan meerdere A-records voor dezelfde naam te vermelden, elk wijzend naar een andere server. Als een resolver die naam opzoekt, krijgt hij de hele lijst terug. De meeste resolvers doorlopen de lijst roterend of kiezen willekeurig een item, in plaats van altijd het eerste item terug te geven. Verschillende clients die op verschillende momenten een lookup doen, komen meestal bij verschillende adressen uit, en het verkeer verspreidt zich over de vermelde servers als bijeffect van hoe de lookups worden beantwoord.
Zie DNS-recordtypes uitgelegd voor wat een A- of AAAA-record precies is. Deze techniek heeft geen nieuw recordtype nodig, alleen meer dan één van het gewone type op dezelfde naam.
Waarom het een zwak alternatief is voor een echte load balancer
Round robin DNS verdeelt verkeer, maar beheert het niet. Dat gat wordt snel zichtbaar onder realistische omstandigheden.
- Geen besef van serverstatus. DNS heeft geen idee of een vermelde server daadwerkelijk online is. Gaat er een offline, dan blijft het record in de rotatie totdat iemand het opmerkt en het handmatig verwijdert, en elke client die tijdens de storing dat adres krijgt, kan gewoon geen verbinding maken.
- Geen session stickiness. Er is geen manier om een client terug te sturen naar de server die hij de vorige keer gebruikte. Elke lookup staat op zichzelf, wat een probleem is voor alles wat status bijhoudt die aan één server gekoppeld is.
- Traag om te wijzigen. DNS-antwoorden worden gecached, door resolvers en door de client zelf, zolang de TTL van het record dat toestaat. Een record verwijderen of wijzigen werkt niet overal meteen door, het treedt pas in werking zodra elke cache met het oude antwoord verloopt, en dat kan een tijdje duren.
- Geen besef van belasting. Roteren of randomiseren is niet hetzelfde als balanceren op basis van hoe druk een server daadwerkelijk is. Een server die al zwaar belast is, krijgt evenveel nieuwe lookups als een server die stilstaat.
Waar het nog wel past
Round robin DNS is prima voor heel eenvoudige redundantie: het verspreiden van alleen-lezen verkeer over een paar onderling verwisselbare servers, waarbij een enkele mislukte verbinding tijdens een storing acceptabel is. Het is geen vervanging voor echte load balancing, health checks en verkeersbewuste routering horen bij een heel andere laag. Zie Load balancing uitgelegd: wat het doet en hoe het beslist voor hoe die laag werkt en wat die toevoegt bovenop wat DNS alleen kan.