View a markdown version of this page

Le code per le fiere di Amazon SQS - Amazon Simple Queue Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Le code per le fiere di Amazon SQS

Amazon SQS fair queues mitiga automaticamente l'impatto del rumore di prossimità nelle code multi-tenant che contengono messaggi provenienti da più entità logiche, come clienti, applicazioni client o tipi di messaggi. In questi ambienti di coda condivisi, una metrica prestazionale fondamentale è il tempo di permanenza, che misura il tempo totale di permanenza dei messaggi in coda dall'arrivo all'elaborazione. Quando un tenant crea un arretrato nella coda pubblicando più messaggi di quanti il sistema sia in grado di gestire, fair queues riduce al minimo l'impatto sul tempo di permanenza per gli altri tenant.

Stato stazionario

Il diagramma seguente illustra una coda multi-tenant contenente messaggi provenienti da quattro tenant distinti (etichettati A, B, C e D). La coda funziona in uno stato stazionario e non vi è alcun arretrato di messaggi in quanto i consumatori ricevono i messaggi non appena compaiono nella coda. Tutti gli inquilini hanno tempi di permanenza bassi. Non tutta la capacità dei consumatori viene sfruttata appieno in questo stato stazionario.

Una coda multi-tenant che contiene messaggi provenienti da quattro diversi tenant (rappresentati da A, B, C, D). La coda è in uno stato stazionario con messaggi in volo distribuiti uniformemente tra gli inquilini, senza arretrati e tempi di permanenza ridotti per tutti gli inquilini.

Impatto rumoroso sui vicini

L'impatto di Noisy Neighbor si verifica quando un tenant in una coda multi-tenant crea un backlog, aumentando il tempo di permanenza dei messaggi per tutti gli altri tenant. Un tenant può diventare un vicino rumoroso inviando un volume di messaggi maggiore rispetto agli altri tenant o quando i consumatori impiegano più tempo a elaborare i messaggi di quel particolare tenant.

Questo diagramma illustra come l'aumento del traffico proveniente dal Tenant A crei un arretrato nella coda. I consumatori sono impegnati a elaborare i messaggi provenienti solo dal Tenant A, mentre i messaggi degli altri tenant attendono nel backlog, con conseguenti tempi di permanenza più lunghi per tutti i tenant.

Il risultato è quando il tenant A aumenta il traffico e crea un arretrato nella coda. I messaggi del tenant A sono sovrarappresentati durante lo stato in volo e i messaggi degli altri inquilini rimangono bloccati nel backlog, con conseguente aumento del tempo di permanenza.

Attenuazione con code eque

Amazon SQS rileva i vicini rumorosi monitorando la distribuzione dei messaggi tra i tenant durante l'elaborazione (lo stato «in volo»). Quando un tenant ha un numero sproporzionato di messaggi in volo rispetto agli altri, Amazon SQS identifica quel tenant come un vicino rumoroso e dà priorità alla consegna dei messaggi per gli altri tenant. Questo approccio riduce l'impatto del tempo di permanenza sugli altri tenant.

Questo diagramma illustra come Amazon SQS fair queues risolve il problema dei vicini rumorosi. Quando un tenant (Tenant A) diventa rumoroso, Amazon SQS dà la priorità alla restituzione dei messaggi da altri tenant (B, C e D). Questa prioritizzazione aiuta a mantenere bassi i tempi di permanenza per i tenant silenziosi (Tenant B, C e D), mentre il tempo di permanenza per i messaggi del Tenant A è elevato fino a esaurire il backlog della coda senza influire sugli altri tenant.

Un esempio di come Fair Queues risolva il problema dei vicini rumorosi monitorando lo stato in volo. Quando il tenant A diventa rumoroso, SQS intende restituire i messaggi degli altri inquilini (B, C, D) in modo che i messaggi in volo siano distribuiti uniformemente tra i tenant. Il tempo di permanenza per i tenant (B, C, D) rimarrà basso, mentre il tempo di permanenza per i messaggi del tenant A verrà elevato fino all'esaurimento del backlog della coda.
Nota

Amazon SQS non limita il tasso di consumo per tenant. Consente ai consumatori di ricevere messaggi da inquilini vicini rumorosi quando il numero di utenti è disponibile e la coda non ha altri messaggi da restituire. Come le code standard di Amazon SQS, le code fair consentono un throughput praticamente illimitato e non ci sono limiti al numero di tenant che è possibile avere in coda.

Per dettagli su come Amazon SQS rileva i vicini rumorosi e gestisce l'ordine di recapito dei messaggi, consulta How Amazon SQS fair queues work.

Come usare le code oneste

Per consentire code eque, i produttori di messaggi dovrebbero aggiungere un identificatore del tenant impostando un MessageGroupId valore sui messaggi in uscita:

// Send message with tenant identifier SendMessageRequest request = new SendMessageRequest() .withQueueUrl(queueUrl) .withMessageBody(messageBody) .withMessageGroupId("tenant-123"); // Tenant identifier sqs.sendMessage(request);

La funzionalità di equità verrà applicata automaticamente in tutte le code standard di Amazon SQS per i messaggi con la proprietà. MessageGroupId Non richiede alcuna modifica del codice consumer, non ha alcun impatto sulla latenza delle API e non presenta limitazioni di throughput.

Nota

MessageGroupIdsulle code standard con code corrette non ha lo stesso comportamento delle code FIFO. MessageGroupId Nelle code standard, MessageGroupId viene utilizzato solo come identificatore degli inquilini per le code eque e non impone l'ordinamento dei messaggi. Per informazioni dettagliate MessageGroupId sulle code FIFO, consulta Usare l'ID del gruppo di messaggi con Amazon SQS FIFO Queues.

Quando utilizzare le code eque

Valuta la possibilità di utilizzare le code eque quando alla tua coda si applicano tutte le seguenti condizioni:

  • La coda è multi-tenant. La coda contiene messaggi che appartengono a più entità logiche, come clienti, applicazioni client o tipi di richieste, ed è possibile identificare ogni entità con un. MessageGroupId

  • La coda è ad alta velocità. Con un throughput basso, il burst di un inquilino raramente crea un arretrato che incide sugli altri inquilini. Con un throughput elevato, sovradimensionare la flotta di consumatori per assorbire ogni picco non è pratico e, anche con l'auto-scaling, il ritardo prima che nuovi clienti arrivino online può causare la formazione di arretrati.

  • Il tempo di permanenza fa parte della qualità del servizio dell'applicazione. Le code eque proteggono gli inquilini silenziosi dai tempi di permanenza prolungati causati da un vicino rumoroso. Se la tua applicazione non è sensibile al tempo di sosta, potrebbe non essere necessaria la protezione «rumorosa» fornita da Fair Fair.

Metriche relative alle code eque CloudWatch

Amazon SQS fornisce CloudWatch parametri aggiuntivi per aiutarti a monitorare la mitigazione dell'impatto dei rumori vicini. Ad esempio, puoi confrontare Approximate..InQuietGroups le metriche con le metriche standard a livello di coda. Durante i picchi di traffico per uno specifico tenant, le metriche generali a livello di coda potrebbero rivelare un aumento degli arretrati o una vecchiaia dei messaggi più vecchia. Tuttavia, esaminando isolatamente i gruppi silenziosi, è possibile constatare che la maggior parte dei gruppi di messaggi o degli inquilini non rumorosi non ne risente.

Di seguito è riportato un esempio in cui la metrica standard del backlog delle code (ApproximateNumberOfMessagesVisible) aumenta a causa di un tenant rumoroso, mentre il backlog per i tenant non rumorosi () rimane basso. ApproximateNumberOfMessagesVisibleInQuietGroups

Il grafico mostra il picco di backlog delle code per i gruppi rumorosi mentre i gruppi silenziosi rimangono bassi.

Per un elenco completo dei parametri di Amazon SQS e delle relative descrizioni, consulta CloudWatch CloudWatch Metrics for Amazon SQS.