Resiliencia Flashcards

1
Q

¿Qué es la resiliencia en el contexto del software?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Por qué es importante realizar pruebas de resiliencia en software?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Qué es la “tolerancia a fallos” en software?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Qué es un “ciclo de vida de recuperación” en la resiliencia de software?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Qué es la “recuperación en caliente” en la resiliencia de software?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Describa qué significa un “evento adverso” en resiliencia de software.

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Describa qué significa una “condición adversa” en resiliencia de software.

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

¿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?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

¿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?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿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?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Describa para qué sirve el Rate-Limiting y explique los cuatro algoritmos de Rate-Limiting vistos
en el curso. Puede proporcionar ejemplos.

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

¿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?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

¿Cuál es la idea principal detrás del uso de “exponential backoff” en estrategias de reintento?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

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.

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

¿Qué significa que una operación es idempotente en una API? ¿Por qué es importante?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

¿Qué son y para que se utilizan los “health checks” o comprobación de salud en un sistema de
software?

A

Los “health checks” o comprobaciones de salud en un sistema de software son mecanismos
utilizados para monitorear y verificar el estado operativo de los componentes de un sistema. Se
utilizan para detectar fallos o problemas en servicios y componentes del sistema, lo que permite
tomar acciones correctivas rápidamente y mantener la alta disponibilidad y confiabilidad del
sistema.

17
Q

Describa qué son los timeout y para que se utilizan en sistemas distribuidos.

A

Los timeout son mecanismos que establecen un tiempo máximo para que una operación se
complete en sistemas distribuidos. Se utilizan para prevenir que las solicitudes o procesos se
queden indefinidamente en espera, lo que podría llevar a bloqueos o a la degradación del
rendimiento del sistema. Los timeouts ayudan a manejar mejor los errores y a mejorar la robustez
del sistema.

18
Q

¿Cuál es el propósito principal de expresar la disponibilidad de un sistema en términos de
“nueves” (por ejemplo, 99.9%, 99.99%) en lugar de porcentajes más generales?

A

El propósito principal de expresar la disponibilidad de un sistema en términos de “nueves” es
proporcionar una medida más precisa y estándar de la confiabilidad del sistema. Por ejemplo,
99.9% de disponibilidad implica un tiempo de inactividad mucho menor que el 99%, lo que es
crítico en entornos donde incluso pequeñas diferencias en la disponibilidad pueden tener grandes
impactos en las operaciones y la experiencia del usuario.