Búsqueda de sitios web

Cómo la ingeniería del caos lo ayuda a evitar el tiempo de inactividad no planificado


La ingeniería del caos es un enfoque para las pruebas de tolerancia a fallas de software que provoca errores intencionalmente en las 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 atribuye a Netflix. En 2011, la empresa publicó 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. Introduce una amenaza a propósito, lo que puede causar problemas breves pero observables, para desarrollar una resistencia más fuerte a largo plazo.

Construyendo Resiliencia

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

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

Romper cosas a propósito le brinda una forma de determinar la resistencia general de su sistema. ¿Qué sucede si la base de datos se cae? ¿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 generalmente no cubrirán.

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, podría usar la técnica en un entorno de prueba en un espacio aislado.

Agregar caos a sus sistemas

Tiene múltiples opciones si desea agregar algo de caos a su infraestructura. Las herramientas automatizadas creadas para este propósito brindan un punto de partida, pero pueden ser difíciles de incorporar a su propia infraestructura. Normalmente necesita integrarse con plataformas de administración de contenedores o VM para que la herramienta pueda interactuar con sus propias instancias.

En el caso de Chaos Monkey, debe utilizar Spinnaker, 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, kube-monkey toma los principios originales de Netflix y los empaqueta para usarlos en su clúster. Funciona de forma opcional, por lo que los recursos de Kubernetes con la etiqueta kube-monkey/enabled serán aptos para la terminación aleatoria.

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

Una herramienta que apunta específicamente a los errores de red es Toxiproxy de Shopify. 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 el 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 aplicaciones e infraestructura. Las fallas de la aplicación deberían afectar a un solo servicio. Las fallas de infraestructura apuntan a componentes compartidos que podrían derribar múltiples servicios.

Si bien la ingeniería del caos se asocia más comúnmente con el desarrollo de back-end y DevOps, también existe un interés creciente entre los ingenieros de front-end. React Chaos es una biblioteca que arrojará errores aleatorios de los componentes de React, lo que le permite identificar secciones de interfaz de usuario escamosas que podrían bloquear toda su aplicación.

Diseñando tus propios experimentos de caos

Si no puede usar 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 se desconectara.

A continuación, debe probar su 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 la 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 mantener cada prueba pequeña y enfocada. Esto limita el impacto en caso de una interrupción de la producción y lo ayuda a asegurarse de que el problema surja de la suposición probada, no de otra parte del sistema.

Siempre asegúrese 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 está cancelando un servicio, tenga en cuenta el tiempo que necesitará para volver a iniciarlo. 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 en su plan de acción antes de comenzar a trabajar.

Una vez que se complete su experimento, es posible que deba actualizar su sistema antes de volver a ejecutar la prueba. Probar su solución en realidad 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:

  • Desarrolle una hipótesis: El sistema es resistente al aumento de la latencia de la red.
  • Diseñe un experimento específico: Aumentaremos artificialmente la latencia a 500 ms en el 70 % de las solicitudes. Asegúrese de tener una estrategia clara de reversión y recuperación.
  • Ejecute el experimento: observe el impacto en su aplicación. Revierta los cambios perjudiciales en los entornos de producción lo antes posible.
  • Analice 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 mirar el lado humano. Es fácil pensar que su sistema solo depende de una base de datos, algunos 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 su chico de redes está enfermo durante una interrupción en vivo?

    De la misma manera que prueba los aspectos técnicos abandonando los servicios, también puede anticipar escenarios humanos. Trate de excluir intencionalmente a las personas clave mientras ensaya un apagón. ¿Pudo el resto del equipo restaurar el servicio a un estado aceptable? Si no lo fueran, podría beneficiarse al 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 desalentador al principio, las herramientas dedicadas como Chaos Monkey pueden 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 cadena en 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 resiliencia en su sistema fomentando la anticipación de 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 que como un procedimiento específico o un producto de software. Si reconoce que los sistemas tienden hacia el caos, naturalmente comenzará a incluir en su código soporte para más escenarios hipotéticos.

    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 ocurren, 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.

    Artículos relacionados: