En el subcapítol anterior vam veure SQS, on un missatge va a un consumidor que el processa. Però a vegades vols el contrari: que un mateix missatge arribi a molts destinataris alhora. Per això existeix SNS (Simple Notification Service), el servei de notificacions d’AWS. És el complement perfecte de les cues.

El problema: avisar diversos serveis alhora

Imagina que en una botiga es realitza una comanda, i quan això passa vols que diversos sistemes se n’assabentin al mateix temps:

  • El servei de facturació (per generar la factura).
  • El servei d’inventari (per descomptar l’estoc).
  • El servei d’emails (per avisar el client).
  • El servei d’analítica (per a les estadístiques).

Amb una cua SQS, el missatge aniria a un consumidor. Aquí volem que l’avís «hi ha una nova comanda» arribi a tots alhora. Això és exactament el que fa SNS.

Què és SNS: el model publicador/subscriptor

SNS funciona amb el model publicador/subscriptor (pub/sub):

  • Un publicador envia un missatge a un topic (tema).
  • Tots els subscriptors d’aquell topic reben una còpia del missatge, alhora.
                    ┌─── Topic SNS "nova-comanda" ───┐
  Publicador ─────► │                                 │
 (servei comandes) └──────────────┬──────────────────┘
                    ┌──────────┬────┴─────┬──────────┐
                    ▼          ▼          ▼          ▼
              Facturació  Inventari  Emails   Analítica
              (subscriptor)(subscriptor)(subscript.)(subscriptor)
  • Topic (tema): el «canal» al qual s’envien els missatges (ex. nova-comanda).
  • Subscripció: cada destinatari es subscriu al topic per rebre els seus missatges.

Analogia: SNS és com una llista de difusió o un canal de ràdio. El locutor (publicador) emet un missatge una vegada, i tots els que estan subscrits al canal el reben simultàniament. El locutor no necessita saber quants oients hi ha ni qui són.

SNS vs SQS: la diferència clau

És fonamental no confondre’ls:

SQS (cues) SNS (notificacions)
Model Un missatge → un consumidor el processa Un missatge → tots els subscriptors el reben
Relació Un a un Un a molts
Els missatges Esperen a la cua fins a ser processats S’entreguen al moment als subscriptors
Metàfora Llista de tasques (cada tasca, algú la fa) Llista de difusió (tots reben l’avís)

En resum: SQS reparteix feina (un missatge, un treballador); SNS difon avisos (un missatge, tothom assabentat).

Tipus de subscriptors

Un topic SNS pot tenir molts tipus de subscriptors, cosa que el fa molt versàtil:

  • Una funció Lambda (perquè reaccioni a l’esdeveniment, Capítol 14).
  • Una cua SQS (molt important! ho veurem tot seguit).
  • Un email (SNS envia un correu).
  • Un SMS (un missatge de text a un mòbil).
  • Un endpoint HTTP/HTTPS (avisar un altre sistema via web).

El patró fan-out: SNS + SQS junts

Aquí hi ha la combinació més potent, i una de les arquitectures més utilitzades a AWS: el patró fan-out («abanic»). Consisteix a posar un topic SNS que difon a diverses cues SQS, una per a cada servei.

                    ┌─── Topic SNS "nova-comanda" ───┐
  Publicador ─────► │                                 │
                    └──────────┬──────────┬───────────┘
                               ▼          ▼
                         Cua SQS    Cua SQS
                         facturació  inventari
                               │          │
                               ▼          ▼
                          Consumidor   Consumidor

Per què és tan bo combinar-los? Perquè suma el millor dels dos:

  • SNS difon l’avís a tots els serveis alhora (un a molts).
  • Cada cua SQS dona al seu servei la resiliència i el coixí que vam veure al subcapítol 15.1: si el servei d’inventari cau, els seus missatges esperen a la seva cua sense perdre’s, mentre la resta de serveis continuen funcionant amb normalitat.

Exemple del món real: a la botiga, es publica «nova comanda» al topic SNS. Arriba instantàniament a les cues de facturació, inventari, emails i analítica. El servei d’analítica està en manteniment (caigut), però els seus missatges s’acumulen a la seva cua i els processarà quan torni. Mentrestant, facturació, inventari i emails processen els seus sense problema. Cap comanda es perd i cap servei bloqueja els altres.

Aquest patró fan-out és la base de moltes arquitectures dirigides per esdeveniments (ho veurem al subcapítol 15.4 i al Capítol 28).

El que has de recordar

  • SNS és el servei de notificacions amb model publicador/subscriptor: un missatge enviat a un topic arriba a tots els seus subscriptors alhora (un a molts).
  • Diferència clau amb SQS: SQS reparteix feina (un missatge → un consumidor); SNS difon avisos (un missatge → tots els subscriptors). Com una llista de difusió o un canal de ràdio.
  • Els subscriptors poden ser Lambdas, cues SQS, emails, SMS o endpoints HTTP.
  • El patró fan-out (SNS → diverses cues SQS) combina el millor de tots dos: difusió a tots els serveis + resiliència i coixí de cada cua. És una de les arquitectures més utilitzades.

Al següent subcapítol veurem un servei d’esdeveniments més modern i flexible que amplia aquestes idees: EventBridge.

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