Questo articolo presenta un esempio di soluzione di streaming che usa servizi dati di Azure completamente gestiti.
Architettura
Scaricare un [file di Visio][versione di Visio del diagramma dell'architettura] di questa architettura.
Workflow
Gli hub eventi per Apache Kafka includono flussi di eventi dai producer Kafka.
Apache Spark utilizza gli eventi. servizio Azure Kubernetes (servizio Azure Kubernetes) fornisce un ambiente gestito per i processi Apache Spark.
Un'applicazione che usa Azure Cosmos DB per Apache Cassandra scrive eventi in Cassandra. Questo database funge da piattaforma di archiviazione per gli eventi. Il servizio Azure Kubernetes ospita i microservizi che scrivono in Cassandra.
La funzionalità del feed di modifiche di Azure Cosmos DB elabora gli eventi in tempo reale.
Le applicazioni pianificate eseguono l'elaborazione orientata ai batch sugli eventi archiviati in Cassandra.
Gli archivi dei dati di riferimento arricchiscono le informazioni sugli eventi. Le applicazioni orientate ai batch scrivono le informazioni arricchite sugli eventi in PostgreSQL. Gli archivi dati di riferimento tipici includono:
- [Azure Data Lake Storage][Introduzione ad Azure Data Lake Storage Gen2], che può archiviare i dati in formati aperti, ad esempio [Parquet][Parquet].
- Archivi dati relazionali open source come [PostgreSQL][Che cos'è Database di Azure per PostgreSQL?] e [MySQL][Che cos'è Database di Azure per MySQL?].
Un'applicazione orientata ai batch elabora i dati di Cassandra. Tale applicazione archivia i dati elaborati in Database di Azure per PostgreSQL. Questo archivio dati relazionale fornisce i dati alle applicazioni downstream che richiedono informazioni arricchite.
Le applicazioni e gli strumenti di creazione report analizzano i dati del database PostgreSQL. Ad esempio, [Power BI][Che cos'è Power BI?] si connette al database usando il connettore Database di Azure per PostgreSQL. Questo servizio di creazione report visualizza quindi oggetti visivi avanzati dei dati.
La cache di Azure per Redis offre una cache in memoria. In questa soluzione la cache contiene i dati sugli eventi critici. Un'applicazione archivia i dati nella cache e li recupera dalla cache.
I siti Web e altre applicazioni usano i dati memorizzati nella cache per migliorare i tempi di risposta. In alcuni casi i dati non sono disponibili nella cache. In questi casi, queste applicazioni usano il modello [cache-aside][modello Cache-Aside] o una strategia simile per recuperare i dati da Cassandra in Azure Cosmos DB.
Componenti
Hub eventi è una piattaforma di streaming completamente gestita in grado di elaborare milioni di eventi al secondo. Hub eventi offre un [endpoint][Usare Hub eventi di Azure dalle applicazioni Apache Kafka] per Apache Kafka, una piattaforma di elaborazione di flusso open source ampiamente usata. Quando le organizzazioni usano la funzionalità di endpoint, non devono creare e gestire cluster Kafka per l'elaborazione dei flussi. Possono invece sfruttare l'implementazione di Kafka completamente gestita offerta da Hub eventi.
[Azure Cosmos DB][Benvenuto in Azure Cosmos DB] è un database NoSQL e relazionale completamente gestito che offre la replica multimaster. Azure Cosmos DB supporta API open source per numerosi database, linguaggi e piattaforme. Alcuni esempi:
- Apache Cassandra.
- [Gremlin][Gremlin Graph Traversal Machine and Language].
- [MongoDB][MongoDB].
Tramite [Azure Cosmos DB per Apache Cassandra][Introduzione ad Azure Cosmos DB per Apache Cassandra], è possibile accedere ai dati di Azure Cosmos DB usando strumenti, linguaggi e driver apache Cassandra. Apache Cassandra è un database NoSQL open source particolarmente adatto per carichi di lavoro con un numero elevato di operazioni di scrittura.
servizio Azure Kubernetes è un servizio Kubernetes a disponibilità elevata, sicura e completamente gestita. [Kubernetes][Kubernetes] è una piattaforma open source in rapida evoluzione per la gestione dei carichi di lavoro in contenitori. Il servizio Azure Kubernetes ospita motori di elaborazione di Big Data open source, ad esempio Apache Spark. Con il servizio Azure Kubernetes è possibile eseguire processi di elaborazione dei flussi su larga scala in un ambiente gestito.
Database di Azure per PostgreSQL è un servizio di database relazionale completamente gestito. Offre [disponibilità elevata, scalabilità elastica, applicazione di patch e altre funzionalità di gestione][Che cos'è Database di Azure per PostgreSQL?] per PostgreSQL. [PostgreSQL][PostgreSQL] è un sistema di gestione di database relazionali open source ampiamente adottato.
Cache di Azure per Redis offre un archivio dati in memoria basato sul software Redis. [Redis][Redis] è un archivio dati open source in memoria molto diffuso. Gli archivi di sessioni, le cache del contenuto e altri componenti di archiviazione usano Redis per migliorare prestazioni e scalabilità. La cache di Azure per Redis fornisce funzionalità Redis open source come offerta completamente gestita.
Alternative
È possibile sostituire i prodotti e i servizi compatibili con l'open source di questa soluzione con altri prodotti e servizi. Per informazioni dettagliate sui servizi open source disponibili in Azure, vedere [Open source in Azure][Open source in Azure].
Dettagli dello scenario
I servizi dati di Azure completamente gestiti che eseguono motori open source costituiscono questa soluzione di streaming:
- Hub eventi di Azure offre un'implementazione Kafka per l'inserimento di flussi.
- Azure Cosmos DB supporta l'archiviazione eventi in Cassandra.
- Host del servizio Azure Kubernetes [Kubernetes][Kubernetes] microservizi per l'elaborazione del flusso.
- Database di Azure per PostgreSQL gestisce l'archiviazione dei dati relazionali in [PostgreSQL][PostgreSQL].
- cache di Azure per Redis gestisce gli archivi dati in memoria [Redis][Redis].
Le tecnologie open source offrono numerosi vantaggi. Ad esempio, le organizzazioni possono usare tecnologie open source per:
- Eseguire la migrazione dei carichi di lavoro esistenti.
- Attingere all'ampia community open source.
- Limitare il blocco da parte del fornitore.
Rendendo accessibili le tecnologie open source, gli strumenti e i servizi di Azure consentono alle organizzazioni di sfruttare questi vantaggi e sviluppare le soluzioni preferite.
Questa soluzione usa [piattaforma distribuita come servizio (PaaS)][Che cos'è PaaS?] Microsoft. Di conseguenza, Microsoft gestisce l'applicazione di patch, la manutenzione del contratto di servizio e altre attività di gestione. Un altro vantaggio è l'integrazione nativa con l'infrastruttura di sicurezza di Azure.
Potenziali casi d'uso
Questa soluzione si applica a diversi scenari:
- Uso dei servizi PaaS di Azure per creare soluzioni di streaming moderne che usano tecnologie open source
- Migrazione di soluzioni di elaborazione dei flussi open source in Azure
Considerazioni
Queste considerazioni implementano i pilastri di Azure Well-Architected Framework, che è un set di principi guida che possono essere usati per migliorare la qualità di un carico di lavoro. Per altre informazioni, vedere Microsoft Azure Well-Architected Framework.
Progettare e implementare ogni servizio tenendo presenti le procedure consigliate. Per linee guida su ogni servizio, vedere il sito della documentazione Microsoft. Esaminare anche le informazioni nelle sezioni seguenti:
Prestazioni
Implementare [pool di connessioni per Database di Azure per PostgreSQL][Procedure consigliate per le prestazioni per l'uso di Database di Azure per PostgreSQL - Pool di connessioni]. È possibile usare una libreria di pool di connessioni all'interno dell'applicazione. In alternativa, è possibile usare un pooler di connessioni, ad esempio [PgBouncer][PgBouncer] o [Pgpool][Pgpool Wiki]. La creazione di una connessione con PostgreSQL è un'operazione costosa. Con il pool di connessioni è possibile evitare un impatto negativo sulle prestazioni delle applicazioni. PgBouncer è [predefinito][PgBouncer in Database di Azure per PostgreSQL server flessibile] in Database di Azure per PostgreSQL server flessibile.
Configurare Azure Cosmos DB per Apache Cassandra per ottenere prestazioni ottimali usando una [strategia di partizionamento appropriata][Partizionamento in Azure Cosmos DB per Apache Cassandra]. Decidere se usare una chiave primaria a campo singolo, una chiave primaria composta o una chiave di partizione composita durante il partizionamento delle tabelle.
Scalabilità
Prendere in considerazione i requisiti di streaming quando si sceglie un [livello hub eventi][prezzi di Hub eventi]:
- Per i requisiti di velocità effettiva di fascia media inferiore a 120 MBps, prendere in considerazione il [livello Premium][Panoramica di Hub eventi Premium (anteprima)]. Questo livello viene dimensionato in modo elastico per soddisfare i requisiti di streaming.
- Per i carichi di lavoro di streaming di fascia alta con un ingresso di gigabyte di dati, prendere in considerazione il [livello dedicato][Panoramica di Hub eventi dedicato]. Questo livello è un'offerta a tenant singolo con una capacità garantita. È possibile aumentare e ridurre il numero di cluster dedicati.
Prendere in considerazione [velocità effettiva con provisioning con scalabilità automatica][Creare contenitori e database di Azure Cosmos con velocità effettiva con scalabilità automatica] per Azure Cosmos DB se i carichi di lavoro sono imprevedibili e spiky. È possibile configurare Azure Cosmos DB per l'uso della velocità effettiva con provisioning manuale o della velocità effettiva con provisioning a scalabilità automatica. Con la scalabilità automatica Azure dimensiona in modo automatico e immediato le unità richiesta al secondo in base all'utilizzo.
Sicurezza
La sicurezza offre garanzie contro attacchi intenzionali e l'abuso di dati e sistemi preziosi. Per altre informazioni, vedere Panoramica del pilastro della sicurezza.
Usare [collegamento privato di Azure][Che cos'è collegamento privato di Azure?] per rendere i servizi di Azure parte della rete virtuale. Quando si usa il collegamento privato, il passaggio del traffico tra i servizi e la rete avviene tramite la rete backbone di Azure senza attraversare la rete Internet pubblica. I servizi di Azure in questa soluzione supportano il collegamento privato per gli SKU selezionati.
Controllare i criteri di sicurezza dell'organizzazione. Con Azure Cosmos DB per Apache Cassandra, le chiavi forniscono l'accesso a risorse come spazi chiave e tabelle. L'istanza di Azure Cosmos DB archivia tali chiavi. I criteri di sicurezza potrebbero richiedere di [propagare tali chiavi a un servizio di gestione delle chiavi][Proteggere le chiavi di Azure Cosmos con Azure Key Vault] come Azure Key Vault. Assicurarsi anche di [ruotare le chiavi][Rotazione e rigenerazione delle chiavi] in base ai criteri dell'organizzazione.
Resilienza
È consigliabile usare le zone di disponibilità per proteggere le applicazioni business critical da errori del data center. I servizi di questa soluzione supportano le zone di disponibilità per gli SKU selezionati nelle aree abilitate per la zona di disponibilità. Per informazioni aggiornate, esaminare l'elenco dei servizi che supportano le zone di disponibilità.
Ottimizzazione dei costi
L'ottimizzazione dei costi riguarda l'analisi dei modi per ridurre le spese non necessarie e migliorare l'efficienza operativa. Per altre informazioni, vedere Panoramica del pilastro di ottimizzazione dei costi.
Per stimare il costo di questa soluzione, usare il calcolatore dei prezzi di Azure. Tenere inoltre presenti queste considerazioni:
[Hub eventi][Prezzi di Hub eventi] è disponibile nei livelli Basic, Standard, Premium e Dedicato. Il livello Premium o Dedicato è ideale per carichi di lavoro di streaming su larga scala. È possibile dimensionare la velocità effettiva, di conseguenza provare a usare inizialmente una velocità inferiore e aumentarla via via all'aumentare della domanda.
Azure Cosmos DB offre due modelli:
- Un modello di velocità effettiva con provisioning ideale per carichi di lavoro impegnativi. Questo modello è disponibile in due opzioni di gestione della capacità: standard e con scalabilità automatica.
- Un modello serverless adatto per l'esecuzione di carichi di lavoro di piccole dimensioni e soggetti a picchi.
Un cluster del servizio Azure Kubernetes è costituito da un set di nodi o macchine virtuali (VM) che vengono eseguiti in Azure. I costi relativi ai componenti di calcolo, archiviazione e rete rappresentano i costi principali di un cluster.
Database di Azure per PostgreSQL è disponibile nei livelli Server singolo e Server flessibile. I diversi livelli sono adattabili ai vari scenari, come nel caso di carichi di lavoro prevedibili, con possibilità di burst e a prestazioni elevate. I costi dipendono principalmente dalle opzioni scelte per i nodi di calcolo e la capacità di archiviazione. Per i nuovi carichi di lavoro, è consigliabile scegliere il livello Server flessibile perché ha una gamma più ampia di [funzionalità supportate][Confronto tra server singolo e server flessibile] sul livello Server singolo. Si noti anche che il server singolo si trova nel percorso di deprecazione.
La cache di Azure per Redis è disponibile in più livelli. Questi livelli supportano cache che vanno da 250 megabyte a diversi terabyte. Oltre alle dimensioni, anche altri requisiti influiscono sulla scelta del livello:
- Clustering
- Persistenza
- Replica geografica attiva
Distribuire lo scenario
Durante la distribuzione di questa soluzione tenere presenti queste considerazioni:
Quando si distribuiscono Hub eventi per Kafka, vedere [Avvio rapido: Flusso di dati con Hub eventi con il protocollo Kafka][Guida introduttiva: Flusso di dati con Hub eventi con il protocollo Kafka]. Questo articolo contiene le informazioni seguenti:
- Come inviare e ricevere messaggi con Kafka in Hub eventi
- Codice di esempio per un'applicazione di pubblicazione
- Come passare le applicazioni Kafka esistenti a Hub eventi per Kafka apportando modifiche alla configurazione
Per quanto riguarda Apache Spark:
- Per informazioni sulla creazione di un'applicazione Spark di base, vedere [Connettere l'applicazione Apache Spark con Hub eventi di Azure][Connettere l'applicazione Apache Spark con Hub eventi di Azure].
- Per ospitare l'applicazione Spark nel servizio Azure Kubernetes, vedere [Esecuzione di processi Apache Spark nel servizio Azure Kubernetes][Esecuzione di processi Apache Spark nel servizio Azure Kubernetes].
È consigliabile usare un'applicazione Java per scrivere eventi in Cassandra. Per altre informazioni, vedere [Avvio rapido: Creare un'app Java per gestire i dati di Azure Cosmos DB per Apache Cassandra (driver v4)][Guida introduttiva: Creare un'app Java per gestire i dati di Azure Cosmos DB per Apache Cassandra (driver v4)].
Quando si usa il [feed di modifiche di Azure Cosmos DB][Feed di modifiche in Azure Cosmos DB], fare riferimento a [Feed di modifiche in Azure Cosmos DB per Apache Cassandra][Feed di modifiche in Azure Cosmos DB per Apache Cassandra] per queste informazioni:
- Come usare i predicati di query in [Cassandra Query Language (CQL)][Cassandra Query Language] per eseguire query sull'API del feed di modifiche
- Codice di esempio per un'applicazione Java
Per informazioni sull'elaborazione degli eventi archiviati in Cassandra, vedere [Esercitazione: Eseguire query sui dati da Azure Cosmos DB per Apache Cassandra][Esercitazione: Eseguire query sui dati da Azure Cosmos DB per Apache Cassandra]. Questo articolo contiene anche il codice Java di esempio per l'uso dei comandi CQL che consentono di recuperare dati dalle tabelle.
Per informazioni sulla scrittura di dati in Database di Azure per PostgreSQL con un'applicazione orientata a batch, vedere [Guida introduttiva: Usare Java e JDBC con Database di Azure per PostgreSQL][Guida introduttiva: Usare Java e JDBC con Database di Azure per PostgreSQL]. Questo articolo contiene anche il codice Java di esempio per l'archiviazione dei dati.
Per informazioni sull'archiviazione e il recupero dei dati con cache di Azure per Redis, vedere [Guida introduttiva: Usare cache di Azure per Redis in Java][Guida introduttiva: Usare cache di Azure per Redis in Java]. Questo articolo contiene anche il codice Java di esempio per l'accesso a una cache.
Collaboratori
Questo articolo è aggiornato e gestito da Microsoft. Originariamente è stato scritto dai seguenti contributori.
Autore principale:
- Ajit Ananthram | Cloud Solution Architect
Passaggi successivi
- Guida per sviluppatori Apache Kafka per Hub eventi di Azure
- [Domande frequenti su Azure Cosmos DB per Apache Cassandra][Domande frequenti su Azure Cosmos DB per Apache Cassandra]
- Procedure consigliate per la compilazione di un'applicazione con Database di Azure per PostgreSQL
- Domande frequenti su cache di Azure per Redis
Risorse correlate
Per informazioni sulle soluzioni correlate, vedere le informazioni seguenti:
- Progettazione dell'architettura di analisi
- [Scegliere un archivio dati analitici in Azure][Scegliere un archivio dati analitici in Azure]
- [Scegliere una tecnologia di analisi dei dati in Azure][Scegliere una tecnologia di analisi dei dati in Azure]
- Azure Kubernetes nell'elaborazione del flusso di eventi
- [Flusso di dati con il servizio Azure Kubernetes][Flusso di dati con il servizio Azure Kubernetes]
[Cache-Aside pattern]: .. /.. /patterns/cache-aside.yml The [Cassandra Query Language (CQL)]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Cassandra Query Language]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Feed di modifiche in Azure Cosmos DB]: /azure/cosmos-db/change-feed [Feed di modifiche in Azure Cosmos DB per Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-change-feed?tabs=java [Scegliere un archivio dati analitici in Azure]: .. /.. /data-guide/technology-choices/analytical-data-stores.md [Scegliere una tecnologia di analisi dei dati in Azure]: .. /.. /data-guide/technology-choices/analysis-visualizations-reporting.md [Connettere l'applicazione Apache Spark con Hub eventi di Azure]: /azure/event-hubs/event-hubs-kafka-spark-tutorial [Creare contenitori e database di Azure Cosmos con velocità effettiva a scalabilità automatica]: /azure/cosmos-db/provision-throughput-autoscale [Flusso di dati con servizio Azure Kubernetes]: .. /.. /solution-ideas/articles/data-streaming-scenario.yml [Prezzi di Hub eventi]: https://azure.microsoft.com/pricing/details/event-hubs [Domande frequenti su Azure Cosmos DB per Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-faq [Gremlin Graph Traversal Machine and Language]: https://tinkerpop.apache.org/gremlin.html [Gremlin Graph Traversal Machine and Language]: https://tinkerpop.apache.org/gremlin.html [Introduzione ad Azure Cosmos DB per Apache Cassandra]: /azure/cosmos-db/cassandra-introduction [Introduzione ad Azure Data Lake Storage Gen2]: /azure/storage/blobs/data-lake-storage-introduction [Rotazione e rigenerazione delle chiavi]: /azure/cosmos-db/secure-access-to-data?tabs=using-primary-key#key-rotation [Kubernetes]: https://kubernetes.io [MongoDB]: https://www.mongodb.com [Open source in Azure]: https://www.mongodb.com [Open source in Azure]: https://azure.microsoft.com/overview/open-source/https://kubernetes.io [Panoramica di Hub eventi dedicati]: /azure/event-hubs/event-hubs-dedicated-overview [Panoramica di Hub eventi Premium (anteprima)]: /azure/event-hubs/event-hubs-premium-overview [Parquet]: https://parquet.apache.org [Partizionamento in Azure Cosmos DB per Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-partitioning [Procedure consigliate per le prestazioni per l'uso di Database di Azure per PostgreSQL - Pool di connessioni]: https://azure.microsoft.com/blog/performance-best-practices-for-using-azure-database-for-postgresql-connection-pooling [PgBouncer]: https://www.pgbouncer.org [Pgpool Wiki]: https://www.pgpool.net/mediawiki/index.php/Main_Page [PostgreSQL]: https://www.postgresql.org [Avvio rapido: Creare un'app Java per gestire Azure Cosmos DB per Dati di Apache Cassandra (driver v4)]: /azure/cosmos-db/cassandra/manage-data-java-v4-sdk [Avvio rapido: Flusso di dati con Hub eventi tramite il protocollo Kafka]: /azure/event-hubs/event-hubs-quickstart-kafka-enabled-event-hubs [Guida introduttiva: Usare Cache Redis di Azure in Java]: /azure/azure-cache-for-redis/cache-java-get-started [Guida introduttiva: Usare Java e JDBC con Database di Azure per PostgreSQL]: /azure/postgresql/flexible-server/connect-java?tabs=passwordless [Redis]: https://redis.io [Esecuzione di processi Apache Spark nel servizio Azure Kubernetes]: /azure/aks/spark-job [Proteggere le chiavi di Azure Cosmos con Azure Key Vault]: /azure/cosmos-db/access-secrets-from-keyvault [Esercitazione: Eseguire query sui dati da Azure Cosmos DB per Apache Cassandra]: /azure/cosmos-db/cassandra/query-data [Usare Hub eventi di Azure da applicazioni Apache Kafka]: /azure/event-hubs/event-hubs-for-kafka-ecosystem-overview [Diagramma dell'architettura di Visio]: https://arch-center.azureedge.net/US-1874059-open-source-data-engine-stream-processing-architecture.vsdx [Benvenuto in Azure Cosmos DB]: /azure/well-architected/service-guides/cosmos-db [Che cos'è Database di Azure per MySQL?]: /azure/mysql/overview [Che cos'è Database di Azure per PostgreSQL?]: /azure/postgresql/overview [Che cos'è collegamento privato di Azure?]: /azure/private-link/private-link-overview [Che cos'è PaaS?]: https://azure.microsoft.com/overview/what-is-paas/ [Che cos'è Power BI?]: /power-bi/fundamentals/power-bi-overview [Confronto tra server singolo e server flessibile]: /azure/postgresql/flexible-server/concepts-compare-single-server-flexible-server#comparison-table [PgBouncer nel server flessibile di Database di Azure per PostgreSQL]: /azure/postgresql/flexible-server/concepts-pgbouncer