Dela via


Utnyttja serverlösa funktioner

Dricks

Det här innehållet är ett utdrag från eBook, Architecting Cloud Native .NET Applications for Azure, tillgängligt på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

I spektrumet från att hantera fysiska datorer till att utnyttja molnfunktioner lever serverlösa liv i den extrema änden. Ditt enda ansvar är din kod och du betalar bara när koden körs. Med Azure Functions kan du skapa serverlösa funktioner i dina molnbaserade program.

Vad är serverlöst?

Serverlös är en relativt ny tjänstmodell för molnbaserad databehandling. Det betyder inte att servrar är valfria – koden körs fortfarande på en server någonstans. Skillnaden är att programteamet inte längre har att göra med att hantera serverinfrastrukturen. Molnleverantören äger i stället det här ansvaret. Utvecklingsteamet ökar sin produktivitet genom att leverera affärslösningar till kunder, inte VVS.

Serverlös databehandling använder händelseutlösta tillståndslösa containrar som värd för dina tjänster. De kan skala ut och in för att möta efterfrågan efter behov. Serverlösa plattformar som Azure Functions har nära integrering med andra Azure-tjänster som köer, händelser och lagring.

Vilka utmaningar löses av serverlösa?

Serverlösa plattformar hanterar många tidskrävande och dyra problem:

  • Köpa datorer och programvarulicenser
  • Bostäder, skydd, konfigurering och underhåll av datorer och deras nätverks-, ström- och A/C-krav
  • Korrigering och uppgradering av operativsystem och programvara
  • Konfigurera webbservrar eller datortjänster som värd för programprogramvara
  • Konfigurera programprogramvara på dess plattform

Många företag allokerar stora budgetar för att stödja maskinvaruinfrastrukturproblem. Om du flyttar till molnet kan du minska dessa kostnader. att flytta program till serverlösa kan hjälpa till att eliminera dem.

Vad är skillnaden mellan en mikrotjänst och en serverlös funktion?

Vanligtvis kapslar en mikrotjänst in en affärskapacitet, till exempel en kundvagn för en e-handelswebbplats online. Den exponerar flera åtgärder som gör det möjligt för en användare att hantera sin shoppingupplevelse. En funktion är dock ett litet, enkelt kodblock som kör en enskild åtgärd som svar på en händelse. Mikrotjänster skapas vanligtvis för att svara på begäranden, ofta från ett gränssnitt. Begäranden kan vara HTTP Rest- eller gRPC-baserade. Serverlösa tjänster svarar på händelser. Dess händelsedrivna arkitektur är perfekt för bearbetning av kortvariga bakgrundsaktiviteter.

Vilka scenarier är lämpliga för serverlösa?

Serverlös exponerar enskilda funktioner som körs med kort körning som svar på en utlösare. Detta gör dem idealiska för bearbetning av bakgrundsaktiviteter.

Ett program kan behöva skicka ett e-postmeddelande som ett steg i ett arbetsflöde. Placera meddelandeinformationen i en kö i stället för att skicka meddelandet som en del av en mikrotjänstbegäran. En Azure-funktion kan ta bort meddelandet och asynkront skicka e-postmeddelandet. Detta kan förbättra mikrotjänstens prestanda och skalbarhet. Köbaserad belastningsutjämning kan implementeras för att undvika flaskhalsar som rör att skicka e-postmeddelandena. Dessutom kan den här fristående tjänsten återanvändas som ett verktyg i många olika program.

Asynkrona meddelanden från köer och ämnen är ett vanligt mönster för att utlösa serverlösa funktioner. Azure Functions kan dock utlösas av andra händelser, till exempel ändringar i Azure Blob Storage. En tjänst som stöder avbildningsuppladdningar kan ha en Azure-funktion som ansvarar för att optimera bildstorleken. Funktionen kan utlösas direkt genom infogningar i Azure Blob Storage, vilket håller komplexiteten borta från mikrotjänståtgärderna.

Många tjänster har långvariga processer som en del av sina arbetsflöden. Ofta utförs dessa uppgifter som en del av användarens interaktion med programmet. Dessa uppgifter kan tvinga användaren att vänta, vilket påverkar deras upplevelse negativt. Serverlös databehandling är ett bra sätt att flytta långsammare uppgifter utanför användarinteraktionsloopen. Dessa uppgifter kan skalas med efterfrågan utan att hela programmet behöver skalas.

När bör du undvika serverlös?

Serverlösa lösningar etablerar och skalas på begäran. När en ny instans anropas är kallstarter ett vanligt problem. En kallstart är den tidsperiod det tar att etablera den här instansen. Den här fördröjningen kan normalt vara några sekunder, men kan vara längre beroende på olika faktorer. När en enskild instans har etablerats hålls den vid liv så länge den tar emot periodiska begäranden. Men om en tjänst anropas mindre ofta kan Azure ta bort den från minnet och kräva en kall start när den återaktiveras. Kallstart krävs också när en funktion skalar ut till en ny instans.

Bild 3-9 visar ett kallstartsmönster. Observera de extra steg som krävs när appen är kall.

Cold versus warm startBild 3-9. Kallstart kontra varm start.

För att undvika kallstarter helt kan du växla från en förbrukningsplan till en dedikerad plan. Du kan också konfigurera en eller flera förvärmda instanser med uppgraderingen av premiumplanen. I dessa fall när du behöver lägga till en annan instans är den redan klar att användas. De här alternativen kan bidra till att minska problemet med kallstart som är associerat med serverlös databehandling.

Molnleverantörer fakturerar för serverlös baserat på beräkningskörningstid och förbrukat minne. Tidskrävande åtgärder eller arbetsbelastningar med hög minnesförbrukning är inte alltid de bästa kandidaterna för serverlösa. Serverlösa funktioner gynnar små delar av arbetet som kan slutföras snabbt. De flesta serverlösa plattformar kräver att enskilda funktioner slutförs inom några minuter. Azure Functions är som standard en tidsgräns på 5 minuter som kan konfigureras upp till 10 minuter. Azure Functions Premium-planen kan också åtgärda det här problemet, vilket ger en tidsgräns på 30 minuter med en obegränsad högre gräns som kan konfigureras. Beräkningstiden är inte kalendertid. Mer avancerade funktioner som använder Azure Durable Functions-ramverket kan pausa körningen under flera dagar. Faktureringen baseras på faktisk körningstid – när funktionen aktiveras och återupptar bearbetningen.

Slutligen ökar användning av Azure Functions för programuppgifter komplexiteten. Det är klokt att först utforma ditt program med en modulär, löst kopplad design. Identifiera sedan om det finns fördelar som serverlösa skulle erbjuda som motiverar den ytterligare komplexiteten.