control-systems-and-automation
Costruire un'architettura basata su eventi con Azure Event Hub e Funzioni
Table of Contents
Microsoft Azure fornisce una robusta suite di servizi per implementare EDA, con Azure Event Hub che serve come un livello di ingestione di eventi ad alto rendimento e funzioni Azure che forniscono una compute senza server per reagire a quegli eventi in tempo reale. Questo articolo presenta una guida completa per la costruzione di un'architettura passo-passo basata su eventi utilizzando due principi operativi.
Comprendere l'architettura a livello di eventi
Un evento è un cambiamento significativo nello stato – ad esempio, una lettura del sensore, una transazione di pagamento, o un aggiornamento del profilo dell'utente. In EDA, i componenti comunicano attraverso eventi piuttosto che chiamate sincrone dirette, che riducono l'accoppiamento e consentono lo scalo indipendente di produttori e consumatori.
Concetti chiave
- Produttore di eventi:[ Qualsiasi componente che emette eventi all'autobus dell'evento. Esempi includono dispositivi IoT, microservices o sistemi legacy che emettono eventi di acquisizione dati di cambiamento (CDC).
- Event Bus / Stream:[[] Un condotto durevole e scalabile che ingerisce e persiste gli eventi. Azure Event Hub si adatta perfettamente a questo ruolo, offrendo flussi di eventi partizionati e ordinati.
- Consumatore dell'evento:[] Un componente che si iscrive agli eventi e li elabora. Le funzioni azure possono agire come consumatore, attivato automaticamente quando arrivano nuovi eventi.
- Event Sourcing e CQRS:[[] Molte implementazioni combinano EDA con sourcing eventi (persistente il registro eventi come fonte di verità) e segregazione di responsabilità di query di comando (CQRS) per separare i modelli di lettura e scrittura.
Il decoupling introdotto da EDA consente ai team di sviluppare, distribuire e scalare i servizi in modo indipendente, facilitando anche analisi in tempo reale, percorsi di audit e la possibilità di rigiocare eventi storici per il debug o il ritrattamento.
Azure Event Hub: Il livello di ingestione
Azure Event Hub è una piattaforma di streaming dati completamente gestita e in tempo reale che può ingerire milioni di eventi al secondo. La sua architettura è progettata per un'elevata produttività, bassa latenza e durata. Event Hub cattura eventi in partizioni, ognuna delle quali è una sequenza ordinata di eventi. I consumatori possono leggere da un punto di controllo per riprendere l'elaborazione.
Caratteristiche chiave di Event Hub
- Partizione:[] Gli eventi sono distribuiti su partizioni per l'elaborazione parallela. Ogni partizione è indipendente e può essere consumata da un'istanza separata della funzione Azure.
- Capture:[] Permane automaticamente i flussi di eventi a Azure Blob Storage o Azure Data Lake Storage per l'archiviazione e l'analisi batch.
- Geo-disaster Recovery:[ L'accoppiamento opzionale degli spazi dei nomi in tutte le regioni garantisce un'elevata disponibilità.
- AMQP, HTTPS e Kafka Protocol:[] Supporta più protocolli, permettendo ai produttori di utilizzare i client Apache Kafka di inviare eventi direttamente.
- Unità di misura (TU) o Unità di elaborazione (PU):[ Determinare l'ingresso e la capacità di uscita. Per il livello serverless (Basic e Standard), i TU vengono utilizzati; per Premium e Dedicated, le unità di elaborazione forniscono prestazioni più prevedibili.
Passos di configurazione
- Crea un namespace degli hub di eventi:[ Nel portale Azure, crea un nuovo spazio di nome Event Hubs. Scegli il livello di prezzo (Standard è raccomandato per la maggior parte dei carichi di lavoro di produzione).
- Crea un caso di Hub instance:[ All'interno dello spazio dei nomi, crea un hub eventi. Specificare il numero di partizioni – una regola comune di pollice è 432 partizioni per la maggior parte dei casi di utilizzo. Le partizioni non possono essere cambiate in seguito senza ricreare il mozzo, quindi scegliere in base al throughput previsto.
- Configurare le politiche di accesso condiviso:[] Creare una politica per i produttori (ad esempio, "Invia") e una per i consumatori (ad esempio, "Ascolta solo") per seguire il principio di meno privilegio. Le stringhe di connessione sono utilizzate da applicazioni e funzioni Azure.
- Abilita la cattura (opzionale):[] Se avete bisogno di memorizzare tutti gli eventi grezzi per la conservazione a lungo termine, abilitare Capture e puntare a un contenitore di stoccaggio di Blob Azure o Data Lake Storage.
Per un esempio pratico, fare riferimento alla guida ufficiale di avvio rapido[].
Funzioni di azionatura: il trigger di computazione
Azure Functions fornisce un ambiente di calcolo senza server dove si scrive il codice che risponde agli eventi. Il trigger Event Hub consente di invocare automaticamente una funzione quando nuovi eventi vengono pubblicati su un hub eventi. Le funzioni possono scalare automaticamente, con ogni evento di elaborazione delle istanze di funzione da una o più partizioni.
Mozzo di evento Comportamento di prova
- Checkpointing:[] La funzione runtime gestisce il checkpointing per tenere traccia dell'ultimo evento elaborato con successo per partizione, assicurando che se la funzione riavvia, riprende dalla posizione corretta.
- Elaborazione batch:[] Per impostazione predefinita, il trigger offre un gruppo di eventi. È possibile controllare la dimensione del lotto e il conteggio prefetch per la messa a punto delle prestazioni.
- Parallelismo:[ Il numero di istanze funzionali è uguale al numero di partizioni con eventi non elaborati. Per aumentare il parallelismo, aumentare il conteggio delle partizioni (entro i limiti).Per il massimo rendimento, utilizzare il piano di hosting Premium o Dedicated invece del piano di consumo, soprattutto se il tempo di elaborazione della funzione è più di pochi secondi.
Creazione di una funzione Azure con il Trigger dell'hub dell'evento
- Creare un'app Function in Azure Portal o tramite Azure CLI. Scegli lo stack runtime (ad esempio, .NET, Node.js, Python).
- Aggiungete un binding per il trigger di Event Hub. La firma della funzione includerà un parametro per i dati dell'evento (ad esempio, o ).
- Impostare l'impostazione della stringa di connessione Event Hub (dall'Impostazioni dell'applicazione) e il nome del mozzo dell'evento.
- Scrivere logica di elaborazione all'interno della funzione. Funzioni comuni: deserializzare JSON, aggiornare un database, chiamare un API, o inviare l'evento ad un altro servizio come SignalR per dashboard in tempo reale.
- Configurare i binding di output come necessario – ad esempio, un binding di uscita Cosmos DB per memorizzare i dati trattati.
La documentazione di attivazione dell'hub dell'evento [ di funzioni azzurre[[]] fornisce campioni di codice dettagliati per ogni lingua.
Progettazione dell'architettura end-to-End
Ora combiniamo i pezzi. Il flusso tipico è: Produttori] → ]Event Hub[ → Azure Funzioni] → ]] Servizi GPS a valle].
Passo 1: Definire lo schema dell'evento
La coerenza è fondamentale. Utilizzare un registro di schema (come Azure Schema Registry in Event Hubs) o semplicemente applicare uno schema JSON.
{
"vehicleId": "VH-12345",
"latitude": 37.7749,
"longitude": -122.4194,
"speed": 65.2,
"timestamp": "2025-03-21T10:30:00Z"
}
Utilizzando Avro o Protobuf puoi ridurre le dimensioni del carico utile e fornire capacità di evoluzione dello schema, ma JSON rimane il più semplice da debug.
Fase 2: Configurare i produttori
I produttori possono essere dispositivi IoT utilizzando Azure IoT Hub o applicazioni personalizzate utilizzando il Event Hub SDK. Per scenari di alta gamma, eventi batch insieme (ad esempio, inviare 100 eventi per richiesta) per massimizzare il throughput.
Passo 3: Impostare la chiave di partizione
Se avete bisogno di elaborazione ordinato per veicolo, utilizzare come chiave di partizione. Questo assicura tutti gli eventi dalla stessa terra del veicolo nella stessa partizione e sono trattati in modo sequenziale da un singolo consumatore.
Passo 4: costruire la funzione Azure
La funzione riceve lotti di eventi, processi ciascuno in ordine, e poi può scrivere l'ultima posizione in una cache (ad esempio, Azure Redis Cache) per query in tempo reale. Può anche eventi di geofence – quando un veicolo entra in una determinata zona, la funzione può inviare un avviso via Azure Logic Apps o Twilio.
Passo 5: Maniglia guasti e ritiri
Se l’elaborazione non viene eseguita per un lotto, il trigger Event Hub si riprova secondo la politica di riprova della funzione (il default è un backoff esponenziale fino a 5 volte). Per eventi velenosi (ad esempio, JSON malformato), registrarli in una coda di letter morti (Azure Storage Queue o un Event Hub dedicato).
Passo 6: Monitoraggio e Scala
- Utilizzare Azure Monitor per monitorare le metriche Event Hub: messaggi in arrivo, richieste accelerate, dimensione backlog (differenza tra ultimo offset e ultimo checkpoint).
- Per la scalazione delle funzioni Azure, il piano di consumo si ridimensionerà automaticamente, ma potrebbe avere ritardi di avvio freddi. Il piano Premium offre l'istanza di pre-riscaldamento e l'integrazione di rete virtuale.
- Impostare gli avvisi per alto backlog, che indica la funzione non può tenere al passo – considerare l'aumento delle partizioni o l'aggiornamento del piano di hosting.
Modelli avanzati e migliori pratiche
Riproduci e catch-up
Un vantaggio significativo di Event Hub è che gli eventi vengono conservati per un periodo configurabile (fino a 90 giorni su Standard), che consente ai consumatori di rifare eventi da un punto specifico nel tempo – utile per il backup di un nuovo database o per il rielaborazione dopo aver fissato un bug.
Gruppi di consumatori multipli
Event Hub supporta fino a 20 gruppi di consumatori per ogni hub eventi. Utilizza gruppi di consumatori separati per diversi processi di elaborazione: uno per analisi in tempo reale, un altro per l'archiviazione, e un terzo per i modelli di apprendimento della macchina di formazione.
Lavorazione Idemponte
Poiché gli eventi possono essere consegnati almeno una volta, la funzione dovrebbe essere idempotent. Ad esempio, quando si inserisce in un database, utilizzare operazioni upsert invece di inserire. O controllare se un ID evento esiste già in un negozio di deduplicazione (ad esempio, Redis con TTL).
Integrazione con i componenti Azure Function Output Bindings
Invece di scrivere codice manuale per inviare dati altrove, utilizzare binding di output. La seguente tabella riassume i binding comuni per scenari organizzativi:
- Cosmos DB:[] Aggiorna automaticamente i documenti dall'output della funzione.
- SignalR Service:[ Trasmissione di eventi elaborati ai client connessi (ad esempio, dashboard in tempo reale).
- Blob Storage:[]] Scrivere uscite di batch periodicamente (evitare la scrittura per l'evento di ridurre i costi).
- Mozzi di evento (Output): Invia eventi ad un altro hub di eventi per la catena.
Considerazioni di sicurezza
- Utilizzare Identità gestita per la funzione Azure per connettersi a Event Hub invece di memorizzare stringhe di connessione in testo chiaro.
- Abilitare l'integrazione di firewall e rete virtuale per lo spazio dei nomi di Event Hub per limitare l'accesso alla rete.
- Utilizzare Azure Key Vault per memorizzare segreti come le stringhe di connessione Event Hub e le chiavi di accesso.
- Crittografare gli eventi a riposo e in transito (Event Hub utilizza TLS per impostazione predefinita).
Utilizzare i casi e scenari reali-mondiali
Elaborazione della Telemetria di IoT
Azure IoT Hub può ingerire i messaggi dei dispositivi e indirizzarli a Event Hub per l'elaborazione a valle. Le funzioni Azure possono quindi calcolare la velocità media per percorso, rilevare anomalie o attivare avvisi di manutenzione.
Analisi di clickstream
I siti web di e-commerce generano dati a flusso di clic enorme. Event Hub può aggregare le viste della pagina, le azioni del carrello di spesa e le ricerche. Le funzioni possono arricchire gli eventi con i dati del profilo utente, gli aggiornamenti dei contatori di sessione e spingere a Azure Data Explorer per i dashboard in tempo reale. L'architettura di riferimento Azure per clickstream]] fornisce un'a completo blueprint.
Cambiare la capacità dei dati (CDC)
Quando è necessario sincronizzare i dati da un database relazionale a un indice di ricerca o cache, CDC utilizzando Event Hub è un approccio comune. Ad esempio, utilizzando Debezium (Kafka Connect) per trasmettere i cambiamenti del database in Event Hub, poi una funzione Azure trasforma e scrive in Elasticsearch.
Elaborazione delle transazioni finanziarie
In finanza, l’architettura a conduzione eventi consente il rilevamento delle frodi, il rilevamento dei rischi in tempo reale e il regolamento commerciale. La bassa latenza e l’elevata produttività di Event Hub lo rendono adatto per gestire migliaia di scambi al secondo.
Ottimizzazione dei costi e monitoraggio
Mentre serverless riduce i costi di inattività, è necessario monitorare l'utilizzo.
- Event Hub Throughput Units:[ Ogni TU permette l'ingresso di 1 MB/s e l'ingresso di 2 MB/s (o 1000 eventi al secondo).
- Importo dei dati ingeriti:[] Fatturato per milione di eventi (Tier standard).
- Tempo di esecuzione della funzione azzurra:[] Il piano di consumo addebita al secondo dell'esecuzione. Assicurare che la vostra funzione è efficiente – evitare di bloccare le chiamate e utilizzare l'asinclinazione I/O.
- Storage usato per capture e checkpoints:[ I costi di archiviazione Blob sono minimi ma considerano le politiche di ritenzione.
Impostare avvisi di bilancio in Azure Cost Management. Utilizzare le istruzioni per l'applicazione per tracciare i tempi di esecuzione della funzione e le chiamate di dipendenza. La pagina Azure Event-driven architettura modello] include la guida sul monitoraggio.
Confronto con le tecnologie alternative
- Azure Service Bus:[] Meglio per i carichi di lavoro a comando che richiedono un ordine rigoroso, un'elaborazione transazionale e una frizione morta.
- Apache Kafka su HDInsight o Confluent:[[]] Più controllo sulle configurazioni ma richiede sovraccarico operativo. Event Hub fornisce la compatibilità del protocollo Kafka con un servizio gestito.
- Griglia di evento:[] Adatto per la programmazione reattiva e il routing di eventi tra i servizi Azure. Non è progettato per lo streaming ad alto volume – Event Hub gestisce milioni di eventi al secondo.
- Azure Stream Analytics:[]] Un motore di elaborazione SQL gestito per analisi di serie temporali. Può funzionare in cima a Event Hub, ma per logica aziendale complessa, Azure Functions offre una maggiore flessibilità.
Elenco di controllo operativo
- Definire il tempo di conservazione per gli eventi (default 1 giorno, max 7 giorni su Standard).
- Impostare le informazioni sulle applicazioni per la funzione Azure per registrare il conteggio degli eventi e gli errori trattati.
- Attivare gli avvisi Azure Monitor per il throttling Event Hub (controllare metrico).
- Utilizzare la politica Azure per applicare la versione TLS e il tipo di autenticazione.
- Scenari di guasto di prova: fermare la funzione, lasciare che gli eventi si accumulano, quindi riavviare per verificare il recupero di checkpoint.
- Eseguire il test di carico con un produttore simulato per garantire l'architettura gestisce il volume di picco.
Conclusioni
La combinazione di streaming di eventi e elaborazione server di elaborazione dati in tempo reale consente agli sviluppatori di focalizzarsi sulla logica aziendale, mentre Azure gestisce la partizione, la scalabilità e la gestione dei punti di controllo. Seguire i principi di progettazione e le migliori pratiche qui delineate – scegliere i conteggi di partizioni appropriati, implementare i dati di elaborazione di eventi di elaborazione moderna di configurazione e di controllo.