Event-driven architecture: cos'è
Nel campo delle architetture software, quella event-driven è tra le più note, per i suoi diversi vantaggi e per essere un’architettura stateless.
Ma cosa vuol dire, e come funziona?
Cos’è
Un’architettura guidata dagli eventi è un’architettura software e un modello per la progettazione di applicazioni.
Molti progetti di applicazioni moderne sono event-driven, come ad esempio i framework di customer engagement che devono utilizzare i dati dei clienti in tempo reale. Le applicazioni event-driven possono essere create in qualsiasi linguaggio di programmazione, perché l’event-driven è un approccio di programmazione, non un linguaggio. L’architettura event-driven consente un accoppiamento minimo, il che la rende una buona opzione per le moderne architetture applicative distribuite.
Come funziona
L’architettura event-driven è composta da produttori di eventi (spesso chiamati publisher) e consumatori di eventi (chiamati anche subscriber). Un produttore di eventi rileva o cattura un evento e lo riporta come messaggio. Il produttore, trattandosi di una comunicazione disaccoppiata, non è a conoscenza di chi consumerà l’evento e, allo stesso modo, chi lo consumerà non avrà informazioni su chi lo ha prodotto.
Questo non vuol dire che sia impossibile determinare l’origine del messaggio o chi lo consuma: se, per motivi funzionali, fosse necessario, reagire e rispondere al messaggio di un publisher, si può parlare di Message-Driven Communication.
Dopo che un evento è stato rilevato, viene trasmesso dal produttore di eventi ai consumatori attraverso dei canali, dove una piattaforma di elaborazione di questi messaggi li elabora in modo asincrono. I consumatori di eventi devono essere informati quando si è verificato un evento. Possono elaborare l’evento o solo subirne l’impatto.
La piattaforma di elaborazione elabora i messaggi (o gli eventi) in ingresso e li invia ai consumatori in ascolto.
Esempio di architettura event-driven
Apache Kafka è un esempio molto noto di piattaforma di streaming di dati che rappresenta una scelta popolare per l’elaborazione degli eventi e che adotta questa architettura.
Può gestire la pubblicazione, la sottoscrizione, la memorizzazione e l’elaborazione di eventi in tempo reale. Apache Kafka supporta una serie di casi d’uso in cui l’elevato throughput e la scalabilità sono fondamentali e, riducendo al minimo la necessità di integrazioni point-to-point per la condivisione dei dati in alcune applicazioni, può ridurre la latenza a millisecondi.
Esempio di modelli
Un’architettura guidata dagli eventi può essere basata su un modello pub/sub o su un modello di flusso di eventi.
Modello pub/sub
Si tratta di un’infrastruttura di messaggistica basata sulle iscrizioni a un canale di eventi. Con questo modello, dopo che un evento si verifica o viene pubblicato, viene inviato ai consumer che devono essere informati.
Credits to AWS Documentation
Modello di streaming degli eventi
Con un modello di streaming degli eventi, gli eventi vengono scritti in un log. I consumatori di eventi non si abbonano a un flusso di eventi. Invece, possono leggere da qualsiasi parte del flusso e possono unirsi al flusso in qualsiasi momento.
Credits to Developer Confluent documentation
Benefici
Un’EDA è generalmente loosely coupled, perché i produttori di eventi non sanno quali consumatori sono in ascolto per un evento e l’evento non sa quali sono le conseguenze del suo “arrivo”.
L’architettura event-driven offre infatti il grande vantaggio del disaccoppiamento, in cui produttori e consumatori di dati o servizi non devono comunicare direttamente, ma la loro attività è gestita centralmente da un componente terzo, consentendo un sistema più flessibile e scalabile. Questo a sua volta semplifica l’integrazione di nuovi componenti, promuove la tolleranza ai guasti e migliora l’efficienza complessiva del sistema.