Azure Event Hubs è una piattaforma (completamente gestita) di streaming di dati e un servizio di ingestione di eventi altamente scalabile, capace di ricevere ed elaborare milioni di eventi al secondo. Parte dei servizi di Azure, Event Hubs può elaborare e archiviare eventi, dati o telemetria prodotti da software e dispositivi distribuiti. Con la capacità di offrire funzionalità di publish-subscribe con bassa latenza e su larga scala, Event Hubs funge da "rampa di accesso" per i Big Data. In questo articolo andremo a vedere meglio cos’è, come funziona, le differenze con Event Grid e quali sono i fattori che influenzano i costi per l’utilizzo del servizio.
I big data hanno rivoluzionato il modo in cui facciamo business e analizzare le informazioni in tempo reale per catturare approfondimenti utili può fare la differenza tra mantenere il proprio vantaggio competitivo e rimanere indietro. Tuttavia, costruire l'infrastruttura adeguata a gestire il flusso costante di dati può diventare complesso e i big data sono vantaggiosi solo quando esiste un modo semplice per elaborare e ottenere approfondimenti tempestivi dalle fonti di dati.
Ed è qui che entra in gioco Microsoft con il suo Azure Event Hubs, il servizio di event ingestion parte della vasta suite di servizi cloud di Azure. Event Hubs facilita la raccolta, l'archiviazione e l'elaborazione in tempo reale di grandi quantità di dati, rendendolo indispensabile per le aziende che necessitano di ottenere approfondimenti immediati dalle proprie operazioni.
Che si tratti di dati provenienti dall'attività di un sito web, da applicazioni, dispositivi IoT o qualsiasi altra fonte, Event Hubs può ingerirli ed elaborarli in tempo reale. Questa capacità è particolarmente cruciale in scenari in cui la latenza può influenzare i processi decisionali, come nelle piattaforme di trading finanziario o nella personalizzazione in tempo reale per l'e-commerce.
Event Hubs di Microsoft Azure è una piattaforma di gestione del flusso di messaggi, ma presenta caratteristiche diverse rispetto ai servizi di messaggistica aziendale tradizionali. Le capacità di Event Hubs sono infatti costruite intorno all'elevata capacità di throughput e agli scenari di elaborazione degli eventi.
Nel contesto di Event Hubs, i messaggi sono indicati come event data. Gli event data contengono il corpo dell'evento, che è un flusso binario (in cui è possibile inserire qualsiasi contenuto binario come JSON serializzato, XML, ecc.), una bag di proprietà definita dall'utente (coppie nome-valore) e vari metadati di sistema sull'evento, come l'offset nella partizione e il suo numero nella sequenza del flusso.
Il ruolo comune che Event Hubs svolge nelle architetture delle soluzioni è quello di "porta d'ingresso" per una pipeline di questi “eventi”, chiamata event ingestor. Un event ingestor è un componente o servizio che si trova tra i produttori di eventi e i consumatori di eventi, per disaccoppiare la produzione di un flusso di eventi dal consumo di quegli eventi.
Event Hubs fa uso di due principali protocolli di trasporto per l’invio e la ricezione degli eventi. Sul lato del publisher, è possibile utilizzare HTTPs se si prevede di inviare un basso volume di eventi agli Event Hubs, oppure si può utilizzare AMQP per scenari ad alto throughput e migliori prestazioni. Sul lato del consumatore, poiché gli Event Hubs utilizzano un modello basato su push per inviare eventi ai listener/ricevitori, AMQP è l'unica opzione disponibile.
Ma quale è, in parole povere, la differenza con un normale messaggio? Prendiamoci un attimo per capire la differenza tra i due.
Un'applicazione aziendale potrebbe optare per l'uso degli eventi per determinati processi e passare ai messaggi per altri. In generale, l'uso di un messaggio o di un evento può essere determinato rispondendo alla domanda: "Il mittente si aspetta che il destinatario esegua un'elaborazione specifica nella comunicazione?"
Se la risposta è sì, si tratta di un messaggio; in caso contrario, si tratta di un evento.
Per comprendere nella maniera più chiara possibile il funzionamento di Event Hub, nelle prossime sezioni ci dedicheremo ad esaminare più da vicino gli elementi cardine della sua architettura e come si inseriscono nel contesto più ampio della piattaforma.
Un namespace è un contenitore logico che raggruppa uno o più Event Hub. Lo si può immaginare come una cartella che organizza e gestisce tutti i propri event hub in un unico luogo, permettendo di raggruppare risorse correlate sotto un'unica gestione centralizzata.
Si tratta di uno strumento di organizzazione che consente di gestire in modo efficiente più Event Hub, soprattutto quando si tratta di scalare le operazioni. Ogni Event Hub all'interno di un namespace condivide lo stesso contesto di sicurezza e configurazione, il che semplifica la gestione delle policy di sicurezza, come le chiavi di accesso e le regole di autorizzazione, rendendo il namespace un punto centrale per la sicurezza delle risorse, dove è possibile applicare le stesse regole a tutti gli Event Hub al suo interno.
Quando viene creato un namespace in Azure, si deve scegliere un nome univoco (in tutto Azure) che diventerà parte dell'URL di endpoint utilizzato per accedere agli Event Hub. Il namespace è associato a una specifica regione di Azure, dove vengono allocate le risorse e, al suo interno, si possono creare vari Event Hub, ognuno con configurazioni personalizzate per gestire specifici scenari di ingestione e elaborazione degli eventi.
Un publisher è un'entità o un'applicazione che invia eventi o messaggi a un Event Hub. La sua funzione principale è quella di generare e caricare i dati nel sistema, che poi possono essere elaborati da altri componenti.
Quando un publisher invia un evento, questi eventi vengono distribuiti e immagazzinati nelle partizioni dell'Event Hub. Il publisher può essere qualsiasi applicazione o servizio che necessita di inviare dati, come un'applicazione IoT che trasmette informazioni da sensori, un sistema di logging che invia registrazioni di eventi o anche un'applicazione web che raccoglie e trasmette dati degli utenti.
La comunicazione tra il publisher e l'Event Hub avviene tramite un'API, e il publisher può configurare il tipo di eventi da inviare e come questi devono essere strutturati. È possibile pubblicare eventi singolarmente o in batch. Una singola pubblicazione, sia essa un evento singolo o un batch di eventi, ha un limite massimo di dimensione di 256 KB. La pubblicazione di eventi più grandi di questo limite risulterà in un'eccezione (quota superata).
Una partizione è fondamentalmente un flusso ordinato di eventi all'interno di un Event Hub, e ogni evento inviato a un Event Hub è assegnato a una specifica partizione. Queste sono una delle differenze cardine nel modo in cui i dati vengono archiviati e recuperati rispetto ad altri servizi di Azure come Service Bus, con i suoi Queue e Topics.
Le tradizionali Queue e Topics sono progettate basandosi sul modello "Competing Consumer", in cui ogni consumer cerca di leggere dalla stessa coda (immaginabile come una strada a corsia unica, dove i veicoli procedono uno dopo l'altro, senza possibilità di sorpasso), mentre gli Event Hubs sono progettati basandosi sul modello "Partitioned Consumer" (simile a corsie parallele su un'autostrada, dove il traffico scorre in maniera più distribuita).
Quando un evento viene inviato a un Event Hub, viene assegnato a una delle partizioni disponibili. La modalità di assegnazione può essere casuale oppure basata su una chiave di partizione fornita dall'utente (partition key), che consente di garantire che eventi correlati vadano sempre alla stessa partizione. All'interno di una singola partizione gli eventi sono ordinati in modo cronologico, importante quando l'ordine degli eventi ha un significato per l'elaborazione (ad esempio, operazioni che devono essere eseguite in sequenza).
Ogni partizione può essere letta in parallelo da diversi consumer, consentendo di elaborare grandi quantità di dati più rapidamente. Il numero di partizioni determina la capacità massima di parallelizzazione di un Event Hub e più partizioni vengono configurate, più elevata sarà la possibilità di scalare la lettura e l'elaborazione degli eventi.
Tuttavia, il numero di partizioni deve essere deciso al momento della creazione dell'Event Hub e non può essere cambiato successivamente. Utilizzando il portale Azure si possono creare tra 2 e 32 partizioni (il valore predefinito è 4), tuttavia, se necessario, si può arrivare a creare fino a 1024 partizioni contattando il supporto Azure.
Ogni partizione ha una capacità di memorizzazione definita dal periodo di retention configurato per l'Event Hub (ad esempio, un giorno, sette giorni, ecc.). Gli eventi vengono mantenuti all'interno della partizione per il tempo specificato e poi eliminati automaticamente.
L'altra importante differenza tra le normali Queue e le partizioni di Event Hub è che, nelle Queue, una volta che il messaggio è stato letto, viene rimosso dalla coda e non è più disponibile (in caso di errori, verrà spostato nella dead letter queue). Invece, nelle partizioni di Event Hubs, i dati nella partizione rimangono disponibili anche dopo essere stati letti dal consumer, consentendo di tornare e leggere nuovamente i dati se necessario (ad esempio in caso di perdita di connessione).
Abbiamo creato il team Infra&Security, verticale sul cloud Azure, per rispondere alle esigenze dei clienti che ci coinvolgono nelle decisioni tecniche e strategiche. Oltre a configurare e gestire il loro tenant, ci occupiamo di:
Con Dev4Side, hai un partner affidabile in grado di supportarti sull'intero ecosistema applicativo di Microsoft.
Un consumer è un'applicazione o un servizio che legge ed elabora gli eventi inviati a un Event Hub. Una volta che gli eventi sono stati pubblicati e memorizzati nelle partizioni dell'Event Hub, il consumer si occupa di prelevarli e processarli secondo le necessità dell'applicazione.
Il ruolo del consumer è fondamentale per trasformare i dati grezzi in informazioni utili e legge gli eventi da uno o più consumer group, il che permette di avere più applicazioni che leggono gli stessi dati senza interferire l'una con l'altra.
Il processo di consumo implica anche la gestione della posizione di lettura (offset), che tiene traccia degli eventi già processati e garantisce che non vengano letti nuovamente, a meno che non sia richiesto. I consumer possono essere progettati per scalare orizzontalmente, permettendo a più istanze dello stesso consumer di operare in parallelo e migliorare l'efficienza dell'elaborazione dei dati.
I dati archiviati nel proprio event hub (in tutte le partizioni) possono essere consumati (o letti) da diversi consumer in base alle loro esigenze. Alcuni consumer desidereranno leggerli con attenzione solo una volta, mentre altri potrebbero voler tornare indietro e leggere i dati storici più volte.
Per supportare questi requisiti variabili, Event Hub utilizza i Consumer Group. Un gruppo di consumatori è semplicemente un insieme di consumer che collaborano per leggere e processare i messaggi da uno o più topic o partizioni in modo coordinato, indipendente e senza interferenze tra loro. Ogni consumer group mantiene una propria posizione di lettura (offset) per ogni partizione dell'Event Hub, quindi ogni gruppo può leggere e processare gli eventi al proprio ritmo e secondo le proprie esigenze.
Questo è particolarmente utile quando si desidera che diverse applicazioni processino gli stessi eventi per scopi diversi e un consumer group potrebbe essere utilizzato, ad esempio, per un'applicazione di monitoraggio in tempo reale, mentre un altro potrebbe essere impiegato per l'analisi storica dei dati. Ogni consumer group vedrà gli eventi come se fosse l'unico lettore, mantenendo la propria cronologia di lettura e consentendo così l'elaborazione parallela senza conflitti.
I dati nell'event hub possono essere accessibili solo tramite il gruppo di consumatori e non è possibile accedere direttamente alle partizioni per recuperare i dati. Quando viene creato un event hub, viene creato anche un gruppo di consumatori predefinito.
Gli Event Hub offrono principalmente due modalità diversi per il consumo degli eventi: il primo utilizzando i ricevitori diretti e il secondo tramite un host intelligente chiamato “Event Processor Host”.
Se si decide di costruire i propri ricevitori diretti, sarà necessario gestire manualmente tutta una serie di aspetti, un compito che rischia di diventare ripetitivo e che richiederà un certo livello di conoscenza per scrivere i ricevitori in modo efficiente.
L'Event Processor Host di Azure Event Hub è una libreria che semplifica il processo di ricezione e gestione degli eventi provenienti da un Event Hub. Si occupa di gestire automaticamente il bilanciamento del carico tra più istanze di elaboratori di eventi, distribuendo le partizioni degli eventi in modo equilibrato tra i vari host. Questo approccio permette di scalare facilmente l'elaborazione degli eventi, consentendo a diverse applicazioni di leggere in parallelo dallo stesso Event Hub senza sovraccaricare una singola istanza.
Ogni volta che un evento viene ricevuto, l'Event Processor Host assicura che sia elaborato correttamente e, se necessario, mantiene traccia dell'ultima posizione elaborata all'interno di una partizione. Questa funzionalità è particolarmente utile per gestire le interruzioni, poiché l'elaborazione può riprendere dal punto esatto in cui era stata interrotta. Inoltre, l'Event Processor Host gestisce automaticamente la concorrenza tra le diverse istanze, garantendo che una singola partizione non sia elaborata contemporaneamente da più host, evitando così duplicazioni o inconsistenze.
Le Throughput Unit (TU) rappresentano la capacità del sistema di gestire il volume di dati in ingresso e in uscita. Le si può immaginare come delle tubazioni: se si ha bisogno di far passare più acqua è necessario aggiungere più tubi. La circonferenza del tubo è fissa e può contenere solo una certa quantità di acqua. Quindi, se c’è il bisogno di riempire il serbatoio o prendere più acqua, l'unico modo per farlo è aggiungere o sistemare più tubi e ogni tubo che viene aggiunto comporta un costo.
Ogni Throughput Unit rappresenta una quantità fissa di risorse di calcolo, rete e archiviazione, ed è progettata per garantire che il sistema possa sostenere un certo volume di traffico. Una TU può gestire fino a 1 MB al secondo o 1.000 eventi al secondo in ingresso e fino a 2 MB al secondo in uscita. Questo significa che l’Event Hub può ricevere e processare fino a 1 MB di dati al secondo per TU e inviare fino a 2 MB di dati al secondo.
Se il carico di lavoro supera queste capacità, è possibile aumentare il numero di TU assegnate per gestire volumi maggiori di dati. Ad esempio, configurando tre TU, l'Event Hub potrà gestire fino a 3 MB al secondo in ingresso e fino a 6 MB al secondo in uscita. Azure offre anche la possibilità di scalare automaticamente il numero di TU se il carico di dati aumenta oltre la capacità configurata, entro un limite massimo predefinito.
Con più di 200 servizi all’attivo su Azure, Event Hub non è il solo servizio della piattaforma cloud dedicato alla messaggistica o anche il solo dedicato alla gestione degli eventi. Esiste infatti un altro servizio con cui Event Hub viene confuso spesso (specialmente dai novizi di Azure) e si tratta di Azure Event Grid. Tuttavia i due servizi non potrebbero essere più differenti e in questa sezione cercheremo di capire in breve la differenza.
Azure Event Hub, come abbiamo visto, è principalmente progettato per lo streaming dei dati. Anche se può gestire eventi, il suo focus principale è sull'ingestione, l'elaborazione e l'archiviazione di grandi volumi di informazioni generati da fonti diverse in tempo reale. Questo lo rende particolarmente adatto per scenari come la telemetria e i dati IoT, dove l'elaborazione dei dati ad alta capacità e a bassa latenza è fondamentale.
Lo scopo principale di Azure Event Grid è invece il routing degli eventi. È progettato per catturare eventi da vari servizi Azure e consegnarli a gestori di eventi o endpoint specifici. Questa capacità lo rende una scelta solida per costruire applicazioni reattive e basate su eventi, dove è necessario rispondere a questi ultimi man mano che si verificano. Il servizio agisce come un intermediario, garantendo che gli eventi raggiungano le loro destinazioni previste, che possono essere Azure Functions, webhook o applicazioni personalizzate.
Quindi, quando usare l’uno o l’altro? Se si ha necessità di gestire grandi quantità di informazioni in maniera intensiva e in tempo reale Event Hub è la soluzione giusta, mentre Event Grid è la scelta migliore quando si ha bisogno di un sistema per orchestrare e distribuire eventi tra diverse componenti del proprio ecosistema.
Se proprio vogliamo dirla tutta, i due servizi non sarebbero nemmeno mutualmente esclusivi e le loro differenze potrebbero addirittura renderli complementari per ottimizzare la gestione degli eventi e dei dati in un'architettura basata su eventi, utilizzando Event Hub per raccogliere e pre-processare i dati e Event Grid per distribuire gli eventi elaborati a diversi endpoint o gestori.
Il pricing di Azure Event Hubs può essere complesso e dipende da diversi fattori. Per cominciare, ogni istanza di Event Hub (entità) che si crea ha un costo associato. Questo costo è calcolato in base al piano di servizio scelto e alla durata di utilizzo. I livelli di prezzo messi a disposizione sono rispettivamente:
Il costo del servizio, oltre che sulla base del piano scelto è calcolato a partire da diverse componenti che sono:
I prezzi specifici possono inoltre variare a seconda della regione geografica in cui il servizio viene utilizzato e possono sorgere costi aggiuntivi se si utilizzano in combinazione con Event Hubs altre funzionalità di Azure come Monitor o Log Analytics e servizi associati per la sicurezza e la gestione della rete, come Virtual Networks (VNet) o Azure Firewall.
Per ottenere dettagli più specifici e cominciare a fare una prima stima dei costi del servizio per la propria organizzazione, vi invitiamo a consultare la pagina ufficiale del servizio (disponibile qui) dove con il comodo strumento messo a disposizione da Microsoft potrete calcolare il vostro prezzo sulla base di regione scelta e relativa valuta associata.
Se non fosse ormai chiaro a chiunque navighi il panorama aziendale contemporaneo, la corretta gestione dei massicci flussi dati generati dalle organizzazioni ogni giorno è ormai un fattore cruciale nelle strategie digitali di ogni business che desideri rimanere competitivo e al passo coi tempi.
E con la sua capacità di supportare scenari complessi di streaming e la possibilità di gestire dati provenienti da diverse fonti che lo rendono uno dei migliori event ingestor a disposizione sul mercato, Azure Event Hubs si configura come una soluzione potente e scalabile per la gestione dei flussi di dati massicci in tempo reale.
Quale sia la vostra necessità, dall'acquisizione di dati di telemetria dai veicoli, alle applicazioni e agli scenari IoT in cui milioni di dispositivi inviano dati al cloud, Azure Event Hubs potrebbe essere la risposta ai vostri problemi.
Azure Event Hubs è una piattaforma completamente gestita per lo streaming di dati e un servizio di ingestione di eventi altamente scalabile, capace di ricevere ed elaborare milioni di eventi al secondo. Fa parte dei servizi di Microsoft Azure e consente di elaborare e archiviare eventi, dati o telemetria provenienti da software e dispositivi distribuiti.
Azure Event Hubs offre funzionalità di publish-subscribe con bassa latenza e su larga scala, fungendo da "rampa di accesso" per i Big Data. Supporta l'ingestione di grandi volumi di dati in tempo reale, rendendolo ideale per scenari come l'analisi di attività di siti web, applicazioni, dispositivi IoT e altro.
Event Hubs agisce come un "ingestor" di eventi, posizionandosi tra i produttori e i consumatori di eventi per disaccoppiare la produzione dal consumo. Utilizza protocolli come HTTPs per l'invio di eventi a basso volume e AMQP per scenari ad alto throughput. I dati degli eventi possono essere rappresentati in formati binari come JSON serializzato o XML.
Sebbene entrambi siano servizi di gestione degli eventi su Azure, Event Hubs è ottimizzato per l'ingestione di grandi volumi di dati in tempo reale con elevato throughput, mentre Event Grid è progettato per la gestione di eventi singoli con bassa latenza, facilitando l'orchestrazione di eventi tra servizi.
I costi di Azure Event Hubs dipendono da vari fattori, tra cui il numero di throughput unit acquistate, la quantità di dati ingeriti ed elaborati e le funzionalità aggiuntive utilizzate. È importante consultare il calcolatore dei prezzi di Azure per ottenere una stima accurata basata sulle proprie esigenze.
Il team Infra & Security è verticale sulla gestione ed evoluzione dei tenant Microsoft Azure dei nostri clienti. Oltre a configurare e gestire il tenant, si occupa della creazione dei deployment applicativi tramite le pipelines di DevOps, monitora e gestisce tutti gli aspetti di sicurezza del tenant, supportando i Security Operations Centers (SOC).