I terminologin för datornätverk är lastbalansering eller lastbalansering ( eng. lastbalansering ) en metod för att fördela uppgifter mellan flera nätverksenheter (till exempel servrar ) för att optimera resursanvändningen, minska frågetjänsttiden, horisontell klusterskalning ( dynamisk tillägg/borttagning av enheter), samt säkerställande av feltolerans ( redundans ).
I datorer fördelar lastbalansering belastningen över flera datorresurser som datorer, datorkluster , nätverk, CPU:er eller diskar. Syftet med lastbalansering är att optimera resursanvändningen, maximera genomströmningen, förbättra svarstiden och förhindra att någon enskild resurs överbelastas. Att använda flera lastbalanserande komponenter istället för en enda komponent kan förbättra tillförlitligheten och tillgängligheten genom redundans . Lastbalansering involverar vanligtvis närvaron av speciell mjukvara eller hårdvara, såsom en flerskiktsswitch eller ett domännamnssystem, som en serverprocess.
Lastbalansering skiljer sig från en fysisk anslutning genom att lastbalansering delar upp trafik mellan nätverksgränssnitt i ett nätverksuttag (OSI lager 4-modell), medan länkanslutning innebär uppdelning av trafik mellan fysiska gränssnitt på en lägre nivå, eller i ett paket (OSI) modelllager 3) eller över en kommunikationskanal (OSI modelllager 2).
Exempel på enheter för vilka balansering är tillämplig:
Lastbalansering kan användas för att ge en serverfarm mer än en server. Det kan också tillåta dig att fortsätta arbeta även under förhållanden där flera verkställande enheter (servrar) har havererat. På grund av detta ökar feltoleransen, och det blir möjligt att dynamiskt justera de använda datorresurserna genom att lägga till/ta bort exekutiva enheter i klustret .
En av de mest använda lastbalanseringsapplikationerna är att skapa en enda Internettjänst med flera servrar , ibland kallade serverfarmar . Vanligtvis inkluderar lastbalanseringssystem populära webbplatser , stora onlinebutiker , File Transfer Protocol (FTP) webbplatser, Domain Name System (DNS) och databaser.
För internet är en lastbalanserare vanligtvis ett program som lyssnar på porten där externa klienter ansluter till tjänster. Lastbalanseraren vidarebefordrar förfrågningar till en av serverns "servrar", som vanligtvis svarar på lastbalanseraren. Detta gör att lastbalanseraren kan svara kunden utan att känna till den interna separationen av bekymmer. Det tillåter också klienter att kontakta back-end-servrar direkt, vilket kan ha säkerhetsfördelar och dölja den interna nätverksstrukturen och förhindra attacker på kärnan, nätverksstacken eller orelaterade tjänster som körs på andra portar.
Vissa lastbalanserare tillhandahåller en mekanism för att göra något speciellt i händelse av att hela serverns backend inte är tillgänglig. Detta kan inkludera omdirigering till ett backupbalanseringssystem eller visning av ett felmeddelande.
Det är också viktigt att lastbalanseraren inte blir en enda felpunkt. Vanligtvis implementeras lastbalanserare i hög tillgänglighet , som också kan replikera uthållighetssessioner om det krävs för en viss applikation. [ett]
En alternativ metod för lastbalansering som inte nödvändigtvis kräver speciell värdprogramvara eller hårdvara kallas DNS robin round . I denna teknik, flera IP-adresser associerade med samma domännamn ; klienter måste välja en server att ansluta till. Till skillnad från att använda en dedikerad lastbalanserare tillåter denna teknik klienter att ha flera servrar. Tekniken har sina fördelar och nackdelar, beroende på graden av kontroll över DNS-servrarna och granulariteten hos den belastning som krävs.
En annan, mer effektiv metod för lastbalansering med DNS är att delegera www.example.org som en underdomän för vilken zonen underhålls av var och en av samma servrar som betjänar webbplatsen. Denna teknik fungerar särskilt bra där enskilda servrar är utspridda geografiskt på Internet. Till exempel:
one.example.org A 192.0.2.1 two.example.org A 203.0.113.2 www.example.org NS one.example.org www.example.org NS two.example.orgZonfilen för www.example.org på varje server är dock olika på ett sådant sätt att varje server bestämmer hur IP-adressen ska användas som en A-post. På filservern för en zon för rapportering www.example.org:
@ i en 192.0.2.1På server två innehåller samma zonfil:
@i en 203.0.113.2Således, när den första servern är nere, svarar inte dess DNS och webbtjänsten tar inte emot någon trafik. Om linjen på en server är överbelastad ger den opålitliga DNS-tjänsten mindre http-trafik för att nå den servern. Dessutom löses det snabbaste DNS-svaret nästan alltid från närmaste servers nätverk, på grund av geokänslig lastbalansering. En kort TTL till en A-post låter dig snabbt omdirigera trafik om servern kraschar. Möjligheten att denna teknik kan resultera i att enskilda klienter kan växla mellan separata servrar mitt under en session måste övervägas.
Många schemaläggningsalgoritmer används av lastbalanserare för att bestämma vilken server som ska skicka en förfrågan till. Enkla algoritmer inkluderar slumpmässigt urval eller round robin . Mer sofistikerade lastbalanserare kan ta hänsyn till ytterligare faktorer som vilka servrar som rapporterade belastning, långsammare svarstider, upp/ned-status (bestäms av någon typ av pollingövervakning), antal aktiva anslutningar, geografisk plats, kapacitet eller hur mycket trafik han utnämndes nyligen.
En viktig fråga när man kör en lastbalanseringstjänst är hur man hanterar information som måste lagras över flera förfrågningar i en användarsession. Om denna information lagras lokalt på en enda backend-server, kommer efterföljande förfrågningar som kommer från olika backend-servrar inte att kunna hitta den. Detta kan vara cachad information som kan beräknas om, i vilket fall en belastningsbalanseringsförfrågan till en annan backend-server löser prestandaproblemet.
Helst bör klustret av servrar bakom lastbalanseraren vara sessionsmedveten, så att om en klient ansluter till någon server när som helst, är användarens historik för kommunikation med en viss server irrelevant. Detta uppnås vanligtvis med en delad databas eller en databassession i minnet som memcached .
En grundläggande lösning på sessionsdataproblemet är att skicka alla förfrågningar i en användares session sekventiellt till samma server. Detta kallas uthållighet eller klibbighet . En betydande nackdel med denna teknik är avsaknaden av automatisk failover : om servern går ner blir dess sessionsinformation otillgänglig, alla sessioner går förlorade. Samma problem gäller vanligtvis serverns centrala databas; även om webbservrarna är "stateless" (stateless) och inte "sticky" (sticky), den centrala databasen (se nedan).
Tilldelningen till en viss server kan baseras på användarnamnet, klientens IP-adress eller kan vara slumpmässigt. På grund av ändringar i klientens uppfattade adress som ett resultat av DHCP , Network Address Translation och Web Proxy kan denna metod vara opålitlig. Slumpmässiga jobb måste komma ihåg av lastbalanseraren, vilket belastar förrådet. Om lastbalanseraren byts ut eller går ner kan denna information gå förlorad och jobb kan behöva tas bort efter en viss tid eller under perioder med hög belastning för att undvika att överskrida det tillgängliga utrymmet för uppdragstabellen. Metoden för slumpmässig tilldelning kräver också att klienter stödjer vissa inställningar, vilket kan vara ett problem, till exempel när webbläsaren har inaktiverat cookielagring. Komplexa lastbalanserare använder flera uthållighetsmetoder för att undvika några av nackdelarna med en metod.
En annan lösning är att lagra sessionsdata i en DB . I allmänhet är detta dåligt för prestandan, eftersom det ökar belastningen på databasen: databasen används bättre för att lagra information som är mindre flyktig än sessionsdata. För att förhindra att databasen blir en enda felpunkt, och för att förbättra skalbarheten , replikeras databaser ofta över flera maskiner, och lastbalansering används för att fördela lastindex över dessa repliker. Microsoft ASP.net State Server-tekniken är ett exempel på en databassession. Alla servrar i webbfarmen lagrar sessionsdata på Master State Server-servern och vilken server som helst i farmen kan hämta data.
I mycket vanliga fall där klienten är en webbläsare är en enkel men effektiv metod att lagra sessionsdata i själva webbläsaren. Ett sätt att uppnå detta är att använda webbläsarcookies , krypterade tidsstämplar. Ett annat sätt är URL omskrivning. Att lagra sessionsdata på klienten är vanligtvis den föredragna lösningen: belastningsutjämnaren är sedan fri att välja vilken server som helst för att behandla begäran. Denna metod för att bearbeta tillståndsdata är dock inte väl lämpad för vissa komplexa affärslogiska scenarier där sessionstillståndet är en stor nyttolast och det inte är möjligt att läsa om det med varje begäran till servern. Omskrivning av webbadresser har allvarliga säkerhetsproblem eftersom slutanvändaren enkelt kan ändra de inskickade webbadresserna och därmed ändra sessionsströmmarna.
En annan lösning för att lagra beständiga data är att associera ett namn med varje datablock, använda en distribuerad hashtabell för att pseudo-slumpmässigt tilldela ett namn till en av de tillgängliga servrarna och sedan lagra det datablocket i den angivna servern.
Maskin- och mjukvarulastbalanserare kan ha olika speciella egenskaper. Huvudfunktionen hos en lastbalanserare är att kunna distribuera inkommande förfrågningar över flera servrar i ett kluster enligt en schemaläggningsalgoritm. De flesta av de leverantörsspecifika egenskaperna som anges nedan:
Lastbalansering kan vara användbart i redundanta länkapplikationer. Ett företag kan till exempel ha flera Internetanslutningar, vilket ger åtkomst till nätverket om en av anslutningarna är nere. I felsäkra system skulle detta innebära att en länk är för normal användning och den andra endast används om huvudlänken misslyckas.
Genom att använda lastbalansering kan båda länkarna vara upptagna hela tiden. Enheten eller programmet kontrollerar närvaron av alla länkar och väljer sökvägen för att skicka paket. Att använda flera länkar samtidigt ökar den tillgängliga bandbredden.
IEEE-standarden godkände IEEE 802.1 rr-standarden i maj 2012 [2] är också känd och dokumenterad i de flesta böcker som Shortest Path (SCP). KPC tillåter alla länkar att vara aktiva över flera vägar av samma betydelse, ger snabbare konvergens vilket minskar stilleståndstid och gör det lättare att använda lastbalansering i ett mesh-nätverk (delvis och/eller helt anslutet), vilket gör att trafiken kan lastbalansera över alla nätverksvägar . [3] [4] PPC:n är designad för att praktiskt taget eliminera mänskliga fel under installationsprocessen och behåller plug-and-play-naturen av plug-and-play, vilket skapar Ethernet som de facto-protokollet i det andra lagret. [5]
Många teleföretag har flera rutter genom sina nätverk eller till externa nätverk. De använder komplexa belastningar för att ändra trafik från en väg till en annan för att undvika överbelastning av nätverket vid en viss länk, och ibland för att minimera kostnaderna för transit genom externa nätverk eller förbättra nätverkets tillförlitlighet.
Ett annat sätt att använda nätverksbelastningsbalansering är med aktivitetsövervakning. Lastbalanserare kan användas för att dela upp enorma dataströmmar i flera underströmmar och använda flera nätverksanalysatorer där var och en läser en del av originaldata. Detta är mycket användbart för att övervaka snabba nätverk som 10gbe- eller STM64-portar, där komplex databehandling kanske inte är möjlig med trådhastighet.
Lastbalansering används ofta för att implementera feltolerans - fortsättningen av en tjänst efter fel på en eller flera av dess komponenter. Komponenter övervakas ständigt (exempelvis kan webbservrar styras av ett urval av kända sidor), och när man slutar svara informeras lastbalanseraren och skickar inte längre trafik till den servern. När komponenten kommer online igen börjar lastbalanseraren dirigera trafik till den igen. För att detta ska fungera måste det finnas minst en komponent som överstiger tjänstens kapacitet (N+1 reservationer). Detta är mycket billigare och mer flexibelt än failover-metoder där varje levande komponent paras ihop med en enda komponent backup som tar över i händelse av ett fel (dubbel modulär redundans). Vissa typer av RAID- system kan också användas som reservdelar för liknande effekt.