Load balancing: het internet kan niet meer zonder

Thomas de Jong | 05 september 2017

Hoewel de opkomst van het internet voor een hoop positieve ontwikkelingen heeft gezorgd, zet het bedrijven ook steeds meer onder druk. Klanten verwachten namelijk betrouwbare, snelle en veilige dienstverlening, op elk moment van de dag. Je kunt  niet langer simpelweg de deur van je winkel sluiten en zeggen dat ze morgen terug moeten komen. Deze ontwikkeling vraagt nogal wat van je bedrijfsnetwerk. Een populaire manier om het digitale verkeer in goede banen te leiden, is load balancing. In dit artikel pluizen we uit wat load balancing is, hoe het werkt en waarom het belangrijk is om je load balancing goed voor elkaar te hebben.

Load balancing: de basis

Het lijkt logisch om bij het begin te beginnen, daarom kijken we eerst naar de basis van load balancingLoad balancing is begonnen in het midden van de jaren negentig. Het ging om hardware die het mogelijk maakte voor bedrijven om applicaties te laten groeien, door de werklast te verdelen over servers en netwerken. Het was dé manier om meer gebruikers van dezelfde applicatie gebruik te laten maken.

Deze eerste load balancers werkten relatief simpel. Ze maken gebruik van een virtueel IP-adres, waarmee ze met de buitenwereld kunnen communiceren. En andersom, natuurlijk. Zodra gebruikers verbinding proberen te maken met het virtuele IP-adres, stuurde de load balancer de verbinding door naar de meest geschikte fysieke server. Die handelde het verzoek af, zonder dat de gebruiker iets van de load balancer merkte. Zonder deze techniek was het internet waarschijnlijk nooit uitgegroeid tot wat het nu is.

De load balancer werkt dus als een soort sluiswachter die het verkeer in goede banen leidt. Door deze strategische functie is de klassieke load balancer uitgegroeid tot een platform dat op veel meer manieren de klantbeleving verbetert. Denk bijvoorbeeld aan compressie en caching, maar ook zeker aan veiligheid. Als sluiswachter kan de load balancer het verkeer van en naar een applicatie namelijk perfect in de gaten houden.

Een load balancer voorkomt files in je netwerk

Een load balancer voorkomt opstoppingen in je dienstverlening.

Door deze evolutie wordt de klassieke load balancer eigenlijk nauwelijks meer gebruikt. Als je het tegenwoordig over een load balancer hebt, gaat het bijna altijd om een Application Delivery Controller(ADC). Deze hard- of software zorgt niet alleen meer voor het verdelen van de werklast, maar optimaliseert op allerlei andere manieren het verkeer tussen klant en applicatie. In het vervolg van dit artikel kijken we naar de manier waarop een ADC met load balancing omgaat.

Hoe werkt load balancing?

Nu de basis van load balancing helder is, duiken we in de manier waarop het werkt. De ADC die de load balancing verzorgt, noem ik voor het gemak gewoon de load balancer. De computer waar het originele verzoek vandaan komt, noemen we de klant. Al het inkomende en uitgaande verkeer tussen klant en applicatie loopt via de load balancer.

Het begint dus met een klant die een verbinding wil maken met je applicatie. Dit verzoek komt binnen bij de load balancer, die meestal op een virtuele server draait. De load balancer accepteert het verzoek, bepaalt welke server het verzoek het beste kan afhandelen en stuurt het door.

Vervolgens voert de server het verzoek uit, en stuurt een reactie via de load balancer terug naar de klant. De load balancer pakt deze reactie op, en verandert het IP-adres van de server naar het virtuele IP-adres waar de klant mee ‘praat’. De reactie wordt doorgestuurd naar de klant, die denkt dat het van de virtuele server kwam.

Voor de klant lijkt het dus alsof hij alleen met de virtuele server praat waar de load balancer op draait. Dat houdt het mooi simpel. Maar de stap waar de load balancer het IP-adres verandert, is een hele belangrijke. Als dat niet zou gebeuren, zou de klant een reactie teruggestuurd krijgen van een andere server dan waar het verzoek is ingediend. En dat is genoeg reden om de reactie te negeren, en misschien zelfs alarmbellen af te laten gaan.

Waarom is load balancing belangrijk?

Steeds meer bedrijven verplaatsen hun IT naar de cloud. Dat heeft allerlei voordelen: je hoeft niet te investeren in dure hardware, een datacenter te onderhouden of kostbaar personeel in te huren. Maar als vervolgens blijkt dat je website, database of applicatie steeds offline is, schiet je er niets mee op.

Daarom is load balancing een cruciaal onderdeel van je cloudstrategie. Je klanten verwachten dat je diensten 24/7 beschikbaar zijn. Als dat niet zo is, vinden ze namelijk vrij snel iemand anders. En het kan je gewoon omzet kosten als je website of webshop een tijd offline is, alleen omdat je server te druk is.

Verdrietige robot, omdat je geen gebruikt maakt van load balancing is je website offline.

Load balancing zorgt ervoor dat je geen klanten verliest omdat je website offline is.

Door gebruik te maken van meerdere servers en een goed werkende load balancer, creëer je redundantie. Dat betekent dat er eens een server kan uitvallen, de load balancer verdeelt het verkeer wel over de overige servers. Daarnaast zorgt een load balancer ervoor dat servers genoeg ‘ademruimte’ houden, zodat de betrouwbaarheid en algemene prestaties van je applicatie vergroot worden.

Een ander voordeel van load balancing is dat het onderhoud aan servers makkelijker wordt. Je kunt een van de webservers in je setup tijdelijk offline halen, de load balancer zal het verkeer over de andere servers verdelen. Je hebt dan rustig de tijd om onderhoud te plegen, zonder dat je dienstverlening verstoord wordt.

Technieken voor load balancing

Ik noemde het hierboven al even: de load balancer bepaalt welke server het verzoek het beste kan afhandelen. Dat lijkt heel simpel, maar dat is het zeker niet. Er zijn verschillende technieken en algoritmes die gebruikt kunnen worden om het verkeer slim over de beschikbare servers te verdelen. Welke techniek gebruikt wordt, hangt onder andere af van het type applicatie en de status van het netwerk en servers op het moment dat het verzoek binnenkomt.

Als er weinig verkeer is, wordt er meestal een simpele techniek ingezet. Is er veel verkeer, dan worden er complexere methoden gebruikt. Zo heb je de garantie dat het verkeer altijd optimaal verdeeld wordt.

Hieronder bespreek ik een paar technieken die veel gebruikt worden. Ik noem ze bij hun originele Engelse naam, want een duidelijke Nederlandse vertaling bestaat nog niet.

Round Robin

Dit is de meest eenvoudige techniek. Het gaat uit van meerdere identieke servers die zijn geconfigureerd voor precies dezelfde applicatie. De servers gebruiken hetzelfde domein, maar hebben elk hun eigen IP-adres. Een DNS-server bevat een lijst met de IP-adressen die bij het domein horen. Zodra er een verzoek binnenkomt via het domein, wordt de werklast steeds naar een andere server gestuurd.

Weighted Round Robin

Dit is een iets complexere variant van de Round Robin-methode, omdat de servers een ‘gewicht’ in de vorm van een cijfer meekrijgen. De ‘zwaarste’ server krijgt de meeste verzoeken doorgestuurd.

Least Connection

Het nadeel van Round Robin en Weighted Round Robin is dat ze niet kijken naar de huidige werklast van de server. Dat doet deze methode wel. Het verzoek wordt namelijk doorgestuurd naar de server die op het moment van verdelen het minste te doen heeft.

Man ligt in de zon, als een server die even niks te doen heeft.

Als deze man een server was in een Least Connection-setup, zou hij snel aan de slag moeten.

Weighted Least Connection

Deze techniek bouwt weer verder op de Least Connection-techniek, en lijkt op de Weighted Round Robin-methode. De servers krijgen weer een gewicht in de vorm van een cijfer. Als 2 servers hetzelfde aantal actieve verbindingen hebben, krijgt de server met het hoogste cijfer het nieuwe verzoek te verwerken.

Agent Based Adaptive Load Balancing

Deze techniek wordt vaak gebruikt in combinatie met de Weighted Round Robin– of Weighted Least Connection-methode. De agent van een server laat in dit geval real-time weten wat z’n huidige werklast is, zodat de load balancer de beste keuze kan maken.

Chained Failover (Fixed Weighted)

Deze techniek maakt gebruik van een vaste volgorde van de servers, die aan elkaar gekoppeld zijn. Alle verzoeken worden naar de 1e server gestuurd. Zodra die server niet meer verzoeken aankan, gaan alle verzoeken naar de 2e server in rij. Is die ook vol, dan gaan de verzoeken naar de 3e server. Deze rij van servers kan in principe oneindig uitgebreid worden.

Weighted Response Time

Bij deze techniek wordt er gekeken naar de server die het snelst reageert op een server health check. Die server krijgt dan het eerstvolgende verzoek. Zo voorkom je dat servers die druk zijn, en dus traag reageren op de health check, nieuwe verzoeken krijgen.

Source IP Hash

Hierbij wordt een algoritme gebruikt dat met IP-adressen een unieke key aanmaakt. Hiermee wordt een klant gekoppeld aan een specifieke server. Omdat de key steeds opnieuw gebruikt kan worden, wordt elk toekomstig verzoek dus ook naar dezelfde server geleid. Deze techniek wordt vooral gebruikt als het belangrijk is dat een klant op een later moment met dezelfde sessie verder kan gaan. Denk bijvoorbeeld aan de items in een winkelwagentje die onthouden worden.

Software Defined Networking (SDN) Adaptive

Dit is de meest geavanceerde vorm van load balancing. De techniek combineert informatie uit allerlei lagen van het netwerk om het verkeer in goede banen te leiden. Zo worden de status van de servers, de status van de applicaties die erop draaien, de gezondheid van het netwerk en eventuele opstoppingen allemaal meegenomen in de keuze voor een server.

Tot slot

Load balancing is niet meer weg te denken uit het digitale tijdperk. Het is dé techniek die ervoor zorgde dat het internet is uitgegroeid tot wat het nu is. En hoewel de techniek nog steeds niet uitgeëvolueerd is, zal de basis nog wel even blijven bestaan.

Wil je direct zelf aan de slag met load balancing, dan kun je eens kijken naar HAProxy of Varnish. De eerste is een applicatie die al jaren bestaat, maar het nog steeds erg goed doet. Varnish is eigenlijk een cachingoplossing, maar heeft ook een ingebouwde load balancer.

Het is interessant om na te denken over de toekomst, bijvoorbeeld om te zien wat er gebeurt met load balancing als het Internet of Things écht losbarst. De uitdagingen worden alleen maar groter!