Analogie e differenze tra le code di archiviazione e le code del bus di servizioStorage queues and Service Bus queues - compared and contrasted

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.This article analyzes the differences and similarities between the two types of queues offered by Microsoft Azure today: Storage queues and Service Bus queues. Grazie a queste informazioni, è possibile confrontare e contrapporre le rispettive tecnologie ed essere quindi in grado di fare una scelta più oculata riguardo alla soluzione che soddisfa meglio le proprie esigenze.By using this information, you can compare and contrast the respective technologies and be able to make a more informed decision about which solution best meets your needs.

IntroduzioneIntroduction

Azure supporta due tipi di meccanismi di code: code di archiviazione e code del bus di servizio.Azure supports two types of queue mechanisms: Storage queues and Service Bus queues.

Le code di archiviazione, che fanno parte dell'infrastruttura di Archiviazione di Azure, offrono una semplice interfaccia per operazioni di ricezione/inserimento/visualizzazione basata su REST, che determina una messaggistica affidabile e persistente all'interno di un servizio e tra i servizi.Storage queues, which are part of the Azure storage infrastructure, feature a simple REST-based GET/PUT/PEEK interface, providing reliable, persistent messaging within and between services.

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.Service Bus queues are part of a broader Azure messaging infrastructure that supports queuing as well as publish/subscribe, and more advanced integration patterns. Per altre informazioni su code, argomenti e sottoscrizioni del bus di servizio, vedere la panoramica del bus di servizio.For more information about Service Bus queues/topics/subscriptions, see the overview of Service Bus.

Anche se entrambe le tecnologie di accodamento sono disponibili contemporaneamente, le code di archiviazione sono state introdotte per prime, come meccanismo dedicato di archiviazione code basato sui servizi di Archiviazione di Azure.While both queuing technologies exist concurrently, Storage queues were introduced first, as a dedicated queue storage mechanism built on top of Azure Storage services. Le code del bus di servizio sono basate sulla più ampia infrastruttura di messaggistica progettata per integrare applicazioni e componenti delle applicazioni che possono usare più protocolli di comunicazione, contratti di dati, domini di trust e/o ambienti di rete.Service Bus queues are built on top of the broader messaging infrastructure designed to integrate applications or application components that may span multiple communication protocols, data contracts, trust domains, and/or network environments.

Considerazioni sulla selezione della tecnologiaTechnology selection considerations

Sia le code di archiviazione sia le code del bus di servizio sono implementazioni del servizio di accodamento messaggi attualmente disponibile in Microsoft Azure.Both Storage queues and Service Bus queues are implementations of the message queuing service currently offered by Microsoft Azure. Ogni tecnologia presenta un set di funzionalità leggermente diverso, pertanto è possibile scegliere l'una o l'altra, o entrambe, a seconda delle esigenze della particolare soluzione in uso o di un problema aziendale o tecnico da risolvere.Each has a slightly different feature set, which means you can choose one or the other, or use both, depending on the needs of your particular solution or business/technical problem you are solving.

Durante la determinazione della tecnologia di accodamento in grado di soddisfare lo scopo di una soluzione specifica, gli architetti e gli sviluppatori di soluzioni devono tenere in considerazione questi consigli.When determining which queuing technology fits the purpose for a given solution, solution architects and developers should consider these recommendations. Per altri dettagli, vedere la sezione successiva.For more details, see the next section.

Gli architetti e gli sviluppatori di soluzioni dovrebbero considerare l'uso delle code di Azure quando:As a solution architect/developer, you should consider using Storage queues when:

  • L'applicazione deve archiviare in una coda oltre 80 GB di messaggi la cui durata è inferiore a 7 giorni.Your application must store over 80 GB of messages in a queue, where the messages have a lifetime shorter than 7 days.
  • L'applicazione deve tenere traccia dello stato dell'elaborazione di un messaggio all'interno della coda.Your application wants to track progress for processing a message inside of the queue. Ciò si rivela utile se si verifica un arresto anomalo del processo di lavoro tramite cui si elabora il messaggio.This is useful if the worker processing a message crashes. Queste informazioni possono quindi essere usate in un processo di lavoro successivo per continuare dal punto in cui è stato interrotto il processo di lavoro precedente.A subsequent worker can then use that information to continue from where the prior worker left off.
  • Sono necessari i log sul lato server di tutte le transazioni eseguite nelle code.You require server side logs of all of the transactions executed against your queues.

Gli architetti e gli sviluppatori di soluzioni dovrebbero considerare l'uso delle code del bus di servizio quando:As a solution architect/developer, you should consider using Service Bus queues when:

  • La soluzione deve essere in grado di ricevere messaggi senza dover eseguire il polling della coda.Your solution must be able to receive messages without having to poll the queue. Con il bus di servizio, è possibile ottenere questo risultato mediante l'operazione di ricezione con polling prolungato che usa i protocolli basati su TCP supportati dal bus di servizio.With Service Bus, this can be achieved through the use of the long-polling receive operation using the TCP-based protocols that Service Bus supports.
  • La soluzione deve garantire il recapito ordinato FIFO (First In First Out) da parte della coda.Your solution requires the queue to provide a guaranteed first-in-first-out (FIFO) ordered delivery.
  • Si vuole una configurazione simmetrica in Azure e su Windows Server (cloud privato).You want a symmetric experience in Azure and on Windows Server (private cloud). Per altre informazioni, vedere Bus di servizio per Windows Server.For more information, see Service Bus for Windows Server.
  • La soluzione deve essere in grado di eseguire il rilevamento duplicato automatico.Your solution must be able to support automatic duplicate detection.
  • L'applicazione deve elaborare i messaggi come flussi paralleli a esecuzione prolungata (i messaggi sono associati a un flusso tramite la proprietà SessionId del messaggio).You want your application to process messages as parallel long-running streams (messages are associated with a stream using the SessionId property on the message). 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.In this model, each node in the consuming application competes for streams, as opposed to messages. Quando un flusso viene assegnato a un nodo basato sul servizio, tale nodo può esaminare lo stato del flusso dell'applicazione mediante transazioni.When a stream is given to a consuming node, the node can examine the state of the application stream state using transactions.
  • Per la soluzione sono necessari atomicità e comportamento transazionale in caso di invio o ricezione di più messaggi da una coda.Your solution requires transactional behavior and atomicity when sending or receiving multiple messages from a queue.
  • La caratteristica relativa alla durata (TTL) del carico di lavoro specifico dell'applicazione può superare il periodo di 7 giorni.The time-to-live (TTL) characteristic of the application-specific workload can exceed the 7-day period.
  • L'applicazione gestisce messaggi che possono superare i 64 KB ma che probabilmente non si avvicineranno al limite dei 256 KBYour application handles messages that can exceed 64 KB but will not likely approach the 256 KB limit.
  • È necessario fornire un modello di accesso basato sui ruoli alle code e autorizzazioni/diritti diversi per mittenti e destinatari.You deal with a requirement to provide a role-based access model to the queues, and different rights/permissions for senders and receivers.
  • Le dimensioni della coda non supereranno gli 80 GB.Your queue size will not grow larger than 80 GB.
  • Si vuole usare il protocollo di messaggistica basato sugli standard AMQP 1.0.You want to use the AMQP 1.0 standards-based messaging protocol. Per altre informazioni su AMQP, vedere Panoramica di AMQP per il bus di servizio.For more information about AMQP, see Service Bus AMQP Overview.
  • È possibile prevedere un'eventuale migrazione dalla comunicazione punto a punto basata sulla coda a un modello di scambio dei messaggi mediante il quale viene garantita un'integrazione continua di destinatari aggiuntivi (sottoscrittori), mediante ognuno dei quali vengono ricevute copie separate di alcuni o di tutti i messaggi inviati alla coda.You can envision an eventual migration from queue-based point-to-point communication to a message exchange pattern that enables seamless integration of additional receivers (subscribers), each of which receives independent copies of either some or all messages sent to the queue. Quest'ultima viene definita funzionalità di pubblicazione/sottoscrizione a livello nativo fornita dal bus di servizio.The latter refers to the publish/subscribe capability natively provided by Service Bus.
  • La soluzione di messaggistica deve garantire il recapito "At-Most-Once" senza che sia necessario sviluppare i componenti aggiuntivi dell'infrastruttura.Your messaging solution must be able to support the "At-Most-Once" delivery guarantee without the need for you to build the additional infrastructure components.
  • Si desidera essere in grado di pubblicare e usare batch di messaggi.You would like to be able to publish and consume batches of messages.

Confronto tra code di archiviazione e code del bus di servizioComparing Storage queues and Service Bus queues

Le tabelle nelle sezioni seguenti forniscono un raggruppamento logico delle funzionalità relative alle code e offrono la possibilità di un confronto immediato delle funzionalità disponibili sia nelle code di archiviazione di Azure sia in quelle del bus di servizio.The tables in the following sections provide a logical grouping of queue features and let you compare, at a glance, the capabilities available in both Azure Storage queues and Service Bus queues.

Funzionalità fondamentaliFoundational capabilities

Questa sezione confronta alcune delle funzionalità di accodamento fondamentali fornite dalle code di archiviazione e dalle code del bus di servizio.This section compares some of the fundamental queuing capabilities provided by Storage queues and Service Bus queues.

Criteri di confrontoComparison Criteria Code di archiviazioneStorage queues Code del bus di servizioService Bus Queues
Garanzia di ordinamentoOrdering guarantee NoNo

Per altre informazioni, vedere la prima nota della sezione "Informazioni aggiuntive".For more information, see the first note in the “Additional Information” section.
Sì - First-In-First-Out (FIFO)Yes - First-In-First-Out (FIFO)

(tramite l'uso di sessioni di messaggistica)(through the use of messaging sessions)
Garanzia di recapitoDelivery guarantee At-Least-OnceAt-Least-Once At-Least-OnceAt-Least-Once

At-Most-OnceAt-Most-Once
Supporto per l'operazione atomicaAtomic operation support NoNo Yes

Comportamento di ricezioneReceive behavior Non-blockingNon-blocking

(viene completata immediatamente se non vengono trovati altri messaggi)(completes immediately if no new message is found)
Blocking with/without timeoutBlocking with/without timeout

(offre disponibilità di polling prolungato o la "Tecnica Comet")(offers long polling, or the "Comet technique")

Non-blockingNon-blocking

(solo tramite l'uso di interfaccia API gestita di .NET)(through the use of .NET managed API only)
API di tipo pushPush-style API NoNo Yes

Interfaccia API di .NET per sessioni OnMessage e OnMessage.OnMessage and OnMessage sessions .NET API.
Modalità di ricezioneReceive mode Visualizzazione e leasePeek & Lease Visualizzazione e bloccoPeek & Lock

Ricezione ed eliminazioneReceive & Delete
Modalità di accesso esclusivoExclusive access mode Basato sul leaseLease-based Basato sul bloccoLock-based
Durata lease/bloccoLease/Lock duration 30 secondi (impostazione predefinita)30 seconds (default)

7 giorni (durata massima) (È possibile rinnovare o rilasciare un lease di messaggio tramite l'interfaccia API di UpdateMessage).7 days (maximum) (You can renew or release a message lease using the UpdateMessage API.)
60 secondi (impostazione predefinita)60 seconds (default)

È possibile rinnovare un blocco di messaggio tramite l'interfaccia API di RenewLock.You can renew a message lock using the RenewLock API.
Precisione lease/bloccoLease/Lock precision Livello di messaggioMessage level

(ogni messaggio può avere un valore di timeout diverso che è possibile aggiornare come necessario durante l'elaborazione del messaggio tramite l'interfaccia API UpdateMessage).(each message can have a different timeout value, which you can then update as needed while processing the message, by using the UpdateMessage API)
Livello di codaQueue level

(ogni coda ha una precisione di blocco applicata a tutti i relativi messaggi, tuttavia è possibile rinnovare il blocco tramite l'interfaccia API RenewLock).(each queue has a lock precision applied to all of its messages, but you can renew the lock using the RenewLock API.)
Ricezione in batchBatched receive Yes

(specifica esplicitamente il numero di messaggi durante il recupero dei messaggi, fino a un massimo di 32 messaggi).(explicitly specifying message count when retrieving messages, up to a maximum of 32 messages)
Yes

(abilita implicitamente una proprietà di prelettura o esplicitamente tramite l'uso di transazioni).(implicitly enabling a pre-fetch property or explicitly through the use of transactions)
Invio in batchBatched send NoNo Yes

(tramite l'uso di transazioni o invio in batch sul lato client).(through the use of transactions or client-side batching)

Informazioni aggiuntiveAdditional information

  • In genere i messaggi nelle code di archiviazione sono ordinati in base al principio FIFO (First-In-First-Out), ma in alcuni casi possono risultare non in ordine, ad esempio quando la durata del timeout di visibilità di un messaggio scade a seguito dell'arresto anomalo di un'applicazione client durante l'elaborazione.Messages in Storage queues are typically first-in-first-out, but sometimes they can be out of order; for example, when a message's visibility timeout duration expires (for example, as a result of a client application crashing during processing). Quando il timeout di visibilità scade, il messaggio risulta nuovamente visibile nella coda in modo che un altro utente possa rimuoverlo.When the visibility timeout expires, the message becomes visible again on the queue for another worker to dequeue it. A questo punto, il messaggio reso nuovamente visibile può essere posizionato nella coda (per poter essere rimosso di nuovo) dopo un messaggio originariamente accodato dopo quest'ultimo.At that point, the newly visible message might be placed in the queue (to be dequeued again) after a message that was originally enqueued after it.
  • Il modello FIFO garantito nelle code del bus di servizio richiede l'uso di sessioni di messaggistica.The guaranteed FIFO pattern in Service Bus queues requires the use of messaging sessions. Se l'applicazione termina di funzionare in maniera anomala durante l'elaborazione di un messaggio ricevuto nella modalità Visualizzazione e blocco, la prossima volta che un ricevitore di code accetta una sessione di messaggistica, l'applicazione verrà avviata con il messaggio non recapitato dopo la scadenza della relativa durata (TTL).In the event that the application crashes while processing a message received in the Peek & Lock mode, the next time a queue receiver accepts a messaging session, it will start with the failed message after its time-to-live (TTL) period expires.
  • Le code di archiviazione sono progettate per supportare scenari di accodamento standard, ad esempio il disaccoppiamento di componenti dell'applicazione per aumentare la scalabilità e la tolleranza di errore, il livellamento del carico e la creazione di flussi di lavoro di elaborazione.Storage queues are designed to support standard queuing scenarios, such as decoupling application components to increase scalability and tolerance for failures, load leveling, and building process workflows.
  • Le code del bus di servizio supportano la garanzia di recapito At-Least-Once.Service Bus queues support the At-Least-Once delivery guarantee. La semantica At-Most-Once può anche essere supportata tramite lo stato della sessione per archiviare lo stato dell'applicazione e tramite le transazioni per ricevere i messaggi in modo atomico e aggiornare lo stato della sessione.In addition, the At-Most-Once semantic can be supported by using session state to store the application state and by using transactions to atomically receive messages and update the session state.
  • 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.Storage queues provide a uniform and consistent programming model across queues, tables, and BLOBs – both for developers and for operations teams.
  • Le code del bus di servizio offrono supporto per le transazioni locali nel contesto di una singola coda.Service Bus queues provide support for local transactions in the context of a single queue.
  • 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.The Receive and Delete mode supported by Service Bus provides the ability to reduce the messaging operation count (and associated cost) in exchange for lowered delivery assurance.
  • Le code di archiviazione offrono lease con possibilità di estensione per i messaggi.Storage queues provide leases with the ability to extend the leases for messages. In questo modo i processi di lavoro possono gestire lease brevi nei messaggi.This allows the workers to maintain short leases on messages. Pertanto, se un processo di lavoro viene arrestato in modo anomalo, il messaggio può essere elaborato di nuovo rapidamente da un altro processo di lavoro.Thus, if a worker crashes, the message can be quickly processed again by another worker. Inoltre, tramite un processo di lavoro è possibile estendere il lease in un messaggio se l'elaborazione di quest'ultimo richiede più tempo del lease corrente.In addition, a worker can extend the lease on a message if it needs to process it longer than the current lease time.
  • 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.Storage queues offer a visibility timeout that you can set upon the enqueuing or dequeuing of a message. È anche possibile aggiornare un messaggio con valori di lease diversi in fase di esecuzione, nonché aggiornare valori diversi nei messaggi presenti nella stessa coda.In addition, you can update a message with different lease values at run-time, and update different values across messages in the same queue. I timeout dei blocchi del bus di servizio vengono definiti nei metadati della coda. È tuttavia possibile rinnovare il blocco chiamando il metodo RenewLock.Service Bus lock timeouts are defined in the queue metadata; however, you can renew the lock by calling the RenewLock method.
  • Il timeout massimo per un'operazione di ricezione del blocco nelle code del bus di servizio è di 24 giorni.The maximum timeout for a blocking receive operation in Service Bus queues is 24 days. I timeout basati su REST, tuttavia, hanno un valore massimo di 55 secondi.However, REST-based timeouts have a maximum value of 55 seconds.
  • 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.Client-side batching provided by Service Bus enables a queue client to batch multiple messages into a single send operation. L'invio in batch è disponibile solo per le operazioni di invio asincrone.Batching is only available for asynchronous send operations.
  • 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.Features such as the 200 TB ceiling of Storage queues (more when you virtualize accounts) and unlimited queues make it an ideal platform for SaaS providers.
  • Le code di archiviazione forniscono un meccanismo di controllo di accesso delegato flessibile ed efficiente.Storage queues provide a flexible and performant delegated access control mechanism.

Funzionalità avanzateAdvanced capabilities

Questa sezione confronta le funzionalità avanzate fornite dalle code di archiviazione e dalle code del bus di servizio.This section compares advanced capabilities provided by Storage queues and Service Bus queues.

Criteri di confrontoComparison Criteria Code di archiviazioneStorage queues Code del bus di servizioService Bus Queues
Recapito pianificatoScheduled delivery Yes Yes
Mancato recapito automatico dei messaggiAutomatic dead lettering NoNo Yes
Valore TTL di accodamento aumentatoIncreasing queue time-to-live value Yes

(tramite aggiornamento sul posto del timeout di visibilità)(via in-place update of visibility timeout)
Yes

(specificato tramite una funzione API dedicata)(provided via a dedicated API function)
Supporto messaggi non elaborabiliPoison message support Yes Yes
Aggiornamento sul postoIn-place update Yes Yes
Log delle transazioni sul lato serverServer-side transaction log Yes NoNo
Metriche di archiviazioneStorage metrics Yes

Metrica al minuto: specifica metriche in tempo reale relative a disponibilità, TPS, numero di chiamate API, numero di errori e molto altro, aggregate per minuto e segnalate entro pochi minuti rispetto agli eventi in fase di produzione.Minute Metrics: provides real-time metrics for availability, TPS, API call counts, error counts, and more, all in real time (aggregated per minute and reported within a few minutes from what just happened in production. Per altre informazioni, vedere About Storage Analytics Metrics (Informazioni sulle metriche di analisi dell'archiviazione).For more information, see About Storage Analytics Metrics.
Yes

(query in blocco tramite chiamate a GetQueues)(bulk queries by calling GetQueues)
Gestione dello statoState management NoNo Yes

Microsoft.ServiceBus.Messaging.EntityStatus.Active, Microsoft.ServiceBus.Messaging.EntityStatus.Disabled, Microsoft.ServiceBus.Messaging.EntityStatus.SendDisabled, Microsoft.ServiceBus.Messaging.EntityStatus.ReceiveDisabledMicrosoft.ServiceBus.Messaging.EntityStatus.Active, Microsoft.ServiceBus.Messaging.EntityStatus.Disabled, Microsoft.ServiceBus.Messaging.EntityStatus.SendDisabled, Microsoft.ServiceBus.Messaging.EntityStatus.ReceiveDisabled
Inoltro automatico dei messaggiMessage auto-forwarding NoNo Yes
Funzione di eliminazione della codaPurge queue function Yes NoNo
Gruppi di messaggiMessage groups NoNo Yes

(tramite l'uso di sessioni di messaggistica)(through the use of messaging sessions)
Stato dell'applicazione per gruppo di messaggiApplication state per message group NoNo Yes
Rilevamento duplicatiDuplicate detection NoNo Yes

(configurabile sul lato del mittente)(configurable on the sender side)
Esplorazione di gruppi di messaggiBrowsing message groups NoNo Yes
Recupero delle sessioni di messaggistica per IDFetching message sessions by ID NoNo Yes

Informazioni aggiuntiveAdditional information

  • Entrambe le tecnologie di accodamento consentono di pianificare il recapito di un messaggio in un momento successivo.Both queuing technologies enable a message to be scheduled for delivery at a later time.
  • 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.Queue auto-forwarding enables thousands of queues to auto-forward their messages to a single queue, from which the receiving application consumes the message. 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.You can use this mechanism to achieve security, control flow, and isolate storage between each message publisher.
  • Le code di archiviazione offrono supporto per l'aggiornamento del contenuto del messaggio.Storage queues provide support for updating message content. 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.You can use this functionality for persisting state information and incremental progress updates into the message so that it can be processed from the last known checkpoint, instead of starting from scratch. Con le code del bus di servizio è possibile abilitare lo stesso scenario mediante sessioni di messaggisticaWith Service Bus queues, you can enable the same scenario through the use of message sessions. Le sessioni consentono di salvare e recuperare lo stato di elaborazione dell'applicazione tramite SetState e GetState.Sessions enable you to save and retrieve the application processing state (by using SetState and GetState).
  • La funzionalità messaggi non recapitabili, supportata solo dalle code del bus di servizio, può essere utile per isolare i messaggi che non possono essere elaborati correttamente dall'applicazione ricevente o quando i messaggi non possono essere recapitati a causa di una proprietà di durata (TTL) scaduta.Dead lettering, which is only supported by Service Bus queues, can be useful for isolating messages that cannot be processed successfully by the receiving application or when messages cannot reach their destination due to an expired time-to-live (TTL) property. Tramite il valore TTL viene specificata la durata del messaggio nella coda.The TTL value specifies how long a message remains in the queue. Con il bus di servizio, il messaggio verrà spostato in una coda speciale denominata $DeadLetterQueue allo scadere del periodo TTL.With Service Bus, the message will be moved to a special queue called $DeadLetterQueue when the TTL period expires.
  • 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.To find "poison" messages in Storage queues, when dequeuing a message the application examines the DequeueCount property of the message. 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.If DequeueCount is greater than a given threshold, the application moves the message to an application-defined "dead letter" queue.
  • Le code di archiviazione consentono di ottenere un log dettagliato di tutte le transazioni eseguite nella coda, nonché le metriche aggregate.Storage queues enable you to obtain a detailed log of all of the transactions executed against the queue, as well as aggregated metrics. Queste opzioni sono entrambe utili per il debug e per comprendere in che modo l'applicazione usa le code di archiviazione.Both of these options are useful for debugging and understanding how your application uses Storage queues. Inoltre, sono utili per l'ottimizzazione delle prestazioni dell'applicazione e per la riduzione dei costi d'uso delle code.They are also useful for performance-tuning your application and reducing the costs of using queues.
  • Il concetto di "sessione di messaggistica" supportato dal bus di servizio consente di associare a uno specifico destinatario i messaggi appartenenti a un determinato gruppo logico. Il destinatario crea a sua volta un'affinità di tipo sessione tra i messaggi e i relativi destinatari.The concept of "message sessions" supported by Service Bus enables messages that belong to a certain logical group to be associated with a given receiver, which in turn creates a session-like affinity between messages and their respective receivers. È possibile abilitare questa funzionalità avanzata nel bus di servizio impostando la proprietà SessionID in un messaggio.You can enable this advanced functionality in Service Bus by setting the SessionID property on a message. 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.Receivers can then listen on a specific session ID and receive messages that share the specified session identifier.
  • La funzionalità di rilevamento di duplicazione supportata dalle code del bus di servizio rimuove automaticamente i messaggi duplicati inviati a una coda o a un argomento, in base al valore della proprietà MessageID.The duplication detection functionality supported by Service Bus queues automatically removes duplicate messages sent to a queue or topic, based on the value of the MessageId property.

Capacità e quoteCapacity and quotas

Questa sezione confronta le code di Azure e le code del bus di servizio in termini di capacità e quote.This section compares Storage queues and Service Bus queues from the perspective of capacity and quotas that may apply.

Criteri di confrontoComparison Criteria Code di archiviazioneStorage queues Code del bus di servizioService Bus Queues
Dimensioni massime della codaMaximum queue size 500 TB500 TB

(limitate alla capacità di un singolo account di archiviazione)(limited to a single storage account capacity)
Da 1 GB a 80 GB1 GB to 80 GB

(valori definiti al momento della creazione della coda e dell'abilitazione del partizionamento. Vedere la sezione "Informazioni aggiuntive").(defined upon creation of a queue and enabling partitioning – see the “Additional Information” section)
Dimensioni massime del messaggioMaximum message size 64 KB64 KB

(48 KB quando si usa una codifica Base64)(48 KB when using Base64 encoding)

Azure supporta messaggi di grandi dimensioni combinando code e BLOB. È quindi possibile accodare fino a 200 GB per un unico elemento.Azure supports large messages by combining queues and blobs – at which point you can enqueue up to 200 GB for a single item.
256 KB o 1 MB256 KB or 1 MB

(inclusi l'intestazione e il corpo, dimensioni massime dell'intestazione: 64 KB).(including both header and body, maximum header size: 64 KB).

Dipende dal livello di servizio.Depends on the service tier.
Durata TTL massima del messaggioMaximum message TTL 7 giorni7 days TimeSpan.MaxTimeSpan.Max
Numero massimo di codeMaximum number of queues IllimitatoUnlimited 10.00010,000

(per spazio dei nomi del servizio)(per service namespace)
Numero massimo di client concorrentiMaximum number of concurrent clients IllimitatoUnlimited IllimitatoUnlimited

(limite di 100 connessioni simultanee applicato solo alla comunicazione basata su protocollo TCP)(100 concurrent connection limit only applies to TCP protocol-based communication)

Informazioni aggiuntiveAdditional information

  • Bus di servizio impone l'applicazione dei limiti di dimensione della coda.Service Bus enforces queue size limits. Le dimensioni massime della coda vengono specificate al momento della creazione della coda stessa e possono avere un valore compreso tra 1 e 80 GB.The maximum queue size is specified upon creation of the queue and can have a value between 1 and 80 GB. Se viene raggiunto il valore delle dimensioni della coda impostato al momento della creazione, i successivi messaggi in arrivo verranno rifiutati e il codice chiamante riceverà un'eccezione.If the queue size value set on creation of the queue is reached, additional incoming messages will be rejected and an exception will be received by the calling code. Per altre informazioni sulle quote nel bus di servizio, vedere Quote del bus di servizio.For more information about quotas in Service Bus, see Service Bus Quotas.
  • Nel livello Standard, è possibile creare code del bus di servizio in dimensioni di 1, 2, 3, 4 o 5 GB (il valore predefinito è 1 GB).In the Standard tier, you can create Service Bus queues in 1, 2, 3, 4, or 5 GB sizes (the default is 1 GB). Nel livello Premium, è possibile creare code con dimensioni fino a 80 GB.In the Premium tier, you can create queues up to 80 GB in size. Nel livello Standard, con il partizionamento abilitato (ovvero l'impostazione predefinita), il bus di servizio crea 16 partizioni per ogni GB specificato.In Standard tier, with partitioning enabled (which is the default), Service Bus creates 16 partitions for each GB you specify. Di conseguenza, se si crea una coda di 5 GB di dimensioni, con 16 partizioni la dimensione massima della coda diventa (5 * 16) = 80 GB.As such, if you create a queue that is 5 GB in size, with 16 partitions the maximum queue size becomes (5 * 16) = 80 GB. È possibile vedere le dimensioni massime della coda o dell'argomento partizionato esaminando la voce corrispondente nel portale di Azure.You can see the maximum size of your partitioned queue or topic by looking at its entry on the Azure portal. Nel livello Premium, vengono create solo 2 partizioni per ogni coda.In the Premium tier, only 2 partitions are created per queue.
  • Per le code di archiviazione, se il contenuto del messaggio non è XML, deve avere la codifica Base64.With Storage queues, if the content of the message is not XML-safe, then it must be Base64 encoded. Se per il messaggio non è stata usata la codifica Base64, il payload dell'utente può essere fino a 48 KB, anziché 64.If you Base64-encode the message, the user payload can be up to 48 KB, instead of 64 KB.
  • Con le code del bus di servizio, ogni messaggio archiviato in una coda è costituito da due parti: un'intestazione e un corpo.With Service Bus queues, each message stored in a queue is composed of two parts: a header and a body. Le dimensioni totali del messaggio non possono superare la dimensione massima del messaggio supportata dal livello di servizio.The total size of the message cannot exceed the maximum message size supported by the service tier.
  • 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.When clients communicate with Service Bus queues over the TCP protocol, the maximum number of concurrent connections to a single Service Bus queue is limited to 100. Questo numero è condiviso tra mittenti e destinatari.This number is shared between senders and receivers. Se viene raggiunta questa quota, le successive richieste di connessioni aggiuntive verranno rifiutate e il codice chiamante riceverà un'eccezione.If this quota is reached, subsequent requests for additional connections will be rejected and an exception will be received by the calling code. Questo limite non viene imposto ai client tramite cui viene effettuata la connessione alle code mediante l'API basata su REST.This limit is not imposed on clients connecting to the queues using REST-based API.
  • Se si richiedono più di 10.000 code in un unico spazio dei nomi del bus di servizio, è possibile contattare il team di supporto tecnico di Azure e richiedere un aumento.If you require more than 10,000 queues in a single Service Bus namespace, you can contact the Azure support team and request an increase. Per ottenere oltre 10.000 code con il bus di servizio, è anche possibile creare spazi dei nomi aggiuntivi tramite il portale di Azure.To scale beyond 10,000 queues with Service Bus, you can also create additional namespaces using the Azure portal.

Gestione e operazioniManagement and operations

Questa sezione confronta le funzionalità di gestione fornite dalle code di archiviazione e dalle code del bus di servizio.This section compares the management features provided by Storage queues and Service Bus queues.

Criteri di confrontoComparison Criteria Code di archiviazioneStorage queues Code del bus di servizioService Bus queues
Protocollo di gestioneManagement protocol REST su HTTP/HTTPSREST over HTTP/HTTPS REST su HTTPSREST over HTTPS
Protocollo runtimeRuntime protocol REST su HTTP/HTTPSREST over HTTP/HTTPS REST su HTTPSREST over HTTPS

Standard AMQP 1.0 (TCP con TLS)AMQP 1.0 Standard (TCP with TLS)
API .NET.NET API Yes

(API client di archiviazione .NET)(.NET Storage Client API)
Yes

(API del bus di servizio .NET)(.NET Service Bus API)
C++ nativoNative C++ Yes Yes
API JavaJava API Yes Yes
API PHPPHP API Yes Yes
API Node.jsNode.js API Yes Yes
Supporto metadati arbitrarioArbitrary metadata support Yes NoNo
Regole di denominazione delle codeQueue naming rules Può contenere fino a 63 caratteriUp to 63 characters long

(le lettere del nome di una coda devono essere minuscole).(Letters in a queue name must be lowercase.)
Può contenere fino a 260Up to 260 characters long

(i percorsi e i nomi di code non fanno distinzione tra maiuscole e minuscole).(Queue paths and names are case-insensitive.)
Funzione di recupero della lunghezza della codaGet queue length function Yes

(valore indicativo se i messaggi scadono dopo il TTL senza essere eliminati).(Approximate value if messages expire beyond the TTL without being deleted.)
Yes

(Valore esatto e temporizzato).(Exact, point-in-time value.)
Funzione di visualizzazionePeek function Yes Yes

Informazioni aggiuntiveAdditional information

  • Le code di archiviazione forniscono supporto per gli attributi arbitrari applicabili alla descrizione della coda, sotto forma di coppie nome-valore.Storage queues provide support for arbitrary attributes that can be applied to the queue description, in the form of name/value pairs.
  • Entrambe le tecnologie di coda consentono di visualizzare un messaggio senza doverlo bloccare. Questa funzionalità può essere utile quando si implementa uno strumento di esplorazione delle code.Both queue technologies offer the ability to peek a message without having to lock it, which can be useful when implementing a queue explorer/browser tool.
  • Le API gestite .NET di messaggistica negoziata del bus di servizio usano le connessioni TCP full-duplex per ottenere migliori livelli di prestazioni rispetto a REST su HTTP e supportano il protocollo standard AMQP 1.0.The Service Bus .NET brokered messaging APIs leverage full-duplex TCP connections for improved performance when compared to REST over HTTP, and they support the AMQP 1.0 standard protocol.
  • I nomi delle code di archiviazione possono avere una lunghezza compresa tra 3 e 63 caratteri e contenere lettere minuscole, numeri e trattini.Names of Storage queues can be 3-63 characters long, can contain lowercase letters, numbers, and hyphens. Per altre informazioni, vedere Naming Queues and Metadata (Denominazione di code e metadati).For more information, see Naming Queues and Metadata.
  • I nomi delle code del bus di servizio possono avere una lunghezza massima di 260 caratteri e presentano regole di denominazione meno restrittive.Service Bus queue names can be up to 260 characters long and have less restrictive naming rules. I nomi delle code del bus di servizio possono contenere lettere, numeri, punti, trattini e caratteri di sottolineatura.Service Bus queue names can contain letters, numbers, periods, hyphens, and underscores.

Autenticazione e autorizzazioneAuthentication and authorization

Questa sezione illustra le funzionalità di autenticazione e autorizzazione supportate dalle code di archiviazione e dalle code del bus di servizio.This section discusses the authentication and authorization features supported by Storage queues and Service Bus queues.

Criteri di confrontoComparison Criteria Code di archiviazioneStorage queues Code del bus di servizioService Bus Queues
AutenticazioneAuthentication Chiave simmetricaSymmetric key Chiave simmetricaSymmetric key
Modello di protezioneSecurity model Accesso delegato tramite token di firma di accesso condiviso.Delegated access via SAS tokens. SASSAS
Federazione del provider di identitàIdentity provider federation NoNo Yes

Informazioni aggiuntiveAdditional information

  • Ogni richiesta a entrambe le tecnologie di accodamento deve essere autenticata.Every request to either of the queuing technologies must be authenticated. Le code pubbliche con accesso anonimo non sono supportate.Public queues with anonymous access are not supported. L'uso di SAS consente di ovviare a questo inconveniente tramite la pubblicazione di una firma SAS di sola scrittura, di sola lettura o anche di accesso completo.Using SAS, you can address this scenario by publishing a write-only SAS, read-only SAS, or even a full-access SAS.
  • Lo schema di autenticazione offerto dalle code di archiviazione prevede l'uso di una chiave simmetrica, ovvero un codice HMAC (Hash Message Authentication Code) basato su hash calcolato dall'algoritmo SHA-256 e codificato come stringa Base64.The authentication scheme provided by Storage queues involves the use of a symmetric key, which is a hash-based Message Authentication Code (HMAC), computed with the SHA-256 algorithm and encoded as a Base64 string. Per altre informazioni sul relativo protocollo, vedere Authentication for the Azure Storage Services (Autenticazione per i servizi di archiviazione di Azure).For more information about the respective protocol, see Authentication for the Azure Storage Services. Le code del bus di servizio supportano un modello simile mediante l'uso di chiavi simmetriche.Service Bus queues support a similar model using symmetric keys. Per altre informazioni, vedere Autenticazione della firma di accesso condiviso con il bus di servizio.For more information, see Shared Access Signature Authentication with Service Bus.

ConclusioniConclusion

Acquisendo una comprensione più profonda delle due tecnologie, si sarà in grado di prendere una decisione più oculata circa la tecnologia di accodamento da usare e il momento in cui adottarla.By gaining a deeper understanding of the two technologies, you will be able to make a more informed decision on which queue technology to use, and when. La scelta di usare le code di archiviazione o le code del bus di servizio si basa chiaramente su diversi fattori,The decision on when to use Storage queues or Service Bus queues clearly depends on a number of factors. che possono dipendere soprattutto dalle singole esigenze dell'applicazione in uso e dalla relativa architettura.These factors may depend heavily on the individual needs of your application and its architecture. Se l'applicazione usa già le funzionalità principali di Microsoft Azure, sarà opportuno scegliere le code di Azure, specialmente se sono richieste funzionalità di comunicazione e messaggistica di base tra servizi o se sono necessarie code con dimensioni maggiori di 80 GB.If your application already uses the core capabilities of Microsoft Azure, you may prefer to choose Storage queues, especially if you require basic communication and messaging between services or need queues that can be larger than 80 GB in size.

Poiché offrono numerose funzionalità avanzate quali sessioni, transazioni rilevamento duplicati, mancato recapito automatico dei messaggi e funzionalità di pubblicazione e sottoscrizione permanente, le code del bus di servizio possono rappresentare la soluzione migliore quando si sviluppa un'applicazione ibrida o se l'applicazione in uso richiede comunque tali funzionalità.Because Service Bus queues provide a number of advanced features, such as sessions, transactions, duplicate detection, automatic dead-lettering, and durable publish/subscribe capabilities, they may be a preferred choice if you are building a hybrid application or if your application otherwise requires these features.

Passaggi successiviNext steps

Gli articoli seguenti offrono ulteriori indicazioni e informazioni sull'uso delle code di archiviazione e delle code del bus di servizio.The following articles provide more guidance and information about using Storage queues or Service Bus queues.