Hantera händelsers livscykel: omförsök, DLQ:er och destinationer

Serverlösa applikationer med AWS Lambda

Claudio Canales

Senior DevOps Engineer

Händelsers livscykel i korthet

  • Lambda anropar din hanterare.
  • Hanteraren lyckas eller misslyckas.
  • Vid fel avgör omförsök och routing vad som händer härnäst.

Flöde för händelsers livscykel

Serverlösa applikationer med AWS Lambda

Två sätt som fel visar sig

Synkront

  • Anroparen väntar och får ett felsvar.

Asynkront

  • Anroparen bekräftas först.
  • Lambda gör omförsök i bakgrunden.
  • Felhantering beror på anropsläget.

Felvägar för synkrona och asynkrona anrop

Serverlösa applikationer med AWS Lambda

Omförsök är normalt

  • Omförsök är ofta en funktion, inte en bugg.
  • Ett tillfälligt fel kan lyckas vid nästa försök.
  • Omförsök kan ge dubbel bearbetning; din hanterare måste hantera det.

Analogi för omförsök

Serverlösa applikationer med AWS Lambda

Omförsök över tid

  • Omförsök kan lösa tillfälliga problem.
  • Men samma händelse kan köras flera gånger.
  • Idempotens och tydlig felhantering är avgörande.

Tidslinje för omförsök

Serverlösa applikationer med AWS Lambda

När omförsök är riskabla

  • Omförsök är riskabla när arbetet inte är idempotent.
  • Exempel: debitera ett kort, skicka ett e-postmeddelande.
  • Använd idempotensnycklar och säkra uppdateringar så att dubbletter inte orsakar skada.

Mål med idempotens

Serverlösa applikationer med AWS Lambda

DLQ (Dead-Letter Queue)

  • En säker plats för händelser som fortfarande misslyckas efter omförsök.
  • Ofta en SQS-kö, AWS hanterade meddelandekö.
  • Granska nyttolasten, åtgärda problemet och kör om.

DLQ analogi

Serverlösa applikationer med AWS Lambda

DLQ kontra destinationer

DLQ analogi

  • Samlar in misslyckade händelser efter omförsök.
  • Används för utredning.

Routingdiagram för destinationer

  • Dirigerar utfall vid lyckat eller misslyckat anrop.
  • Skapa tydliga lyckade och misslyckade flöden.
Serverlösa applikationer med AWS Lambda

Destinationer: lyckade och misslyckade flöden

  • Vid lyckat anrop skickas resultatet till onSuccess.
  • Vid fel skickas detaljer till onFailure.
  • Det gör nästa steg tydligt.

Routingdiagram för destinationer

Serverlösa applikationer med AWS Lambda

Justera omförsökspolicyn

  • Ställ in hur många gånger Lambda gör omförsök.
  • Begränsa händelsers ålder för att undvika inaktuell data.
  • Fler omförsök ökar tillförlitligheten men ger fler dubbletter och fördröjning.

Kontroller för omförsökspolicy

Serverlösa applikationer med AWS Lambda

Maximal händelseålder: ett utgångsdatum

  • Maximal händelseålder är en utgångspolicy.
  • Om en händelse är för gammal kan det vara meningslöst att bearbeta den.
  • En avvägning: färre sena händelser, snabbare beteende.

Analogi för händelseålders utgång

Serverlösa applikationer med AWS Lambda

Observerbarhet: var du ska titta

  • Loggar svarar på vad som hände.
  • Mätvärden svarar på hur ofta det händer.
  • Larm hjälper dig att snabbt fånga upp toppar.

Loggar kontra mätvärden

Serverlösa applikationer med AWS Lambda

Vad du gör med misslyckade händelser

  • Granska nyttolasten och felet.
  • Åtgärda grundorsaken.
  • Kör om händelsen och övervaka sedan fel och genomströmning.

Återställningscykel för misslyckade händelser

Serverlösa applikationer med AWS Lambda

Viktiga lärdomar

  • Tillförlitlighet bygger på omförsök, routing och observerbarhet.
  • Synkrona fel når anroparen.
  • Asynkrona fel kräver omförsök plus DLQ:er eller destinationer.
  • Det håller felen synliga.

Diagram över tillförlitlighetsformel

Serverlösa applikationer med AWS Lambda

Nu kör vi en övning!

Serverlösa applikationer med AWS Lambda

Preparing Video For Download...