Seguim a la Part VII amb el Capítol 28: Arquitectures serverless a escala, on veiem com combinar els serveis serverless que ja coneixes (Lambda, EventBridge, SQS...) en arquitectures reals i potents. Comencem pel patró més fonamental del món serverless modern: les arquitectures dirigides per esdeveniments (event-driven), construïdes amb Lambda i EventBridge. És una manera de dissenyar sistemes que escalen de forma natural i es mantenen flexibles.

Repàs: les peces que ja coneixem

Abans de combinar-les, recordem les peces (les vam veure a la Part IV):

  • Lambda (Capítol 14): funcions que s’executen quan alguna cosa les dispara, sense gestionar servidors, i escalen soles.
  • EventBridge (subcapítol 15.3): el «bus d’esdeveniments» que rep esdeveniments i els enruta a qui correspongui segons regles.
  • SQS, SNS (Capítol 15): cues i notificacions per desacoblar components.

En aquest subcapítol les ajuntem per construir un estil d’arquitectura complet.

Què és una arquitectura event-driven

Una arquitectura dirigida per esdeveniments (event-driven) és aquella on els components es comuniquen mitjançant esdeveniments: «alguna cosa ha passat». En comptes que un component cridi directament a un altre i esperi la seva resposta, emet un esdeveniment anunciant el que ha passat, i altres components reaccionen a aquest esdeveniment si els interessa.

   En comptes de:  A crida a B → B crida a C  (tots acoblats, esperant)

   Event-driven:
      A emet esdeveniment "comanda creada"
                │
                ▼
         EventBridge (ho reparteix)
        ┌───────┼───────┐
        ▼       ▼       ▼
   reacciona  reacciona reacciona
   servei B servei C servei D
   (cadascun fa el seu, en paral·lel, sense que A ho sàpiga)

Analogia: una arquitectura event-driven funciona com anuncis per megafonia en un aeroport. Quan «s’anuncia» que un vol està llest per embarcar (un esdeveniment), no es crida cada persona una per una: es fa un anunci, i tots els interessats (els passatgers d’aquell vol) reaccionen dirigint-se a la porta. Qui no va en aquell vol, ho ignora. Qui anuncia no necessita saber qui està escoltant ni quants són. Així, el sistema és flexible: pots afegir més «oients» sense canviar qui emet.

Com encaixen Lambda i EventBridge

Al món serverless d’AWS, aquest patró es construeix típicament així:

  • EventBridge és el bus per on circulen els esdeveniments: rep els esdeveniments que emeten uns components i els enruta (amb regles, subcapítol 15.3) als que han de reaccionar.
  • Lambda són les funcions que reaccionen a aquests esdeveniments: quan arriba un esdeveniment que els correspon, EventBridge les dispara i fan la seva feina.
Component emet esdeveniment  →  EventBridge (enruta per regles)  →  dispara Lambdas
   "usuari registrat"               ├─► Lambda "enviar email de benvinguda"
                                    ├─► Lambda "crear perfil"
                                    └─► Lambda "registrar en analítica"

Cada Lambda fa una cosa concreta i s’executa només quan arriba el seu esdeveniment, escalant automàticament segons quants esdeveniments arribin.

Els grans avantatges d’aquest patró

  1. Desacoblament (components independents)

Recorda el desacoblament que vam veure amb la missatgeria (subcapítol 15.4). Qui emet l’esdeveniment no necessita saber qui el processarà ni quants ho faran. Això significa que pots afegir noves reaccions sense tocar el component que emet. Vols que, a més, s’enviï una notificació quan es crea una comanda? Afegixes una Lambda nova que escolti aquest esdeveniment, sense modificar res de l’existent.

  1. Escalabilitat natural

Com que cada reacció és una Lambda independent que escala sola (Capítol 14), el sistema escala de forma natural amb la càrrega. Si arriben 10 esdeveniments o 10.000, cada Lambda es multiplica segons calgui, en paral·lel. No cal planificar capacitat.

  1. Flexibilitat i evolució

És molt fàcil fer evolucionar el sistema: afegir, treure o canviar reaccions a esdeveniments sense reescriure-ho tot. L’arquitectura creix peça a peça, cosa que la fa ideal per a sistemes que evolucionen ràpid.

  1. Resiliència

Si una Lambda que reacciona falla, no tomba la resta: les altres continuen processant els seus esdeveniments. I combinant amb cues (SQS, subcapítol 15.1), els esdeveniments no es perden encara que alguna cosa falli temporalment.

Una tensió a tenir en compte

⚠️ No tot són avantatges: les arquitectures event-driven són més flexibles i escalables, però també més difícils de seguir i depurar (un esdeveniment desencadena reaccions en cadena per tot el sistema). Aquí és on el traçat distribuït (X-Ray, subcapítol 24.3) es torna imprescindible, per seguir el rastre d’un esdeveniment a través de totes les Lambdas que dispara. Recorda també l’equilibri entre pilars (subcapítol 27.1): guanyes en escalabilitat i flexibilitat, a canvi d’una mica de complexitat operativa.

Exemple del món real: una botiga online processa una comanda amb arquitectura event-driven. Quan un client compra, s’emet l’esdeveniment «comanda creada» a EventBridge. Aquest únic esdeveniment dispara, en paral·lel, diverses Lambdas independents: una cobra el pagament, una altra reserva l’estoc, una altra envia el correu de confirmació, una altra notifica al magatzem i una altra registra la venda en analítica. Cadascuna fa la seva part sense saber de les altres. Mesos després, l’equip vol afegir un programa de punts de fidelitat: simplement creen una nova Lambda que escolta l’esdeveniment «comanda creada» i suma punts, sense tocar res del flux existent. El sistema escala sol a les rebaixes (milers de comandes) i és fàcil d’ampliar. Aquesta flexibilitat és l’essència de l’event-driven.

El que has de recordar

  • En una arquitectura event-driven (dirigida per esdeveniments), els components es comuniquen mitjançant esdeveniments («alguna cosa ha passat»): un emet un esdeveniment i altres reaccionen, en comptes de cridar-se directament. Com els anuncis per megafonia d’un aeroport.
  • Es construeix amb EventBridge com a bus que enruta els esdeveniments (per regles) i Lambdas com a funcions que reaccionen, cadascuna fent una cosa concreta i escalant sola.
  • Avantatges: desacoblament (afegeixes reaccions sense tocar l’existent), escalabilitat natural (cada Lambda escala sola), flexibilitat per evolucionar peça a peça, i resiliència (una fallada no tomba la resta).
  • ⚠️ A canvi, són més difícils de seguir i depurar (reaccions en cadena), per això el traçat distribuït (X-Ray) es torna essencial. És l’equilibri entre flexibilitat i complexitat.

Al següent subcapítol veurem com coordinar processos de diversos passos que poden fallar, mantenint la consistència, amb el patró Saga.

Cloud, AWS & Terraform — De zero a expert

Capítol 1 · Què és el cloud computing

Capítol 2 · El mercat cloud i els grans proveïdors

Capítol 3 · Regions, zones de disponibilitat i edge

Capítol 4 · Càlcul: EC2

Capítol 5 · Emmagatzematge: S3

Capítol 6 · Xarxes: VPC

Capítol 7 · Identitat i accés: IAM

Capítol 8 · Bases de dades gestionades

Capítol 9 · Per què Infraestructura com a Codi

Capítol 10 · HCL: el llenguatge de Terraform

Capítol 11 · Providers i estat

Capítol 12 · La teva primera infraestructura real amb Terraform

Capítol 13 · Balanceig de càrrega i autoescalat

Capítol 14 · Serverless amb Lambda

Capítol 15 · Missatgeria i esdeveniments

Capítol 16 · Lliurament de contingut i DNS

Capítol 17 · Contenidors a AWS

Capítol 18 · Mòduls: reutilització i composició

Capítol 19 · Workspaces i gestió d'entorns

Capítol 20 · Backends remots i locking

Capítol 21 · Testing d'infraestructura

Capítol 22 · Terraform en CI/CD

Capítol 23 · Seguretat en profunditat

Capítol 24 · Observabilitat: logs, mètriques i traces

Capítol 25 · Optimització de costos

Capítol 26 · Alta disponibilitat i disaster recovery

Capítol 27 · Well-Architected Framework d'AWS

Capítol 28 · Arquitectures serverless a escala

Capítol 29 · Plataformes de dades a AWS

Capítol 30 · Multi-compte i landing zones

Capítol 31 · Platform Engineering i Internal Developer Platform

Capítol 32 · Certificacions AWS rellevants

Capítol 33 · Projectes per consolidar el que s'ha après

Capítol 34 · Recursos i comunitat

© Copyright 2024. Tots els drets reservats