Nella progettazione software trova spazio l’architettura basata sugli eventi, modello che assicura diversi benefici, rendendola di particolare interesse per molte aziende.


Un’architettura basata sugli eventi (event-driven architecture, EDA) per dati e applicazioni è un approccio di progettazione moderno incentrato sui dati che descrivono “eventi”, che possono essere l’esecuzione di una misurazione, modifiche dello stato dell’applicazione o violazioni della sicurezza.

Una event-driven architecture consente alle applicazioni di agire su questi eventi nel momento in cui si verificano. Ciò è in contrasto con le architetture tradizionali, che trattavano in gran parte i dati come lotti di informazioni da inserire e aggiornare a intervalli definiti e rispondevano alle richieste avviate dall’utente piuttosto che a nuove informazioni.

Ci sono due ragioni principali per cui le aziende puntano a investire su una event-driven architecture: le sue capacità di azione in tempo reale, che consentono di reagire in modo più rapido ed efficiente a un ambiente aziendale frenetico, e la sua natura disaccoppiata, che garantisce la capacità di far fronte con interruzioni impreviste.

Proprio per questo motivo piace così tanto alle organizzazioni. Secondo un sondaggio commissionato da Solace su 840 persone in 9 paesi in tutto il mondo, l’85% delle organizzazioni si è rivolto ad un’architettura basata sugli eventi per soddisfare le proprie esigenze aziendali.

L’architettura basata sugli eventi è ampiamente utilizzata dal 72% delle aziende globali.

Osservando i vantaggi della distribuzione basata sugli eventi, il 71% delle società campione ritiene che i benefici superino i costi, o almeno li eguaglino. Tra coloro che l’hanno implementata con successo l’architettura basata sugli eventi, il 94% ha dichiarato che prenderebbe in considerazione l’idea di applicarla a ulteriori casi d’uso nelle proprie organizzazioni.

Un caso concreto d’impiego di successo ha come protagonista il colosso della birra Heineken. L’implementazione di EDA, oltre all’impiego di soluzioni per la connettività globale in tempo reale, ha contribuito in modo determinante all’azienda olandese nel raggiungimento degli obiettivi del suo percorso di digital transformation.

Cos’è una event-driven architecture?

Con event-driven architecture si definisce una struttura di progettazione software in cui le applicazioni disaccoppiate possono pubblicare e sottoscrivere eventi in modo asincrono tramite un broker di eventi (software che consente ad applicazioni, sistemi e servizi di comunicare tra loro e di scambiare informazioni).

Detto in altri termini, l’architettura guidata dagli eventi è un modello di progettazione software che consente ai sistemi di rilevare, elaborare, gestire e reagire agli eventi in tempo reale non appena si verificano. Con una event-driven architecture, nel momento in cui si verifica un evento, le informazioni su quell’evento vengono inviate a tutte le app, i sistemi e le persone che ne hanno bisogno per reagire in tempo reale.

Negli ultimi anni, si è registrato un movimento che ha portato a concentrarsi sui dati “a riposo” (architettura orientata ai servizi) e sugli eventi (event-driven architecture). Si sta passando, cioè, dall’accumulo di dati e dai data lake a concentrarsi sui dati in movimento e a tenerne traccia mentre si spostano da un posto all’altro. Ecco perché ha preso forma EDA.

Cos’è un evento?

Gli eventi sono azioni che si verificano internamente o esternamente a un’organizzazione: possono essere, per esempio, aggiornamenti dell’inventario, violazioni della sicurezza o modifiche dello stato dell’applicazione.

Gli eventi stimolano reazioni all’interno delle aziende. Esse costruiscono la propria infrastruttura in modo da catturare e reagire o questi eventi urgenti o mission-critical. Nell’era digitale, i sistemi IT registrano, elaborano e rispondono agli eventi in base o logiche preimpostate. Nella progettazione di un sistema gli eventi sono la testimonianza che qualcosa è successo. Sono immutabili, quindi non possono essere modificati o eliminati. Invece, possono essere mantenuti in modo indefinito, archiviati e accessibili per sempre.

Sono utilizzabili ed elaborabili da un servizio in modo illimitato. Gli eventi nelle EDA sono notifiche che confermano un’azione, anche come semplice conferma. Una notifica di acquisto può essere un evento. Poiché è la notifica dell’evento o il messaggio a essere gestita nel sistema, l’architettura guidata dagli eventi viene talvolta definita architettura guidata dai messaggi.

Come funziona una event-driven architecture

Event-driven architecture, come detto, è un modello di progettazione software. Essa consente la costruzione di sistemi scalabili e liberamente accoppiati. Gli eventi, che rappresentano occorrenze o cambiamenti nel sistema, guidano il flusso. Vengono generati da varie origini, pubblicati su event bus o su un broker di messaggi e utilizzati dai componenti interessati in modo asincrono. Questo approccio promuove flessibilità, scalabilità e resilienza.

L’architettura guidata dagli eventi potrebbe essere un concetto semplice, se non fosse che gli eventi devono muoversi in modo efficiente attraverso una moltitudine di applicazioni scritte in molti linguaggi diversi, utilizzando API diverse, sfruttando protocolli diversi e arrivando a molti endpoint come applicazioni, motori di analisi e interfacce utente. Ecco allora come funzionano i modelli EDA: essi supportano l’elaborazione degli eventi in tempo reale, l’origine degli eventi, la Command Query Responsibility Segregation (CQRS) e la messaggistica pub/sub. I sistemi guidati dagli eventi sfruttano la coerenza finale, impiegando tecniche come event sourcing e CQRS. L’event sourcing cattura tutte le modifiche allo stato del sistema come una sequenza di eventi, facilitando la ricostruzione del sistema in qualsiasi momento. CQRS separa le operazioni di lettura e scrittura, consentendo query efficienti, mantenendo la coerenza.

Se combinati, i sopra citati modelli e tecnologie consentono un’architettura scalabile e resiliente per la gestione di un grande volume di eventi. I singoli componenti inviano eventi, che rappresentano attività o richieste a livello di sistema o aziendale; tali eventi vengono raccolti dalla piattaforma di elaborazione degli eventi, per il filtraggio, l’incremento e la distribuzione ad altri componenti dipendenti o interessati. La comunicazione tra questi componenti viene gestita tramite microservizi pubblicizzati da ciascun componente. All’interno dei componenti, i microservizi (di cui parleremo più avanti) vengono implementati utilizzando un modello di programmazione basato sugli eventi.

I vantaggi

I vantaggi dell’architettura basata sugli eventi derivano dal modo in cui sistemi e componenti sono liberamente accoppiati, il che può facilitare lo sviluppo e l’implementazione indipendenti dei sistemi, una migliore scalabilità e tolleranza agli errori e l’integrazione con sistemi esterni, soprattutto rispetto alle architetture monolitiche.

I benefici sono informazioni dettagliate, connettività e risposte in tempo reale, nonché una migliore scalabilità e agilità. Senza EDA, è quasi impossibile scalare, soddisfare le esigenze aziendali moderne e garantire la connettività in tempo reale tra applicazioni e sistemi critici. Detto questo, ecco di seguito i principali vantaggi dell’event-driven architecture.

  • Accoppiamento libero e scalabilità

EDA promuove l’accoppiamento libero tra i componenti disaccoppiandoli attraverso l’uso di eventi. In un’architettura basata sugli eventi, i componenti interagiscono tramite messaggi di eventi asincroni, consentendo loro di essere sviluppati, distribuiti e scalati in modo indipendente. Questo tipo di accoppiamento consente una migliore modularità, flessibilità e agilità nel sistema. È possibile aggiungere o modificare nuovi componenti senza influire sui componenti esistenti, facilitando la scalabilità e adattandosi ai mutevoli requisiti aziendali.

  • Elaborazione e reattività in tempo reale

EDA consente l’elaborazione e la reattività in tempo reale, reagendo agli eventi nel momento in cui si verificano. Eventi, come interazioni dell’utente, notifiche di sistema o trigger esterni, vengono acquisiti ed elaborati quasi in tempo reale. Ciò garantisce che il sistema possa rispondere rapidamente ai cambiamenti, consentendo un processo decisionale più rapido, analisi in tempo reale e azioni immediate. Event-driven architecture è particolarmente adatta per i casi d’uso in cui l’elaborazione dei dati in tempo reale e la reattività sono fondamentali, come nei sistemi finanziari, nelle applicazioni IoT o nel monitoraggio in tempo reale.

  • Affidabilità e tolleranza ai guasti

L’architettura basata sugli eventi migliora l’affidabilità del sistema e la tolleranza agli errori sfruttando la comunicazione basata sugli eventi. Gli eventi possono essere registrati e archiviati in un archivio eventi duraturo, fornendo una traccia di controllo degli eventi passati. Ciò consente la gestione degli errori, il ripristino e la riproduzione degli eventi, garantendo tolleranza agli errori e resilienza del sistema. In caso di guasto, i componenti possono essere ripristinati a uno stato coerente riproducendo gli eventi, fornendo un sistema affidabile e coerente.

  • Integrazione perfetta con differenti sistemi

Event-driven architecture facilita l’integrazione perfetta con sistemi e tecnologie diversi. Poiché i componenti comunicano tramite eventi, possono scambiare dati e attivare azioni tra sistemi diversi. Ciò consente un efficiente scambio di dati e un’interoperabilità, poiché gli eventi possono essere consumati e prodotti da vari sistemi indipendentemente dalle tecnologie sottostanti o dai linguaggi di programmazione. EDA supporta la creazione di architetture guidate dagli eventi che integrano sistemi come microservizi, sistemi legacy, servizi cloud e applicazioni di terze parti.

A tutto ciò si aggiungono i vantaggi dell’architettura basata sugli eventi in termini di scalabilità, accoppiamento flessibile e sviluppo e implementazione indipendenti dei componenti del sistema.

Adottando un’EDA, i sistemi acquisiscono la capacità di reagire in modo asincrono e indipendente agli eventi, rendendoli scalabili. L’architettura gestisce anche le sfide relative alla coerenza dei dati utilizzando tecniche come il controllo delle versioni degli eventi, l’idempotenza e le azioni di compensazione.

Nel complesso, quindi, event-driven architecture offre flessibilità, scalabilità e resilienza, rendendola adatta per applicazioni con flussi di lavoro complessi, elaborazione di eventi in tempo reale e integrazioni guidate dagli eventi.

Quando utilizzare un event-driven architecture

Le organizzazioni sfruttano event-driven architecture quando progettano i propri sistemi per ottenere molti casi d’uso differenti. Nel caso di replica dei dati, un evento può essere condiviso tra più servizi che devono copiarne i dati nei propri database.

Anche nel caso di elaborazione parallela, più processi possono essere attivati ​​da un evento per essere eseguiti in modo asincrono l’uno dall’altro. Se si vuole seguire un monitoraggio in tempo reale, i sistemi possono generare eventi per modifiche al loro stato in modo che un’organizzazione possa cercare anomalie e attività sospette.

Gli eventi possono essere persistenti e propagati indipendentemente dal codice in cui sono scritti i servizi, garantendo interoperabilità. Infine, se un servizio non è disponibile, gli eventi possono essere mantenuti nel router finché il servizio non è disponibile per consumare l’evento, assicurando la necessaria ridondanza.

Le aziende che desiderano sfruttare i dati in tempo reale nelle loro attività quotidiane si stanno rivolgendo all’architettura basata sugli eventi come fulcro per i casi d’uso da cui trarre i maggiori vantaggi. I principali casi d’uso per l’architettura basata sugli eventi secondo un sondaggio hanno riguardato: l’integrazione di applicazioni; la condivisione e democratizzazione dei dati tra le applicazioni; il collegamento di dispositivi IoT per l’acquisizione/analisi dei dati; i microservizi di abilitazione eventi.

Le differenze fra event-driven architecture e microservizi

EDA è comunemente abbinata ai microservizi per condividere in modo efficiente le informazioni tra sistemi disaccoppiati su larga scala. Le architetture guidate dagli eventi sono particolarmente apprezzate per le applicazioni software basate su microservizi. Questi ultimi sono progettati per eseguire attività molto specifiche e queste attività sono spesso basate sul verificarsi di alcuni eventi. Pertanto, le architetture basate sugli eventi spesso costituiscono la spina dorsale dei microservizi.

Le due architetture, benché possano essere complementari, hanno sensibili differenze.

Event-drive architecture utilizza gli eventi per guidare il comportamento dei dati e delle applicazioni. Consente alle applicazioni di agire o rispondere agli eventi con un’architettura basata sugli eventi. Di conseguenza, i client ricevono i dati automaticamente quando si verifica un evento all’interno dell’applicazione, eliminando la necessità di richiedere al server. A differenza del tradizionale modello richiesta-risposta, i client richiedono periodicamente i dati aggiornati. Nel complesso, EDA offre un approccio più efficiente e snello. Un client deve sottoscrivere un evento solo una volta e consentire al server di inviare automaticamente gli eventi ogni volta che si verifica un aggiornamento.

L’architettura dei microservizi struttura le applicazioni come una raccolta di servizi indipendenti e liberamente accoppiati. Al suo interno ciascun servizio può svolgere una funzione specifica, il che consente maggiore flessibilità e agilità. Tuttavia, l’implementazione di questo tipo di architettura introduce complessità del sistema distribuito, comunicazione tra servizi e sfide di monitoraggio. Un’implementazione di successo richiede una progettazione, una governance e una gestione dell’infrastruttura adeguate. Da qui risulta vantaggioso un impiego collegato all’EDA.

EDA e microservizi sono correlabili e utilizzabili principalmente per costruire sistemi liberamente accoppiati e scalabili. EDA consente la comunicazione asincrona tra i microservizi implementando una coda di eventi come intermediario tra di loro. Quando un servizio attiva un evento, viene inserito nella coda degli eventi, che lo trasmette a tutti i servizi connessi per il consumo.

L’integrazione di EDA e microservizi consente agli sviluppatori di costruire sistemi robusti e adattabili che presentano scalabilità, resilienza e accoppiamento allentato eccezionali.