VENDITE: 1-800-867-1389

Pianificazione delle capacità delle code e degli argomenti del bus di servizio

Autori: Valery Mizonov e Ralph Squillace

In questo argomento vengono illustrati gli elementi seguenti:

  • Differenza, spesso importante, dei limiti di dimensioni delle code tra le code di Windows Azure e le code e gli argomenti del bus di servizio di Windows Azure

  • Modalità di approssimazione della capacità corretta di code del bus di servizio quando si desidera utilizzare le funzionalità degli argomenti e delle code del bus di servizio

  • Esecuzione di test con messaggi di dimensioni diverse per effettuare una stima del numero di messaggi che può essere inserito in una coda o in un argomento del bus di servizio in base alle dimensioni testate

Limite delle dimensioni delle code e degli argomenti nel bus di servizio di Windows Azure

Sia le code di Windows Azure sia quelle del bus di servizio sono implementazioni dell'archiviazione ad accesso in coda. Entrambe, tuttavia, presentano un set di funzionalità leggermente diverso, pertanto è possibile scegliere l'una o l'altra in base alle esigenze della particolare applicazione in uso. Ad esempio, nel bus di servizio sono disponibili argomenti e sottoscrizioni, un'implementazione di pubblicazione-sottoscrizione spesso importante in scenari di notifiche aziendali, mentre nelle code di Windows Azure è possibile archiviare fino a 100 terabyte di dati quando il limite delle code del bus di servizio è attualmente di 5 gigabyte.

Di seguito vengono indicate le due principali differenze riguardanti le dimensioni massime del messaggio e della coda:

 

Confronto Code di Windows Azure Code del bus di servizio

Dimensioni massime del messaggio

64 KB

Nota: è incluso circa il 25% di overhead della codifica Base64.

256 KB

Nota: sono incluse sia le intestazioni sia il corpo, dove le dimensioni massime dell'intestazione sono 64 KB.

Dimensioni massime della coda

100 TB

Nota: le dimensioni massime sono limitate al livello dell'account di archiviazione.

1, 2, 3, 4 o 5 GB

Le dimensioni vengono definite al momento della creazione di una coda o di un argomento.

Quest'ultima differenza, vale a dire il limite di 5 GB delle dimensioni di code e argomenti per il bus di servizio, rispetto al limite di 100 TB per le code di Windows Azure, può essere abbastanza importante perché, se si desidera utilizzare le funzionalità del bus di servizio come il mancato recapito dei messaggi, gli argomenti e le sottoscrizioni, le regole o le azioni, è opportuno effettuare in anticipo una stima della capacità della coda o dell'argomento del bus di servizio necessaria per compilare l'applicazione affidabile desiderata. Grazie a un'applicazione molto attiva è possibile creare facilmente una coda o un argomento con 5 GB di dati a seconda delle dimensioni del messaggio, delle intestazioni del messaggio e di tutte le proprietà del messaggio personalizzate, nonché stabilire la velocità con cui i messaggi in questione vengono accodati o inviati a un argomento.

Infine, con le code del bus di servizio, è possibile stabilire le dimensioni della coda al momento della relativa creazione. Una volta creata, la coda non può essere ridimensionata. Con le code di Windows Azure, invece, è possibile accedere a una quantità di spazio di archiviazione tale che non è quasi mai necessario pianificare un aumento delle dimensioni.

Quando una coda o un argomento supera la relativa capacità configurata, viene generata un'eccezione Microsoft.ServiceBus.Messaging.QuotaExceededException dalle richieste successive di accodamento di un messaggio. Tramite l'applicazione deve essere fornita la gestione adatta per questo particolare tipo di eccezione. Ad esempio, un approccio potrebbe consistere nel sospendere temporaneamente il recapito di messaggi a una coda o a un argomento e fornire ai consumer il tempo sufficiente per elaborare il backlog prima che la pubblicazione del messaggio possa essere ripresa.

Inoltre, è importante ricordare che i messaggi nelle code del bus di servizio sono costituiti da due parti: un'intestazione e un corpo. Le dimensioni totali dell'intero messaggio, intestazione e corpo, non possono superare i 256 KB. Tramite l'API di messaggistica negoziata del bus di servizio viene utilizzata la serializzazione con XML binario (non XML testo), mediante la quale vengono ridotte le dimensioni di output del payload serializzato e, sebbene in questo modo viene abilitata, a sua volta, l'archiviazione di messaggi leggermente superiori ai 256 KB, è necessario testare la riduzione delle dimensioni visualizzate per la propria applicazione.

Calcolo della capacità delle code e degli argomenti del bus di servizio

Esaminare l'algoritmo di base per calcolare le dimensioni dei messaggi e, di conseguenza, il tipo di code o argomenti del bus di servizio che potrebbero essere necessari per l'applicazione.

Le dimensioni di un messaggio vuoto sono pari a 1024 byte mentre quelle predefinite per l'intestazione sono di 156 byte. Includendo altri elementi, si raggiunge un totale di 1635 byte in un messaggio con il corpo vuoto e senza intestazioni o proprietà personalizzate.

Per stimare i requisiti di dimensioni che possono essere introdotte dal numero specificato di messaggi è possibile utilizzare la formula seguente:

Numero di messaggi * (dimensioni del corpo del messaggio + dimensioni dell'intestazione del messaggio)

Per determinare le dimensioni del corpo, utilizzare la proprietà BrokeredMessage.Size. Le dimensioni dell'intestazione possono essere più complicate, pertanto la scelta dipende dal livello di accuratezza richiesto. Il metodo più accurato consiste nell'inviare il messaggio (o un messaggio di prova se è necessario sapere le informazioni prima dell'invio di più messaggi), eseguire successivamente una query sui metadati della coda tramite il metodo NamespaceManager.GetQueue (o NamespaceManager.GetTopic) e utilizzare la proprietà SizeInBytes (dell'oggetto QueueDescription o TopicDescription) per stabilire la quantità di spazio dell'intestazione aggiunta.

Per le dimensioni dell'argomento viene richiesto un algoritmo leggermente diverso. La formula per determinare la quantità di spazio utilizzata da un determinato numero di messaggi nell'argomento è la seguente:

Numero di messaggi * (dimensioni del corpo del messaggio + (dimensioni dell'intestazione del messaggio * numero di sottoscrizioni))

Si noti che le dimensioni dell'intestazione vengono moltiplicate per il numero di sottoscrizioni nell'argomento, pertanto se vengono aggiunte eventuali intestazioni personalizzate ai messaggi dell'argomento, le dimensioni di quest'ultimo aumenteranno conseguentemente al numero di sottoscrizioni.

Ad esempio, se si dispone di un messaggio predefinito con 200 sottoscrizioni, le dimensioni di un argomento risultano pari a 32 KB. Tuttavia, se si aumentano le dimensione dell'intestazione a 600 byte, le dimensioni dell'argomento saranno ora pari a 120 KB. Infine, per l'eventuale aggiunta di messaggi ACK che vengono trasmessi da ogni ricevitore di sottoscrizione è richiesta una certa quantità di spazio. Se in un singolo messaggio con un'intestazione di 600 byte a cui corrispondono 200 sottoscrizioni vengono aggiunti 200 messaggi ACK (uno per ogni sottoscrizione) si dovranno considerare 568.635 byte. È importante valutare in anticipo questi aspetti.

Convalida delle approssimazioni della capacità

È possibile tenere in considerazione i dati seguenti quando si effettua una stima approssimativa del numero di messaggi che possono essere inclusi in una singola coda del bus di servizio. Questi dati sono stati acquisiti da un'utilità personalizzata per determinare la capacità della coda con le differenti opzioni di dimensioni del messaggio.

 

Dimensioni campione del messaggio Coda da 1 GB Coda da 2 GB Coda da 3 GB Coda da 4 GB Coda da 5 GB

1 KB

1,041,790

2,059,920

3,128,550

4,186,400

5,238,750

10 KB

102,996

208,358

312,537

416,716

520,895

50 KB

20,857

41,792

62,507

83,343

104,179

100 KB

10,466

20,836

31,254

41,672

52,090

250 KB

4,191

8,334

12,501

16,669

20,836

Per escludere il potenziale impatto della serializzazione con XML binario sui risultati del test, tutti i messaggi di esempio sono stati inizializzati con una matrice di byte della rispettiva dimensione compilata con valori casuali.

Vedere anche


Data di compilazione:

2013-10-23
Il documento è risultato utile?
(1500 caratteri rimanenti)
Grazie per i commenti inviati.

Aggiunte alla community

Mostra:
© 2014 Microsoft