Resiliencia Flashcards
¿Qué es la resiliencia en el contexto del software?
La resiliencia en el software se refiere a la capacidad de un sistema para manejar y recuperarse de
fallos o problemas inesperados, manteniendo su nivel de operatividad y rendimiento. Es un
aspecto clave en el diseño y la operación de sistemas robustos y confiables.
¿Por qué es importante realizar pruebas de resiliencia en software?
Las pruebas de resiliencia son importantes para asegurar que el software pueda manejar y recuperarse de errores, fallos y condiciones adversas sin perder datos ni funcionalidad. Ayudan a
identificar y corregir puntos débiles antes de que el software se implemente en un entorno de producción.
¿Qué es la “tolerancia a fallos” en software?
La tolerancia a fallos en software es la capacidad de un sistema para continuar operando de manera satisfactoria en caso de fallos de uno o más de sus componentes. Incluye mecanismos para detectar fallos y realizar acciones correctivas sin interrumpir el servicio.
¿Qué es un “ciclo de vida de recuperación” en la resiliencia de software?
El ciclo de vida de recuperación en la resiliencia de software se refiere a las etapas por las que pasa un sistema para recuperarse de un fallo. Esto incluye la detección del fallo, la contención del problema, la recuperación del sistema a un estado operativo y la prevención de futuros incidentes similares.
¿Qué es la “recuperación en caliente” en la resiliencia de software?
La recuperación en caliente se refiere a la capacidad de un sistema para recuperarse de un fallo sin necesidad de detener completamente el sistema o la aplicación. Esto implica que el sistema
puede reanudar su operación normal inmediatamente después de solucionar el fallo, sin tiempos de inactividad significativos.
Describa qué significa un “evento adverso” en resiliencia de software.
Un “evento adverso” se refiere a cualquier incidente o situación no planeada que puede tener un impacto negativo en el funcionamiento de un sistema o servicio de software, incluyendo fallos del sistema, errores humanos, problemas de hardware, y ataques cibernéticos.
Describa qué significa una “condición adversa” en resiliencia de software.
Las “condiciones adversas” en el contexto de software se refieren a situaciones o entornos operativos desfavorables bajo los cuales un sistema debe funcionar, como altas cargas de tráfico, errores de red, y fallos de hardware
¿Qué patrón se utiliza para evitar que un servicio defectuoso afecte a otros componentes y se
cierra después de un tiempo para verificar si el servicio ha vuelto a la normalidad?
El “patrón de disyuntor/circuit-breaker” se utiliza para evitar que un servicio defectuoso afecte a
otros componentes, cortando temporalmente la conexión a un servicio que falla y luego intentando
restablecer la conexión después de un período para verificar si ha vuelto a la normalidad.
¿Qué técnica de resiliencia se utiliza para configurar reintentos automáticos en caso de errores
temporales y establecer límites de tiempo para evitar bloqueos prolongados en caso de fallas?
La técnica de “reintentos con backoff y timeouts” se utiliza para configurar reintentos automáticos
en caso de errores temporales y establece límites de tiempo para evitar bloqueos prolongados en
caso de fallas.
¿Qué técnica de resiliencia ayuda a aislar a los consumidores y servicios de las fallas en cascada
para evitar que una falla se propague y afecte la solución completa?
La técnica de “bulkheads” ayuda a aislar a los consumidores y servicios de las fallas en cascada,
impidiendo que una falla en una parte del sistema se propague y afecte a toda la solución
Describa para qué sirve el Rate-Limiting y explique los cuatro algoritmos de Rate-Limiting vistos
en el curso. Puede proporcionar ejemplos.
El Rate-Limiting sirve para controlar la cantidad de solicitudes que un usuario puede hacer a un API
o servicio en un período de tiempo determinado, ayudando a prevenir el abuso y sobrecarga del
sistema. Los cuatro algoritmos de Rate-Limiting son:
Fixed Window: Utiliza una ventana de tiempo fija (por ejemplo, un minuto o una hora) y limita el
número de solicitudes en ese período. Por ejemplo, se pueden permitir 100 solicitudes por hora.
Sliding Window: Similar al Fixed Window pero más flexible, este enfoque desliza la ventana de
tiempo con cada solicitud, proporcionando una distribución más uniforme de las solicitudes
permitidas a lo largo del tiempo.
Token Bucket: Este método llena un ‘cubo’ con tokens a una tasa fija. Cada solicitud cuesta un
token y solo se puede realizar si hay tokens disponibles, lo que permite cierta flexibilidad para
ráfagas de tráfico.
Concurrency: Limita el número de solicitudes concurrentes en lugar de la tasa de solicitudes. Por
ejemplo, sólo permite que 20 solicitudes se procesen al mismo tiempo.
¿Qué ventaja tiene el límite de ventana deslizante (sliding window limit) sobre el límite de
ventana fija (fixed window limit) en términos de su capacidad para manejar solicitudes
distribuidas de manera uniforme?
El límite de ventana deslizante (sliding window limit) tiene la ventaja de distribuir las solicitudes de
manera más uniforme en el tiempo en comparación con el límite de ventana fija (fixed window
limit). Esto se debe a que ajusta la ventana de tiempo con cada solicitud, evitando picos de tráfico
al inicio de cada ventana fija.
¿Cuál es la idea principal detrás del uso de “exponential backoff” en estrategias de reintento?
La idea principal detrás del uso de “exponential backoff” en estrategias de reintento es reducir la
carga en el servidor y la probabilidad de colisión en casos de fallos temporales. El tiempo entre
reintentos se incrementa exponencialmente, lo que disminuye la frecuencia de las solicitudes
fallidas
Describa en qué consiste la ingeniería del caos y cuál es el objetivo principal de la práctica de
introducir intencionalmente fallas en un sistema en producción.
La ingeniería del caos consiste en introducir intencionalmente fallas en un sistema en producción
para probar su resiliencia y capacidad de recuperación. El objetivo principal es identificar y corregir
puntos débiles antes de que causen problemas en situaciones reales.
¿Qué significa que una operación es idempotente en una API? ¿Por qué es importante?
Una operación es idempotente en una API si realizar la misma operación varias veces produce el
mismo resultado que hacerlo una sola vez. Es importante para asegurar la consistencia y
predecibilidad, especialmente en sistemas distribuidos y en situaciones de reintento de
solicitudes.