Belastningsutjämning

Slutförd

Behovet av belastningsutjämning inom databehandling beror på två grundläggande krav: För det första kan hög tillgänglighet förbättras genom replikering. För det andra kan prestandan förbättras genom parallellbearbetning. Hög tillgänglighet är egenskapen för en tjänst som är tillgänglig under nästan 100 % av tiden när en klient försöker få åtkomst till tjänsten. Tjänstkvaliteten (QoS) för en viss tjänst innehåller vanligtvis flera överväganden, som till exempel dataflöde och svarstidskrav.

Vad är belastningsutjämning?

Den mest välkända formen av belastningsutjämning är ”resursallokerings-DNS”, som många stora webbtjänster använder till begäranden mellan flera servrar. I synnerhet gäller det här i situationer där flera klientdelswebbservrar har en unik IP-adress, men delar samma DNS-namn. För att balansera antalet begäranden på varje webbserver, underhåller och organiserar stora företag som Google en pool med IP-adresser som är associerade med en enda DNS-post. När en klient skickar en begäran (till exempel till domänen www.google.com) väljer Googles DNS en av de tillgängliga adresserna från poolen och skickar den till klienten. Den enklaste strategin för att skicka till olika IP-adresser är att använda en enkel resursallokeringskö, där listan med adresser permuteras efter varje DNS-svar.

Innan molnet var DNS-belastningsutjämning ett enkelt sätt att hantera svarstiden för anslutningar över stora avstånd. Fördelningsfunktionen på DNS-servern var programmerad att svara med IP-adressen till servern som geografiskt låg närmast klienten. Det enklaste sättet att göra detta på var att försöka svara med IP-adressen från poolen som numeriskt låg närmast klientens IP-adress. Metoden var inte så tillförlitlig eftersom IP-adresser inte är distribuerade i någon global hierarki. Dagens tekniker är mer sofistikerade och förlitar sig på programvarumappning av IP-adresser till platser baserat på fysiska kartor med internetleverantörer. Eftersom detta implementeras som en kostsam programvarusökning ger den här metoden mer korrekta resultat, men den är dyr att beräkna. Kostnaden för en långsam sökning periodiseras dock eftersom DNS-sökningen bara sker när klienten först ansluter till en server. All efterföljande kommunikation sker direkt mellan klienten och servern som äger den IP-adress som används. Du ser ett exempel på ett schema för DNS-belastningsutjämning i följande bild.

Belastningsutjämning i molnvärdmiljö.

Bild 4: Belastningsutjämning i en molnvärdmiljö

Nackdelen med metoden är att växlingen till en annan IP-adress vid ett serverhaveri är beroende av TTL-konfigurationen (Time-to-Live) för DNS-cachen. DNS-poster varar generellt länge och det tar i allmänhet över en vecka att sprida uppdateringar över Internet. Det är därför svårt att snabbt ”dölja” ett serverhaveri för klienten. Detta kan förbättras genom att minska giltigheten (TTL-värdet) för en IP-adress i cacheminnet, men det sker på bekostnad av prestandan och ett större antal sökningar.

Modern belastningsutjämning handlar ofta om att använda en dedikerad instans (eller ett instanspar) som dirigerar inkommande trafik till serverdelens servrar. För varje inkommande förfrågan över en viss port dirigerar lastbalanseraren om trafiken till en av servrarna i serverdelen baserat på en fördelningsstrategi. Lastbalanseraren behåller även metadata för förfrågan, som protokollrubriker (till exempel HTTP-rubriker). I den här situationen är det inte något problem med föråldrad information, eftersom varje förfrågan passerar lastbalanseraren.

Även om alla typer av lastbalanserare i nätverk vidarebefordrar användarens information tillsammans med en kontext till serverdelens servrar, så kan de bara använda en av två grundläggande strategier när svaret ska skickas tillbaka till klienten:1

  • Proxying: I den här metoden tar lastbalanseraren emot svaret från serverdelen och vidarebefordrar det tillbaka till klienten. Lastbalanseraren fungerar som en vanlig webbproxy och ingår i båda halvorna av nätverkstransaktionen, nämligen att vidarebefordra förfrågan från klienten och att skicka tillbaka svaret.
  • TCP-överlämning I metoden lämnas TCP-anslutningen med klienten över till serverdelens server. Servern skickar därför svaret direkt till klienten, utan att gå via lastbalanseraren.

TCP-överlämningsmekanism från dispatcher till serverdelsservern.

Bild 5: TCP-överlämningsmekanism från avsändaren till serverdelsservern

Påverkan på tillgänglighet och prestanda

Belastningsutjämning är en viktig strategi för att maskera felen i ett system. Om klienten i systemet exponeras för en enda slutpunkt som balanserar belastningen över flera resurser, kan felen i enskilda resurser maskeras från klienten genom att helt enkelt hantera begärandet på en annan resurs. Det är dock viktigt att notera att lastbalanseraren nu är en felkritisk systemdel för tjänsten. Om den havererar av någon anledning så bearbetas inga klientförfrågningar, även om alla servrar i serverdelen fortfarande fungerar. För att få hög tillgänglighet implementeras lastbalanserare därför ofta i par.

Med belastningsutjämning kan en tjänst fördela arbetsbelastningar över flera beräkningsresurser i molnet. Att ha en enda beräkningsinstans i molnet medför flera begränsningar. I tidigare moduler har vi diskuterat fysiska prestandabegränsningar, där det behövs fler resurser för att klara större arbetsbelastningar. När belastningsutjämning används kan större volymer med arbetsbelastningar fördelas över flera resurser. Det innebär att varje resurs kan bearbeta sina förfrågningar fristående och parallellt, vilket förbättrar dataflödet i programmet. Detta förbättrar också den genomsnittliga tjänsttiden eftersom det finns fler servrar som hanterar arbetsbelastningen.

Kontroll och övervakning av tjänster är viktigt för att lyckas med belastningsutjämningsstrategier. En lastbalanserare måste säkerställa att varje begäran uppfylls genom att se till att alla resursnoder är tillgängliga. Annars dirigeras inte trafiken till den specifika noden. Övervakning med pingeko är en av de populäraste metoderna när hälsan ska kontrolleras för en angiven resursnod. Förutom hälsan för en nod kräver vissa belastningsutjämningsstrategier ytterligare information, till exempel dataflöde, svarstid och processoranvändning, för att kunna utvärdera den lämpligaste resursen för trafikdirigeringen.

Lastbalanserare måste ofta garantera hög tillgänglighet. Det enklaste sättet att göra detta på är att skapa flera instanser av lastbalanseraren (var och en med en unik IP-adress) och koppla varje instans till en enda DNS-adress. Om en lastbalanserarinstans havererar av någon anledning ersätts den med en ny och all trafik skickas vidare till reservinstansen med en liten påverkan på prestandan. Samtidigt kan en ny lastbalanserarinstans konfigureras för att ersätta den havererade och DNS-posterna måste uppdateras omedelbart.

Strategier för belastningsutjämning

Det finns flera strategier för belastningsutjämning i molnet.

Rättvis sändning

Detta är en statisk metod för belastningsutjämning där en enkel algoritm för resursallokering används till att dela upp trafiken jämnt mellan alla noder, utan att ta hänsyn till användningen av en enskild resursnod i systemet eller körningstiden för en begäran. Syftet med metoden är att se till att alla noder i systemet har uppgifter att utföra, och det är en av de enklaste metoderna att implementera. En betydande nackdel med metoden är att tunga klientbegäranden kan aggregeras och skickas till samma datacenter, vilket innebär att några noder blir överbelastade medan andra är underutnyttjade. Detta kräver dock ett särskilt inläsningsmönster och har låg sannolikhet att inträffa i praktiken på ett stort antal klienter och servrar med ganska enhetlig anslutningsdistribution och kapacitet. Metoden gör det dock svårt att implementera cachelagringsstrategier i datacentret som tar hänsyn till överväganden som t.ex. spatial plats (där du förhämtar och cachelagrar data nära de data som hämtades), eftersom nästa begäran från samma klient kan hamna på en annan server.

AWS använder den här metoden i sitt ELB-erbjudande (Elastic Load Balancer). Med AWS ELB etableras lastbalanserare som fördelar trafiken mellan anslutna EC2-instanser. Lastbalanserarna är i praktiken också EC2-instanser med en tjänst som specifikt dirigerar trafik. När resurserna bakom lastbalanseraren skalas ut uppdateras IP-adresserna för de nya resurserna i lastbalanserarens DNS-register. Processen tar flera minuter att slutföra eftersom det krävs både övervakning och etablering. Skalningsperioden (tiden innan lastbalanseraren kan hantera den högre belastningen) kallas för att ”värma upp” lastbalanseraren.

ELB-lastbalanserarna från AWS utför även hälsokontroller av varje resurser som är kopplad till arbetsbelastningsfördelningen. Pingekon används till att säkerställa att alla resurser fungerar. ELB-användare kan konfigurera hälsokontrollens parametrar genom att ange fördröjningar och antalet omförsök.

Hash-baserad distribution

Metoden försöker se till att alla begäranden som görs av en klient via samma anslutning alltid hamnar på samma server. För att kunna utjämna trafikdistributionen av förfrågningar görs detta dessutom i slumpmässig ordning. Detta har flera fördelar jämfört med resursallokeringsmetoden eftersom det underlättar för sessionsbaserade appar där strategier för beständighet och cachelagring kan vara mycket enklare. Det är också mindre känsligt för trafikmönster som leder till blockering på en enskild server, eftersom fördelningen är slumpmässig men risken finns fortfarande. Men eftersom anslutningsmetadata för varje begäran måste utvärderas för att kunna dirigera den till en relevant server, innebär metoden en liten fördröjning för varje begäran.

Azure Load Balancer använder en sådan hash-baserad distributionsmekanism för att distribuera belastningen. Mekanismen skapar en hash för varje förfrågan baserat på käll-IP, källport, mål-IP, målport och protokolltyp, för att säkerställa att alla paket från samma anslutning alltid hamnar på samma server. Hash-funktionen väljs för att fördelningen av anslutningar till servrarna ska vara slumpmässig.

Azure tillhandahåller hälsokontroller via tre typer av avsökningar: Gästagentavsökningar (på virtuella PaaS-datorer), HTTP-anpassade avsökningar och anpassade TCP-avsökningar. Alla tre avsökningarna ger en hälsokontroll av resursnoderna via ett pingeko.

Det finns andra strategier som används för att utjämna belastningen över flera resurser. De använder olika mått för att mäta den lämpligaste resursnoden för en viss begäran:

  • Strategier baserade på körningstid för begäranden: Dessa strategier använder en algoritm för prioritetsschemaläggning, där körningstider för begäranden används för att bedöma den lämpligaste ordningen för belastningsfördelning. Den främsta utmaningen med metoden är att kunna förutsäga körningstiden för en viss begäran.
  • Strategier baserade på resursanvändning: Dessa strategier använder CPU-användningen på varje resursnod för att balansera användningen mellan varje nod. Lastbalanserarna upprätthåller en ordnad lista över resurser baserat på deras användning och dirigerar sedan förfrågningar till den minst belastade noden.

Övriga förmåner

Att låta en central lastbalanserare låna ut sig själv till flera strategier kan öka tjänstens prestanda. Det är dock viktigt att observera att dessa strategier endast fungerar så länge lastbalanseraren inte har en oöverstiglig belastning. Annars blir lastbalanseraren själv en flaskhals. Vissa av dessa strategier visas nedan:

  • SSL-avlastning: Nätverkstransaktioner via SSL har en extra kostnad associerad med dem eftersom de behöver bearbetas för kryptering och autentisering. I stället för att hantera alla förfrågningar via SSL kan klientanslutningen till lastbalanseraren göras via SSL, samtidigt som omdirigeringar till enskilda servrar görs via okrypterad HTTP. Tekniken minskar belastningen på servrarna avsevärt. Dessutom bibehålls säkerheten så länge som omdirigeringarna inte görs i ett öppet nätverk.
  • TCP-buffring: Detta är en strategi för att avlasta klienter med långsamma anslutningar till lastbalanseraren för att avlasta servrar som hanterar svar till dessa klienter.
  • Cachelagring: I vissa scenarier kan lastbalanseraren underhålla en cache för de mest populära begärandena (eller begäranden som kan hanteras utan att gå till servrarna, till exempel statiskt innehåll) så att belastningen på servrarna minskar.
  • Trafikformning: För vissa program kan en lastbalanserare användas för att fördröja/omprioritera flödet av paket så att trafiken kan formas så att den passar serverkonfigurationen. Det här påverkar tjänstkvaliteten för vissa förfrågningar, men säkerställer samtidigt att den inkommande belastningen kan hanteras.

Referenser

  1. Aron, Mohit and Sanders, Darren and Druschel, Peter and Zwaenepoel, Willy (2000). Skalbar distribution av innehållsmedvetna begäranden i klusterbaserade nätverksservrar från Proceedings of the 2000 Annual USENIX Technical Conference