Elemente esențiale ale arhitecturii bazate pe evenimente

Aplicații serverless cu AWS Lambda

Claudio Canales

Senior DevOps Engineer

Recapitulare: modelul mental Lambda

  • Sursă de eveniment: ce declanșează Lambda.
  • Payload de eveniment: JSON care descrie ce s-a întâmplat.
  • Handler: codul care îl procesează.
  • Rezultat: răspuns sau efect secundar.
  • Jurnale: unde depanezi problemele.

Fluxul de execuție Lambda

Aplicații serverless cu AWS Lambda

Evenimentele sunt mesaje

  • Un eveniment descrie ceva ce s-a întâmplat.
  • Este de obicei un mesaj JSON cu metadate.
  • Handler-ul tău extrage câmpurile și acționează.

Analogia soneriei pentru evenimente

Aplicații serverless cu AWS Lambda

Surse comune de evenimente în AWS

  • Amazon S3 declanșează evenimente la încărcări.
  • Amazon SQS este o coadă gestionată care livrează mesaje.
  • DynamoDB Streams produce un jurnal al modificărilor.
  • Fiecare generează un payload JSON diferit.

Surse de evenimente: S3 vs SQS vs Streams

Aplicații serverless cu AWS Lambda

Invocare sincronă vs asincronă

  • Sincron: apelantul așteaptă un rezultat.
  • Asincron: apelantul primește o confirmare; evenimentul este procesat ulterior.

Analogie sincron vs asincron

Aplicații serverless cu AWS Lambda

Elemente esențiale ale arhitecturii bazate pe evenimente

  • Evenimentele sosesc ca JSON de la serviciile AWS.
  • Modul de invocare influențează unde apar erorile.
  • Payload-urile variază, deci parsează și validează defensiv.
  • Anticipează reîncercările și duplicatele.

Pipeline cu concluzii cheie

Aplicații serverless cu AWS Lambda

Payload-urile sunt contracte

  • Payload-urile sunt contracte: expeditorul decide structura.
  • Handler-ul tău trebuie să știe unde să găsească câmpurile.
  • Extrage ce ai nevoie, validează, procesează și jurnalizează.

Contractul payload și fluxul de parsare

Aplicații serverless cu AWS Lambda

Exemplu de payload: eveniment SQS

Payload eveniment SQS adnotat

  • Records reprezintă lotul.
  • body este un șir de caractere.
  • messageId te ajută să urmărești și să deduplicezi.
Aplicații serverless cu AWS Lambda

Demonstrație: iterare prin Records

def lambda_handler(event, context):
    records = event.get("Records", [])
    for record in records:
        body = record.get("body", "")
        print("BODY:", body)
    return {"statusCode": 200}
  • Citește Records cu o valoare implicită sigură.
  • Parcurge fiecare înregistrare și extrage corpul.
  • Jurnalizează ce contează, apoi returnează.

Parcurgerea Records

Aplicații serverless cu AWS Lambda

Demonstrație: parsare sigură a corpului JSON

import json
def lambda_handler(event, context):
    records = event.get("Records") or [{}]
    body = records[0].get("body", "{}")
    payload = json.loads(body)
    oid = payload.get("order_id")
    return json.dumps({"order_id": oid})
  • body este un șir; parsează-l cu json.loads.
  • Citește cu o valoare implicită sigură, precum "{}".
  • Extrage order_id și returnează JSON cu json.dumps.

Fluxul de parsare a corpului

Aplicații serverless cu AWS Lambda

Listă de verificare pentru parsare defensivă

Listă de verificare pentru parsare defensivă

  • Jurnalizează structura evenimentului când explorezi o sursă nouă.
  • Folosește .get() cu valori implicite pentru câmpurile opționale.
  • Validează câmpurile obligatorii și returnează erori clare.
  • Tratează loturile goale și cheile lipsă.
Aplicații serverless cu AWS Lambda

Proiectare pentru reîncercări și duplicate

  • Multe surse de evenimente folosesc livrarea cel puțin o dată.
  • Duplicatele pot apărea.
  • Proiectează handler-e idempotente, astfel încât procesarea de două ori să rămână corectă.

Reîncercări și duplicate

Aplicații serverless cu AWS Lambda

Idempotența în practică

  • Alege o cheie unică, precum messageId sau order_id.
  • Stochează fiecare cheie procesată în DynamoDB.
  • Verifică dacă cheia există; dacă da, ignoră procesarea.

Fluxul de decizie pentru idempotență

Aplicații serverless cu AWS Lambda

Concluzii cheie

  • Evenimentele sosesc ca JSON de la serviciile AWS.
  • Modul de invocare influențează unde apar erorile.
  • Payload-urile variază, deci parsează și validează defensiv.
  • Anticipează reîncercările și duplicatele.

Pipeline cu concluzii cheie

Aplicații serverless cu AWS Lambda

Hai să exersăm!

Aplicații serverless cu AWS Lambda

Preparing Video For Download...