En el subcapítol anterior vam veure arquitectures event-driven on un procés es reparteix en molts passos independents. Però això crea un problema delicat: què passa si un procés té diversos passos i un d’ells falla a mig fer? Per exemple, en una comanda es cobra el pagament però després falla la reserva d’estoc. Quedaria un client cobrat sense producte: un estat inconsistent. El patró Saga és la solució per coordinar processos de diversos passos que poden fallar, mantenint-ho tot coherent. El vam esmentar breument al subcapítol 15.4; aquí el veiem a fons.
El problema: transaccions repartides entre serveis
En un sistema d’un sol bloc amb una base de dades, hi ha un mecanisme clàssic per a això: les transaccions. Una transacció diu «o es fan tots els passos, o no se’n fa cap»; si alguna cosa falla a mig fer, tot es desfà automàticament (rollback) i es queda com al principi. És el principi de «tot o res».
Però en una arquitectura de microserveis (Capítol 17) o serverless (Capítol 28), cada pas el fa un servei diferent, amb la seva pròpia base de dades. No hi ha una transacció única que els abasti a tots. Si el pas 3 de 5 falla, els passos 1 i 2 ja s’han executat en altres serveis i no es desfan sols:
Procés de comanda (cada pas en un servei diferent):
Pas 1: cobrar pagament ✓ fet
Pas 2: reservar estoc ✓ fet
Pas 3: assignar enviament ✗ FALLA
Pas 4: notificar (no s’hi arriba)
→ problema: el pagament ja s’ha cobrat i l’estoc ja s’ha reservat,
però la comanda no es pot completar. Estat inconsistent!Necessites una manera de mantenir la consistència quan una operació es reparteix entre diversos serveis i alguna cosa falla a mig fer. Això és la Saga.
Què és el patró Saga
El patró Saga gestiona una operació de diversos passos repartits entre serveis, de manera que, si un pas falla, els passos anteriors es desfan mitjançant accions compensatòries (operacions que cancel·len el que ja s’ha fet). En comptes d’un «rollback automàtic» (que no existeix entre serveis), defineixes com desfer cada pas, i la Saga les executa en ordre invers si alguna cosa falla.
Saga de la comanda:
Pas 1: cobrar pagament → compensació: reemborsar pagament
Pas 2: reservar estoc → compensació: alliberar estoc
Pas 3: assignar enviament ✗ FALLA
→ la Saga executa les compensacions dels passos ja fets, en ordre invers:
alliberar estoc (desfà pas 2)
reemborsar pagament (desfà pas 1)
→ el sistema torna a un estat consistent (com si no hagués passat res)Analogia: una Saga és com reservar unes vacances per parts (vol, hotel i cotxe de lloguer, cadascun en una web diferent). Reserves el vol ✓, reserves l’hotel ✓... i quan vas a llogar el cotxe, no hi ha disponibilitat ✗. Com que no pots anar-hi sense cotxe, has de cancel·lar el que havies fet abans: cancel·les l’hotel (i et tornen els diners) i cancel·les el vol. Cada cancel·lació és una acció compensatòria que desfà una reserva. Al final, estàs com al principi, sense reserves a mitges. La Saga automatitza exactament aquesta lògica de «si alguna cosa falla, desfaig el que havia fet abans pas a pas».
La idea clau: compensar en comptes de desfer màgicament
La diferència essencial amb una transacció tradicional: en una Saga no hi ha un rollback automàtic. En el seu lloc, tu defineixes explícitament com desfer cada pas (la seva acció compensatòria), i la Saga les executa quan cal. Això requereix pensar, per a cada pas, «com ho cancel·lo si després alguna cosa falla?».
Transacció tradicional: rollback AUTOMÀTIC (la base de dades ho fa) Saga: compensacions que TU defineixes (desfer pas a pas)
Per això, en dissenyar una Saga, per a cada acció penses també en la seva acció contrària: cobrar ↔ reemborsar, reservar ↔ alliberar, crear ↔ esborrar.
Com s’implementa una Saga a AWS
Hi ha dues formes habituals de coordinar una Saga, connectades amb el que ja saps:
- Per coreografia (amb esdeveniments): cada servei reacciona a esdeveniments (estil event-driven del subcapítol 28.1) i, si alguna cosa falla, emet un esdeveniment de fallada que dispara les compensacions. No hi ha un «director»; els serveis es coordinen entre si per esdeveniments.
- Per orquestració (amb un coordinador): un component central dirigeix els passos i, si un falla, ordena les compensacions. A AWS, l’eina ideal per a això és Step Functions, que veurem al següent subcapítol (28.3): permet definir el flux de passos i què fer si cada un falla, de manera visual i controlada.
Quan utilitzar el patró Saga
- Quan tens un procés de diversos passos repartit entre diversos serveis (microserveis, serverless) i necessites que sigui consistent encara que alguna cosa falli a mig fer.
- Processos de negoci crítics com comandes, pagaments, reserves, on deixar alguna cosa «a mitges» seria un problema greu.
⚠️ Si la teva operació cap en un sol servei amb una base de dades, fes servir una transacció normal (és més simple). La Saga és per quan l’operació travessa diversos serveis i no hi ha transacció comuna possible.
Exemple del món real: una plataforma de viatges processa la reserva d’un paquet complet: vol, hotel i trasllat, cadascun gestionat per un servei diferent (a vegades de proveïdors externs). Implementen una Saga: reserven el vol, després l’hotel, després el trasllat. Si en l’últim pas el trasllat no està disponible, la Saga executa les compensacions: cancel·la l’hotel i cancel·la el vol automàticament, tornant el client a un estat net (sense reserves parcials ni cobraments indeguts). El client rep un «no ha estat possible completar la reserva» en comptes de quedar-se amb un vol i un hotel però sense manera d’arribar-hi. La Saga garanteix que el procés és tot o res, encara que per dins siguin molts serveis independents.
El que has de recordar
- En microserveis/serverless, una operació de diversos passos es reparteix entre diversos serveis sense una transacció comuna; si un pas falla a mig fer, els anteriors ja s’han executat i quedaria un estat inconsistent.
- El patró Saga gestiona aquests processos de manera que, si un pas falla, els anteriors es desfan mitjançant accions compensatòries (operacions que cancel·len el que ja s’ha fet), tornant a un estat consistent. Com cancel·lar per parts una reserva de vacances si alguna cosa no quadra.
- La clau: no hi ha rollback automàtic com en una base de dades; tu defineixes com desfer cada pas (cobrar↔reemborsar, reservar↔alliberar).
- S’implementa per coreografia (esdeveniments, estil 28.1) o per orquestració (un coordinador com Step Functions, subcap. 28.3).
- Fes-lo servir per a processos crítics de diversos serveis (comandes, pagaments, reserves). ⚠️ Si tot cap en un servei amb una base de dades, fes servir una transacció normal (més simple).
Al següent subcapítol veurem l’eina d’AWS ideal per orquestrar aquests fluxos de diversos passos de manera visual i controlada: Step Functions.
Cloud, AWS & Terraform — De zero a expert
Capítol 1 · Què és el cloud computing
- 1.1 El model client-servidor tradicional
- 1.2 Problemes que venia a resoldre el núvol
- 1.3 On-premise vs cloud vs híbrid
- 1.4 Els tres models de servei: IaaS, PaaS, SaaS
- 1.5 Els cinc pilars del cloud (segons NIST)
- 1.6 Avantatges reals: elasticitat, pagament per ús, disponibilitat global
Capítol 2 · El mercat cloud i els grans proveïdors
- 2.1 AWS, Azure i GCP: diferències i quotes de mercat
- 2.2 Per què aprendre AWS primer
- 2.3 Conceptes que són universals entre proveïdors
Capítol 3 · Regions, zones de disponibilitat i edge
- 3.1 Què és una regió AWS i com triar-la
- 3.2 Availability Zones: alta disponibilitat des del disseny
- 3.3 Edge locations i CloudFront
- 3.4 Latència, resiliència i sobirania de dades
Capítol 4 · Càlcul: EC2
- 4.1 Instàncies: tipus, famílies i quan triar cadascuna
- 4.2 AMIs, key pairs i Security Groups
- 4.3 Cicle de vida d'una instància
- 4.4 Elastic IPs i Placement Groups
- 4.5 Savings Plans vs Reserved vs On-Demand vs Spot
Capítol 5 · Emmagatzematge: S3
- 5.1 Buckets, objectes i claus
- 5.2 Classes d'emmagatzematge (Standard, IA, Glacier…)
- 5.3 Versionat i cicle de vida d'objectes
- 5.4 Polítiques de bucket i ACLs
- 5.5 Hosting de llocs web estàtics
Capítol 6 · Xarxes: VPC
- 6.1 Què és una VPC i per què la necessites
- 6.2 Subxarxes públiques i privades
- 6.3 Internet Gateway i NAT Gateway
- 6.4 Route Tables i Network ACLs
- 6.5 VPC Peering i endpoints
Capítol 7 · Identitat i accés: IAM
- 7.1 Usuaris, grups, rols i polítiques
- 7.2 El principi de mínim privilegi
- 7.3 Polítiques basades en identitat vs en recurs
- 7.4 MFA i credencials temporals (STS)
- 7.5 Bones pràctiques de seguretat IAM
Capítol 8 · Bases de dades gestionades
- 8.1 RDS: motors, Multi-AZ i rèpliques de lectura
- 8.2 Aurora i els seus avantatges sobre RDS vanilla
- 8.3 DynamoDB: model clau-valor / documents
- 8.4 ElastiCache per a memòria cau en memòria
- 8.5 Quan utilitzar cada tipus de base de dades
Capítol 9 · Per què Infraestructura com a Codi
- 9.1 Problemes del provisionament manual
- 9.2 IaC declaratiu vs imperatiu
- 9.3 Terraform vs CloudFormation vs Pulumi vs CDK
- 9.4 El cicle plan → apply → destroy
Capítol 10 · HCL: el llenguatge de Terraform
- 10.1 Blocs resource, variable, output, locals
- 10.2 Tipus de dades: string, number, bool, list, map, object
- 10.3 Expressions, referències i funcions built-in
- 10.4 Condicionals i bucles (count, for_each, for)
Capítol 11 · Providers i estat
- 11.1 Com funciona el provider d'AWS
- 11.2 El fitxer terraform.tfstate i la seva importància
- 11.3 State local vs state remot (S3 + DynamoDB)
- 11.4 Comandes essencials: init, plan, apply, destroy, fmt, validate
Capítol 12 · La teva primera infraestructura real amb Terraform
- 12.1 Crear una VPC amb subxarxes des de zero
- 12.2 Posar en marxa una instància EC2 pública
- 12.3 Associar un Security Group i una Elastic IP
- 12.4 Outputs i referències entre recursos
- 12.5 Flux de treball en equip: PR review de plans
Capítol 13 · Balanceig de càrrega i autoescalat
- 13.1 Application Load Balancer vs Network Load Balancer
- 13.2 Target Groups, listeners i regles
- 13.3 Auto Scaling Groups: polítiques i mètriques
- 13.4 Warm pools i lifecycle hooks
Capítol 14 · Serverless amb Lambda
- 14.1 El model d'execució de Lambda
- 14.2 Triggers: API Gateway, S3, DynamoDB Streams, SQS
- 14.3 Gestió de dependències i capes (Layers)
- 14.4 Cold starts i estratègies per reduir-los
- 14.5 Límits i antipatrones
Capítol 15 · Missatgeria i esdeveniments
- 15.1 SQS: cues estàndard vs FIFO, DLQ
- 15.2 SNS: topics, subscripcions, fan-out
- 15.3 EventBridge: event buses i regles
- 15.4 Patrons: pub/sub, desacoblament, saga
Capítol 16 · Lliurament de contingut i DNS
- 16.1 Route 53: tipus de registres i routing policies
- 16.2 CloudFront: distribucions, memòries cau i origins
- 16.3 ACM: certificats SSL/TLS gratuïts
- 16.4 WAF integrat amb CloudFront
Capítol 17 · Contenidors a AWS
- 17.1 Docker: repàs exprés de conceptes clau
- 17.2 ECR: registre privat d'imatges
- 17.3 ECS: task definitions, services, Fargate vs EC2
- 17.4 EKS: quan Kubernetes i quan no
Capítol 18 · Mòduls: reutilització i composició
- 18.1 Anatomia d'un mòdul Terraform
- 18.2 Variables d'entrada, outputs i dependències
- 18.3 Mòduls locals vs mòduls del Terraform Registry
- 18.4 Versionat de mòduls amb Git tags
- 18.5 Disseny de mòduls genèrics vs específics de domini
Capítol 19 · Workspaces i gestió d'entorns
- 19.1 Workspaces de Terraform: casos d'ús i limitacions
- 19.2 Estratègia de directoris per entorn (dev/stg/prod)
- 19.3 Terragrunt: DRY per a configuracions d'entorn
- 19.4 Variables d'entorn i fitxers .tfvars
Capítol 20 · Backends remots i locking
- 20.1 Configurar S3 + DynamoDB com a backend
- 20.2 State locking: evitar corrupció en equip
- 20.3 Migració d'estat entre backends
- 20.4 terraform import: portar recursos existents a l'estat
Capítol 21 · Testing d'infraestructura
- 21.1 Terraform validate i fmt en CI
- 21.2 Checkov i tfsec: anàlisi de seguretat estàtica
- 21.3 Terratest: tests d'integració en Go
- 21.4 Contract testing entre mòduls
Capítol 22 · Terraform en CI/CD
- 22.1 Pipeline bàsic: lint → plan → apply a GitHub Actions
- 22.2 Atlantis: GitOps per a Terraform
- 22.3 Terraform Cloud / HCP Terraform
- 22.4 Drift detection i reconciliació automàtica
Capítol 23 · Seguretat en profunditat
- 23.1 AWS Organizations i Service Control Policies
- 23.2 AWS Config: compliment continu
- 23.3 GuardDuty: detecció d'amenaces
- 23.4 Security Hub: visió centralitzada
- 23.5 KMS: gestió de claus i rotació
- 23.6 Secrets Manager vs Parameter Store
Capítol 24 · Observabilitat: logs, mètriques i traces
- 24.1 CloudWatch Logs, mètriques i alarmes
- 24.2 CloudWatch Dashboards i Contributor Insights
- 24.3 X-Ray: traçat distribuït
- 24.4 OpenTelemetry a AWS
- 24.5 Managed Grafana i Managed Prometheus
Capítol 25 · Optimització de costos
- 25.1 AWS Cost Explorer i pressupostos amb alertes
- 25.2 Trusted Advisor i Compute Optimizer
- 25.3 Rightsizing: com detectar sobredimensionament
- 25.4 Savings Plans vs Reserved Instances: decisió estratègica
- 25.5 FinOps: cultura i processos per controlar la despesa
Capítol 26 · Alta disponibilitat i disaster recovery
- 26.1 RTO i RPO: definir els objectius
- 26.2 Estratègies: backup/restore, pilot light, warm standby, multi-site
- 26.3 Route 53 health checks i failover automàtic
- 26.4 AWS Backup: política centralitzada de còpies
Capítol 27 · Well-Architected Framework d'AWS
- 27.1 Els sis pilars: excel·lència operacional, seguretat, fiabilitat, eficiència de rendiment, optimització de costos, sostenibilitat
- 27.2 Well-Architected Tool: revisions formals
- 27.3 Com aplicar el framework en decisions de disseny
Capítol 28 · Arquitectures serverless a escala
- 28.1 Event-driven architecture amb Lambda + EventBridge
- 28.2 Saga pattern per a transaccions distribuïdes
- 28.3 Step Functions: orquestració de workflows complexos
- 28.4 Lambda@Edge i CloudFront Functions
Capítol 29 · Plataformes de dades a AWS
- 29.1 Data Lake amb S3, Glue i Athena
- 29.2 Kinesis Data Streams i Firehose per a streaming
- 29.3 Redshift: data warehousing a escala
- 29.4 Lake Formation: govern del dada
Capítol 30 · Multi-compte i landing zones
- 30.1 Per què separar workloads en comptes diferents
- 30.2 AWS Control Tower i Account Factory
- 30.3 Gestió centralitzada de logs i seguretat
- 30.4 Terraform a escala multi-compte amb mòduls compartits
Capítol 31 · Platform Engineering i Internal Developer Platform
- 31.1 Golden paths i abstraccions sobre Terraform
- 31.2 Service Catalog d'AWS
- 31.3 Backstage com a portal de desenvolupadors
- 31.4 Mòduls Terraform com a producte intern
Capítol 32 · Certificacions AWS rellevants
- 32.1 Cloud Practitioner: val la pena?
- 32.2 Solutions Architect Associate → Professional
- 32.3 DevOps Engineer Professional
- 32.4 Specialty: Security, Database, Networking
- 32.5 HashiCorp Terraform Associate
Capítol 33 · Projectes per consolidar el que s'ha après
- 33.1 Projecte 1: blog serverless (S3 + CloudFront + Lambda + DynamoDB)
- 33.2 Projecte 2: API REST amb ECS Fargate + RDS + ALB
- 33.3 Projecte 3: plataforma de dades amb Glue + Athena + Redshift
- 33.4 Projecte 4: landing zone multi-compte amb Terraform i Control Tower
