Recomendaciones para diseñar una estrategia de pruebas de confiabilidad

Se aplica a esta recomendación de lista de comprobación de confiabilidad de Azure Well-Architected Framework:

RE:08 Pruebe escenarios de resistencia y disponibilidad aplicando los principios de ingeniería de caos en los entornos de prueba y producción. Use pruebas para asegurarse de que las estrategias de implementación y escalado de degradación correctos sean eficaces mediante la realización de un funcionamiento incorrecto activo y pruebas de carga simuladas.

En esta guía se describen las recomendaciones para diseñar una estrategia de prueba de confiabilidad para validar y optimizar la confiabilidad de la carga de trabajo. Las pruebas de confiabilidad se centran en la resistencia y disponibilidad de la carga de trabajo, específicamente en los flujos críticos que se identifican al diseñar la solución. En esta guía se proporcionan instrucciones generales de pruebas e instrucciones específicas de la inserción de errores y la ingeniería del caos.

Definiciones

Término Definición
Disponibilidad Cantidad de tiempo que se ejecuta una carga de trabajo de aplicación en un estado correcto sin tiempo de inactividad significativo.
Ingeniería del caos La práctica de someter aplicaciones y servicios a tensiones y errores del mundo real. El objetivo de la ingeniería de caos es crear y validar la resistencia a condiciones poco confiables y dependencias que faltan.
Inyección de errores El acto de introducir un error en un sistema para probar la resistencia del sistema.
Capacidad de recuperación Sinónimo de resistencia.
Resistencia La capacidad de una carga de trabajo de aplicación para resistir y recuperarse de los modos de error.

Estrategias de diseño principales

Guía general de pruebas

  • Realice pruebas rutinarias para validar los umbrales, destinos y suposiciones existentes. Cuando se produce un cambio importante en la carga de trabajo, ejecute pruebas periódicas. Realice la mayoría de las pruebas en entornos de ensayo y pruebas. También es beneficioso ejecutar un subconjunto de pruebas en el sistema de producción. Planee una paridad uno a uno de los entornos de prueba clave con el entorno de producción.

  • Automatice las pruebas para ayudar a garantizar una cobertura y reproducibilidad de pruebas coherentes. Automatice las tareas de prueba comunes e intégrelas en los procesos de compilación. El software de prueba manual es tedioso y susceptible a errores, pero puede realizar pruebas exploratorias manuales. En los casos en los que necesita desarrollar pruebas automatizadas, use pruebas manuales para determinar el ámbito de las pruebas que se van a desarrollar.

  • Adopte un enfoque de pruebas de desplazamiento a la izquierda para realizar pruebas de resistencia y disponibilidad al principio del ciclo de desarrollo.

  • Adapte un formato de documentación sencillo, por lo que es fácil para todos comprender el proceso y los resultados de cada prueba regular.

  • Comparta los resultados documentados con los equipos adecuados, como los equipos operativos, el liderazgo tecnológico, las partes interesadas de la empresa y las partes interesadas de la recuperación ante desastres. Los resultados deben informar sobre el refinamiento de los objetivos de confiabilidad, como los objetivos de nivel de servicio (SLO), los acuerdos de nivel de servicio (SLA), los objetivos de tiempo de recuperación (RTO) y los objetivos de punto de recuperación (RPO).

  • Cree una cadencia de pruebas periódica para las copias de seguridad. Restaure los datos en sistemas aislados para ayudar a garantizar que las copias de seguridad son válidas y que las restauraciones son funcionales.

  • Documente y comparta métricas de tiempo de recuperación con las partes interesadas de la recuperación ante desastres para asegurarse de que las expectativas de recuperación son adecuadas.

  • Use procedimientos de prueba de implementación estándar del sector para garantizar que tiene un proceso de implementación automatizado, predecible y eficaz.

  • Pruebe la capacidad de la carga de trabajo para soportar errores transitorios. Para obtener más información, consulte Recomendaciones para controlar errores transitorios.

  • Pruebe la capacidad de la carga de trabajo para responder a los cambios en los patrones de carga y los picos de uso. Use esta información para ayudarle a probar la estrategia de escalado. Para obtener información sobre las pruebas de carga y esfuerzo, consulte Recomendaciones para pruebas.

  • Pruebe cómo controla la carga de trabajo los errores en los servicios dependientes u otras dependencias mediante la inserción de errores.

  • Pruebe y valide cómo responde su diseño de recuperación automática y conservación automática a errores de funcionamiento. Pruebe las operaciones automatizadas y manuales de recuperación.

  • Pruebe el plan de recuperación ante desastres para responder a errores catastróficos y otros incidentes importantes.

  • Pruebe la capacidad de la carga de trabajo para degradar correctamente y minimizar el radio de explosión del mal funcionamiento del componente mediante la inyección de errores.

Aprovechar las interrupciones planeadas y no planeadas

Cuando la carga de trabajo está sin conexión debido al mantenimiento planeado o a una interrupción no planeada, tiene una oportunidad única de realizar pruebas y mejorar su comprensión de la carga de trabajo. En las secciones siguientes se proporcionan recomendaciones para cada escenario.

Mantenimiento planeado

Cuando tenga ventanas de mantenimiento planeadas para actualizaciones o revisiones, puede probar componentes y flujos que no intervienen en el trabajo de mantenimiento. Realice pruebas sin el riesgo potencial de degradar inesperadamente la carga de trabajo o desconectarla por completo. Si tiene suficiente tiempo durante la ventana de mantenimiento, también puede probar los componentes y flujos que intervienen en el mantenimiento una vez completado el trabajo de mantenimiento.

Interrupción no planeada

Use cada incidente de interrupción como una oportunidad para obtener más información sobre la carga de trabajo y mejorar su resistencia siguiendo estos pasos, ordenados por prioridad:

  • Vuelva a poner la carga de trabajo en línea para los clientes. Para ello, puede realizar una solución alternativa para el problema, resolver el problema o iniciar los procesos de recuperación.

  • Determine la causa principal de la interrupción y solucionarla. Si puede corregir la causa principal como parte de la investigación, documente la causa principal y las medidas que ha tomado para corregirla. Si el problema requiere tomar una ventana de mantenimiento adicional más adelante, asegúrese de que las medidas de mitigación pueden controlar la carga esperada mediante pruebas exhaustivas. Asegúrese de que ha configurado una supervisión suficiente para cubrir las medidas de mitigación.

  • Si procede, busque el mismo problema o puntos débiles de configuración que podrían verse afectados por problemas similares, en todos los componentes de la carga de trabajo. Use esta oportunidad para abordar de forma proactiva esos componentes. Consulte el historial de incidentes para detectar patrones de problemas similares en la carga de trabajo.

  • Use los resultados para mejorar la estrategia de pruebas. Asegúrese de que ha solucionado correctamente la causa principal y los problemas similares probando directamente el mismo error.

Guía de ingeniería de caos e inyección de errores

Las pruebas de inyección de errores siguen los principios de la ingeniería del caos al resaltar la capacidad de la carga de trabajo para reaccionar ante errores de componentes. Realice pruebas de inyección de errores en entornos de preproducción y producción. Aplicar pruebas a las capas de infraestructura y aplicación. Aplique la información que ha aprendido Recomendaciones para realizar el análisis del modo de error para asegurarse de que solo pruebe los errores que priorice y que tenga estrategias de mitigación que aborden los errores. Las directrices clave de la ingeniería del caos son:

  • Ser proactivo. No espere a que se produzcan errores. Intente anticipar errores mediante la realización de experimentos de caos para detectar y corregir problemas antes de que afecten al entorno de producción.

  • Adoptar errores. Acepte y aprenda de los errores que se producen en el sistema. Vea los errores como parte natural de los sistemas complejos y úselos como oportunidades para aprender y mejorar la confiabilidad del sistema.

  • Interrumpir el sistema. Inserte deliberadamente errores o esfuerzo en el sistema para probar su resistencia. Simulación de errores o interrupciones reales para probar y mejorar las funcionalidades de recuperación de la carga de trabajo.

  • Identificar y solucionar los únicos puntos de error con antelación. A medida que pruebe, consulte y actualice el análisis del modo de error para validar y solucionar errores en la documentación. Aplique enfoques de confiabilidad, como la redundancia y la segmentación, para aumentar la disponibilidad de la carga de trabajo y minimizar el tiempo de inactividad.

  • Instalar las protecciones y mitigaciones correctas. Implemente medidas de seguridad, como el patrón Circuit Breaker o el patrón Throttling, para aumentar la disponibilidad. Implemente enfoques de degradación correctos que permitan la continuidad empresarial durante los errores.

  • Minimizar el impacto. Implemente estrategias de aislamiento de errores para ayudar a garantizar que, incluso si se produce un error, su ámbito es limitado. El sistema sigue funcionando con un efecto mínimo en los clientes.

  • Crear inmunidad. Use experimentos de ingeniería de caos para mejorar la capacidad de la carga de trabajo para evitar y recuperarse de errores.

La ingeniería de caos es una parte integral de la cultura del equipo de cargas de trabajo y una práctica continua, no un esfuerzo táctico a corto plazo en respuesta a una única interrupción. Siga este método estándar al diseñar los experimentos de caos:

  1. Comience por una hipótesis. Cada experimento debe tener un objetivo claro, como probar la capacidad de un flujo determinado para resistir la pérdida de un componente determinado.
  2. Mida el comportamiento de la base de referencia. Asegúrese de que tiene métricas de confiabilidad y rendimiento coherentes para el flujo y los componentes implicados en un experimento determinado para compararlo con el estado degradado al ejecutar el experimento.
  3. Inserte un error o errores. El experimento debe dirigirse intencionadamente a componentes específicos que se pueden recuperar rápidamente y debe tener una expectativa informada del efecto que la inyección de errores provocará para ayudar a controlar el radio de explosión del experimento.
  4. Supervise el comportamiento resultante. Recopile telemetría sobre los componentes de flujo individuales y el comportamiento de flujo de un extremo a otro que el experimento tiene como destino para comprender correctamente los efectos del error. Compare las métricas que se recopilan con las métricas de línea base para obtener una imagen completa de los resultados de la inyección de errores.
  5. Documente el proceso y las observaciones. Mantener registros detallados de los experimentos informará a las decisiones futuras sobre el diseño de la carga de trabajo, lo que garantiza que aborda las brechas que se han revelado con el tiempo.
  6. Identifique y actúe sobre el resultado. Planee los pasos de corrección que se pueden agregar al trabajo pendiente de carga de trabajo como mejoras. Asegúrese de que los planes de mejora de diseño se revisan y prueban en entornos que no son de producción según los mismos procesos que otras implementaciones.

Valide periódicamente el proceso, las opciones de arquitectura y el código para detectar rápidamente la deuda técnica, integrar nuevas tecnologías y adaptarse a los requisitos cambiantes.

Al realizar experimentos de inyección de errores, usted:

  • Confirme que la supervisión está implementada y que las alertas están configuradas.
  • Valide el proceso de asignación de una persona (DRI) directamente responsable para tomar posesión de un incidente.
  • Asegúrese de que la documentación y los procesos de investigación están actualizados.

Integre las siguientes recomendaciones y consideraciones para optimizar la estrategia de pruebas de caos:

  • Desafiar las suposiciones del sistema. Con las pruebas, intenta mejorar la resistencia de la carga de trabajo y las estrategias de diseño de la carga de trabajo. Busque oportunidades para insertar errores en componentes y flujos que supone que son confiables en función de las experiencias pasadas. Es posible que no sean confiables en la nueva carga de trabajo.

  • Valide el cambio, como la topología, la plataforma y los recursos. Sin realizar pruebas exhaustivas, incluidas las pruebas de inyección de errores, es posible que tenga una imagen incompleta de la carga de trabajo después de realizar cambios. Por ejemplo, podría introducir inadvertidamente nuevas dependencias o romper las dependencias existentes de maneras que no son inmediatamente evidentes.

  • Use búferes de Acuerdo de Nivel de Servicio. Limite las pruebas de caos para mantenerse dentro de los Acuerdos de Nivel de Servicio y evitar posibles reputación o efectos financieros de interrupciones. Los destinos de recuperación de componentes y flujo ayudan a definir el ámbito de las pruebas.

  • Establezca un presupuesto para errores como una inversión en caos e inserción de errores. El presupuesto de errores es la diferencia entre lograr el 100 % del SLO y lograr el SLO acordado.

  • Detenga el experimento si va más allá del ámbito. Los resultados desconocidos son un resultado esperado de los experimentos de caos. Procure lograr un equilibrio en la recopilación de datos de resultados sustanciales y afectar al número menor posible de usuarios de producción.

  • Trabaje estrechamente con los equipos de desarrollo para garantizar la relevancia de los errores insertados. Use incidentes o problemas anteriores como guía. Examine las dependencias y evalúe los resultados al quitar esas dependencias.

  • Identifique y documente las dependencias no detectadas previamente entre distintos componentes de la carga de trabajo que se revelan mediante pruebas de caos.

  • Ajuste los planes de recuperación según sea necesario para tener en cuenta las dependencias detectadas durante las pruebas de caos.

  • Use los resultados de los experimentos y las pruebas como base para los nuevos experimentos y pruebas. A medida que surgen comportamientos inesperados, las nuevas pruebas podrían tener como destino esos comportamientos directamente y darles la oportunidad de diseñar estrategias de corrección para ellos.

Compensación: las pruebas de inyección de errores en producción pueden ser perjudiciales y pueden provocar tiempo de inactividad. Sea transparente con las partes interesadas sobre esta posibilidad y asegúrese de que dispone de medidas de seguridad para finalizar experimentos y revertir planes para revertir rápidamente los errores que presenta. Para protegerse contra interrupciones no deseadas en producción, asegúrese de planear una redundancia suficiente y de que las partes interesadas entiendan el equilibrio de costos.

Facilitación de Azure

Azure Test Plans es una solución de administración de pruebas fácil de usar basada en explorador que proporciona todas las funcionalidades necesarias para las pruebas manuales planeadas, las pruebas de aceptación de usuario, las pruebas exploratorias y la recopilación de comentarios de las partes interesadas.

Azure Chaos Studio es un servicio administrado que usa ingeniería de caos para ayudarle a medir, comprender y mejorar la resistencia de las aplicaciones y servicios en la nube. Azure Chaos Studio alcanzó la disponibilidad general en Ignite 2023 y tiene muchas características que le ayudarán a empezar a trabajar con la inserción de errores y las pruebas de resistencia para la aplicación mediante la infraestructura de Azure.

Lista de comprobación de confiabilidad

Consulte el conjunto completo de recomendaciones.