REL05-BP04 Fallisci velocemente e limita le code - Pilastro dell'affidabilità

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à.

REL05-BP04 Fallisci velocemente e limita le code

Se un servizio non è in grado di rispondere correttamente a una richiesta, procede ad anticipare l'errore (fail fast). Ciò consente il rilascio delle risorse associate a una richiesta e permette al servizio di recuperare le risorse se queste sono in esaurimento. L'anticipazione degli errori (fail fast) è un modello di progettazione software consolidato che può essere usato per creare carichi di lavoro altamente affidabili nel cloud. Anche l'accodamento è un modello di integrazione aziendale consolidato che può semplificare il carico e consentire ai client di rilasciare risorse quando l'elaborazione asincrona può essere tollerata. Quando un servizio è in grado di rispondere correttamente in condizioni normali ma restituisce un esito negativo quando la frequenza delle richieste è troppo alta, utilizza una coda per memorizzare le richieste nel buffer. Tuttavia, non consentire la creazione di backlog di code lunghe che possono comportare l'elaborazione di richieste obsolete già dismesse dal client.

Risultato desiderato: quando i sistemi rilevano conflitti a livello di risorse, timeout, eccezioni o errori che rendono irraggiungibili gli obiettivi dei livelli di servizio, le strategie volte ad anticipare l’errore (fail fast) consentono un ripristino più rapido del sistema. I sistemi che devono assorbire i picchi di traffico e sono in grado di gestire l'elaborazione asincrona possono migliorare l'affidabilità consentendo ai client di rilasciare rapidamente le richieste utilizzando le code per archiviare le richieste nei servizi di backend. Quando le richieste vengono memorizzate nei buffer delle code, vengono implementate strategie di gestione delle code per evitare backlog ingestibili.

Anti-pattern comuni:

  • Implementazione delle code di messaggi ma non configurazione delle code di lettere morte (DLQ) o degli allarmi sui DLQ volumi per rilevare quando un sistema è in errore.

  • Mancata misurazione dell'età dei messaggi in una coda, misurazione della latenza per capire quando gli utenti della coda sono in ritardo o generano errori che causano un nuovo tentativo.

  • Mancata cancellazione dei messaggi nel backlog da una coda quando non è più necessario elaborare questi messaggi se l'azienda non lo richiede più.

  • La configurazione delle code first in first out (FIFO) quando last in first out (LIFO) risponderebbe meglio alle esigenze dei clienti, ad esempio quando non è richiesto un ordine rigoroso e l'elaborazione degli arretrati ritarda tutte le richieste nuove e urgenti, con conseguenti violazioni dei livelli di servizio per tutti i clienti.

  • Esporre le code interne ai clienti anziché esporre i clienti a questi ultimi, gestire l'assunzione di lavoro e inserire le APIs richieste nelle code interne.

  • Combinazione di un numero eccessivo di tipi di richieste di lavoro in un'unica coda: ciò può aggravare le condizioni dei backlog in seguito alla distribuzione delle richieste di risorse tra i tipi di richiesta.

  • Elaborazione di richieste complesse e semplici nella stessa coda, nonostante siano necessari monitoraggio, timeout e allocazioni di risorse diversi.

  • Mancata convalida degli input o utilizzo di asserzioni per implementare meccanismi in grado di anticipare l'errore (fail fast) nel software che generano eccezioni a componenti di livello superiore in grado di gestire normalmente gli errori.

  • Mancata rimozione delle risorse in errore dall'instradamento delle richieste, soprattutto quando gli errori generano risultati sia positivi che negativi dovuti ad arresti anomali e riavvii, errori intermittenti a livello di dipendenze, capacità ridotta o perdita di pacchetti di rete.

Vantaggi dell'adozione di questa best practice: i sistemi in grado di anticipare l'errore (fail fast) sono più facili da sottoporre al debug e alla correzione degli errori e spesso presentano problemi di codifica e configurazione prima che le versioni vengano pubblicate in produzione. I sistemi che incorporano strategie di accodamento efficaci forniscono maggiore resilienza e affidabilità in caso di picchi di traffico e di condizioni intermittenti di errore del sistema.

Livello di rischio associato se questa best practice non fosse adottata: elevato

Guida all'implementazione

Le strategie volte ad anticipare l’errore (fail fast) possono essere codificate in soluzioni software e configurate nell'infrastruttura. Oltre ad anticipare l'errore (fail fast), le code sono una tecnica semplice ma affidabile di definizione dell'architettura che consente il caricamento senza problemi di componenti disaccoppiati del sistema. Amazon CloudWatch offre funzionalità di monitoraggio e allarme in caso di guasti. Una volta accertato il malfunzionamento di un sistema, è possibile richiamare strategie di mitigazione, ad esempio per evitare problemi dovuti a risorse danneggiate. Quando i sistemi implementano code con Amazon SQS e altre tecnologie di coda per semplificare il caricamento, devono considerare come gestire gli arretrati delle code e gli errori di consumo dei messaggi.

Passaggi dell'implementazione

  • Implementa asserzioni programmatiche o metriche specifiche nel tuo software e usale per ricevere avvisi espliciti in caso di problemi di sistema. Amazon ti CloudWatch aiuta a creare metriche e allarmi basati sullo schema e SDK sulla strumentazione dei log delle applicazioni.

  • Usa CloudWatch metriche e allarmi per evitare che risorse compromettano la velocità di elaborazione o che impediscono ripetutamente di elaborare le richieste.

  • Utilizza l'elaborazione asincrona progettando APIs per accettare richieste e aggiungere richieste alle code interne utilizzando AmazonSQS, quindi rispondi al client che produce i messaggi con un messaggio di successo in modo che il client possa liberare risorse e passare ad altre attività mentre gli utenti della coda di backend elaborano le richieste.

  • Misura e monitora la latenza di elaborazione delle code generando una CloudWatch metrica ogni volta che togli un messaggio dalla coda confrontando «now» con il timestamp del messaggio.

  • Quando gli errori impediscono la corretta elaborazione dei messaggi o il traffico aumenta a livelli tali da impedirne l'elaborazione in base agli accordi sul livello di servizio, escludi il traffico obsoleto o in eccesso indirizzandolo a una coda per il traffico eccedente. Ciò consente l'elaborazione prioritaria del nuovo processo e del processo più vecchio quando si rende disponibile nuova capacità. Questa tecnica è un'approssimazione dell'LIFOelaborazione e consente la normale elaborazione del sistema per tutti i nuovi lavori.

  • Usa le code DLQ o le code di reindirizzamento per spostare i messaggi che non possono essere elaborati dal backlog in una posizione che può essere ricercata e risolta in un secondo momento.

  • Riprova o, se possibile, elimina i vecchi messaggi confrontandoli con il timestamp del messaggio ed eliminando i messaggi che non sono più rilevanti per il client richiedente.

Risorse

Best practice correlate:

Documenti correlati:

Esempi correlati:

Video correlati:

Strumenti correlati: