Condividi tramite


Analogie e differenze tra le code di archiviazione e le code del bus di servizio

Questo articolo analizza le differenze e le analogie presenti tra i due tipi di code offerte attualmente da Microsoft Azure: code di Archiviazione e code del bus di servizio. Sulla base di queste informazioni è possibile prendere una decisione più informata sulla soluzione più adatta alle proprie esigenze.

Presentazione

Azure supporta due tipi di meccanismi di code: code di archiviazione e code del bus di servizio.

Le code di Archiviazione fanno parte dell'infrastruttura di Archiviazione di Azure. Consentono di archiviare un numero elevato di messaggi. È possibile accedere ai messaggi ovunque ci si trovi con chiamate autenticate tramite HTTP o HTTPS. Un messaggio in coda avere dimensioni fino a 64 KB. Una coda può contenere milioni di messaggi, fino al limite di capacità totale dell'account di archiviazione. Le code vengono in genere usate per creare un backlog di lavoro da elaborare in modo asincrono. Per altre informazioni, vedere Cosa sono le code di Archiviazione di Azure.

Le code del bus di servizio fanno parte di un'infrastruttura di messaggistica di Azure più ampia che supporta accodamento, pubblicazione/sottoscrizione e modelli di integrazione più avanzati. Sono progettate per integrare applicazioni e componenti delle applicazioni che possono comprendere più protocolli di comunicazione, contratti dati, domini di trust o ambienti di rete. Per altre informazioni su code, argomenti e sottoscrizioni del bus di servizio, vedere Code, argomenti e sottoscrizioni del bus di servizio.

Considerazioni sulla selezione della tecnologia

Le code di archiviazione e le code del bus di servizio hanno un set di funzionalità leggermente diverso. È possibile scegliere una o entrambe le opzioni, a seconda delle esigenze della soluzione specifica.

Quando si stabilisce la tecnologia di accodamento che soddisfa lo scopo di una determinata soluzione, è consigliabile che gli architetti e gli sviluppatori di soluzioni tengano in considerazione le indicazioni riportate di seguito.

Valutare l'uso delle code di archiviazione

Gli architetti e gli sviluppatori di soluzioni dovrebbero considerare l'uso delle code di Archiviazione quando:

  • L'applicazione deve archiviare più di 80 gigabyte di messaggi in una coda.
  • L'applicazione deve tenere traccia dello stato dell'elaborazione di un messaggio nella coda. Questa funzionalità è utile in caso di arresto anomalo di un processo di elaborazione di un messaggio. Un altro ruolo di lavoro può quindi usare tali informazioni per continuare dal punto in cui è stato interrotto il ruolo di lavoro precedente.
  • Sono necessari i log lato server di tutte le transazioni eseguite sulle code.

Valutare la possibilità di usare le code del bus di servizio

Gli architetti e gli sviluppatori di soluzioni dovrebbero considerare l'uso delle code del bus di servizio quando:

  • La soluzione deve ricevere messaggi senza dover eseguire il polling della coda. Usando il bus di servizio, è possibile ottenere questo risultato mediante un'operazione di ricezione con polling prolungato con protocolli basati su TCP supportati dal bus di servizio.
  • La soluzione richiede che la coda specifichi un recapito ordinato First In First Out (FIFO) garantito.
  • La soluzione deve supportare il rilevamento automatico dei duplicati.
  • L'applicazione dovrà elaborare i messaggi come flussi paralleli a esecuzione prolungata (i messaggi sono associati a un flusso mediante la proprietà session ID). In questo modello ogni nodo dell'applicazione che utilizza il servizio entra in competizione con gli altri nodi per l'acquisizione dei flussi anziché dei messaggi. Quando un flusso viene assegnato a un nodo basato sul servizio, tale nodo può esaminare lo stato del flusso dell'applicazione mediante transazioni.
  • La soluzione richiede il comportamento transazionale e l'atomicità quando si inviano o ricevono più messaggi da una coda.
  • L'applicazione gestisce messaggi che possono superare i 64 KB, ma probabilmente non raggiungerà il limite di 256 KB o 1 MB, a seconda del livello di servizio scelto (anche se le code del bus di servizio possono gestire i messaggi fino a 100 MB).
  • È necessario fornire un modello di accesso basato sui ruoli alle code e diritti e autorizzazioni diversi per mittenti e ricevitori. Per altre informazioni, vedere gli articoli seguenti:
  • Le dimensioni della coda non superano gli 80 GB.
  • Si vuole usare il protocollo di messaggistica basato sugli standard AMQP 1.0. Per altre informazioni su AMQP, vedere Panoramica di AMQP per il bus di servizio.
  • Si prevede una migrazione finale dalla comunicazione point-to-point basata su coda a un modello di messaggistica pubblicazione-sottoscrizione. Questo modello consente l'integrazione di destinatari aggiuntivi (sottoscrittori). Ogni destinatario riceve copie indipendenti di alcuni o tutti i messaggi inviati alla coda.
  • La soluzione di messaggistica deve garantire il recapito "At-Most-Once" e "At-Least-Once" senza che sia necessario sviluppare i componenti aggiuntivi dell'infrastruttura.
  • La soluzione deve pubblicare e utilizzare batch di messaggi.

Confrontare le code di Archiviazione code con le code del bus di servizio

Le tabelle nelle sezioni seguenti forniscono un raggruppamento logico delle funzionalità delle code. Consentono di confrontare, a colpo d'occhio, le funzionalità disponibili nelle code di Archiviazione di Azure e nelle code bus di servizio.

Funzionalità fondamentali

Questa sezione confronta alcune delle funzionalità di accodamento fondamentali fornite dalle code di archiviazione e dalle code del bus di servizio.

Criteri di confronto Code di archiviazione Code del bus di servizio
Garanzia di ordinamento No

Per altre informazioni, vedere la prima nota della sezione Informazioni aggiuntive.
Sì - First-In-First-Out (FIFO)

(tramite sessioni di messaggi)
Garanzia di recapito At-Least-Once At-Least-Once (tramite la modalità di ricezione PeekLock, impostazione predefinita)

At-Most-Once (tramite la modalità di ricezione ReceiveAndDelete)

Altre informazioni sulle diverse modalità di ricezione
Supporto per l'operazione atomica No

Comportamento di ricezione Non bloccante

(viene completata immediatamente se non vengono trovati altri messaggi)
Blocco con o senza timeout

(offre disponibilità di polling prolungato o la "Tecnica Comet")

Non bloccante

(solo tramite l'API gestita .NET)
API di tipo push No

Gli SDK .NET, Java, JavaScript e Go offrono API di tipo push.
Modalità di ricezione Visualizzazione e lease Visualizzazione e blocco

Ricezione ed eliminazione
Modalità di accesso esclusivo Basato sul lease Basato sul blocco
Durata lease/blocco 30 secondi (impostazione predefinita)

7 giorni (durata massima) (È possibile rinnovare o rilasciare un lease di messaggio tramite l'interfaccia API UpdateMessage).
30 secondi (impostazione predefinita)

È possibile rinnovare il blocco dei messaggi per la stessa durata del blocco manualmente ogni volta o usare la funzionalità di rinnovo automatico del blocco in cui il client gestisce automaticamente il rinnovo del blocco.
Precisione lease/blocco Livello di messaggio

Ogni messaggio può avere un valore di timeout diverso, che è quindi possibile aggiornare in base alle esigenze durante l'elaborazione del messaggio usando l'API UpdateMessage .
Livello di coda

(ogni coda ha una precisione di blocco applicata a tutti i messaggi, ma il blocco può essere rinnovato come descritto nella riga precedente)
Ricezione in batch

(specifica esplicitamente il numero di messaggi durante il recupero dei messaggi, fino a un massimo di 32 messaggi).


(abilitando in modo implicito una proprietà di prelettura o in modo esplicito tramite transazioni)
Invio in batch No

(tramite transazioni o batch sul lato client)

Informazioni aggiuntive

  • I messaggi nelle code di Archiviazione sono in genere first-in-first-out, ma a volte possono non essere in ordine. Ad esempio, quando la durata del timeout di visibilità di un messaggio scade perché un'applicazione client si arresta in modo anomalo durante l'elaborazione di un messaggio. Quando il timeout di visibilità scade, il messaggio risulta nuovamente visibile nella coda in modo che un altro utente possa rimuoverlo. A questo punto, il messaggio reso nuovamente visibile può essere posizionato nella coda per poter essere rimosso di nuovo.
  • Il modello FIFO garantito nelle code del bus di servizio richiede l'uso di sessioni di messaggistica. Se l'applicazione si arresta in modo anomalo durante l'elaborazione di un messaggio ricevuto nella modalità Peek &Lock , la volta successiva che un ricevitore della coda accetta una sessione di messaggistica, inizia con il messaggio non riuscito dopo la scadenza della durata del blocco della sessione.
  • Le code di Archiviazione sono progettate per supportare scenari di accodamento standard, ad esempio i seguenti:
    • Disaccoppiamento dei componenti dell'applicazione per aumentare la scalabilità e la tolleranza per gli errori
    • Livellamento del carico
    • Creazione di flussi di lavoro di processo.
  • È possibile evitare incoerenze relative alla gestione dei messaggi nel contesto delle sessioni del bus di servizio usando lo stato della sessione per archiviare lo stato dell'applicazione rispetto allo stato di gestione della sequenza di messaggi della sessione e usando le transazioni relative alla risoluzione dei messaggi ricevuti e aggiornando lo stato della sessione. Questo tipo di funzionalità di coerenza è talvolta denominata elaborazione exactly-once nei prodotti di altri fornitori. Eventuali errori di transazione comportano la rielaborazione dei messaggi ed è per questo che il termine non è esattamente adeguato.
  • Le code di archiviazione offrono un modello di programmazione uniforme e coerente tra code, tabelle e BLOB, sia per i team di sviluppo che per i team operativi.
  • Le code del bus di servizio offrono supporto per le transazioni locali nel contesto di una singola coda.
  • La modalità Ricezione ed eliminazione supportata dal bus di servizio offre la possibilità di ridurre il numero di operazioni di messaggistica (e relativo costo) in cambio di una garanzia di recapito più bassa.
  • Le code di archiviazione offrono lease con possibilità di estensione per i messaggi. Questa funzionalità consente ai processi di lavoro di mantenere brevi lease sui messaggi. Se un processo di lavoro si arresta in modo anomalo, un altro può elaborare rapidamente il messaggio. Inoltre, un processo di lavoro può estendere il lease su un messaggio se deve elaborarlo più a lungo del tempo di lease corrente.
  • Le code di archiviazione offrono un timeout di visibilità che può essere impostato al momento dell'inserimento o della rimozione dalla coda di un messaggio. È anche possibile aggiornare un messaggio con valori di lease diversi in fase di esecuzione, nonché aggiornare valori diversi nei messaggi presenti nella stessa coda. I timeout di blocco del bus di servizio sono definiti nei metadati della coda. Tuttavia, è possibile rinnovare manualmente il blocco dei messaggi per la durata del blocco predefinita o usare la funzionalità di rinnovo automatico del blocco in cui il client gestisce automaticamente il rinnovo del blocco.
  • Il timeout massimo per un'operazione di ricezione del blocco nelle code del bus di servizio è di 24 giorni. I timeout basati su REST, tuttavia, hanno un valore massimo di 55 secondi.
  • Il batch sul lato client fornito dal bus di servizio consente a un client di coda di inviare in batch più messaggi in una singola operazione di invio. L'invio in batch è disponibile solo per le operazioni di invio asincrone.
  • Caratteristiche quali la capacità massima di 200 TB (capacità ancora superiore se gli account vengono virtualizzati) e la disponibilità in numero illimitato rendono le code di archiviazione una piattaforma ideale per i provider SaaS.
  • Le code di archiviazione forniscono un meccanismo di controllo di accesso delegato flessibile ed efficiente.

Funzionalità avanzate

Questa sezione confronta le funzionalità avanzate fornite dalle code di archiviazione e dalle code del bus di servizio.

Criteri di confronto Code di archiviazione Code del bus di servizio
Recapito pianificato
Mancato recapito automatico dei messaggi No
Valore TTL di accodamento aumentato

(tramite aggiornamento sul posto del timeout di visibilità)


(specificato tramite una funzione API dedicata)
Supporto messaggi non elaborabili
Aggiornamento sul posto
Log delle transazioni sul lato server No
Metriche di archiviazione

Le metriche al minuto forniscono metriche in tempo reale per disponibilità, TPS, conteggi delle chiamate API, conteggi degli errori e altro ancora. Sono tutti completamente in tempo reale, aggregati al minuto e riportati entro pochi minuti da quando si è verificato l'evento nell'ambiente di produzione. Per altre informazioni, vedere Informazioni sulle metriche di Analisi archiviazione.


Per informazioni sulle metriche supportate da bus di servizio di Azure, vedere Metriche dei messaggi.
Gestione dello stato No Sì (Active, Disabled, SendDisabled, ReceiveDisabled; per informazioni dettagliate su questi stati, vedere Stato della coda)
Inoltro automatico dei messaggi No
Funzione di eliminazione della coda
Gruppi di messaggi No

(tramite sessioni di messaggistica)
Stato dell'applicazione per gruppo di messaggi No
Rilevamento duplicati No

(configurabile sul lato del mittente)
Esplorazione di gruppi di messaggi No
Recupero delle sessioni di messaggistica per ID No

Informazioni aggiuntive

  • Entrambe le tecnologie di accodamento consentono di pianificare il recapito di un messaggio in un momento successivo.
  • La funzionalità di inoltro automatico consente a migliaia di code di inoltrare automaticamente i propri messaggi a una singola coda dalla quale l'applicazione ricevente preleva il messaggio. Questo meccanismo consente di ottenere un valore elevato di sicurezza, di controllare il flusso e di isolare le aree di archiviazione tra i server di pubblicazione dei messaggi.
  • Le code di archiviazione offrono supporto per l'aggiornamento del contenuto del messaggio. Questa funzionalità consente di rendere permanenti le informazioni sullo stato e gli aggiornamenti sull'avanzamento incrementale all'interno del messaggio, in modo che sia possibile elaborare quest'ultimo dall'ultimo checkpoint noto anziché dall'inizio. Tramite le code del bus di servizio, è possibile abilitare lo stesso scenario usando sessioni di messaggi. Per altre informazioni, vedere Stato della sessione di messaggi.
  • Le code del bus di servizio supportano l'inserimento di messaggi non recapitabili. Può essere utile per isolare i messaggi che soddisfano i criteri seguenti:
    • I messaggi non possono essere elaborati correttamente dall'applicazione ricevente.
    • I messaggi non possono raggiungere la destinazione a causa di una proprietà TTL (Time-to-Live) scaduta. Tramite il valore TTL viene specificata la durata del messaggio nella coda. Con il bus di servizio, il messaggio passa in una coda speciale denominata $DeadLetterQueue allo scadere del periodo TTL.
  • Per trovare messaggi "non elaborabili" nelle code di archiviazione, durante la rimozione di un messaggio dalla coda l'applicazione esamina la proprietà DequeueCount del messaggio. Se il valore della proprietà DequeueCount supera la soglia specificata, l'applicazione sposta il messaggio in una coda di "messaggio non recapitabile" definita dall'applicazione.
  • Le code di archiviazione consentono di ottenere un log dettagliato di tutte le transazioni eseguite nella coda e le metriche aggregate. Queste opzioni sono entrambe utili per il debug e per comprendere in che modo l'applicazione usa le code di archiviazione. Inoltre, sono utili per l'ottimizzazione delle prestazioni dell'applicazione e per la riduzione dei costi d'uso delle code.
  • Le sessioni di messaggi supportate dal bus di servizio consentono di associare a un destinatario i messaggi che appartengono a un gruppo logico. Crea un'affinità di tipo sessione tra i messaggi e i rispettivi destinatari. È possibile abilitare questa funzionalità avanzata nel bus di servizio impostando la proprietà ID sessione in un messaggio. I destinatari possono quindi restare in ascolto su un ID di sessione specifico e ricevere messaggi in cui viene condiviso l'identificatore di sessione specificato.
  • La funzionalità di rilevamento di duplicazione delle code del bus di servizio rimuove automaticamente i messaggi duplicati inviati a una coda o a un argomento, in base al valore della proprietà ID messaggio.

Capacità e quote

Questa sezione confronta le code di Archiviazione e le code del bus di servizio in termini di capacità e quote applicabili.

Criteri di confronto Code di archiviazione Code del bus di servizio
Dimensioni massime della coda 5 PiB

(limitate alla capacità di un singolo account di archiviazione)
Da 1 GB a 80 GB

(livello Premium o Standard con partizionamento)
Dimensioni massime del messaggio 64 kB

(48 KB quando si usa la codifica Base 64)

Azure supporta messaggi di grandi dimensioni combinando code e BLOB. È quindi possibile accodare fino a 200 GB per un unico elemento.
256 KB, 1 MB o 100 MB

(inclusi l'intestazione e il corpo, dimensioni massime dell'intestazione: 64 KB).

Dipende dal livello di servizio.
Durata TTL massima del messaggio Infinito (versione API 2017-07-27 o successiva) TimeSpan.MaxValue
Numero massimo di code Nessuna limitazione 10.000 (livello Standard)
1.000/unità di messaggistica (livello Premium)
(per spazio dei nomi del servizio)
Numero massimo di client concorrenti Nessuna limitazione 5.000

Informazioni aggiuntive

  • Bus di servizio impone l'applicazione dei limiti di dimensione della coda. Le dimensioni massime della coda sono specificate durante la creazione della coda. Possono essere comprese tra 1 GB e 80 GB. Se le dimensioni della coda raggiungono questo limite, il bus di servizio rifiuta messaggi in arrivo aggiuntivi e il chiamante riceve un'eccezione. Per altre informazioni sulle quote nel bus di servizio, vedere Quote del bus di servizio.
  • Nel livello di messaggistica Standard è possibile creare code del bus di servizio e argomenti con dimensioni di 1 (impostazione predefinita), 2, 3, 4 o 5 GB. Quando si abilita il partizionamento nel livello Standard, il bus di servizio crea 16 copie (16 partizioni) dell'entità, ognuna delle stesse dimensioni specificate. Di conseguenza, se si crea una coda con dimensioni pari a 5 GB con 16 partizioni, le dimensioni massime della coda sono (5 * 16) = 80 GB. È possibile visualizzare le dimensioni massime della coda partizionata o dell'argomento nel portale di Azure.
  • Per le code di Archiviazione, se il contenuto del messaggio non è XML-safe, deve avere la codifica Base64. Se per il messaggio non è stata usata la codifica Base64, il payload dell'utente può essere fino a 48 KB, anziché 64.
  • Con le code del bus di servizio, ogni messaggio archiviato in una coda è costituito da due parti: un'intestazione e un corpo. Le dimensioni totali del messaggio non possono superare la dimensione massima del messaggio supportata dal livello di servizio.
  • Se le comunicazioni tra client e code del bus di servizio vengono stabilite tramite il protocollo TCP, il numero massimo di connessioni simultanee a una singola coda del bus di servizio è limitato a 100. Questo numero è condiviso tra mittenti e destinatari. Se questa quota viene raggiunta, le richieste di connessioni aggiuntive verranno rifiutate e verrà ricevuta un'eccezione dal codice chiamante. Questo limite non è imposto ai client tramite cui viene effettuata la connessione alle code mediante l'API basata su REST.
  • Per ridimensionare più di 10.000 code con il livello Standard del bus di servizio o 1000 code/unità di messaggistica con il livello Premium del bus di servizio, è anche possibile creare spazi dei nomi aggiuntivi usando il portale di Azure.

Gestione e operazioni

Questa sezione confronta le funzionalità di gestione fornite dalle code di archiviazione e dalle code del bus di servizio.

Criteri di confronto Code di archiviazione Code del bus di servizio
Protocollo di gestione REST su HTTP/HTTPS REST su HTTPS
Protocollo runtime REST su HTTP/HTTPS REST su HTTPS

Standard AMQP 1.0 (TCP con TLS)
API .NET

(API client di archiviazione .NET)


(API del bus di servizio .NET)
C++ nativo
API per Java
API PHP
API Node.js
Supporto metadati arbitrario No
Regole di denominazione delle code Può contenere fino a 63 caratteri

(le lettere del nome di una coda devono essere minuscole).
Può contenere fino a 260 caratteri

(i percorsi e i nomi di code non fanno distinzione tra maiuscole e minuscole).
Funzione di recupero della lunghezza della coda

(valore indicativo se i messaggi scadono dopo il TTL senza essere eliminati).


(Valore esatto e temporizzato).
Funzione di visualizzazione

Informazioni aggiuntive

  • Le code di archiviazione supportano attributi arbitrari che è possibile applicare alla descrizione della coda come coppie nome/valore.
  • Entrambe le tecnologie di coda consentono di visualizzare un messaggio senza bloccarlo. Questa funzionalità può essere utile quando si implementa uno strumento di esplorazione delle code.
  • Le API di messaggistica negoziata del bus di servizio .NET usano connessioni TCP full duplex per prestazioni migliori rispetto a REST su HTTP e supportano il protocollo standard AMQP 1.0.
  • I nomi delle code di archiviazione possono essere lunghi da 3 a 63 caratteri e possono contenere lettere minuscole, numeri e trattini. Per altre informazioni, vedere Naming Queues and Metadata (Denominazione di code e metadati).
  • I nomi delle code del bus di servizio possono avere una lunghezza massima di 260 caratteri e presentano regole di denominazione meno restrittive. I nomi delle code del bus di servizio possono contenere lettere, numeri, punti, trattini e caratteri di sottolineatura.

Autenticazione e autorizzazione

Questa sezione illustra le funzionalità di autenticazione e autorizzazione supportate dalle code di archiviazione e dalle code del bus di servizio.

Criteri di confronto Code di archiviazione Code del bus di servizio
Authentication Chiave simmetrica e controllo degli accessi in base al ruolo (RBAC) Chiave simmetrica e controllo degli accessi in base al ruolo (RBAC)
Federazione del provider di identità

Informazioni aggiuntive

  • Ogni richiesta a entrambe le tecnologie di accodamento deve essere autenticata. Le code pubbliche con accesso anonimo non sono supportate.
  • Usando l'autenticazione con firma di accesso condiviso è possibile creare una regola di autorizzazione di accesso condiviso in una coda in grado di concedere agli utenti un accesso in sola scrittura, di sola lettura o di accesso completo. Per altre informazioni, vedere Archiviazione di Azure - Autenticazione SAS e Bus di servizio di Azure - Autenticazione SAS.
  • Entrambe le code supportano l'autorizzazione dell'accesso tramite Microsoft Entra ID. L'autorizzazione di utenti o applicazioni tramite un token OAuth 2.0 restituito da Microsoft Entra ID offre sicurezza e facilità di utilizzo superiori rispetto alle firme di accesso condiviso. Quando si usa Microsoft Entra ID, non è necessario archiviare i token nel codice e rischiare potenziali vulnerabilità di sicurezza. Per altre informazioni, vedere Archiviazione di Azure - Autenticazione Microsoft Entra e Bus di servizio di Azure - Autenticazione Microsoft Entra.

Conclusioni

Comprendendo le due tecnologie, è possibile prendere una decisione più informata sulla tecnologia di accodamento da usare e quando. La decisione su quando utilizzare le code di Archiviazione o le code del bus di servizio di Azure dipende da molti fattori che dipendono soprattutto dalle singole esigenze dell'applicazione in uso e dalla relativa architettura.

È possibile scegliere le code di Archiviazione per i seguenti motivi:

  • L'applicazione usa già le funzionalità principali di Microsoft Azure
  • È necessaria la comunicazione e la messaggistica di base tra i servizi
  • Sono necessarie code con dimensioni superiori a 80 GB

Le code del bus di servizio offrono molte funzionalità avanzate, ad esempio le seguenti. Potrebbero quindi essere preferibili se si sta creando un'applicazione ibrida o se l'applicazione richiede tali funzionalità per altri motivi.

Passaggi successivi

Gli articoli seguenti offrono ulteriori indicazioni e informazioni sull'uso delle code di archiviazione e delle code del bus di servizio.