Skalning och samtidighetskontroller

Serverlösa applikationer med AWS Lambda

Claudio Canales

Senior DevOps Engineer

Skalning i en bild

  • Mer efterfrågan -> fler parallella körningar.
  • Varje körning använder en exekveringsmiljö.
  • Samtidighet = körningar som pågår just nu.

Efterfrågetoppar -> fler miljöer

Serverlösa applikationer med AWS Lambda

Vad är samtidighet?

  • En anrop = en arbetsenhet.
  • Samtidighet = hur många körs just nu.
  • Om 10 körs är samtidigheten = 10.

Parallella anrop

Serverlösa applikationer med AWS Lambda

Uppskatta nödvändig samtidighet

  • Tumregel: concurrency = rps * duration.
  • Minska körtiden för att minska samtidigheten.
  • Använd detta för att dimensionera gränser säkert.

Formel för samtidighet

Serverlösa applikationer med AWS Lambda

Exempel: 50 rps vid 200 ms

  • 200 ms = 0,2 sekunder.
  • 50 * 0,2 = 10 parallella exekveringar.
  • Snabbare kod ger färre parallella körningar.

Exempel på samtidighetsberäkning

Serverlösa applikationer med AWS Lambda

Gränser: kontopool vs funktionsandel

  • Samtidighet begränsas på kontonivå.
  • Reservera en del av poolen för en kritisk funktion.
  • Övriga funktioner delar på resten.

Kontopool för samtidighet

Serverlösa applikationer med AWS Lambda

Reserverad samtidighet: ett hårt tak

  • Ett säkerhetsventil.
  • Begränsar parallellt arbete.
  • Över taket stryps anropen.
  • En resurskrävande funktion kan inte tömma kapaciteten.

Tak för reserverad samtidighet

Serverlösa applikationer med AWS Lambda

Strypning: så här ser det ut

  • Lambda stryps vid samtidighetsgränsen.
  • Anroparen får ingen normal exekvering.
  • Strypningar syns i övervakningen.

Strypningssignaler

Serverlösa applikationer med AWS Lambda

Provisionerad samtidighet: varm kapacitet

  • En pool av förinitierade miljöer.
  • Ofta bakom ett alias.
  • Förfrågningar startar snabbare.

Varm pool för provisionerad samtidighet

Serverlösa applikationer med AWS Lambda

Kallstart vs provisionerad

Kallstart

  • En engångsfördröjning vid initiering.
  • Den första förfrågan betalar uppstartskostnaden.

Provisionerad

  • Initieringsarbetet görs i förväg.
  • Den första förfrågan betalar ingen uppstartskostnad.

Tidslinje: kallstart vs provisionerad

Serverlösa applikationer med AWS Lambda

Reserverad vs provisionerad (olika problem)

  • Reserverad styr belastningen.
  • Provisionerad styr uppstartslatensen.
  • Många produktionsfunktioner använder båda.

Jämförelse: reserverad vs provisionerad

Serverlösa applikationer med AWS Lambda

Skydda beroende system

  • En databas klarar bara ett visst antal anslutningar.
  • Ett samtidighetstak förhindrar överlast.
  • En trafiktopp kan annars orsaka ett avbrott.

Samtidighetstak skyddar en databas

Serverlösa applikationer med AWS Lambda

Toppar vs stabilt trafikflöde

  • Toppar skapar många parallella miljöer.
  • Långsamma hanterare håller samtidigheten hög.
  • Tak kan jämna ut topparna.
  • Kortare körtid är också en skalningsstrategi.

Trafiktoppar vs stabilt flöde

Serverlösa applikationer med AWS Lambda

Fel och återförsök ökar belastningen

  • Återförsök kan förstärka trafiken.
  • Samtidighetsgränser minskar skadeverkningarna.
  • En felloop kan överbelasta beroenden.

Återförsök multiplicerar belastningen

Serverlösa applikationer med AWS Lambda

Ett enkelt justeringsflöde

  • Börja med mätning.
  • Sätt ett tak när strypningar eller tryckökning uppstår.
  • Lägg till provisionerad kapacitet när kallstarter påverkar latensen.

Mät -> begränsa -> förvärm

Serverlösa applikationer med AWS Lambda

Viktiga lärdomar

  • Samtidighet hjälper dig förstå skalning.
  • Uppskattning: rps * duration.
  • Reserverad begränsar last; bevaka strypningar.
  • Provisionerad minskar kallstartslatens.

Viktiga lärdomar om samtidighet

Serverlösa applikationer med AWS Lambda

Nu kör vi en övning!

Serverlösa applikationer med AWS Lambda

Preparing Video For Download...