AWS

Vad är Serverless? AWS Lambda och andra FaaS

Vad är Serverless? AWS Lambda och andra FaaS
För att förstå serverlösa, AWS Lamda och liknande Function-as-a-service-erbjudanden kommer vi att börja med en historia och landskap av datorer och sedan sätta dessa nya tjänster i sammanhang. Låt oss börja.

Fysiska datorer

Vi har kommit långt från de massiva servrarna från dotcom-eran. På den tiden var serverinfrastrukturen mestadels på plats. Ett företag drev sina lösningar på en fysisk server. Människor använde hela separata servrar för olika ändamål (säkerhetskopior, e-postserver, webbserver, etc.). När en viss server inte kunde hålla jämna steg med företagets växande behov ersattes den av en nyare snabbare server. Du skalades genom att få bättre hårdvara. Du skalade vertikalt.

Hypervisor

Sedan kom hypervisorns era. Det fick fart med ökningen av VMWare och folk insåg att de kan få ett rack för att styra dem alla. Ett rack för att köra alla olika användningsfall och tillhandahålla var och en sin egen virtuella maskin. Detta gav också upphov till cloud computing och företag slutade investera i serverhårdvara direkt och valde istället att "hyra" virtuella servrar.

Stora och dyra datacenter hanterades av molnleverantörer över hela världen. Företagen utnyttjade detta genom att tillhandahålla sina tjänster globalt med ett så stort antal datacenter som möjligt. Detta gjordes främst för att minska latenser, förbättra kundupplevelsen och rikta in sig på en större marknad.

Detta fick också programvaruförfattare att tänka i termer av distribuerade system. De skrev programvara för att inte köras på en enda gigantisk dator utan på många medelmåttiga på ett konsekvent och pålitligt sätt. Du skalade horisontellt.

Du kan fortfarande skala vertikalt. Faktum är att på grund av virtualisering blev det enklare att tillhandahålla fler resurser. Du slog av den virtuella datorn, justerade dess resurser och betalade din molnleverantör lite extra. Lätt som en plätt.

De underliggande fysiska servrarna har inte försvunnit. Molnleverantörer ansvarar nu för att hantera komplexiteten i nätverksgränssnitt, OS-kompatibilitet och andra skrämmande patologier.

Behållare

Sedan kom behållarna. Behållare var denna fantastiska lätta abstraktion. En virtuell miljö med ett operativsystem som gjorde det möjligt att packa och distribuera programvara som en enda enhet. Liksom virtuella maskiner sprang varje container omedveten om andra containrar, men de delade samma operativsystemskärna.

Detta gjorde det möjligt för människor att distribuera programvara på servrar (fysiskt eller virtuellt spelar det ingen roll) på en ännu högre abstraktionsnivå. Du brydde dig inte om produktionsoperativsystemet. Så länge det stödde din containeriseringsteknik skulle den köra din programvara. Containrar är också lättare att snurra upp vilket gjorde tjänsterna mer skalbara än någonsin.

Detta ökade ytterligare flexibiliteten hos distribuerade system. Med tekniker som Kubernetes kan du ha legioner av containrar som kör ett komplext utbud av tjänster. Distribuerade system erbjuder många fördelar hög tillgänglighet, robusthet och förmågan att läka sig från ett nodfel.

På grund av att de är så komplexa är de också svårare att designa, distribuera, underhålla, övervaka och felsöka. Detta strider mot den ursprungliga trenden att ta bort komplexiteten ur din programvara och delegera ansvaret till din molnleverantör. Det är här serverlös arkitektur kommer in.

Serverlös eller FaaS (Function-as-a-Service)

Idén om serverlös har fått dragkraft främst på grund av AWS Lambda, och här kommer jag att använda det som en modell för att prata om serverlös. Principerna som FaaS bygger på är:

När ingen har åtkomst till dina tjänster är tjänsterna inte aktiva. Detta var inte fallet i de traditionella värdlösningarna där du betalar för en VPS som alltid är igång, även om den satt på tomgång och inte gjorde något mer användbart än att lyssna på en ny begäran.
I serverlös arkitektur körs din tjänst inte om inte någon faktiskt vill använda den. När en begäran kommer in skapas en tjänst i farten för att hantera den.

Hur fungerar det?

Din funktion (till exempel ett Python-, Go- eller Java-program) sitter som en fil på AWS Lambda. Med den här funktionen associerar du vissa triggerhändelser, som en API-gateway eller ett nytt objekt som kommer in i din S3-hink. Och vissa resurser som en databas eller en annan objektbutik eller en EC2-instans.

Som svar på någon av de tillhörande utlösningshändelserna skapar AWS Lambda en container med din funktion inuti den. Funktionen körs och ger ett svar. Till exempel, om en ny bild kommer in i din S3-hink kan AWS Lambda ha en maskininlärningskod inuti den, som skulle analysera den här bilden och skriva utdata till en DynamoDB (en av AWS datalagertjänst).

Du har inte betalt för en hel server utan bara för den mängd minne du tilldelade din funktion, antalet förfrågningar du får och hur länge din funktion körs.

Dessutom behöver du inte oroa dig för att skala behållare som svar på en stor inkommande arbetsbelastning. Om många utlösningshändelser inträffar samtidigt, kommer AWS att ta hand om att spinna upp nya containrar och planera arbetsbelastningar mellan dem och alla andra komplexiteter.

Inte en komplett lösning

När virtuella maskiner kom, upphörde de fysiska servrarna inte att existera. När containrar anlände använde vi fortfarande virtuella datorer. FaaS är en högre abstraktion och passar riktigt bra med den moderna designen av RESTful API: er, statslösa tjänster och lätta språk som Node.js eller Python.

Körs dock fortfarande på en fysisk server (hanteras till exempel av AWS), den lyssnar fortfarande på inkommande förfrågningar (du betalar bara inte för det direkt) och du behöver fortfarande lagra data på ett ihållande sätt och det är därför det har integrationer för S3, EC2 och andra tjänster. Det är ändå en användbar abstraktion.

Hur man installerar och spelar Doom på Linux
Introduktion till Doom Doom-serien har sitt ursprung på 90-talet efter att den ursprungliga Doom släpptes. Det blev en omedelbar hit och från den tide...
Vulkan för Linux-användare
Med varje ny generation grafikkort ser vi spelutvecklare driva gränserna för grafisk trohet och komma ett steg närmare fotorealism. Men trots all kred...
OpenTTD vs Simutrans
Att skapa din egen transportsimulering kan vara rolig, avkopplande och extremt lockande. Det är därför du måste se till att du testar så många spel so...