Indholdsfortegnelse[Skjule][At vise]
Tilgængeligheden af applikationer er aldrig blevet taget så seriøst som i dag, når vi bruger apps til mere end blot kommunikation, uanset om det er personligt eller professionelt, og når apps er forretningen.
Applikationer, der ikke konstant er online eller er ustabile, mister deres brugere og relevans og bliver til sidst forældede. Det skete lynhurtigt. Fordi internettet aldrig sover og fungerer 24 timer i døgnet, 7 dage om ugen, skal den samme idé gælde for apps.
Skalerbarhed er afgørende for at gøre dette og sikre applikationstilgængelighed. Lastbalancering er en af de vigtigste komponenter til at sikre tilgængelighed. Mange mennesker tror stadig, at belastningsbalancering kan opnås med et simpelt script.
Dette er dog ikke tilfældet. Det alene giver adgang til programmer over hele verden - når som helst og fra enhver enhed.
I dette indlæg tager vi et dybt kig på belastningsbalancering, dens algoritmer, og hvordan det relaterer sig til mikrotjenester, blandt andet. Lad os begynde!
Hvad er belastningsbalancering?
Efterhånden som efterspørgslen efter et websted eller en forretningsapplikation vokser, vil en enkelt server snart være ude af stand til at håndtere hele belastningen. Organisationer fordeler arbejdsbyrden over adskillige servere for at tilfredsstille efterspørgslen. Denne metode, kendt som "belastningsbalancering", forhindrer en enkelt server i at blive overbelastet, hvilket kan få den til at sænke farten, droppe anmodninger eller endda gå ned.
Belastningsbalancering fordeler netværkstrafikken ligeligt for at undgå fejl på grund af ressourceoverbelastning. Applikationer, websteder, databaser og andre computerressourcer fungerer bedre og er mere tilgængelige ved hjælp af denne metode. Det hjælper også med korrekt og rettidig behandling af brugeranmodninger.
Fra brugerens perspektiv fungerer belastningsbalancering som et uset mellemled mellem en klient og en samling af servere, hvilket sikrer, at forbindelsesanmodninger ikke droppes. Applikationer, websteder, databaser og onlinetjenester ville højst sandsynligt kollapse, hvis efterspørgslen blev for stor uden belastningsbalancering.
Hundredtusindvis af brugeranmodninger kan sendes til et enkelt websted med høj trafik på samme tid. Der kræves flere servere for at udfylde websider korrekt med det ønskede indhold, såsom tekst, billeder, video og lydstreaming. Belastningsbalancering er almindeligt anvendt i højtrafikerede webstedsserverfarme såvel som DNS-servere, databaser og File Transfer Protocol (FTP)-websteder.
Hvis en enkelt server er overbebyrdet, kan denne fungere dårligt eller endda gå ned. Load balancere reducerer chancen for nedetid ved at fordele brugeranmodninger jævnt mellem en samling af servere. Hvis en af serverne i gruppen fejler, omdirigeres trafikken til andre servere i gruppen. En load balancer tilføjer automatisk nye servere i trafikfordelingsprocessen, når de føjes til serverpuljen.
Hvordan fungerer belastningsbalancering?
Det fungerer som følger:
- Når en klient modtager en anmodning, såsom via en browser eller et program, forsøger den at oprette forbindelse til serveren.
- Når en load balancer modtager en anmodning, dirigerer den den til en af serverne i en servergruppe baseret på etablerede mønstre af algoritmen (eller farmen).
- Serveren modtager forbindelsesanmodningen og besvarer klienten gennem belastningsbalanceren.
- Når load balanceren modtager svaret, matcher den klientens IP-adresse med IP-adressen på den valgte server. Herefter sendes svaret med pakken.
- SSL-offload er processen med at dekryptere data ved hjælp af Security Socket Layer-krypteringsprotokollen, så servere ikke behøver det.
- Processen gentages, indtil sessionen er slut.
Belastningsbalanceringsmetoder
For at vælge, hvilken af serverne i en serverfarm, der modtager den næste anmodning, bruger hver belastningsbalanceringsteknik et sæt kriterier. Der er fem typiske tilgange til belastningsbalancering:
- Round Robin: Dette er standardtilgangen, og den fungerer præcis som den lyder. Loadbalanceren distribuerer anmodninger i et roterende mønster, startende med den første server i gruppen og fortsætter ned til bunden, hvor den venter på at blive kaldt på igen. Denne metode sikrer, at hver server håndterer nogenlunde det samme antal forbindelser.
- Vægtet Round Robin: Denne tilgang tildeler hver server en vægt (eller præference), der generelt er proportional med dens kapacitet. Jo flere anmodninger en server modtager, jo højere vægt. For eksempel modtager en server med en vægtværdi på to dobbelt så mange anmodninger som en server med en vægtværdi på en.
- Sticky session: Denne tilgang, også kendt som session persistence, forbinder visse klienter og servere i løbet af en session. For at etablere linket bruger load balanceren en cookie eller brugerens IP-adresse til at identificere en brugerattribut. Når forbindelsen er etableret, sendes brugerens anmodninger til den samme server, indtil sessionen slutter. Dette optimerer netværksressourcer og forbedrer samtidig brugeroplevelsen.
- Mindste forbindelser: Denne strategi antager, at alle anmodninger resulterer i en lige stor serverbyrde. Som et resultat modtager serveren med det mindste antal anmodninger den næste anmodning.
- IP Hash: Denne algoritme genererer en unik hash-nøgle baseret på klientens og serverens kilde- og destinations-IP-adresser. Nøglen bruges til at dirigere anmodningen og gør det muligt at genoptage en mistet forbindelse med den samme server.
Hardware vs. Software Load Balancers
Hardwarebelastningsbalancer
Fysisk hardware, såsom et apparat, udgør hardware-belastningsbalancere. Disse dirigerer trafik til servere afhængigt af faktorer såsom antallet af eksisterende forbindelser, processorbrug og serverydeevne. Hardware load balancere har proprietær firmware, der skal vedligeholdes og opdateres, når nye versioner og sikkerhedsrettelser bliver tilgængelige.
Hardware-belastningsbalancere giver ofte højere ydeevne og kontrol samt en bredere vifte af muligheder såsom Kerberos-godkendelse og SSL-hardwareacceleration, men de kræver et vist niveau af administrations- og vedligeholdelsesekspertise. Fordi hardware load balancere er mindre fleksible og skalerbare end software load balancere, er der en tilbøjelighed til at overprovisionere hardware load balancere.
Software Load Balancer
Software load balancere er typisk nemmere at konfigurere end deres hardware-modstykker. De er også mere omkostningseffektive og tilpasningsdygtige, og de fungerer godt sammen med softwareudviklingsmiljøer. Softwaremetoden giver dig mulighed for at tilpasse belastningsbalanceren til dit miljøs nøjagtige krav. Den øgede fleksibilitet kan komme på bekostning af ekstra tid brugt på at opsætte load balanceren.
Software balancere giver dig større fleksibilitet til at foretage ændringer og opdateringer end hardware, som har en mere lukket boks tilgang. Forpakkede virtuelle maskiner kan bruges som software load balancers (VM'er). Virtuelle maskiner vil spare dig for en del indstillingstid, men de har muligvis ikke alle de funktioner, der er tilgængelige i deres hardwaremodstykker.
Enkel implementering af belastningsbalancering
Vi vil bruge Spring Cloud-biblioteket til bygge apps der opretter forbindelse til andre apps på en belastningsbalanceret måde. Mens vi behandler anmodninger om fjernservice, kan vi nemt konstruere belastningsbalancering ved at bruge den teknik, vi kan lide. Overvej følgende kode som et eksempel. Vi begynder med en grundlæggende serverapplikation.
Serveren vil kun have ét HTTP-slutpunkt og vil blive betjent i flere tilfælde. Derefter bygger vi en klientapp, der bruger Load Balancer til at distribuere anmodninger på tværs af flere serverforekomster.
Server
Vi begynder med en grundlæggende Forår støvle applikation til vores eksempelserver:
Til at begynde med injicerer vi en tilpasselig variabel kaldet instance_ID. Dette hjælper os med at skelne mellem adskillige instanser, der fungerer. Efter det opretter vi et enkelt HTTP GET-slutpunkt, der returnerer en besked og et instans-id.
Standardforekomsten med ID 1 vil fungere på port 8080. Vi behøver kun at tilføje nogle få programparametre for at starte en anden forekomst:
Klient
Lad os nu se på klientkoden. Det er her Load Balancer kommer ind, så lad os begynde med at inkorporere den i vores applikation:
Herefter udvikler vi en implementering af ServiceInstanceListSupplier. Dette er en af de vigtigste grænseflader i Load Balancer. Det specificerer, hvordan vi lokaliserer tilgængelige serviceinstanser.
Vi hardkode to separate forekomster af vores eksempelserver i vores eksempelapplikation. De kører på det samme system, men bruger separate porte:
Opret en LoadBalancerConfiguration-klasse nu:
Denne klasse har kun ét formål: den opretter en belastningsbalanceret WebClient-bygger til at lave fjernanmodninger. Vores annotering bruger et fiktivt navn til tjenesten.
Dette skyldes det faktum, at vi højst sandsynligt ikke kender de præcise værtsnavne og porte til at køre forekomster på forhånd. Som et resultat bruger vi et fiktivt navn som pladsholder, og rammen vil erstatte faktiske oplysninger, når den vælger en kørende forekomst.
Lad os derefter lave en konfigurationsklasse, der vil blive brugt til at instansiere vores serviceinstansudbud. Bemærk, at vi bruger det samme alias som før:
Vi kan nu bygge den rigtige klientapplikation. Lad os sende 10 forespørgsler til prøveserveren ved hjælp af WebClient-bønnen fra tidligere:
Vi kan se fra outputtet, at vi belastningsbalancerer mellem to separate forekomster:
Load Balancing i Microservices
Mikroservicearkitektur bliver brugt af flere virksomheder, som Netflix og Amazon, til at udvikle forretningsapplikationer som et sæt løst forbundne tjenester. Hyperskalering og kontinuerlig levering til komplicerede applikationer er kun to af grundene til at flytte til denne distribuerede, løst forbundne arkitektur.
Disse virksomheders teams har implementeret Agile og DevOps strategier for at producere apps hurtigere og med en lavere fejlrate end traditionelle metoder. Du skal dog finde en balance mellem den distribuerede arkitekturs kompleksitet og applikationens krav, skalakrav og time-to-market-begrænsninger.
I så mange år har applikationsleveringscontrollere (ADC'er) været afgørende for at opfylde serviceniveaukrav til virksomhedsapplikationer, der hostes på stedet eller i skyen. En klient, der engagerer sig i en mikroservicebaseret applikation, behøver ikke at vide om de forekomster, der leverer den, for at udvikle klienten og mikrotjenesterne uafhængigt.
Dette er netop den afkobling, som en reverse proxy eller en load balancer giver. Igen er belastningsbalancering løsningen til at sikre, at mikrotjenester kan håndtere efterspørgsel, sikkerhed og tilgængelighed.
Når du kombinerer traditionel nord-syd-belastningsbalancering mellem klient- og mikroservicebaserede apps med East-West-implementering for horisontal skalerbarhed, får du et væsentligt løft. Målet er at opretholde det sikre og regulerede miljø, der kræves af IT uden at ofre udviklingsfleksibilitet eller DevOps automatisering krav.
Fordele
Belastningsbalancering giver forskellige fordele ved at forbedre ressourceudnyttelsen, datalevering og responstid for websteder og apps med stor trafik samt databaser, der modtager et stort antal forespørgsler. Belastningsbalancering sikrer, at brugeranmodninger opfyldes hurtigt og korrekt i scenarier med høj trafik.
De sparer brugerne for forværringen af at håndtere træge programmer og ressourcer. Load balancing hjælper også med at undgå nedetid og forenkle sikkerheden, hvilket mindsker risikoen for tabt produktivitet og indtjening for din virksomhed.
- Belastningsbalancering giver fleksibiliteten til at tilføje og fjerne servere, som efterspørgslen tilsiger, ud over at styre trafik til optimal effektivitet. Fordi trafik omdirigeres til andre servere under vedligeholdelse, er det også muligt at udføre servervedligeholdelse uden at forstyrre brugerne.
- Belastningsbalancering giver indbygget redundans ved at opdele trafikken mellem et sæt servere. Du kan straks omdirigere belastningen til andre servere, hvis en fejler, hvilket minimerer indvirkningen på brugerne.
- Hvis en applikation eller et websteds brug vokser, kan den øgede trafik forringe dens ydeevne, hvis den ikke håndteres effektivt. Med belastningsbalancering kan du tilføje en ægte eller virtuel server for at imødekomme efterspørgslen uden at forstyrre tjenesten. Loadbalanceren identificerer nye servere, efterhånden som de kommer online og inkorporerer dem ubesværet i driften. Denne metode er at foretrække frem for at migrere et websted fra en overbelastet server til en ny, hvilket ofte indebærer en vis nedetid.
Konklusion
Lastbalancering er en kritisk komponent i moderne, fejltolerante systemer. Vi kan simpelthen konstruere apps, der distribuerer anmodninger til flere tjenesteinstanser ved hjælp af forskellige belastningsbalanceringsmetoder. Virksomheder skal understøtte komplicerede it-systemer for at kunne levere applikationer sikkert.
Konfiguration, implementering og vedligeholdelse af mikrotjenester på tværs af domæner kan være fejlbehæftet, dyrt og tidskrævende. IT bør bruge best practices og teknologier for automatisering, synlighed, analyse og orkestrering, der er kompatible med deres agile og DevOps-processer for at gøre opsætningen og vedligeholdelsen af disse mikrotjenester nemmere.
Giv en kommentar