Timeout di SQS visibilità su Amazon - 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à.

Timeout di SQS visibilità su Amazon

Quando ricevi un messaggio da una SQS coda Amazon, questo rimane in coda ma diventa temporaneamente invisibile agli altri consumatori. Questa invisibilità è controllata dal timeout di visibilità, che garantisce che altri consumatori non possano elaborare lo stesso messaggio mentre lo stai elaborando. Amazon SQS offre due opzioni per eliminare i messaggi dopo l'elaborazione:

  • Eliminazione manuale: elimini i messaggi in modo esplicito utilizzando l'azione DeleteMessage.

  • Eliminazione automatica: supportata in alcuni casi AWS SDKs, i messaggi vengono eliminati automaticamente al termine dell'elaborazione, semplificando i flussi di lavoro.

Grafico temporale che mostra come le richieste vengono elaborate durante il timeout di visibilità

Casi d'uso del timeout di visibilità

Gestione delle attività di lunga durata: utilizza il timeout di visibilità per gestire attività che richiedono tempi di elaborazione prolungati. Imposta un timeout di visibilità appropriato per i messaggi che richiedono tempi di elaborazione prolungati. Ciò garantisce che altri utenti non ricevano lo stesso messaggio durante l'elaborazione, evitando operazioni duplicate e mantenendo l'efficienza del sistema.

Implementazione di meccanismi di ripetizione dei tentativi: estendi il timeout di visibilità a livello di codice per le attività che non vengono completate entro il timeout iniziale. Se un'attività non viene completata entro il timeout di visibilità iniziale, puoi estendere il timeout a livello di codice. Ciò consente al sistema di rielaborare il messaggio senza che diventi visibile agli altri utenti, migliorando la tolleranza agli errori e l'affidabilità. Combinalo con Dead-Letter Queues (DLQs) per gestire gli errori persistenti.

Sistemi distribuiti di coordinate: utilizza il timeout di SQS visibilità per coordinare le attività tra sistemi distribuiti. Imposta timeout di visibilità in linea con i tempi di elaborazione previsti per i diversi componenti. Ciò aiuta a mantenere la coerenza e previene le condizioni di gara in architetture complesse e distribuite.

Ottimizzazione dell'utilizzo delle risorse: regola i timeout di SQS visibilità per ottimizzare l'utilizzo delle risorse nell'applicazione. Impostando i timeout appropriati, è possibile garantire che i messaggi vengano elaborati in modo efficiente senza occupare inutilmente le risorse. Ciò porta a migliori prestazioni complessive del sistema e a un miglior rapporto qualità-prezzo.

Impostazione e regolazione del timeout di visibilità

Il timeout di visibilità inizia non appena ti viene recapitato un messaggio. Durante questo periodo, dovresti elaborare ed eliminare il messaggio. Se non lo elimini prima della scadenza del timeout, il messaggio diventa nuovamente visibile nella coda e può essere recuperato da un altro consumatore. Il timeout di visibilità predefinito per una coda è di 30 secondi, ma puoi modificarlo in base al tempo necessario all'applicazione per elaborare ed eliminare un messaggio. È inoltre possibile impostare un timeout di visibilità specifico per i singoli messaggi senza modificare l'impostazione generale della coda. Utilizza l'ChangeMessageVisibilityazione per estendere o abbreviare il timeout a livello di codice in base alle esigenze.

Messaggi e quote in corso

In AmazonSQS, i messaggi in volo sono messaggi ricevuti da un consumatore ma non ancora eliminati. Per le code standard, c'è un limite di circa 120.000 messaggi in volo, a seconda del traffico in coda e dell'arretrato di messaggi. Se raggiungi questo limite, Amazon SQS restituisce un OverLimit errore, indicando che non è possibile ricevere messaggi aggiuntivi fino a quando alcuni messaggi in volo non vengono eliminati. Per le FIFO code, i limiti dipendono dai gruppi di messaggi attivi.

  • Quando si utilizza il polling breve: se questo limite viene raggiunto utilizzando il polling breve, Amazon SQS restituirà un OverLimit errore, indicando che non è possibile ricevere messaggi aggiuntivi fino a quando alcuni messaggi in transito non vengono eliminati.

  • Quando utilizzi il polling lungo: se utilizzi un polling lungo, Amazon SQS non restituisce un errore quando viene raggiunto il limite di messaggi in corso. Al contrario, non restituirà nuovi messaggi finché il numero di messaggi in transito non scende al di sotto del limite.

Per gestire efficacemente i messaggi in volo:

  1. Eliminazione rapida: elimina i messaggi (manualmente o automaticamente) dopo l'elaborazione per ridurre il numero di messaggi in volo.

  2. Monitora con CloudWatch: imposta allarmi per un numero elevato di passeggeri in volo per evitare di raggiungere il limite.

  3. Distribuisci il carico: se stai elaborando un volume elevato di messaggi, utilizza code o utenti aggiuntivi per bilanciare il carico ed evitare colli di bottiglia.

  4. Richiedi un aumento della quota: invia una richiesta al AWS Supporto se sono richiesti limiti più elevati.

Comprensione del timeout di visibilità negli standard e FIFO nelle code

Sia nelle code standard che in quelle FIFO (First-In-First-Out), il timeout di visibilità aiuta a impedire che più consumatori elaborino lo stesso messaggio contemporaneamente. Tuttavia, a causa del modello di at-least-once consegna di AmazonSQS, non esiste alcuna garanzia assoluta che un messaggio non venga recapitato più di una volta durante il periodo di timeout di visibilità.

  • Code standard: il timeout di visibilità nelle code standard impedisce a più consumatori di elaborare lo stesso messaggio contemporaneamente. Tuttavia, a causa del modello di at-least-once consegna, Amazon SQS non garantisce che un messaggio non venga recapitato più di una volta entro il periodo di timeout di visibilità.

  • FIFOcode: per le FIFO code, i messaggi con lo stesso ID di gruppo di messaggi vengono elaborati in una sequenza rigorosa. Quando un messaggio con un ID di gruppo di messaggi è in corso, i messaggi successivi di quel gruppo non vengono resi disponibili finché il messaggio in transito non viene eliminato o non scade il timeout di visibilità. Tuttavia, ciò non «blocca» il gruppo a tempo indeterminato: ogni messaggio viene elaborato in sequenza e solo quando ogni messaggio viene eliminato o diventa nuovamente visibile il messaggio successivo di quel gruppo sarà disponibile per i consumatori. Questo approccio garantisce un'elaborazione ordinata all'interno del gruppo senza impedire inutilmente al gruppo di recapitare i messaggi.

Gestione degli errori

Se non elabori ed elimini un messaggio prima della scadenza del timeout di visibilità, a causa di errori dell'applicazione, arresti anomali o problemi di connettività, il messaggio diventa nuovamente visibile nella coda. Può quindi essere recuperato dallo stesso consumatore o da un altro consumatore per un altro tentativo di elaborazione. Ciò garantisce che i messaggi non vadano persi anche se l'elaborazione iniziale fallisce. Tuttavia, l'impostazione di un timeout di visibilità troppo elevato può ritardare la ricomparsa dei messaggi non elaborati, rallentando potenzialmente i nuovi tentativi. È fondamentale impostare un timeout di visibilità appropriato in base al tempo di elaborazione previsto per una gestione tempestiva dei messaggi.

Modifica e interruzione del timeout di visibilità

È possibile modificare o terminare il timeout di visibilità utilizzando l'azioneChangeMessageVisibility:

  • Modifica del timeout: regola il timeout di visibilità in modo dinamico utilizzando. ChangeMessageVisibility Ciò consente di estendere o ridurre la durata dei timeout per soddisfare le esigenze di elaborazione.

  • Cessazione del timeout: se decidi di non elaborare un messaggio ricevuto, interrompi il timeout di visibilità impostando il valore su 0 secondi dopo l'VisibilityTimeoutazione. ChangeMessageVisibility Ciò rende immediatamente il messaggio disponibile per l'elaborazione da parte di altri consumatori.

Best practice

Utilizza le seguenti best practice per gestire i timeout di visibilità in AmazonSQS, tra cui l'impostazione, la regolazione e l'estensione dei timeout, nonché la gestione dei messaggi non elaborati utilizzando Dead-Letter Queues (). DLQs

  • Impostazione e regolazione del timeout. Inizia impostando il timeout di visibilità in modo che corrisponda al tempo massimo normalmente necessario all'applicazione per elaborare ed eliminare un messaggio. Se non sei sicuro del tempo esatto di elaborazione, inizia con un timeout più breve (ad esempio, 2 minuti) ed estendilo se necessario. Implementa un meccanismo heartbeat per estendere periodicamente il timeout di visibilità, assicurando che il messaggio rimanga invisibile fino al completamento dell'elaborazione. Ciò riduce al minimo i ritardi nella rielaborazione dei messaggi non gestiti e impedisce una visibilità prematura.

  • Estensione del timeout e gestione del limite di 12 ore. Se il tempo di elaborazione varia o può superare il timeout inizialmente impostato, utilizza l'ChangeMessageVisibilityazione per estendere il timeout di visibilità durante l'elaborazione del messaggio. Tieni presente che il timeout di visibilità ha un limite massimo di 12 ore dalla prima ricezione del messaggio. L'estensione del timeout non reimposta questo limite di 12 ore. Se l'elaborazione richiede più tempo rispetto a questo limite, valuta la possibilità di utilizzare AWS Step Functions o suddividere l'attività in fasi più piccole.

  • Gestione dei messaggi non elaborati. Per gestire i messaggi che non superano più tentativi di elaborazione, configura una Dead-Letter Queue (). DLQ Ciò garantisce che i messaggi che non possono essere elaborati dopo diversi tentativi vengano acquisiti separatamente per un'ulteriore analisi o gestione, evitando che circolino ripetutamente nella coda principale.