De beschikbaarheid van applicaties is nog nooit zo serieus genomen als nu, wanneer we apps gebruiken voor meer dan alleen communicatie, zowel persoonlijk als professioneel, en wanneer apps de business zijn.
Applicaties die niet constant online zijn of onstabiel zijn, verliezen hun gebruikers en relevantie en raken uiteindelijk verouderd. Het gebeurde in een flits. Omdat internet nooit slaapt en 24 uur per dag, 7 dagen per week actief is, moet hetzelfde idee gelden voor apps.
Schaalbaarheid is essentieel om dit te doen en de beschikbaarheid van applicaties te garanderen. Loadbalancing is een van de belangrijkste componenten om de beschikbaarheid te waarborgen. Veel mensen geloven nog steeds dat load balancing kan worden bereikt met een eenvoudig script.
Dit is echter niet het geval. Het alleen biedt toegang tot programma's over de hele wereld - op elk moment en vanaf elk apparaat.
In dit bericht gaan we onder andere dieper in op load balancing, de algoritmen ervan en hoe het zich verhoudt tot microservices. Laten we beginnen!
Wat is loadbalancing?
Naarmate de vraag naar een website of bedrijfsapplicatie groeit, kan één enkele server al snel niet meer de hele belasting aan. Organisaties verdelen de werklast over meerdere servers om aan de vraag te voldoen. Deze methode, ook wel 'load balancing' genoemd, voorkomt dat een enkele server overbelast raakt, waardoor deze kan vertragen, aanvragen kan laten vallen of zelfs kan crashen.
Loadbalancing verdeelt het netwerkverkeer gelijkmatig om fouten als gevolg van overbelasting van bronnen te voorkomen. Applicaties, websites, databases en andere computerbronnen presteren beter en zijn beter beschikbaar met deze methode. Het helpt ook bij de juiste en tijdige verwerking van verzoeken van gebruikers.
Vanuit het perspectief van de gebruiker fungeert loadbalancing als een ongeziene tussenpersoon tussen een client en een verzameling servers, en zorgt ervoor dat verbindingsverzoeken niet worden verbroken. Applicaties, websites, databases en online diensten zouden hoogstwaarschijnlijk instorten als de vraag te groot zou worden zonder load balancing.
Honderdduizenden gebruikersverzoeken kunnen tegelijkertijd naar een enkele drukbezochte website worden gestuurd. Er zijn meerdere servers nodig om webpagina's correct te vullen met de gevraagde inhoud, zoals tekst, afbeeldingen, video en audiostreaming. Loadbalancing wordt vaak gebruikt in high-traffic website server farms, evenals DNS-servers, databases en File Transfer Protocol (FTP)-sites.
Als een enkele server overbelast raakt, kan deze slecht functioneren of zelfs crashen. Load balancers verminderen de kans op downtime door gebruikersverzoeken gelijkmatig te verdelen over een verzameling servers. Als een van de servers in de groep uitvalt, wordt het verkeer omgeleid naar andere servers in de groep. Een load balancer voegt automatisch nieuwe servers toe aan het verkeersdistributieproces wanneer ze aan de serverpool worden toegevoegd.
Hoe werkt loadbalancing?
Het werkt als volgt:
- Wanneer een client een verzoek ontvangt, bijvoorbeeld via een browser of een applicatie, probeert deze verbinding te maken met de server.
- Wanneer een load balancer een verzoek ontvangt, stuurt het dit door naar een van de servers in een servergroep op basis van vastgestelde patronen door het algoritme (of de farm).
- De server ontvangt het verbindingsverzoek en beantwoordt de client via de load balancer.
- Wanneer de load balancer het antwoord ontvangt, koppelt deze het IP-adres van de client aan het IP-adres van de geselecteerde server. Daarna wordt het antwoord met het pakket verzonden.
- SSL-offload is het proces van het decoderen van gegevens met behulp van het Security Socket Layer-coderingsprotocol, zodat servers dit niet hoeven te doen.
- Het proces wordt herhaald totdat de sessie voorbij is.
Load Balancing-methoden
Om te selecteren welke van de servers in een serverfarm het volgende verzoek ontvangt, gebruikt elke load balancing-techniek een reeks criteria. Er zijn vijf typische benaderingen voor taakverdeling:
- Round Robin: Dit is de standaardbenadering en het werkt precies zoals het klinkt. De load balancer verdeelt verzoeken in een roterend patroon, beginnend met de eerste server in de groep en verder naar beneden, waar het wacht om opnieuw te worden opgeroepen. Deze methode zorgt ervoor dat elke server ongeveer hetzelfde aantal verbindingen verwerkt.
- Gewogen Round Robin: Deze benadering kent aan elke server een gewicht (of voorkeur) toe dat over het algemeen in verhouding staat tot zijn capaciteit. Hoe meer verzoeken een server ontvangt, hoe hoger het gewicht. Een server met een gewichtswaarde van twee ontvangt bijvoorbeeld twee keer zoveel verzoeken als een server met een gewichtswaarde van één.
- Kleverige sessie: Deze benadering, ook wel sessiepersistentie genoemd, verbindt bepaalde clients en servers voor de duur van een sessie. Om de koppeling tot stand te brengen, gebruikt de load balancer een cookie of het IP-adres van de gebruiker om een gebruikersattribuut te identificeren. Zodra de verbinding tot stand is gebracht, worden de verzoeken van de gebruiker naar dezelfde server geleid totdat de sessie eindigt. Dit optimaliseert netwerkbronnen en verbetert tegelijkertijd de gebruikerservaring.
- Minste verbindingen: Deze strategie gaat ervan uit dat alle verzoeken resulteren in een gelijke serverbelasting. Hierdoor ontvangt de server met het kleinste aantal verzoeken het volgende verzoek.
- IP-hash: Dit algoritme genereert een unieke hash-sleutel op basis van de bron- en bestemmings-IP-adressen van de client en server. De sleutel wordt gebruikt om het verzoek te routeren en zorgt ervoor dat een verbroken verbinding met dezelfde server kan worden hervat.
Hardware versus Software loadbalancers
Hardware-loadbalancer
Fysieke hardware, zoals een apparaat, vormt hardware load balancers. Deze routers verkeer naar servers, afhankelijk van factoren zoals het aantal bestaande verbindingen, processorgebruik en serverprestaties. Hardware load balancers hebben propriëtaire firmware die moet worden onderhouden en bijgewerkt wanneer er nieuwe versies en beveiligingsoplossingen beschikbaar komen.
Hardware load balancers bieden vaak hogere prestaties en controle, evenals een breder scala aan mogelijkheden, zoals Kerberos-authenticatie en SSL-hardwareversnelling, maar ze vereisen een zekere mate van beheer- en onderhoudsexpertise. Omdat hardware load balancers minder flexibel en schaalbaar zijn dan software load balancers, bestaat de neiging om hardware load balancers te overbelasten.
Softwareloadbalancer
Software load balancers zijn doorgaans eenvoudiger in te stellen dan hun hardware-tegenhangers. Ze zijn ook kosteneffectiever en aanpasbaarder, en ze werken goed met softwareontwikkelingsomgevingen. Met de softwaremethode kunt u de load balancer aanpassen aan de exacte vereisten van uw omgeving. De toegenomen flexibiliteit kan ten koste gaan van extra tijd die wordt besteed aan het instellen van de load balancer.
Softwarebalancers bieden u meer flexibiliteit om wijzigingen en updates door te voeren dan hardwarebalancers, die een meer gesloten aanpak hebben. Voorverpakte virtuele machines kunnen worden gebruikt als software load balancers (VM's). Virtuele machines zullen u wat insteltijd besparen, maar ze hebben mogelijk niet alle functionaliteit die beschikbaar is in hun hardware-tegenhangers.
Eenvoudige Load Balancing-implementatie
We zullen de Spring Cloud-bibliotheek gebruiken om apps bouwen die op een load-balanced manier verbinding maken met andere apps. Tijdens het verwerken van serviceverzoeken op afstand kunnen we eenvoudig loadbalancing opzetten met elke techniek die we leuk vinden. Beschouw de volgende code als een voorbeeld. We beginnen met een eenvoudige servertoepassing.
De server heeft slechts één HTTP-eindpunt en wordt in verschillende instanties gebruikt. Vervolgens bouwen we een client-app die Load Balancer gebruikt om verzoeken over verschillende serverinstanties te verdelen.
server
We beginnen met een basis Lente laars applicatie voor onze voorbeeldserver:
Om te beginnen injecteren we een aanpasbare variabele genaamd instance_ID. Dit helpt ons om onderscheid te maken tussen verschillende instanties die actief zijn. Daarna maken we een enkel HTTP GET-eindpunt dat een bericht en instantie-ID retourneert.
De standaardinstantie met ID 1 werkt op poort 8080. We hoeven alleen maar een paar programmaparameters toe te voegen om een tweede instantie te starten:
CLIËNT
Laten we nu eens kijken naar de klantcode. Dit is waar Load Balancer om de hoek komt kijken, dus laten we beginnen met het in onze applicatie op te nemen:
Daarna ontwikkelen we een implementatie van ServiceInstanceListSupplier. Dit is een van de belangrijkste interfaces in Load Balancer. Het specificeert hoe we toegankelijke service-exemplaren vinden.
We coderen twee afzonderlijke exemplaren van onze voorbeeldserver in onze voorbeeldtoepassing. Ze draaien op hetzelfde systeem, maar gebruiken aparte poorten:
Maak nu een LoadBalancerConfiguration-klasse:
Deze klasse heeft maar één doel: het creëert een load-balanced WebClient-builder voor het doen van verzoeken op afstand. Onze annotatie maakt gebruik van een fictieve naam voor de service.
Dit is te wijten aan het feit dat we hoogstwaarschijnlijk niet van tevoren de precieze hostnamen en poorten weten voor draaiende instances. Als gevolg hiervan gebruiken we een fictieve naam als tijdelijke aanduiding, en het raamwerk zal feitelijke informatie vervangen wanneer het een lopende instantie selecteert.
Laten we vervolgens een configuratieklasse maken die zal worden gebruikt om onze service-instantievoorziening te instantiëren. Houd er rekening mee dat we dezelfde alias gebruiken als voorheen:
We kunnen nu de echte client-applicatie bouwen. Laten we 10 query's naar de voorbeeldserver sturen met behulp van de WebClient-bean van eerder:
We kunnen aan de uitvoer zien dat we load balancing doen tussen twee afzonderlijke instanties:
Loadbalancing in microservices
Microservice-architectuur wordt door verschillende bedrijven, zoals Netflix en Amazon, gebruikt om bedrijfsapplicaties te ontwikkelen als een reeks losjes verbonden services. Hyperscale en continue levering voor gecompliceerde applicaties zijn slechts twee van de redenen om over te stappen op deze gedistribueerde, losjes verbonden architectuur.
De teams van deze ondernemingen hebben Agile- en DevOps-strategieën geïmplementeerd om apps sneller en met een lager uitvalpercentage te produceren dan traditionele methoden. U moet echter een balans vinden tussen de complexiteit van de gedistribueerde architectuur en de eisen, schaalvereisten en time-to-market-beperkingen van de applicatie.
Al zoveel jaren zijn Application Delivery Controllers (ADC's) van cruciaal belang om te voldoen aan de vereisten op serviceniveau voor bedrijfsapplicaties die on-premise of in de cloud worden gehost. Een client die zich bezighoudt met een op microservices gebaseerde applicatie hoeft niet op de hoogte te zijn van de instances die deze leveren om de client en microservices onafhankelijk te laten groeien.
Dit is precies de ontkoppeling die wordt geboden door een reverse proxy of een load balancer. Nogmaals, load balancing is de oplossing om ervoor te zorgen dat microservices de vraag, beveiliging en beschikbaarheid aankunnen.
Wanneer u traditionele Noord-Zuid-loadbalancing tussen client- en microservices-gebaseerde apps combineert met Oost-West-implementatie voor horizontale schaalbaarheid, krijgt u een substantiële boost. Het doel is om de veilige en gereguleerde omgeving te behouden die vereist is voor IT zonder in te boeten aan ontwikkelingsflexibiliteit of DevOps-automatisering vereisten.
Voordelen
Loadbalancing biedt verschillende voordelen door het verbeteren van het gebruik van bronnen, de levering van gegevens en de reactietijd voor drukbezochte websites en apps, evenals databases die een groot aantal zoekopdrachten ontvangen. Loadbalancing zorgt ervoor dat verzoeken van gebruikers snel en correct worden uitgevoerd in scenario's met veel verkeer.
Ze besparen gebruikers de ergernis van het omgaan met trage programma's en bronnen. Loadbalancing helpt ook downtime te voorkomen en de beveiliging te vereenvoudigen, waardoor het risico op verloren productiviteit en inkomsten voor uw bedrijf wordt verlaagd.
- Load balancing biedt de flexibiliteit om servers toe te voegen en te verwijderen als de vraag dit vereist, naast het beheer van het verkeer met optimale efficiëntie. Omdat verkeer tijdens onderhoud wordt omgeleid naar andere servers, is het ook mogelijk om serveronderhoud uit te voeren zonder gebruikers te storen.
- Loadbalancing biedt ingebouwde redundantie door het verkeer te verdelen over een set servers. U kunt de belasting onmiddellijk omleiden naar andere servers als er een uitvalt, waardoor de impact op gebruikers wordt geminimaliseerd.
- Als het gebruik van een applicatie of website toeneemt, kan het toegenomen verkeer de prestaties verminderen als het niet effectief wordt afgehandeld. Met loadbalancing kunt u een echte of virtuele server toevoegen om aan de vraag te voldoen zonder de service te onderbreken. De load balancer identificeert nieuwe servers wanneer ze online komen en integreert ze moeiteloos in de operatie. Deze methode verdient de voorkeur boven het migreren van een website van een overbelaste server naar een nieuwe, wat vaak enige downtime met zich meebrengt.
Conclusie
Loadbalancing is een essentieel onderdeel van moderne, fouttolerante systemen. We kunnen eenvoudig apps bouwen die verzoeken naar meerdere service-instanties distribueren met behulp van verschillende benaderingen voor taakverdeling. Bedrijven moeten gecompliceerde IT-systemen ondersteunen om applicaties veilig te kunnen aanbieden.
Configuratie, implementatie en onderhoud van microservices tussen verschillende domeinen kan foutgevoelig, duur en tijdrovend zijn. IT moet best practices en technologieën voor automatisering, zichtbaarheid, analyse en orkestratie gebruiken die compatibel zijn met hun agile en DevOps-processen om de installatie en het onderhoud van deze microservices eenvoudiger te maken.
Laat een reactie achter