Sviluppo delle applicazioni moderne - Messaggistica

Le soluzioni di messaggistica connettono i componenti dell'applicazione, consentendo loro di scambiare dati in modo affidabile, scalabile in modo trasparente e di raggiungere un livello elevato di disponibilità.Consentono di scollegare l'elaborazione dai produttori di dati, aggiungere in modo efficiente il buffer dei messaggi non elaborati e garantire durabilità dei messaggi, scalabilità dei processi e resilienza delle applicazioni.

Le applicazioni basate su messaggi si estendono su una vasta gamma di architetture: il trasferimento di dati tra i componenti può far parte di una pipeline di elaborazione distribuita e convergente ben definita oppure i componenti possono pubblicare messaggi in più sistemi a valle indipendenti che si evolvono in modo indipendente. Esistono tre modelli di messaggistica moderni comuni, ciascuno con requisiti applicativi condivisi e distinti:

Streaming eventi

Le applicazioni di streaming di eventi incorporano flussi di dati a volumi elevati e ad alta velocità che devono essere elaborati in tempo reale. I dati grezzi devono essere elaborati per estrarre gli approfondimenti che possono essere utilizzati da altri componenti dell'applicazione, per il monitoraggio o che possono essere memorizzati per analisi successive.

Segue la descrizione di maf-messaging-streaming.png
Descrizione dell'immagine maf-messaging-streaming.png

maf-messaging-streaming-oracle.zip

Questa applicazione di streaming di eventi di esempio utilizza Oracle Cloud Infrastructure Streaming o Oracle Transactional Event Code (TEQ) come soluzione di messaggistica di base, Oracle Cloud Infrastructure Functions per l'elaborazione in tempo reale e Oracle Autonomous Database come backing store.

Pubblicazione e sottoscrizione

Publish-subscribe o pub/sub è un modello di comunicazione in cui i produttori di dati pubblicano i dati su argomenti specifici che possono poi essere utilizzati da un numero qualsiasi di consumatori a valle sottoscrivendo tali argomenti. L'accoppiamento tra produttori e consumatori è piuttosto lento, in modo che i consumatori possano evolversi in modo indipendente senza incidere sui produttori a monte.

Segue la descrizione di maf-messaging-publishers-subscriber.png
Descrizione dell'illustrazione maf-messaging-publishers-subscriber.png

maf-messaging-publishers-subscriber-oracle.zip

Questo esempio mostra come utilizzare Oracle Cloud Infrastructure Streaming o Oracle TEQ per implementare un pattern di messaggistica pubblica/sub.

Codifica messaggi

La accodamento dei messaggi consente l'elaborazione con conservazione dello stato distribuita in cui i componenti a monte e a valle sono strettamente associati e implementano insieme un flusso di lavoro dell'applicazione. La soluzione di messaggistica deve supportare la semantica, ad esempio la consegna immediata per evitare che i messaggi vengano perduti prima del consumo.

Segue la descrizione del file maf-messaging-queuing.png
Descrizione dell'immagine maf-messaging-queuing.png

maf-messaging-coda-oracle.zip

In questo esempio viene illustrato come utilizzare Oracle Cloud Infrastructure Queue o Oracle TEQ per implementare la coda dei messaggi.

Principi di progettazione

Utilizzare i principi di progettazione riportati di seguito per creare applicazioni o piattaforma di messaggistica.
  • Crea applicazioni sotto forma di suite di servizi che comunicano mediante le API REST

    Utilizza API standard del settore, ad esempio Kafka e JMS, per fornire interoperabilità dell'applicazione e creare senza difficoltà applicazioni di messaggistica ibride e multicloud. Lo streaming di Oracle Cloud Infrastructure (OCI) fornisce un'API di compatibilità Kafka e le code degli eventi di transazione Oracle (TEQ) supportano sia le API Kafka che JMS. Sia Kafka che JMS sono ampiamente supportati da prodotti di terze parti. Ad esempio, è possibile utilizzare il connettore JMS Confluent Kafka per trasferire i messaggi tra Oracle TEQ e Kafka. Puoi anche utilizzare Kafka Connect distribuito su cluster Oracle Container Engine for Kubernetes per connettersi a prodotti di terze parti. Oracle Cloud Infrastructure Queue può essere chiamato utilizzando la definizione API RESTful (con una specifica OpenAPI) o utilizzando il protocollo STOMP standard del settore.

  • Utilizzare i servizi gestiti per eliminare la complessità nello sviluppo e nelle operazioni delle applicazioni

    Utilizza servizi completamente gestiti con l'applicazione di patch di manutenzione e sicurezza dell'infrastruttura integrata, ad esempio streaming OCI, coda OCI, e le funzioni Oracle TEQ e Advanced Queuing (AQ) di Oracle Autonomous Database (ADB). Questi servizi sono ad alta disponibilità grazie alla replica automatica nei vari domini di disponibilità e al supporto dell'automazione della scalabilità in risposta alla modifica dei carichi.

  • Mantieni il livello dell'applicazione senza conservazione dello stato

    Lo stato correlato alla messaggistica, ad esempio la posizione in una coda di messaggi, non deve mai essere memorizzato nell'applicazione o nel file system locale, in quanto questa operazione potrebbe causare la perdita di dati in caso di errore di un'istanza dell'applicazione. Le applicazioni possono inserire nella cache i contenuti dei messaggi per l'elaborazione, ma la soluzione di messaggistica deve rimanere la singola fonte di informazioni affidabili per tutti i dati di messaggistica. I metadati correlati, ad esempio la posizione in una coda di messaggi, devono essere memorizzati in un database o nello storage degli oggetti per evitare la perdita di messaggi e garantire un'operazione idempotente. Questo aiuta con il recupero dei guasti e rende anche più facile scalare un servizio su o giù senza perdita di correttezza.

  • Monitoraggio e rintracciamento end-to-end degli strumenti

    Garantisci una comprensione autorevole dello stato di integrità, delle prestazioni e operativo dell'applicazione. Utilizza il portafoglio di servizi di Oracle Cloud Observability and Management Platform per ottenere visibilità e insight utili su tutti i livelli dello stack di applicazioni, dai produttori di dati e dai consumatori alle pipeline di messaggistica stesse. Monitora la lunghezza delle code e la durata dell'elaborazione per rilevare errori e punti critici e rilevare problemi con i servizi che effettuano la sottoscrizione agli argomenti.

  • Elimina singoli punti di errore attraverso la replica automatizzata dei dati e il recupero dagli errori

    Esegui il backup dei dati di messaggistica nello storage persistente per soddisfare le esigenze normative e di conformità. Usa il backup tra più aree per il recupero da errori irreversibili. Incorporare l'idempotenza nelle applicazioni di messaggistica, ad esempio utilizzando i timeout di visibilità dei messaggi nella coda OCI. Scrivi errori irreversibili in un flusso separato, in una coda di lettere morta o nello storage persistente senza bloccare la pipeline di esecuzione primaria.

  • Implementa un approccio automatico di difesa approfondita per proteggere la tua applicazione e i relativi dati

    Implementare i criteri Oracle Cloud Infrastructure Identity and Access Management (IAM) per consentire solo agli utenti autorizzati di creare, inviare o ricevere dati da flussi e code OCI. Applica il principio di raggiungibilità minima proteggendo l'accesso agli endpoint di messaggistica utilizzando gli endpoint privati e il gateway di servizi, che limita l'accesso da Internet. Utilizza la funzionalità integrata di streaming OCI, coda OCI e TEQ per cifrare i dati in archivio e in transito per ottenere la riservatezza dei dati. Tuttavia, se è necessario aumentare la proprietà della rotazione delle chiavi, utilizzare il servizio Oracle Cloud Infrastructure Vault per gestire in modo sicuro le chiavi principali.

Architettura

Il diagramma riportato di seguito mostra come utilizzare lo streaming OCI per implementare lo streaming di eventi
Segue la descrizione di maf-messaging.png
Descrizione dell'illustrazione maf-messaging.png

maf-messaging-oracle.zip

Utilizza OCI Streaming per implementare lo streaming di eventi e i pattern di messaggistica di pub/sub e Oracle Cloud Infrastructure Queue per implementare la coda dei messaggi. Utilizzare Oracle Autonomous Database per rendere persistenti i dati degli eventi elaborati. Le funzioni OCI possono essere utilizzate per elaborare i dati degli eventi prima che vengano utilizzati dai componenti dell'applicazione a valle o resi persistenti nel database.

Implementare l'isolamento della rete utilizzando subnet dedicate per l'applicazione e per il database e per i servizi di messaggistica. Proteggi l'accesso ai tuoi flussi utilizzando endpoint privati. Utilizzare i criteri Oracle Cloud Infrastructure Identity and Access Management (IAM) per limitare l'accesso alle code

Utilizza Oracle Cloud Infrastructure Object Storage per la conservazione a lungo termine dei messaggi. Utilizza un servizio serverless, ad esempio il connettore servizio, per spostare facilmente i dati dal servizio di streaming OCI allo storage degli oggetti e abilitare il backup tra più aree dello storage degli oggetti per ottenere il backup multiregion. Implementa una strategia di recupero da errori irreversibili tra più aree utilizzando la soluzione Kafka MirrorMaker 2.0 distribuita in un ambiente Oracle Container Engine for Kubernetes (OKE) per replicare i dati in modo asincrono tra i flussi. Questa impostazione consente di impostare un obiettivo tempo di recupero (RTO) e un obiettivo punto di recupero (RPO) di minuti. Usa il peering VCN remoto per garantire una latenza minima durante il trasferimento dati.

Utilizzare code di lettere inattive per isolare i messaggi problematici. Le code di lettera morta vengono create automaticamente quando si crea una coda. Le code di lettera morta consentono di evitare che i messaggi in errore blocchino la pipeline di esecuzione primaria. I messaggi nella coda delle lettere non recapitate possono quindi essere analizzati per determinare il motivo della mancata riuscita.

Crea un'idempotenza nelle applicazioni memorizzando gli offset dei messaggi elaborati nello storage esterno, ad esempio lo storage degli oggetti. Rileva ed elimina i duplicati eseguendo una query sull'area di memorizzazione esterna. Categorizza gli errori che sono facilmente recuperabili e ti consentono di ripetere i messaggi.

Questa architettura utilizza i servizi e le tecnologie seguenti:

  • Streaming

    Il streaming di Oracle Cloud Infrastructure offre una soluzione di storage completamente gestita, scalabile e duratura dedicata all'inclusione di flussi di dati continui e a elevato volume che puoi utilizzare ed elaborare in tempo reale. Puoi utilizzare la funzionalità di streaming per l'inclusione di dati a elevato volume, come log dell'applicazione, telemetria operativa, dati di clic sul Web o per altri casi d'uso in cui i dati vengono prodotti e elaborati in maniera continua e sequenziale in un modello di messaggistica di pubblicazione/sottoscrizione.

  • In coda

    La coda di Oracle Cloud Infrastructure fornisce un sistema scalabile per l'elaborazione dei messaggi e la gestione di attività di gestione complesse, come l'elaborazione, il tracciamento e l'isolamento dei client garantiti una volta trascorso. Questo servizio centralizzato gestisce anche l'ordinamento e l'elaborazione dei messaggi, il che consente ai processi client senza conservazione dello stato di sovraccaricare il monitoraggio dei cursore.

  • Funzioni

    Oracle Cloud Infrastructure Functions è una piattaforma completamente gestita, multi-tenant, altamente scalabile, on-demand e Functions-as-a-Service (FaaS). Si basa sul motore open source di Fn Project. Le funzioni consentono di distribuire il codice e di chiamarlo direttamente o attivarlo in risposta agli eventi. Oracle Functions utilizza i container Docker ospitati in Oracle Cloud Infrastructure Registry.

  • Connettori servizio

    Hub connettore servizio Oracle Cloud Infrastructure è una piattaforma bus messaggi cloud che orchestra lo spostamento dei dati tra i servizi in OCI. È possibile utilizzare i connettori del servizio per spostare i dati da un servizio di origine a un servizio di destinazione. I connettori servizio consentono inoltre di specificare facoltativamente un task (ad esempio una funzione) da eseguire sui dati prima che venga consegnato al servizio di destinazione.

    È possibile utilizzare l'hub connettore servizio di Oracle Cloud Infrastructure per creare rapidamente un framework di aggregazione dei log per i sistemi SEM (Security Information and Event Management).

Architettura alternativa incentrata sul database

Questa architettura utilizza TQ (Transactional Event Queue) per implementare pattern di messaggistica nelle applicazioni moderne. TEQ è una funzione integrata di Oracle Autonomous Database.

Segue la descrizione di maf-messaging-alternate.png
Descrizione dell'illustrazione maf-messaging-alternate.png

maf-messaging-alternate-oracle.zip

Questa architettura offre una semplicità, eliminando la necessità di utilizzare servizi di streaming o accodamento esterni e offre funzionalità di messaggistica transazionale che semplificano i pattern comuni di microservizi.

TEQ combina l'elaborazione dei dati e dei messaggi in un'infrastruttura scalabile che semplifica la gestione del ciclo di vita, la sicurezza e il disaster recovery, fornendo al contempo prestazioni elevate. TEQ supporta pattern di messaggistica comuni, tra cui streaming, accodamento e pub/sub. Puoi implementare le transazioni attraverso le operazioni di messaggistica e database utilizzando TEQ e implementare facilmente modelli di messaggistica come la posta in uscita transazionale e la messaggistica esattamente una volta con pochi o nessun codice aggiuntivo. Oracle TEQ fornisce la messaggistica una tantum per le applicazioni in esecuzione nel database. Ciò significa che non è necessario gestire gli ID messaggio per controllare i messaggi duplicati o creare consumer idempotenti a livello di applicazione. TEQ supporta sia i messaggi di piccole dimensioni tipici nell'elaborazione degli eventi, sia i payload più grandi associati ai flussi di lavoro aziendali, e può anche funzionare come rete evento sicura.

L'eliminazione dei servizi di streaming o di accodamento esterni semplifica la gestione dello stato. Gli eventi e i messaggi vengono memorizzati nello stesso database utilizzato dall'applicazione. In questo modo potrai raggiungere e mantenere coerenti eventi, messaggi e modifiche alle applicazioni. In caso di guasto che richiede un ripristino point-in-time o un disaster recovery, tutto (eventi, messaggi e dati dell'applicazione) viene automaticamente recuperato allo stato coerente.

TEQ trae vantaggio dall'alta disponibilità di Autonomous Database. Il backup e la protezione dei dati di messaggistica in TEQ vengono eseguiti automaticamente dalla replica tra più aree di ADB mediante Autonomous Data Guard. Puoi distribuire Oracle TEQ in modo altamente disponibile utilizzando Oracle Real Application Clusters e Oracle Active Data Guard, entrambe funzionalità integrate di Oracle Autonomous Database. Oracle Real Application Clusters fornisce disponibilità all'interno di un'area geografica, mentre Oracle Active Data Guard fornisce protezione da recupero da errori irreversibili in più aree.

Utilizzare questa architettura se l'applicazione esegue una delle operazioni riportate di seguito.

  • Necessità di implementare le code dei messaggi e richiede la semantica, ad esempio per la posta in uscita transazionale
  • Non è necessario un ridimensionamento indipendente del database e del substrato di messaggistica

Questa architettura utilizza i seguenti servizi e tecnologie:

  • Code eventi transazionali (TEQ) e coda avanzata (AQ)

    Le code degli eventi transazionali (TEQ) e l'AQ (Advanced Queueing) sono sistemi di accodamento dei messaggi robusti e ricchi di funzioni integrati con Oracle Database. Le code degli eventi transazionali (TEQ, Transactional Event Queues) sono un'implementazione in-memory ad alte prestazioni con più flussi di eventi per coda. L'accodamento avanzato (AQ) è adatto per casi d'uso più semplici del flusso di lavoro. Queste funzioni utilizzano Oracle Database per rendere persistenti i messaggi e garantire throughput e scalabilità di alto livello.

  • Funzioni

    Oracle Cloud Infrastructure Functions è una piattaforma completamente gestita, multi-tenant, altamente scalabile, on-demand e Functions-as-a-Service (FaaS). Si basa sul motore open source di Fn Project. Le funzioni consentono di distribuire il codice e di chiamarlo direttamente o attivarlo in risposta agli eventi. Oracle Functions utilizza i container Docker ospitati in Oracle Cloud Infrastructure Registry.

Architetture non consigliate

  • Applicazioni Message and Service Bus monolitiche

    Le soluzioni di messaggistica quali RabbitMQ possono supportare l'integrazione con altri componenti tramite standard aperti e interfacce API. Tuttavia, queste soluzioni richiedono notevoli sforzi amministrativi per le PMI e potrebbero non offrire ridondanza distribuita e alta disponibilità senza topologie complesse autogestite.

  • Cluster Kafka in un ambiente cloud o on premise autogestito

    Questa soluzione, pur offrendo scalabilità e alta disponibilità, richiede importanti conoscenze specifiche per gli sviluppatori e un ampio sovraccarico amministrativo operativo per le PMI. Prima di selezionare questa opzione, è necessario tenere in debita considerazione i tempi di produzione e il rischio di un costo totale di proprietà elevato (TCO).

Considerazioni

Durante l'implementazione del pattern di progettazione della messaggistica, tenere presenti le opzioni di implementazione riportate di seguito.

Scegli la piattaforma di messaggistica più adatta in base ai requisiti della tua applicazione

Le piattaforme e i servizi di base potrebbero apparire simili e condividere funzioni comuni. Tuttavia, ogni piattaforma offre funzioni e punti di forza esclusivi che potrebbero essere più allineati ai requisiti della tua applicazione. Ad esempio:

  • Utilizza le code degli eventi transazionali o di streaming OCI se le tue applicazioni richiedono una piattaforma di messaggistica ad alto throughput in tempo reale che offre repliche dei messaggi e abilità secondarie dei pub.
  • Utilizzare le code degli eventi transazionali se è necessario un buffer point-to-point scalabile e affidabile per spostare i dati in modo asincrono.
  • Utilizzare l'hub connettore servizio (SCH) per abilitare l'integrazione con le risorse dell'infrastruttura.
  • Utilizza TQ (Transactional Event Queue) nel database durante la progettazione di nuovi microservizi con messaggistica integrata in Oracle Autonomous Database.

Casi aziendali pubblici

Architettura basata su streaming Oracle

Tango Eye converte video di sorveglianza in informazioni utili per il settore retail.

  • Oracle Cloud Infrastructure (OCI) Streaming  gestisce sistemi di messaggistica di pubblicazione/sottoscrizione a bassa manutenzione per diversi microservizi. 
  • Oracle Cloud Infrastructure Functions esegue job serverless senza alcuna supervisione ingegneristica.
  • I criteri del ciclo di vita per Oracle Cloud Infrastructure Object Storage archiviano e rimuovono automaticamente i dati, riducendo i costi senza diminuire il valore dell'analisi dei dati basata sull'AI di Tango Eye.

Architettura basata su Oracle TEQ

FedEx utilizza Oracle E-Business Suite e il manager degli eventi aziendali creato con Oracle TEQ per la contabilità clienti che conta 15,5 milioni di pacchetti consegnati ogni giorno.

  • FedEx ha spostato E-Business Suite su Oracle Cloud Infrastructure Object Storage utilizzando Exadata Cloud Service. I flussi di lavoro e il sistema di eventi aziendali di E-Business Suite sono interamente basati sulla messaggistica di Oracle Advanced Queuing (AQ).
  • Oracle AQ è facile da usare e adatto per l'orchestrazione del flusso di lavoro. Per gli eventi con throughput elevato, Oracle TEQ è la sostituzione di drop-in ad alte prestazioni con più flussi di eventi per coda, interoperabile con apache Kafka.

Distribuisci

Universal Health Organization (UHO) è un'applicazione di esempio che aderisce ai principi del Modern App Development Framework. In particolare, implementa elementi dei pattern di architettura basati su Web o mobile, messaggistica ed eventi ed è disponibile su GitHub.
  1. Vai a GitHub.
  2. Duplicare o scaricare il repository sul computer locale.
  3. Seguire le istruzioni riportate nel documento README.

Log delle modifiche

Questo log elenca le modifiche significative:

Conferme

Authors: Harshad Kasture, Randall Barnes, Matthias Brantner

Contributors: Hassan Ajan, James Emerson, Parvez Syed Mohamed, Sajan Parihar, Wei Hu, Sreya Dutta, Joshua Stanley