Vad är serverlöst? Serverlös databehandling förklarad

Utvecklare spenderar otaliga timmar på att lösa affärsproblem med kod. Då är det ops-teamets tur att spendera oräkneliga timmar, först ta reda på hur man får koden som utvecklare skriver upp och körs på vad som helst datorer som är tillgängliga, och för det andra att se till att dessa datorer fungerar smidigt. Den andra delen är verkligen en oändlig uppgift. Varför inte lämna den delen till någon annan?

Mycket innovation inom IT under de senaste två decennierna - virtuella maskiner, cloud computing, containrar - har fokuserat på att se till att du inte behöver tänka mycket på den underliggande fysiska maskinen som din kod körs på. Serverlös databehandling är ett alltmer populärt paradigm som tar denna önskan till sin logiska slutsats: Med serverlös dator behöver du inte veta någonting om hårdvaran eller operativsystemet som din kod kör på, eftersom allt tas om hand av dig av en tjänsteleverantör .

Vad är serverlös databehandling?

Serverlös beräkning är en exekveringsmodell för molnet där en molnleverantör dynamiskt allokerar - och sedan debiterar användaren för - endast beräkningsresurser och lagring som behövs för att utföra en viss kod. Naturligtvis finns det fortfarande servrar inblandade, men deras tillhandahållande och underhåll tas helt hand om av leverantören. Chris Munns, Amazons förespråkare för serverlös, sa vid en konferens 2017 att, ur perspektivet för teamet som skriver och distribuerar koden, ”det finns inga servrar att hantera eller tillhandahålla alls. Detta inkluderar inget som skulle vara ren metall, ingenting som är virtuellt, inget som är en behållare - allt som innebär att du hanterar en värd, lappar en värd eller hanterar något på operativsystemnivå, är inte något du borde behöva göra i serverfri värld. ” 

Som utvecklaren Mike Roberts förklarar användes termen en gång för så kallade back-end-as-a-service- scenarier, där en mobilapp skulle ansluta till en back-end-server som var värd helt i molnet. Men idag när folk pratar om serverlös datorbearbetning eller en serverlös arkitektur menar de funktion-som-en-tjänst- erbjudanden, där en kund skriver kod som bara hanterar affärslogik och laddar upp den till en leverantör. Den leverantören tar hand om all hårdvaruförsörjning, virtuell maskin- och containerhantering och till och med uppgifter som multithreading som ofta är inbyggda i applikationskod.

Serverlösa funktioner är händelsestyrda, vilket innebär att koden anropas endast när den utlöses av en begäran. Leverantören tar endast betalt för beräkningstid som används av den här körningen, snarare än en fast månadsavgift för underhåll av en fysisk eller virtuell server. Dessa funktioner kan kopplas ihop för att skapa en bearbetningspipeline, eller de kan fungera som komponenter i en större applikation, som interagerar med annan kod som körs i containrar eller på konventionella servrar.

Fördelar och nackdelar med serverlös databehandling

Från den beskrivningen borde två av de största fördelarna med serverlös databehandling vara tydliga: utvecklare kan fokusera på affärsmålen för koden de skriver, snarare än på infrastrukturella frågor; och organisationer betalar bara för de beräkningsresurser som de faktiskt använder på ett mycket detaljerat sätt, snarare än att köpa fysisk hårdvara eller hyra molninstanser som oftast sitter inaktiv.

Som Bernard Golden påpekar är den sistnämnda punkten särskilt fördelaktig för evenemangsdrivna applikationer. Du kan till exempel ha ett program som är inaktivt mycket av tiden men under vissa förhållanden måste hantera många evenemangsförfrågningar samtidigt. Eller så kan du ha ett program som behandlar data som skickas från IoT-enheter med begränsad eller intermittent internetanslutning. I båda fallen skulle det traditionella tillvägagångssättet kräva tillhandahållande av en nötkött server som kunde hantera högsta arbetskapacitet - men den servern skulle vara underutnyttjad för det mesta. Med en serverlös arkitektur betalar du bara för de serverresurser du faktiskt använder. Serverlös databehandling skulle också vara bra för specifika typer av batchbearbetning.Ett av de kanoniska exemplen på ett serverfall utan arkitektur är en tjänst som laddar upp och bearbetar en serie enskilda bildfiler och skickar dem till en annan del av applikationen.

Den kanske mest uppenbara nackdelen med serverlösa funktioner är att de avsiktligt är kortvariga och, som AlexSoft uttrycker det, "olämpliga för långsiktiga uppgifter." De flesta serverlösa leverantörer kommer inte att låta koden köras i mer än några minuter, och när du snurrar upp en funktion behåller den inte några statliga data från tidigare körda instanser. Ett relaterat problem är att serverlös kod kan ta så lång tid som flera sekunder att snurra upp - inte ett problem för många användningsfall, men om ditt program kräver låg latens, varnas.

Många av de andra nackdelarna, som påpekats av Rohit Akiwatkar och Gary Arora, har att göra med leverantörslås. Även om det finns alternativ med öppen källkod domineras den serverlösa marknaden av de stora kommersiella molnleverantörerna, som vi kommer att diskutera om ett ögonblick. Det betyder att utvecklare ofta slutar använda verktyg från sina leverantörer, vilket gör det svårt att byta om de blir missnöjda. Och eftersom så mycket av serverlös databehandling sker per definition på leverantörens infrastruktur kan det vara svårt att integrera serverlös kod i interna utvecklings- och teströrledningar.

Serverlösa leverantörer: AWS Lambda, Azure-funktioner och Google Cloud-funktioner

Den moderna tidsåldern för serverlös databehandling började med lanseringen av AWS Lambda, en plattform baserad på Amazons molntjänst 2014. Microsoft följde med Azure Functions 2016. Google Cloud Functions, som varit i beta sedan 2017, nådde äntligen produktionsstatus i juli 2018. De tre tjänsterna har lite olika begränsningar, fördelar, språk som stöds och sätt att göra saker på. Rohit Akiwatkar har en bra och detaljerad genomgång av skillnaderna mellan de tre. Även i gång är IBM Cloud Functions, som är baserad på Apache OpenWhisk-plattformen med öppen källkod.

Bland alla serverlösa datorplattformar är AWS Lambda den mest framträdande och har uppenbarligen haft mest tid att utvecklas och mogna. har täckning av uppdateringar och nya funktioner lagt till AWS Lambda under det senaste året.

Serverlösa stackar

Som det är fallet i många programvarusektorer, har den serverlösa världen sett utvecklingen av stackar av programvara, som sammanför olika komponenter som behövs för att bygga en serverlös applikation. Varje stack består av en programmeringsspråket som du kommer att skriva koden i ett applikationsramverk som ger en struktur för din kod, och en uppsättning triggers att plattformen kommer att förstå och använda för att initiera exekvering av kod.

Medan du kan mixa och matcha olika specifika erbjudanden i var och en av dessa kategorier, finns det begränsningar beroende på vilken leverantör du använder, med viss överlappning. Till exempel, för språk kan du använda Node.js, Java, Go, C # och Python på AWS Lambda, men bara JavaScript, C # och F # fungerar inbyggt på Azure-funktioner. När det gäller triggers har AWS Lambda den längsta listan, men många av dem är specifika för AWS-plattformen, som Amazon Simple Email Service och AWS CodeCommit; Google Cloud-funktioner kan under tiden utlösas av generiska HTTP-förfrågningar. Paul Jaworski har en djupgående titt på staplarna för vart och ett av de tre stora erbjudandena.

Serverlösa ramar

Det är värt att dröja lite kvar i ramen av ekvationen, eftersom det kommer att definiera mycket om hur du slutar bygga din applikation. Amazon har sitt eget inhemska erbjudande, den öppna källkodsserverlös applikationsmodellen (SAM), men det finns också andra, varav de flesta är plattformar och även öppen källkod. En av de mest populära kallas, ganska generiskt, Serverless, och betonar att den ger samma upplevelse en varje plattform som stöds, dvs AWS Lambda, Azure Functions, Google Cloud Functions och IBM OpenWhisk. Ett annat populärt erbjudande är Apex, som kan hjälpa till att ta med vissa språk som annars inte är tillgängliga för vissa leverantörer.

Serverlösa databaser

Som vi nämnde ovan är en egenskap av att arbeta med serverlös kod som inte har något beständigt tillstånd, vilket innebär att värdena för lokala variabler inte kvarstår över instanseringar. Alla beständiga data som din kod behöver för att komma åt måste lagras någon annanstans, och de utlösare som finns tillgängliga i staplarna för de stora leverantörerna inkluderar alla databaser som dina funktioner kan interagera med.

Några av dessa databaser kallas själva serverlösa. Detta innebär att de beter sig som andra serverlösa funktioner som vi har diskuterat i den här artikeln, med det uppenbara undantaget att data lagras på obestämd tid. Men mycket av ledningskostnaderna som är involverade i tillhandahållande och underhåll av en databas kastas åt sidan. Som utvecklaren Jeremy Daly uttrycker det, "Allt du behöver göra är att konfigurera ett kluster, och sedan hanteras allt underhåll, lapp, säkerhetskopior, replikering och skalning automatiskt åt dig." Som med erbjudanden som funktion som tjänst betalar du bara för den beräkningstid du faktiskt använder och resurser spinnas upp och ner efter behov för att matcha efterfrågan.

De tre stora serverlösa leverantörerna erbjuder var och en sina egna serverlösa databaser: Amazon har Aurora Serverless och DynamoDB, Microsoft har Azure Cosmos DB och Google har Cloud Firestore. Det här är dock inte de enda tillgängliga databaserna. Nemanja Novkovic har information om fler erbjudanden.

Serverlös databehandling och Kubernetes

Behållare hjälper till att driva serverlös teknik under huven, men kostnaden för att hantera dem tas om hand av säljaren och därmed osynlig för användaren. Många ser serverlös databehandling som ett sätt att få många av fördelarna med containeriserade mikrotjänster utan att behöva ta itu med deras komplexitet och börjar till och med prata om en värld efter container.

I sanning kommer containrar och serverlös dator nästan säkert att samexistera i många år framöver, och i själva verket kan serverlösa funktioner existera i samma applikation som containeriserade mikrotjänster. Kubernetes, den mest populära plattformen för containerorkestrering, kan också hantera serverlös infrastruktur. Med Kubernetes kan du faktiskt integrera olika typer av tjänster i ett enda kluster.  

Serverlös offline

Du kanske tycker att det är lite skrämmande att komma igång med serverlös dator eftersom det verkar som om du måste registrera dig hos en leverantör för att leka och se hur det fungerar. Men var inte rädd: Det finns sätt att köra serverlös kod offline på din egen lokala hårdvara. Till exempel tillhandahåller AWS SAM en lokal funktion som låter dig testa Lambda-kod offline. Och om du använder Serverless-applikationsramverk, kolla in serverless-offline, ett plugin-program som låter dig köra kod lokalt. Lyckligt experimentera!