Saga pattern

Gestire le transazioni tra microservizi diversi

About me

  • Scrivo (e leggo) codice da una quindicina d'anni
  • Appassionato di FLOSS
  • Allenatore di calcio giovanile
  • Former:
    • Developer Advocate @ Google
    • Prof
    • Conference speaker
  • Current:
    • Lead developer @ Brandon Group
    • Maintainer di MockK

"a software design pattern is a general, reusable solution to a commonly occurring problem within a given context"

(Wikipedia)

Il problema

Il problema (cont.)

  • "Brandon group" in realtà è un set di (micro) servizi diversi
  • Lo stato di un ordine dipende da una serie di transazioni compiute tra microservizi differenti ed entità esterne differenti
  • Le transazioni possono non essere istantanee nè sincrone

La soluzione facile

Tuttavia...

Introducing, i concetti fondamentali:

Saga

  • Una sequenza di passi, ognuno dei quali è una transazione locale di un microservizio

  • Il cavaliere d'oro che presiede la casa dei Gemelli

Problema

Compensating transaction

Permette di fare rollback dei singoli step del processo

Semantic lock

Permette di assicurare che non ci siano transizioni impreviste usando una macchina a stati

Un componente fondamentale

(o ZeroMQ, Kafka, Amazon MQ o SQS, Google Cloud Pub/Sub, ActiveMQ...)

Due versioni possibili

Choreography

  • Ogni microservizio può emettere un evento
  • Ogni microservizio può fare subscribe a un evento

Orchestration

  • Un componente dell'architettura, l'orchestrator, invia comandi agli altri
  • Ogni microservizio riceve comandi dall'orchestrator e gli manda risposte

A confronto

Choreography Orchestration
Loose coupling Tight coupling
Un solo formato per gli eventi Diversi formati per gli eventi
Architettura decentralizzata Orchestrator possibile collo di bottiglia
Processo di business sparso su più servizi Processo di business in mano quasi solo all'orchestrator

Come lo facciamo noi (semplificato)

I nostri mal di testa

  • Se l'orchestrator non riceve risposta?
  • Se un oggetto è in uno stato inconsistente?

Bonus: Il tuo cloud provider supporta l'orchestration!

  • AWS Step Functions
  • Google Workflows
  • Azure logic apps

Domande?

Saga Pattern

By Mattia Tommasone

Saga Pattern

  • 182