Architetture basate su eventi

Un'architettura basata su eventi è un pattern di progettazione software in cui i microservizi reagiscono ai cambiamenti dello stato, chiamati eventi. Gli eventi possono avere uno stato (ad esempio il prezzo di un articolo o un indirizzo di consegna) oppure gli eventi (ad esempio, una notifica che indica che è stato ricevuto o spedito un ordine). Gli eventi attivano i microservizi che lavorano insieme per raggiungere un obiettivo comune, ma non devono necessariamente sapere nulla l'uno dell'altro se non il formato dell'evento. Sebbene funzionino insieme, ogni microservizio può applicare una logica di business diversa ed emettere eventi propri.

Un evento ha le seguenti caratteristiche:

  • È la registrazione di qualcosa che è successo.
  • Intercetta un fatto immutabile che non può essere modificato o eliminato.
  • Si verifica se un servizio applica o meno una logica al suo utilizzo.
  • Può essere mantenuto per un tempo indeterminato, su larga scala, e consumato tutte le volte necessarie.

In un sistema basato su eventi, gli eventi vengono generati dai producer di eventi, importati e filtrati da un router dell'evento (o intermediario), quindi vengono forniti in una ventilazione ai consumatori di eventi (o sink) appropriati. Gli eventi vengono inoltrati agli abbonati definiti da uno o più attivatori corrispondenti. Questi tre componenti (produttori di eventi, router di eventi, consumer di eventi) sono disaccoppiati e possono essere implementati, aggiornati e scalati in modo indipendente:

Mediatori e iscritti agli eventi

Il router degli eventi collega i diversi servizi ed è il mezzo tramite il quale i messaggi vengono inviati e ricevuti. Esegue una risposta all'evento originale generato da un produttore di eventi e la invia a valle ai consumatori appropriati. Gli eventi vengono gestiti in modo asincrono e i relativi risultati vengono decisi quando un servizio reagisce a un evento o vi è influenzato, come nel seguente diagramma di un flusso di eventi molto semplificato:

Architettura basata su eventi

Quando utilizzare architetture basate sugli eventi

Considera i seguenti utilizzi quando progetti il tuo sistema.

  • Monitorare e ricevere avvisi per eventuali anomalie o modifiche a bucket di archiviazione, tabelle di database, macchine virtuali o altre risorse.
  • Creare un singolo evento per più consumatori. Il router dell'evento invia l'evento a tutti i consumer appropriati, senza che tu debba scrivere codice personalizzato. Ogni servizio può quindi elaborare l'evento in parallelo, ma in modo diverso.
  • Fornire interoperabilità tra diversi stack tecnologici mantenendo l'indipendenza di ogni stack.
  • Coordinare sistemi e team che operano e eseguono il deployment in regioni e account diversi. Puoi riorganizzare facilmente la proprietà dei microservizi. Esistono meno dipendenze tra i team e puoi reagire più rapidamente ai cambiamenti che altrimenti sarebbero ostacolati dagli ostacoli all'accesso ai dati.

Vantaggi delle architetture basate sugli eventi

Questi sono alcuni dei vantaggi quando crei un'architettura basata su eventi.

basso accoppiamento e migliore agilità degli sviluppatori

I produttori di eventi sono logicamente separati dai consumatori degli eventi. Il disaccoppiamento tra la produzione e il consumo di eventi implica che i servizi sono interoperabili, ma che possono essere scalati, aggiornati e distribuiti in modo indipendente gli uni dagli altri.

Il basso accoppiamento riduce le dipendenze e consente di implementare servizi in linguaggi e framework diversi. Puoi aggiungere o rimuovere produttori di eventi e destinatari senza dover modificare la logica di un servizio. Non è necessario scrivere codice personalizzato per eseguire il polling, il filtro e l'instradamento degli eventi.

Evento e resilienza asincroni

In un sistema basato su eventi, gli eventi vengono generati in modo asincrono e possono essere emessi nel momento in cui si verificano senza attendere una risposta. I componenti a basso accoppiamento significano che se un servizio ha esito negativo, gli altri non vengono interessati. Se necessario, puoi registrare gli eventi in modo che il servizio di destinazione possa riprendere dal punto di errore o riprodurre gli eventi passati.

Messaggistica push, stream di eventi in tempo reale e costi inferiori

I sistemi basati su eventi consentono una facile messaggistica basata su push e i client possono ricevere aggiornamenti senza la necessità di eseguire il polling continuo dei servizi remoti per cambiamenti di stato. Questi messaggi push possono essere utilizzati per l'elaborazione e la trasformazione dei dati in tempo reale e per l'analisi in tempo reale. Inoltre, con meno sondaggi, si riduce l'I/O di rete e si riducono i costi.

Controlli e origini eventi semplificati

La posizione centralizzata del router degli eventi semplifica il controllo e ti consente di controllare chi può interagire con un router e quali utenti e risorse hanno accesso ai tuoi dati. Puoi anche criptare i tuoi dati sia in transito che at-rest.

Inoltre, puoi utilizzare l'approvvigionamento di eventi, un pattern dell'architettura che registra tutte le modifiche apportate allo stato di un'applicazione, nella stessa sequenza in cui sono state applicate in origine. L'origine eventi fornisce un log di eventi immutabili che possono essere conservati per scopi di controllo, per ricreare gli stati storici o come una narrativa canonica per spiegare una decisione basata sul business.

Considerazioni architettoniche

Un'architettura basata su eventi potrebbe richiedere di avvicinarti al design della tua applicazione in un nuovo modo. Sebbene adatto a applicazioni che utilizzano microservizi o componenti disaccoppiati, considera anche quanto segue:

  • L'origine evento può garantire la pubblicazione se devi elaborare ogni singolo evento?

    Deve essere un'origine evento duratura e affidabile.

  • L'applicazione può gestire più richieste asincrone?

    Le prestazioni del sistema non devono fare affidamento su ambito globale o database non anelastici.

  • In che modo vuoi monitorare il flusso di eventi?

    Un'architettura basata su eventi supporta il monitoraggio dinamico utilizzando i servizi di monitoraggio, ma non il monitoraggio statico tramite l'analisi del codice.

  • Vuoi utilizzare i dati nell'origine evento per ricostruire lo stato?

    Dovresti valutare come garantire che i tuoi dati vengano deduplicati e ordinati.

Passaggi successivi