che cos'è il "degrado aggraziato"?


11

Ho sentito molto parlare di questo termine "degrado aggraziato".

Per esempio ,

 "An application server should gracefully degrage when it is under heavy load "

  "Graceful degradation of user interfaces.... "

Il termine mi sembra una cosa astratta. Qualche esempio concreto di cosa significhi?


5
Un buon articolo sull'argomento codinghorror.com/blog/2011/04/…
JF Dion,

Risposte:


10

Ecco alcuni esempi:

  • Se esaurisci alcune risorse (handle, socket, memoria, spazio su disco) non ti arresti in modo anomalo ma piuttosto continui a servire tutti gli utenti che puoi servire con le risorse disponibili. Qualcosa che non si degrada con grazia può semplicemente smettere di funzionare se portato fuori dalla busta del design.
  • Sotto carichi più pesanti di quelli progettati per gli utenti, la risposta sarà più lenta di quella progettata per gli utenti. Senza un grazioso degrado, il sistema potrebbe smettere di funzionare una volta superati i requisiti potrebbe essere accettabile.
  • Condizioni di errore, come guasto dell'unità disco, errore nel core della CPU, errore nella memoria. Un sistema progettato per degradarsi con grazia può continuare a funzionare in una modalità ridotta (ad esempio senza poter accedere ai dati nell'unità guasta ma consegnando comunque i dati dall'unità che non si è guastata) mentre un altro si bloccherà semplicemente.

5

Le applicazioni che hanno una modalità "degradata" in genere offrono l'accesso a un set limitato di funzionalità a causa di un problema interno o esterno. Ad esempio, immagina che l'applicazione si connetta a due diverse origini dati. Se uno di questi fallisce, potrebbe essere ancora possibile continuare a funzionare ma disabilitare tutte le funzionalità visive (o / e di backend) relative alla risorsa non disponibile.

Esempio concreto: l'applicazione ha due origini dati, in una delle quali si memorizzano persone, nell'altra si archiviano gli account. Anche se il database degli account fallisce, se l'applicazione ha una modalità degradata, dovresti comunque essere in grado di creare nuove persone, anche se non interagire con i loro account.

Per quanto riguarda l'interfaccia utente, ciò significa in genere che l'utente indica chiaramente che alcune funzionalità sono disabilitate e visualizza un messaggio di avviso in modo che non venga lasciato fuori al buio sul perché qualcosa non è disponibile.

Inoltre, esiste una voce di Wikipedia relativa ai sistemi a tolleranza d'errore .


2

Con l'avanzamento della tecnologia abbiamo sempre modifiche che si trasformano in un'applicazione che in ogni momento potrebbe non essere supportata da tutti i destinatari. In tali scenari ci imbattiamo in un degrado aggraziato che emula che costruiamo per il meglio disponibile, ma abbiamo anche un fail-safe per coloro che non hanno effettuato l'upgrade o il loro sistema potrebbe non supportare.

Un esempio importante è il <img>tag che ha l' altattributo che è utile per i casi in cui le immagini sono bloccate o disattivate, ora forniscono un contesto significativo per le immagini (ovviamente solo se lo specifichiamo).

Bene, un altro esempio che mi viene in mente sono i fogli di stile in caso di errore o indisponibilità, il browser fornisce una sua versione generica per mostrare / visualizzare la pagina.

Ora, come hai accennato al carico pesante, devi elaborare attentamente un piano come fare se i tuoi colpi superano la soglia, disabiliti determinate funzionalità o sospendi alcuni servizi che non sono critici e ti danno una pausa. Tutto ciò ti aiuterà a impostare un degrado gradevole in modo che l'utente sappia a causa delle x cose che il server potrebbe impiegare del tempo per rispondere o che il servizio x non sarà disponibile per circa un'ora


1

Ciò significa che quando gli ingressi e lo stato superano i limiti di progettazione, le uscite rimangono il più ragionevoli e affidabili possibile.

Se è un server progettato per gestire 100 connessioni simultanee, non si arresta in modo anomalo o inizia a restituire risultati folli a 101 o addirittura 150 connessioni: rallenta o forse interrompe alcune connessioni, ma continua a funzionare per lo più. Se si tratta di un database progettato per gestire 1 miliardo di record, non rallenta improvvisamente a uno stato inutilizzabile a 1,01 miliardi.


1

Se non hai un sistema grafico (come nessun server X11 in esecuzione), il tuo programma dovrebbe almeno fornire una CLI, come ncurses.

vi ha una modalità stupida in cui si comporta come ex, se il terminale ha troppo poche funzionalità.


1

Quando si creano app Web, entra in gioco un grazioso degrado quando il tuo sito si basa su JavaScript o Flash o su tecniche simili che l'utente non ha o disabilitato.

Quindi dovresti comunque fornire alcune funzionalità di base solo con HTML o almeno un messaggio per cui il sito non funziona come previsto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.