Cómo la «ingeniería del caos» lo ayuda a evitar el tiempo de inactividad no planificado: CloudSavvy IT

panel de conmutador de red
asharkyu / Shutterstock.com

La ingeniería del caos es un enfoque para las pruebas de tolerancia a fallas de software que provoca intencionalmente errores en implementaciones en vivo. Incorpora un elemento de aleatoriedad para imitar la imprevisibilidad de la mayoría de las interrupciones del mundo real.

La idea de agregar caos a un sistema generalmente se le atribuye a Netflix. En 2011, la empresa publicado Chaos Monkey, una herramienta que creó para desactivar partes de su infraestructura de producción. Al inducir fallas aleatorias en entornos monitoreados, Netflix descubrió que podía descubrir problemas ocultos que pasaban desapercibidos durante las pruebas regulares.

La ingeniería del caos proporciona un efecto de respuesta inmune. Es similar a cómo vacunamos a las personas sanas. Introduces una amenaza a propósito, lo que puede causar problemas breves pero observables, con el fin de desarrollar una resistencia más fuerte a largo plazo.

Construyendo resiliencia

Es seguro asumir que cualquier sistema suficientemente grande contiene errores que usted no conoce. A pesar de todas sus pruebas automatizadas y del uso diario en el mundo real, no puede captar todo. Algunos problemas solo surgen en escenarios muy específicos, como la pérdida de conectividad a un servicio de terceros.

La ingeniería del caos acepta que los problemas operativos imprevistos siempre serán un hecho, incluso en entornos de producción supuestamente estancos. Mientras que muchas organizaciones terminan adoptando un enfoque de «esperar y ver», jugando al whack-a-mole cuando llegan informes reales, la ingeniería del caos funciona según el principio de que una interrupción breve que se invoca siempre es mejor que una que el cliente ve primero.

Romper cosas a propósito le brinda una forma de determinar la capacidad de recuperación general de su sistema. ¿Qué pasa si la base de datos deja de funcionar? ¿Qué tal una interrupción en su servicio de envío de correo electrónico de terceros? La mayor fortaleza de la ingeniería del caos es su capacidad para reproducir eventos que las pruebas unitarias y el uso en el mundo real por sí solos no suelen cubrir.

Las herramientas de prueba del caos a menudo se ejecutan en implementaciones reales para eliminar las discrepancias entre los entornos de desarrollo y producción. Sin embargo, no necesita aplicar tanto riesgo: siempre que esté seguro de que puede replicar con precisión su infraestructura, puede usar la técnica en un entorno de prueba de espacio aislado.

Añadiendo caos a sus sistemas

Tiene varias opciones si desea agregar algo de caos a su infraestructura. Herramientas automatizadas construido para este propósito proporciona un punto de partida, pero puede ser complicado incorporarlo a su propia infraestructura. Normalmente, debe integrarse con plataformas de administración de contenedores o máquinas virtuales para que la herramienta pueda interactuar con sus propias instancias.

En el caso de Chaos Monkey, debes usar Espinaquer, La plataforma de entrega continua de Netflix. Si bien tiene una amplia compatibilidad con los proveedores de nube pública populares, también es otra dependencia que está agregando a su pila.

Si usa Kubernetes, mono-kube toma los principios originales de Netflix y los empaqueta para usarlos en su clúster. Funciona de forma voluntaria, por lo que los recursos de Kubernetes con la kube-monkey/enabled La etiqueta será elegible para la terminación aleatoria.

Pumba proporciona capacidades similares para los contenedores Docker normales. Puede provocar bloqueos de contenedores, estresar las asignaciones de recursos como CPU y memoria, y causar fallas en la red.

Una herramienta que se enfoca específicamente en los errores de red es Shopify’s Toxiproxi. Esto proporciona un proxy TCP que simula una amplia gama de condiciones de red. Puede filtrar el tráfico de su aplicación a través de Toxiproxy para ver cómo funciona el sistema con latencia severa o ancho de banda reducido.

Para un control avanzado, Mangle de VMWare es un «orquestador de ingeniería del caos» que apunta a varios mecanismos de implementación diferentes. Funciona con Kubernetes, Docker, VMware vCenter y conexiones SSH genéricas. Mangle le permite definir fallas personalizadas para componentes de infraestructura y aplicaciones. Los fallos de la aplicación deberían afectar a un solo servicio. Las fallas de infraestructura apuntan a componentes compartidos que podrían interrumpir múltiples servicios.

Si bien la ingeniería del caos se asocia más comúnmente con el desarrollo de backend y DevOps, también existe un creciente interés entre los ingenieros de frontend. Reaccionar Caos es una biblioteca que arrojará errores aleatorios de los componentes de React, lo que le permitirá identificar secciones de IU defectuosas que podrían bloquear toda su aplicación.

Diseñando tus propios experimentos de caos

Si no puede utilizar con éxito una herramienta de caos de código abierto, diseñe sus propios experimentos. Haga una lista de las suposiciones dentro del entorno de su aplicación. Identifique las conexiones entre los servicios y piense en lo que sucedería si uno abandonara.

Entonces necesitas probar tu hipótesis. Rompe el sistema y observa las consecuencias. A continuación, determine si el efecto fue aceptable. ¿Se bloqueó la aplicación y mostró un seguimiento de pila al usuario? ¿O mostró una página de estado de interrupción y envió por correo electrónico el seguimiento de la pila a su personal de guardia?

Es importante que cada prueba sea pequeña y enfocada. Esto limita el impacto en caso de una interrupción de la producción y le ayuda a asegurarse de que el problema surja de la suposición probada, no de otra parte del sistema.

Asegúrese siempre de tener un procedimiento de recuperación claro antes de realizar manualmente un experimento de caos. Convertir una interrupción provocada en una en vivo y no planificada es lo último que desea. Si va a cancelar un servicio, tenga en cuenta el tiempo que necesitará para comenzar de nuevo. Podría haber repercusiones en su aplicación durante interrupciones más prolongadas: si abandona un servicio de distribución de correo electrónico, podría haber un retraso en el trabajo cuando vuelva a estar en línea. Estos aspectos deben incorporarse a su plan de acción antes de comenzar a trabajar.

Una vez finalizado el experimento, es posible que deba actualizar su sistema antes de volver a ejecutar la prueba. Probar su solución realmente mejora la situación y le permite estar seguro de que su sistema ahora es resistente a ese escenario específico.

Aquí hay un resumen del proceso del experimento del caos:

  1. Desarrolla una hipótesis: «El sistema es resistente a una mayor latencia de la red».
  2. Diseña un experimento enfocado: «Aumentaremos artificialmente la latencia a 500 ms en el 70% de las solicitudes». Asegúrese de tener una estrategia clara de recuperación y reversión.
  3. Ejecute el experimento: Observe el impacto en su aplicación. Revertir los cambios perjudiciales en los entornos de producción lo antes posible.
  4. Analiza los resultados: Si decide que su sistema no era lo suficientemente resistente, implemente mejoras y repita el proceso.

El lado no técnico de la ingeniería del caos

La ingeniería del caos normalmente se ve como una tarea técnica para los equipos de desarrollo y operaciones; después de todo, “ingeniería” está en el nombre. Además de los aspectos prácticos de las redes y los servicios, también es importante tener en cuenta el lado humano. Es fácil pensar que su sistema solo depende de una base de datos, unos pocos servidores de aplicaciones y una red estable. Ese no suele ser el caso.

Piense en cómo respondería su sistema si los miembros del equipo no estuvieran disponibles. ¿Se puede acceder fácilmente al conocimiento si un administrador necesita dar un paso atrás inesperadamente? Especialmente en organizaciones más pequeñas, es común que un «equipo» sea una sola persona. ¿Qué sucede si el encargado de la red se enferma durante una interrupción en vivo?

De la misma manera que prueba los aspectos técnicos al abandonar los servicios, también puede anticipar escenarios humanos. Intente excluir intencionalmente a personas clave mientras ensaya una interrupción. ¿Pudo el resto del equipo restaurar el servicio a un estado aceptable? Si no fuera así, podría beneficiarse de documentar más del sistema y sus dependencias.

Resumen

El término «ingeniería del caos» se refiere a la práctica de romper cosas a propósito en la producción para descubrir problemas previamente ocultos. Aunque el enfoque puede parecer abrumador para empezar, las herramientas dedicadas como Mono del caos puede ayudarlo a comenzar con un riesgo mínimo.

Agregar caos es una técnica útil, ya que descubre problemas tanto transitorios como sistémicos. Es posible que descubra que el uso máximo de la memoria causa impactos en toda su infraestructura, pero que el aumento de la latencia de la red tiene un efecto esporádico en partes específicas de su pila.

El uso efectivo de la ingeniería del caos puede ayudarlo a encontrar errores más rápido, antes de que sus clientes los noten. Le ayuda a desarrollar la capacidad de recuperación de su sistema al fomentar la anticipación de los problemas. La mayoría de los equipos aún abordan los problemas de manera reactiva, lo que lleva a un mayor tiempo de ciclo que impide la eficiencia.

La ingeniería del caos se trata mejor como una mentalidad en lugar de un procedimiento o producto de software específico. Si reconoce que los sistemas tienden al caos, naturalmente comenzará a crear soporte para más escenarios hipotéticos en su código.

Siempre vale la pena pensar en los eventos «imposibles», como una interrupción del centro de datos o una congestión severa de la red. En realidad, no son imposibles, solo extremadamente raros. Cuando atacan, es probable que sean los eventos más destructivos que encuentre su sistema, a menos que su infraestructura esté preparada para manejarlos con rutinas de respaldo.

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad