Recomendaciones para diseñar una estrategia de pruebas de confiabilidad
Se aplica a esta recomendación de lista de comprobación de confiabilidad del marco de trabajo bien diseñado de Azure:
RE:08 | Pruebe escenarios de resistencia y disponibilidad mediante la aplicación de 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 correcta son eficaces realizando un mal funcionamiento activo y pruebas de carga simuladas. |
---|
En esta guía se describen las recomendaciones para diseñar una estrategia de pruebas 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 inyecció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 al estrés y los 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
Preparación de la confiabilidad de pruebas
Realice pruebas rutinarias para validar umbrales, destinos y suposiciones existentes. Cuando se produce un cambio importante en la carga de trabajo, ejecuta pruebas periódicas. Realiza 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 prueba 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 normal.
Comparta los resultados documentados con los equipos adecuados, como los equipos operativos, el liderazgo tecnológico, las partes interesadas empresariales 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 prueba normal 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 las 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 resistir 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 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 inyección de errores.
Pruebe y valide cómo responde su diseño de recuperación automática y autoconservación 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 degradarse 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
Si tiene ventanas de mantenimiento planeado 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 tiempo suficiente 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 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 sus 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 la solucione. Si puede corregir la causa principal como parte de la investigación, documente la causa principal y las medidas que tomó 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 las debilidades de configuración que podrían verse afectadas 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 problemas similares probando directamente el mismo error.
Uso de la inserción de errores y la ingeniería de caos
Las pruebas de inyección de errores siguen los principios de la ingeniería del caos resaltando la capacidad de la carga de trabajo para reaccionar a los 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 de 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 sistemas complejos y úselos como oportunidades para aprender y mejorar la confiabilidad del sistema.
Interrumpir el sistema. Inserte deliberadamente errores o estrés 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 redundancia y 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 garantizar que, incluso si se produce un error, su ámbito está 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:
- 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.
- 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.
- 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.
- 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 recopila con las métricas de línea base para obtener una imagen completa de los resultados de la inyección de errores.
- 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 soluciona las brechas que se han revelado con el tiempo.
- 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, haga lo siguiente:
- Confirme que la supervisión está en contexto y que las alertas están configuradas.
- Valide el proceso de asignación de un individuo (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, intente 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 se 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 accidentalmente nuevas dependencias o romper las dependencias existentes de maneras que no son inmediatamente aparentes.
Use búferes de Acuerdo de Nivel de Servicio. Limite las pruebas de caos para permanecer dentro de los Acuerdos de Nivel de Servicio y evite 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 por ciento 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 a través de 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 tiene medidas de seguridad para finalizar experimentos y revertir planes para revertir rápidamente los errores que presenta. Para protegerse frente a interrupciones no deseadas en producción, asegúrese de planear una redundancia suficiente y de que las partes interesadas comprendan el equilibrio de costos.
Facilitación de Azure
Azure Test Plans es una solución de administración de pruebas basada en explorador fácil de usar que proporciona todas las funcionalidades necesarias para las pruebas manuales planeadas, las pruebas de aceptación de usuarios, 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.
Vínculos relacionados
- Copia de seguridad y recuperación ante desastres para aplicaciones de Azure
- Lista de comprobación para pruebas de confiabilidad
- Prueba de aplicaciones para disponibilidad y resistencia
Lista de comprobación de confiabilidad
Consulte el conjunto completo de recomendaciones.