Che cos'è il protocollo AMQP (Advanced Message Queuing Protocol)?

27 Marzo 2024

Il protocollo AMQP (Advanced Message Queuing Protocol) è un protocollo a livello di applicazione standard aperto per i messaggi orientati middleware, con particolare attenzione all'accodamento dei messaggi, al routing (punto a punto e pubblicazione e sottoscrizione), all'affidabilità e alla sicurezza.

A differenza dei sistemi di messaggistica proprietari, AMQP è un protocollo aperto e standardizzato che consente l'interoperabilità tra sistemi e applicazioni. Consente alle applicazioni di comunicare e scambiarsi messaggi in modo affidabile e scalabile, indipendentemente dalla piattaforma, dall'architettura o dal linguaggio sottostante. Questa capacità lo rende uno strumento essenziale per costruire sistemi distribuiti complessi o integrare ambienti eterogenei.

AMQP opera su un'architettura basata su broker, in cui il broker di messaggistica funge da intermediario che riceve messaggi dai produttori (invio applicazioni) e instrada questi messaggi ai consumatori appropriati (la ricezione delle applicazioni). Questo modello disaccoppia produttore e consumatore, consentendo loro di operare in modo indipendente.

Il protocollo definisce un insieme di componenti come code di messaggi, scambi e collegamenti che aiutano nel flexinstradamento e consegna dei messaggi. Inoltre, AMQP specifica sia il comportamento di intermediario di messaggistica e il protocollo di messaggistica stesso, garantendo una consegna affidabile dei messaggi attraverso funzionalità come il riconoscimento dei messaggi, code durevoli e la persistenza dei messaggi.

cos'è l'amqp

Una breve storia dell'AMQP

AMQP è nato dall'esigenza di un protocollo standardizzato, aperto e interoperabile per il middleware di messaggistica. Il suo sviluppo è iniziato nel 2003, quando John O'Hara della JPMorgan Chase di Londra ha riconosciuto i limiti e i costi dell'utilizzo di sistemi di messaggistica proprietari per l'integrazione delle applicazioni. L'obiettivo era creare un protocollo per facilitare la comunicazione orientata ai messaggi tra diverse piattaforme e tecnologie, riducendo la dipendenza da fornitori specifici e sistemi proprietari. La prima versione ufficiale di AMQP, AMQP 0-9-1, è stata rilasciata nel 2006.

Il rilascio di AMQP 1.0 nell'ottobre 2011 ha segnato una pietra miliare significativa. AMQP 1.0 ha introdotto importanti modifiche, rendendo il protocollo ancora più potente flexflessibile e interoperabile definendo un protocollo binario a livello di cavo indipendente dal linguaggio che può essere implementato su qualsiasi piattaforma. Questa versione di AMQP ha ricevuto un ampio sostegno da parte del settore ed è stata ratificata come standard internazionale dall'Organizzazione internazionale per la standardizzazione (ISO) e dalla Commissione elettrotecnica internazionale (IEC) nel 2014 come ISO/IEC 19464.

Da allora, AMQP è stato adottato a livello globale per varie applicazioni, che vanno dai servizi finanziari ai servizi finanziari IoT (Internet of Things) e cloud informatica.

Come funziona l'AMQP?

AMQP (Advanced Message Queuing Protocol) opera attraverso un framework meticolosamente progettato che orchestra il flusso di messaggi tra produttori e consumatori in modo affidabile, sicuro ed efficiente.

Fondamentalmente, il protocollo utilizza un'architettura basata su broker che funge da intermediario, gestendo i percorsi di comunicazione all'interno del sistema di messaggistica. I produttori inviano messaggi al broker, specificando non solo il contenuto ma anche gli aspetti critici metadati, come le chiavi di instradamento e le priorità dei messaggi. Questo broker si assume quindi la responsabilità di elaborare questi messaggi, determinandone le destinazioni appropriate in base alla logica di instradamento stabilita.

L'instradamento dei messaggi all'interno di AMQP è facilitato dagli scambi, che classificano i messaggi e li indirizzano alle code corrette in base a regole predefinite e al tipo di scambio utilizzato. Questa configurazione consente una varietà di modelli di messaggistica, dalla semplice messaggistica punto a punto a modelli di pubblicazione-sottoscrizione più complessi. Le code archiviano temporaneamente i messaggi, garantendo che siano conservati in modo sicuro finché un consumatore non è pronto a elaborarli. Dopo aver ricevuto un messaggio, i consumatori possono confermarne l'elaborazione, segnalando al broker di rimuovere il messaggio dalla coda, mantenendo così l'integrità e l'ordine della consegna del messaggio.

Questa sofisticata interazione tra i componenti di AMQP garantisce che i messaggi non solo vengano consegnati in modo efficiente ma anche con un elevato grado di affidabilità e sicurezza. Il protocollo supporta funzionalità avanzate come il riconoscimento dei messaggi, le transazioni e la messaggistica duratura, essenziali per le applicazioni che richiedono la consegna garantita dei messaggi e la capacità di ripristino in caso di errori di sistema. Inoltre, i meccanismi di sicurezza di AMQP, incluso SASL per autenticazione e TLS per crittografare i dati in transito.

Componenti AMQP

AMQP facilita la messaggistica complessa attraverso una serie di componenti principali che interagiscono in modo strutturato. Questi componenti sono fondamentali per l'architettura AMQP, poiché le consentono di supportare un'ampia varietà di modelli di messaggistica. Ecco un elenco e una spiegazione di questi componenti chiave:

  • Broker. Il broker funge da intermediario tra i produttori di messaggi (mittenti) e i consumatori (destinatari). È responsabile di ricevere messaggi dai produttori, instradarli in modo appropriato e consegnarli ai consumatori previsti. Il broker garantisce che i messaggi vengano archiviati, gestiti e inoltrati in modo efficiente, fornendo affidabilità e scalabilità al sistema di messaggistica.
  • Produttore. Il produttore, noto anche come editore, è un'applicazione o un servizio che invia messaggi. I produttori creano messaggi e li inviano a uno scambio all'interno del broker, spesso senza conoscere i consumatori specifici che riceveranno i messaggi. Ciò disaccoppia le parti di invio e di ricezione del sistema, migliorando flexbilità e scalabilità.
  • Consumatore. Un consumatore è un'applicazione o un servizio che riceve messaggi. I consumatori si iscrivono a una coda all'interno del broker ed elaborano i messaggi non appena arrivano. I consumatori possono riconoscere i messaggi una volta elaborati, il che informa il broker che il messaggio può essere rimosso in sicurezza dalla coda.
  • Exchange. Gli scambi sono entità AMQP in cui i produttori inviano messaggi. Uno scambio riceve e instrada i messaggi a una o più code in base alla chiave di instradamento del messaggio, al tipo di scambio e ai collegamenti. Gli scambi disaccoppiano i produttori dalle code, consentendo una logica di instradamento più complessa. Esistono diversi tipi di scambi, tra cui:
    • Scambio diretto. Instrada i messaggi alle code in base a una chiave di routing corrispondente.
    • Scambio di fan-out. Trasmette messaggi a tutte le code legate senza considerare le chiavi di routing.
    • Scambio di argomenti. Instrada i messaggi alle code in base alle corrispondenze con caratteri jolly tra la chiave di routing e il modello di routing specificato nell'associazione.
    • Scambio di intestazioni. Instrada i messaggi in base ai valori di intestazione corrispondenti anziché alle chiavi di instradamento.
  • Fare la fila. Una coda è un buffer che memorizza i messaggi finché non possono essere elaborati in modo sicuro da un consumatore. Le code garantiscono che i messaggi vengano consegnati ai consumatori in ordine "primo arrivato, primo servito", sebbene sia possibile impostare le priorità. I consumatori si iscrivono alle code per ricevere messaggi.
  • Rilegatura. I vincoli sono regole che collegano le code agli scambi. Un'associazione può includere una chiave o un modello di instradamento che determina il modo in cui i messaggi devono essere instradati dallo scambio alla coda. I collegamenti determinano la relazione tra scambi e code, controllando il modo in cui i messaggi vengono filtrati e instradati all'interno del broker.
  • Chiave di instradamento. Una chiave di instradamento è un'etichetta o un identificatore che i produttori allegano ai messaggi quando vengono inviati a uno scambio. Il valore della chiave di instradamento viene utilizzato dallo scambio, insieme alle configurazioni di collegamento, per determinare quali code dovrebbero ricevere il messaggio.
  • Messaggio. Il messaggio sono i dati trasportati tra il produttore e il consumatore. È costituito da un payload (i dati effettivi da trasmettere) e da intestazioni o proprietà (metadati sul messaggio, come tipo, priorità e modalità di consegna).
  • Canale. Un canale è una connessione virtuale all'interno di una connessione di rete fisica. I canali aiutano a multiplexare la connessione di rete tra il client AMQP (produttore/consumatore) e il broker per una comunicazione più efficiente.
  • Host virtuale (vHost). Un host virtuale fornisce un modo per separare le applicazioni utilizzando lo stesso broker AMQP. Ogni host virtuale può avere il proprio set indipendente di scambi, code e collegamenti.

Casi d'uso AMQP

AMQP è un protocollo di messaggistica versatile che supporta un'ampia gamma di casi d'uso in vari settori e applicazioni. Il suo robusto set di funzionalità, tra cui accodamento dei messaggi, routing, affidabilità e sicurezza, lo rende adatto a sistemi complessi, distribuiti e scalabili. Ecco alcuni casi d'uso chiave per AMQP:

  • Integrazione delle applicazioni aziendali. AMQP consente applicazioni, sistemi e banche dati comunicare e scambiare dati in modo affidabile e sicuro. Ciò è particolarmente utile in ambienti eterogenei in cui le applicazioni sono realizzate su piattaforme e tecnologie diverse che devono lavorare insieme senza problemi.
  • Sistemi disaccoppiati. In architetture di microservizi o quando si implementano architetture orientate ai servizi (SOA), AMQP consente ai servizi di comunicare senza essere strettamente collegati tra loro. Questo disaccoppiamento migliora la scalabilità e la resilienza del sistema, poiché i servizi possono essere sviluppati, distribuiti e scalati in modo indipendente.
  • Elaborazione dei dati in tempo reale. AMQP viene utilizzato negli scenari che richiedono dati in tempo reale elaborazione, come l'analisi dello streaming, in cui i dati devono essere raccolti, elaborati e analizzati immediatamente. Il protocollo garantisce la consegna affidabile dei messaggi, anche durante guasti di rete o ritardi di elaborazione.
  • Bilancio del carico. AMQP può distribuire attività o carichi di lavoro tra più processi o servizi di lavoro, aiutando a bilanciare il carico e migliorare l’efficienza complessiva e la reattività del sistema. Questa funzionalità è particolarmente utile in cloud ambienti informatici e di elaborazione distribuiti con carichi di lavoro imprevedibili.
  • Comunicazione asincrona. AMQP supporta modelli di comunicazione asincroni, consentendo alle applicazioni di inviare e ricevere messaggi senza bloccare le operazioni. Questo tipo di comunicazione è fondamentale per le applicazioni che richiedono un throughput elevato e una bassa latenza, poiché consente loro di rimanere reattive durante l'attesa dei messaggi.
  • Internet delle cose (IoT). Nelle applicazioni IoT, AMQP viene utilizzato per raccogliere dati da vari sensori e dispositivi e trasmetterli a sistemi di elaborazione o cloud Servizi. La sua capacità di operare su reti limitate e la sua messaggistica sicura e affidabile lo rendono una scelta eccellente per gli scenari IoT.
  • Servizi finanziari. AMQP è utilizzato nel settore finanziario per l'elaborazione delle transazioni, i sistemi di trading in tempo reale e l'elaborazione dei pagamenti. La sua affidabilità e il supporto per la messaggistica transazionale garantiscono l'integrità e la coerenza delle transazioni finanziarie.
  • Notifiche e avvisi. AMQP può essere utilizzato per implementare sistemi di notifica, in cui avvisi, notifiche o e-mail vengono inviati a utenti o sistemi in risposta a eventi o condizioni specifici. La sua messaggistica affidabile garantisce che le notifiche vengano consegnate anche se il destinatario è temporaneamente non disponibile.
  • Assistenza sanitaria. Nel settore sanitario, AMQP consente una comunicazione sicura e affidabile tra diversi sistemi, come le cartelle cliniche, la fatturazione e le apparecchiature diagnostiche. Garantisce che i dati sensibili siano trasmessi in modo sicuro e trattati nel rispetto delle normative.

AMQP contro MQTT

AMQP e MQTT (Message Queuing Telemetry Transport) sono entrambi protocolli progettati per middleware orientato ai messaggi, ma hanno scopi diversi e sono ottimizzati per casi d'uso diversi.

AMQP è un protocollo più ricco di funzionalità, che fornisce un'ampia gamma di funzionalità di messaggistica, tra cui accodamento dei messaggi, routing, gestione delle transazioni e sicurezza. Il suo modello è intrinsecamente più complesso e flexflessibile, offrendo robustezza per i sistemi che necessitano di un controllo preciso sui comportamenti di messaggistica e sulle integrazioni su diverse piattaforme.

D’altra parte, MQTT è progettato per essere semplice e leggero. Questo protocollo segue uno schema di pubblicazione-sottoscrizione, eccellendo in scenari che richiedono pacchetti di dati minimi e una distribuzione efficiente dei messaggi a più consumatori. MQTT è caratterizzato dal basso consumo energetico e dalla facilità di implementazione su dispositivi con capacità di elaborazione limitate, che lo rendono ideale per la messaggistica in tempo reale negli ecosistemi IoT.

Ecco una panoramica di questi confronti:

Punto di confrontoAMQPMQTT
Obiettivo di progettazioneProgettato per modelli di messaggistica complessi e integrazione aziendale.Progettato per la messaggistica leggera, principalmente negli scenari IoT.
Overhead del protocolloSuperiore grazie a un set di funzionalità più completo.Inferiore, ottimizzato per un utilizzo minimo della larghezza di banda.
Modello di messaggisticaSupporta modelli punto a punto e pubblicazione-sottoscrizione, insieme a routing avanzato, transazioni e accodamento di messaggi.Utilizza principalmente un modello di pubblicazione-sottoscrizione, con minore attenzione al routing dei messaggi.
Quality of Service (QoS)Fornisce vari livelli di garanzia di recapito dei messaggi, incluso il recapito al massimo una volta, almeno una volta e esattamente una volta.Offre tre livelli di QoS: 0 (al massimo una volta), 1 (almeno una volta) e 2 (esattamente una volta).
Casi d'usoIdeale per l'integrazione di applicazioni aziendali, processi aziendali complessi e situazioni che richiedono la consegna affidabile dei messaggi e il supporto delle transazioni.Ideale per connettere dispositivi IoT, soprattutto in ambienti con larghezza di banda e potenza limitate.
Flexabilità e complessitàPiù complesso a causa di un'ampia gamma di funzionalità, che richiedono maggiori conoscenze per un'implementazione efficace.Più semplice e diretto, facilitando l'implementazione in ambienti limitati.
SicurezzaFornisce funzionalità di sicurezza complete, tra cui autenticazione e crittografia.Supporta meccanismi di sicurezza di base ma spesso fa affidamento sulla sicurezza di rete sottostante.
InteroperabilitàProgettato per consentire l'interoperabilità tra diversi sistemi e fornitori, rendendolo adatto ad ambienti aziendali con diverse tecnologie.Focalizzato sull'interoperabilità nel contesto dei dispositivi e delle piattaforme IoT.

Anastasia
Spasojevic
Anastazija è una scrittrice di contenuti esperta con conoscenza e passione per cloud informatica, informatica e sicurezza online. A phoenixNAP, si concentra sulla risposta a domande scottanti su come garantire la robustezza e la sicurezza dei dati per tutti i partecipanti al panorama digitale.