Comencem el capítol de missatgeria i esdeveniments, les peces que connecten els diferents components d’una arquitectura moderna. La primera i més fonamental és SQS (Simple Queue Service): el servei de cues d’AWS. Ja l’hem vist com a trigger de Lambda (subcapítol 14.2); ara l’entendrem a fons.

El problema: connectar serveis sense que depenguin els uns dels altres

Imagina una botiga online. Quan un client fa una comanda, cal: cobrar, actualitzar l’inventari, enviar un correu, avisar el magatzem... Si el servei que rep la comanda hagués de fer tot això de cop i esperar que cada pas acabi, seria lent i fràgil: si el servei de correu està caigut, es perd la comanda sencera?

La solució és desacoblar els serveis amb una cua al mig. El servei de comandes només deixa un «missatge» («processa aquesta comanda») a la cua i segueix amb la seva feina. Altres serveis van traient missatges de la cua i processant-los al seu ritme.

Què és una cua SQS

Una cua és com una llista de tasques pendents compartida. Un servei posa missatges (tasques) per un costat, i un altre servei els treu i els processa per l’altre.

  Productor                Cua SQS                 Consumidor
 (posa missatges)    [msg][msg][msg][msg]      (treu i processa)
       │ ──────────────►                ──────────────► │
  • Productor: qui crea missatges i els posa a la cua (ex. el servei de comandes).
  • Consumidor: qui treu missatges i els processa (ex. una Lambda o un servidor).

Analogia: una cua SQS és com la comanda en un restaurant. El cambrer (productor) apunta les comandes i les penja a la cuina. Els cuiners (consumidors) van agafant les comandes i preparant-les al seu ritme. El cambrer no es queda esperant a la cuina: deixa la comanda i segueix atenent taules. Si arriben moltes comandes de cop, s’acumulen al pinxo i es van fent; no es perd res.

El gran avantatge: desacoblament i resiliència

La cua separa productor i consumidor, cosa que aporta enormes avantatges:

  • Resiliència: si el consumidor cau, els missatges esperen a la cua sense perdre’s. Quan torna, els processa. El productor ni se n’assabenta.
  • Amortiment de pics: si arriba una allau de missatges (Black Friday), la cua els acumula i el consumidor els processa a un ritme sostenible, sense saturar-se.
  • Escalat independent: pots afegir més consumidors per buidar la cua més ràpid, sense tocar el productor.

Aprofundirem en aquest desacoblament al subcapítol 15.4.

Els dos tipus de cues: Estàndard vs FIFO

SQS ofereix dos tipus de cues, i triar bé és important.

Cua estàndard (Standard)

És la cua per defecte. Prioritza el màxim rendiment (processa quantitats enormes de missatges). A canvi, té dues peculiaritats que cal conèixer:

  • No garanteix l’ordre: els missatges poden processar-se en un ordre lleugerament diferent al d’entrada.
  • Lliurament «almenys una vegada»: en rares ocasions, un missatge podria lliurar-se duplicat.

Cua FIFO (First In, First Out)

FIFO vol dir «primer en entrar, primer en sortir». Garanteix dues coses que l’estàndard no:

  • Ordre estricte: els missatges es processen exactament en l’ordre en què han entrat.
  • Sense duplicats: cada missatge es lliura exactament una vegada.

A canvi, té un rendiment més limitat que l’estàndard (tot i que més que suficient per a la majoria de casos).

Quina trio?

Cua Estàndard Cua FIFO
Ordre No garantit Estricte (ordre d’entrada)
Duplicats Possibles (rars) No (exactament una vegada)
Rendiment Altíssim Alt, però limitat
Quan usar-la Quan l’ordre no importa Quan l’ordre o els duplicats són crítics

Exemples per decidir:

  • Estàndard: redimensionar imatges pujades. No importa l’ordre en què es processin, i processar-ne una dues vegades no és greu.
  • FIFO: operacions bancàries d’un compte. L’ordre importa («ingressa 100» abans que «retira 50») i un duplicat seria un desastre (cobrar dues vegades).

Regla pràctica: fes servir estàndard per defecte; fes servir FIFO només quan l’ordre o evitar duplicats sigui realment important.

Dead Letter Queue (DLQ): la cua de missatges problemàtics

Què passa si un missatge no es pot processar? Per exemple, ve amb dades corruptes i la funció falla cada vegada que ho intenta. Sense protecció, aquest missatge es reintentaria una i altra vegada, bloquejant la cua i malgastant recursos (un «missatge enverinat»).

Per això existeix la Dead Letter Queue (DLQ), la «cua de missatges morts». Configures que, després d’un nombre d’intents fallits (per exemple, 3), el missatge problemàtic es mogui automàticament a una cua a part:

  Cua principal
   [msg ✓][msg ✗][msg ✓]
            │
            │ falla 3 vegades
            ▼
  Dead Letter Queue (DLQ)
   [msg ✗]  ← aquí es guarda per revisar-lo després

Així, el missatge problemàtic deixa de bloquejar la cua principal, però no es perd: queda guardat a la DLQ perquè el puguis investigar amb calma.

Analogia: la DLQ és com el calaix de «comandes amb problemes» de la cuina. Si una comanda és il·legible o impossible de preparar, en comptes de bloquejar els cuiners, s’aparta en aquest calaix perquè l’encarregat la revisi després. La cuina segueix funcionant.

El que has de recordar

  • SQS és el servei de cues d’AWS: un productor posa missatges i un consumidor els treu i processa, al seu ritme.
  • La cua desacobla els serveis: aporta resiliència (els missatges esperen si el consumidor cau), amorteix pics i permet escalar consumidors de manera independent.
  • Cua estàndard: màxim rendiment, però sense ordre garantit i amb possibles duplicats. És l’opció per defecte.
  • Cua FIFO: garanteix ordre estricte i sense duplicats, amb rendiment més limitat. Fes-la servir quan l’ordre o els duplicats siguin crítics (ex. operacions bancàries).
  • La Dead Letter Queue (DLQ) recull els missatges que fallen repetidament, evitant que bloquegin la cua sense perdre’ls, per revisar-los després.

Al següent subcapítol veurem el complement de les cues: SNS, el servei de notificacions, que en comptes de «un a un» permet enviar un missatge a molts destinataris alhora.

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