¿Qué es la "degradación graciosa"?

11

Escucho mucho sobre este término "degradación agraciada".

Por ejemplo ,

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

  "Graceful degradation of user interfaces.... "

El término me parece algo abstracto. ¿Algún ejemplo concreto de lo que significa?

Vinoth Kumar CM
fuente
55
Un buen artículo sobre el tema codinghorror.com/blog/2011/04/…
JF Dion

Respuestas:

10

Aquí hay unos ejemplos:

  • Si se queda sin algún recurso (identificadores, sockets, memoria, espacio en disco), no se bloquea, sino que sigue sirviendo a tantos usuarios como pueda con sus recursos disponibles. Algo que no se degrada con gracia puede simplemente dejar de funcionar cuando se toma fuera del sobre de diseño.
  • Bajo cargas más pesadas que las que usted diseñó para los usuarios, experimentarán una respuesta más lenta que la que usted diseñó. Sin una degradación elegante, hacer que el sistema deje de funcionar una vez que se exceden los requisitos puede ser aceptable.
  • Condiciones de error, como falla de la unidad de disco, falla en un núcleo de CPU, falla en la memoria. Un sistema diseñado para degradarse con gracia puede continuar funcionando en un modo reducido (por ejemplo, sin poder acceder a los datos en la unidad fallida pero aún entregando datos de la unidad que no ha fallado), mientras que otro simplemente se bloqueará.
Guy Sirton
fuente
5

Las aplicaciones que tienen un modo "degradado" generalmente ofrecen acceso a un conjunto limitado de funciones debido a un problema interno o externo. Por ejemplo, imagine que su aplicación se conecta a dos fuentes de datos diferentes. Si uno de estos falla, aún podría ser posible que continúe ejecutándose, pero deshabilite todas las características visuales (y / o de fondo) relacionadas con el recurso no disponible.

Ejemplo concreto: su aplicación tiene dos fuentes de datos, en una de ellas almacena personas, en la otra almacena cuentas. Incluso si la base de datos de la cuenta falla, si la aplicación tiene un modo degradado, aún debería ser capaz de crear nuevas personas, aunque no interactúe con sus cuentas.

En cuanto a la interfaz de usuario, esto generalmente significa que usted le indica claramente al usuario que algunas funciones están deshabilitadas, y muestra un mensaje de advertencia para que no se quede en la oscuridad por qué algo no está disponible.

Además, hay una entrada de Wikipedia relacionada con los sistemas tolerantes a fallas .

Jalayn
fuente
2

Con el avance de la tecnología, siempre tenemos cambios en una aplicación que en todo momento puede no ser compatible con todos los públicos objetivo. En tales escenarios, nos encontramos con una degradación elegante que emula que construimos para el mejor disponible, pero también tenemos una protección contra fallas para aquellos que no han actualizado o su sistema podría no ser compatible.

Un ejemplo importante es la <img>etiqueta que tiene el altatributo que es útil para los casos en que las imágenes están bloqueadas o apagadas, ahora dan un contexto significativo para las imágenes (por supuesto, solo si lo especificamos).

Bueno, otro ejemplo que se me ocurre son las hojas de estilo en caso de error o falta de disponibilidad, el navegador proporciona una versión genérica propia para mostrar / mostrar la página.

Ahora, como mencionó la carga pesada, debe trazar cuidadosamente un plan, ya que lo que se debe hacer si sus golpes disparan más allá del umbral, deshabilita ciertas funciones o suspende algunos servicios que no son críticos y le da un respiro. Todo esto lo ayudará a configurar una degradación elegante para que el usuario sepa debido a las cosas x que el servidor puede tardar un tiempo en responder o el servicio x no estará disponible durante una hora más o menos

V4Vendetta
fuente
1

Significa que a medida que las entradas y el estado exceden los límites de diseño, las salidas siguen siendo lo más razonables y confiables posible.

Si se trata de un servidor diseñado para manejar 100 conexiones simultáneas, no se bloquea ni comienza a devolver resultados locos en 101 o incluso 150 conexiones: se ralentiza o tal vez deja caer algunas conexiones, pero sigue funcionando principalmente. Si se trata de una base de datos diseñada para manejar mil millones de registros, no se desacelera repentinamente a un estado inutilizable de 1.01 mil millones.

Caleb
fuente
1

Si no tiene un sistema gráfico (como ningún servidor X11 en ejecución), su programa debería proporcionar al menos una CLI, como ncurses.

vi tiene un modo tonto en el que se comporta como ex, si el terminal tiene muy pocas características.

enone
fuente
1

Al crear aplicaciones web, la degradación elegante entra en juego cuando su sitio se basa en JavaScript o Flash o en técnicas similares que el usuario no tiene o deshabilita.

Entonces aún debe proporcionar alguna funcionalidad básica solo con HTML o al menos un mensaje de por qué el sitio no funciona como se esperaba.

OliverS
fuente