Cos'è una coda DLQ?
Una coda DLQ è un tipo speciale di coda di messaggi che memorizza temporaneamente i messaggi che un sistema software non è in grado di elaborare a causa di errori. Le code di messaggi sono componenti software che supportano la comunicazione asincrona in un sistema distribuito. Consentono di inviare messaggi tra i servizi software a qualsiasi volume e non richiedono che il ricevitore dei messaggi sia sempre disponibile. Una coda DLQ memorizza specificamente i messaggi errati che non hanno una destinazione o che non possono essere elaborati dal destinatario previsto.
Perché le code DLQ sono importanti?
Le code DLQ funzionano insieme alle normali code di messaggi. Fungono da archivio temporaneo per messaggi errati e non riusciti. Le DLQ impediscono che la coda di origine sia stracolma di messaggi non elaborati.
Ad esempio, si consideri un software con una coda di messaggi normale e una DLQ. Il software utilizza la coda normale per contenere i messaggi che intende inviare a una destinazione. Se il destinatario non risponde o non elabora i messaggi inviati, il software li sposta nella coda DLQ.
Esistono due cause potenziali per cui i messaggi vengono spostati nella pipeline della DLQ: contenuto errato dei messaggi e modifiche nel sistema del destinatario.
Contenuto errato del messaggio
Un messaggio verrà spostato in una DLQ se il messaggio trasmesso è errato. Le condizioni hardware, software e di rete potrebbero danneggiare i dati inviati. Ad esempio, l'interferenza hardware modifica leggermente alcune informazioni durante la trasmissione. Il danneggiamento imprevisto dei dati potrebbe indurre il destinatario a rifiutare o ignorare il messaggio.
Modifiche nel sistema del destinatario
Un messaggio potrebbe passare a una DLQ anche se il software ricevente ha subito modifiche di cui il mittente non è a conoscenza. Ad esempio, è possibile provare ad aggiornare le informazioni di un cliente inviando un messaggio per CUST_ID_005. Tuttavia, il destinatario potrebbe non riuscire a elaborare il messaggio in arrivo perché ha rimosso il cliente dal database del sistema.
Quali sono i vantaggi di una coda DLQ?
Quindi, parliamo dei vantaggi delle code DLQ.
Costi di comunicazione ridotti
Le code di messaggi normali o standard continuano a elaborare i messaggi fino alla scadenza del periodo di conservazione. Ciò aiuta a garantire l'elaborazione continua dei messaggi e riduce al minimo le possibilità che la coda venga bloccata.
Tuttavia, se il sistema elabora migliaia di messaggi, un numero elevato di messaggi di errore aumenterà i costi generali di comunicazione e graverà sul sistema di comunicazione. Invece di provare a elaborare i messaggi non riusciti fino alla loro scadenza, è meglio spostarli in una coda DLQ dopo alcuni tentativi di elaborazione.
Migliore risoluzione dei problemi
Se sposti messaggi errati nella DLQ, gli sviluppatori potranno concentrarsi sull'identificazione delle cause degli errori. Possono indagare sul motivo per cui il destinatario non è riuscito a elaborare i messaggi, applicare le correzioni ed eseguire nuovi tentativi di recapito dei messaggi.
Ad esempio, un software bancario potrebbe inviare migliaia di richieste di carte di credito ogni giorno al proprio sistema di back-end per l'approvazione. Da lì, il sistema di back-end riceve le applicazioni ma non può elaborarle tutte a causa delle informazioni incomplete. Invece di fare infiniti tentativi, il software sposta i messaggi sulla coda DLQ fino a quando il team IT non risolve il problema. Ciò consente al sistema di elaborare e recapitare i messaggi rimanenti senza problemi di prestazioni.
Quando è preferibile utilizzare una coda DLQ?
È possibile utilizzare una coda DLQ se il sistema presenta i seguenti problemi.
Code non ordinate
Puoi sfruttare le DLQ quando le applicazioni non dipendono dall'ordine. Sebbene le DLQ aiutino a risolvere i problemi di trasmissione dei messaggi errati, si dovrebbe continuare a monitorare le code e inviare nuovamente i messaggi non riusciti.
Code FIFO
L'ordinamento dei messaggi è importante nelle code FIFO (first-in, first-out). Ogni messaggio deve essere elaborato prima di consegnare il messaggio successivo. Puoi usare le code DLQ con le code FIFO, ma l'implementazione della DLQ dovrebbe essere anch'essa FIFO.
Quando non va utilizzata una coda DLQ?
È preferibile non utilizzare una coda DLQ con code non ordinate se si desidera poter continuare a ripetere la trasmissione di un messaggio a tempo indeterminato. Ad esempio, non utilizzare una coda DLQ se il programma deve attendere che un processo dipendente diventi attivo o disponibile.
Allo stesso modo, non usare una coda DLQ con una coda FIFO (first-in, first-out) se non si desidera interrompere l'ordine esatto dei messaggi o delle operazioni. Ad esempio, non utilizzare una coda DLQ con le istruzioni in un elenco di decisioni di modifica (EDL) per una suite di montaggio video. In questa istanza, modificando l'ordine delle modifiche, si modifica anche il contesto delle modifiche successive.
Come funziona una coda DLQ?
Per la maggior parte, una coda DLQ funziona come una normale coda di messaggi. Memorizza i messaggi errati finché non vengono elaborati per indagare sul motivo dell'errore.
Successivamente, discuteremo della policy di redrive per le DLQ e del modo in cui i messaggi entrano ed escono dalle code DLQ.
Creazione di una policy di redrive
Il software sposta i messaggi in una coda DLQ facendo riferimento alla policy di redrive. La policy di redrive è costituita da regole che determinano quando il software deve spostare i messaggi nella coda DLQ. Principalmente definendo il numero massimo di tentativi, la policy di redrive regola il modo in cui la coda di origine e la coda DLQ interagiscono tra loro.
Ad esempio, se lo sviluppatore imposta il numero massimo di tentativi su uno, il sistema sposta tutte le consegne non riuscite nella DLQ dopo un singolo tentativo. Alcune consegne non riuscite possono essere causate da un sovraccarico temporaneo della rete o da problemi software. Questo invia molti messaggi non recapitati alla DLQ. Per ottenere un giusto equilibrio, gli sviluppatori ottimizzano il numero massimo di tentativi per garantire che il software esegua un numero sufficiente di tentativi prima di spostare i messaggi nella DLQ.
Spostamento dei messaggi nella coda DLQ
I tentativi di consegna tra mittente e destinatario possono fallire per diversi motivi:
- Il destinatario non riesce a ricevere il messaggio perché non esiste.
- Il messaggio contiene degli errori.
- Il messaggio supera i limiti di lunghezza della coda o del messaggio. Ad esempio, alcuni destinatari non sono in grado di elaborare messaggi che superano una dimensione specifica.
- Il time to live (TTL) del messaggio è scaduto. Il TTL è un valore che indica per quanto tempo un determinato pacchetto di dati è valido sulla rete.
Spostamento dei messaggi dalla coda DLQ
Quando i messaggi vengono spostati nella coda DLQ, gli sviluppatori esaminano i messaggi errati per determinarne le cause. I messaggi nella DLQ potrebbero contenere informazioni preziose per prevenire il ripetersi di problemi simili in futuro. Dopo che gli sviluppatori hanno analizzato e risolto i problemi, il sistema sposta i messaggi dalla coda DLQ e li inserisce nella coda di origine. Ciò consente al mittente di continuare a elaborare i messaggi.
In che modo AWS può soddisfare i tuoi requisiti in materia di code DLQ?
Il servizio di coda semplice Amazon (Amazon SQS) offre un approccio scalabile per lo scambio di messaggi tra sistemi distribuiti su larga scala. Gli sviluppatori utilizzano Amazon SQS per creare applicazioni Web affidabili con code standard e code FIFO (first-in, first-out) completamente gestite.
Ecco gli altri vantaggi di Amazon SQS:
- Amazon SQS consente ai sistemi di creare un numero illimitato di code di messaggi
- Gli sviluppatori possono trasferire messaggi in batch per ridurre i costi
- Amazon SQS supporta il blocco dei messaggi, impedendo a più computer di elaborare contemporaneamente lo stesso messaggio
Inizia oggi stesso a utilizzare Amazon Web Services (AWS) creando un account AWS.
Passaggi successivi con AWS
Ottieni accesso istantaneo al Piano gratuito di AWS.