¿Qué es la ingeniería del caos?

3 de agosto de 2023

La ingeniería del caos es la causa intencional y controlada de fallas en el entorno de producción o preproducción para comprender su impacto y planificar una mejor postura de defensa y una mejor estrategia de mantenimiento de incidentes.

Cada día presenta una nueva oportunidad para que la aplicación o infraestructura crítica de una organización falle, amenazando potencialmente su capacidad para prestar servicios a los clientes. Las causas de las fallas pueden variar entre diversas cuestiones, como violaciones de seguridad, configuraciones erróneas o interrupciones del servicio. La probabilidad de errores o interrupciones puede aumentar a medida que se alojan más aplicaciones y datos en la nube, lo que puede generar un aumento de los problemas de seguridad.

Una forma de abordar las interrupciones es a través de la ingeniería del caos. No es un proceso aleatorio donde los ingenieros finalizan instancias o servicios o provocan de otro modo que los sistemas fallen sin ningún propósito. Este proceso identifica posibles problemas futuros, lo que permite a los equipos de ingeniería resolverlos de forma proactiva y evitarlos en el entorno real más adelante.

La ingeniería del caos es importante porque un error o una interrupción pueden frenar el ritmo de una organización, desperdiciando tiempo valioso en encontrar una solución sobre la marcha a medida que aumenta el tiempo de inactividad. Netflix aprendió este concepto de primera mano cuando cambió su infraestructura on premises a la nube1 : sufrió un corte que provocó una interrupción de tres días en la prestación del servicio en 2008.

Este corte es anterior a su transformación a una operación de streaming de video, lo que habría hecho que ese corte fuera exponencialmente más costoso. Como resultado, Netflix decidió hacer todo lo posible para minimizar las interrupciones y comenzó a introducir la ingeniería del caos en sus flujos de trabajo. Este proceso les permite identificar los problemas antes de que ocurran y minimizar el daño si se produce una falla inevitable.

Netflix creó Chaos Monkey2, una herramienta de código abierto que crea incidentes aleatorios en los servicios y la infraestructura de TI con la intención de identificar debilidades que se pueden corregir o abordar mediante procedimientos de recuperación automática. Implementaron Chaos Monkey cuando se movieron de un centro de datos privado a Amazon Web Services (AWS) en respuesta a la falta de fiabilidad de la nube. Muchas organizaciones ahora usan Chaos Monkey para ejecutar sus experimentos de ingeniería del caos.

La ingeniería del caos es una defensa importante contra fallas de infraestructura, interrupciones o componentes faltantes en el entorno de producción de una organización. Ayuda a los ingenieros de confiabilidad del sitio (SRE, sigla en inglés de site reliability engineers) y a otros miembros del equipo de DevOps a cumplir con la prestación de servicios de manera continua evitando interrupciones significativas en su servicio. La ingeniería del caos les ayuda a comprender mejor sus vulnerabilidades y fundamenta la manera de minimizar el impacto si ocurre una interrupción.

Incluso un pequeño problema en el código puede tener un efecto catastrófico en el entorno de producción general dadas las diferentes dependencias del programa. Por ejemplo, un error en el sistema de software de transacciones de una empresa de servicios financieros puede resultar en la pérdida de millones de dólares.3.

Es posible que las organizaciones no puedan evitar todos los incidentes de TI, pero pueden minimizar el daño utilizando la gestión del caos para comprender los escenarios probables y las mejores soluciones posibles.

Diseño 3D de pelotas rodando en una pista

Las últimas novedades e insights sobre IA 


Descubra insights y noticias de expertos sobre IA, la nube y mucho más en el boletín semanal Think. 

Organizaciones que se benefician de la ingeniería del caos

Las organizaciones con alta resiliencia, madurez digital y alta observabilidad a través de paneles y otras herramientas deben adoptar la ingeniería del caos, ya que esto les permitiría tomar medidas inmediatas sobre los problemas que ocurren a través de experimentos. Las organizaciones que carecen de esta observabilidad4 pueden tardar demasiado en resolver los experimentos que crean a través de la ingeniería del caos.

La ingeniería del caos también es imprescindible para las organizaciones que utilizan la nube, en particular la nube pública, y aplicaciones nativas de la nube. La nube pública introduce posibles problemas de interrupción que requieren coordinación con el proveedor de la nube, lo que crea un enfoque diferente al de lidiar con problemas on premises. 

Las empresas que utilizan la nube suelen abordar los incidentes de TI sin considerar la manera en que la nube y el software como servicio (SaaS) afectan esos incidentes de manera diferente , según Constellation Research5.

Además, el auge del uso de microservicios, que aumenta el número de hosts o contenedores que se ejecutan en un sistema, crea retos singularesque pueden descubrirse y resolverse mediante experimentos de caos. Traslada las complejidades del diseño de código a las operaciones del sistema, con lo cual no se eliminan las complejidades, pero es posible una mayor automatización.

La ingeniería del caos también puede ayudar a las organizaciones a mejorar la velocidad de sus pipelines de integración continua y entrega continua (CI/CD). Al incorporar ingeniería del caos en la CI/CD como lo hizo Netflix6 las organizaciones pueden automatizar experimentos continuos mientras controlan su posible impacto.

Por último, el hecho de que las organizaciones se conecten cada vez más con socios a través de API significa que un problema en sus sistemas puede tener un efecto colateral en otras organizaciones. Desplegar ingeniería del caos ayuda a las organizaciones a comprender los puntos débiles de su arquitectura y corregirlos, creando finalmente la capacidad de anticipar futuras fallas.

El éxito de la ingeniería del caos ayuda a las organizaciones a minimizar las fallas técnicas que puedan tener un impacto significativo en el cliente, y también contribuye a la construcción de arquitecturas de sistemas complejos más sólidas y resilientes. Una vez que una organización decide dedicarse a la ingeniería del caos, el siguiente paso es determinar si ejecutarla en el entorno de preproducción o de producción.

AI Academy

El auge de la IA generativa para las empresas

Aprenda sobre el auge histórico de la IA generativa y lo que significa para las empresas.

Tipos de experimentos de ingeniería del caos

Los equipos de DevOps tienen varias opciones para ejecutar experimentos de ingeniería del caos para probar varios procesos del sistema.

  • Inyección de latencia: los equipos de DevOps crean escenarios que emulan una conexión de red lenta o fallida. Esto incluye la introducción de retrasos en la red o tiempos de respuesta más lentos.
  • Inyección de fallas: esto implica introducir deliberadamente errores en el sistema para determinar cómo afecta a otros sistemas dependientes y si interrumpe los servicios. Algunos ejemplos de inyecciones de fallas incluyen inducir fallas en el disco, finalizar procesos, apagar un host o introducir aumentos de potencia o temperatura. Las inyecciones de fallas pueden ayudar a las organizaciones a identificar puntos únicos de falla, lo que puede hacer que todo el sistema falle si algo les sucede.
  • Generación de carga: esto se relaciona con forzar intencionalmente el sistema enviando niveles de tráfico significativos mucho más altos que los de las operaciones normales. Esto ayuda a los SRE a comprender cualesquier cuellos de botella en el sistema, lo que a su vez les permite crear sistemas más escalables.
  • Pruebas de Canary: esto implica lanzar un nuevo producto o característica a un pequeño grupo de usuarios. De ese modo, cualquier falla o error solo afectará a un porcentaje de visitantes, y el resto de la audiencia podrá acceder a la experiencia del sitio web actual.

 

Mejores prácticas de ingeniería del caos 

Crear el proceso de ingeniería del caos ideal requiere varios principios para garantizar que una organización pueda tener un sistema distribuido a escala.

  • Comprender el sistema: esto implica un conocimiento exhaustivo del sistema holístico, sus propiedades y funciones emergentes y su topología, arquitectura, dependencias, comportamiento en estado estacionario, respuesta de salida y características, como la disponibilidad, la latencia y el rendimiento.
  • Aceptar el fracaso: parece paradójico inicialmente que los ingenieros de software permitan que ocurra un incidente cuando están preparados para evitarlo. Sin embargo, las interrupciones siempre ocurrirán en los servicios de TI y es mejor experimentarlas en un entorno controlado para identificar la solución de manera preventiva en lugar de fuera del horario laboral, cuando el equipo de una organización no se ha encontrado antes con ese problema específico.
  • Establecer un comportamiento estable: primero, el equipo de ingeniería debe definir cómo debe comportarse el sistema cuando se ejecuta correctamente, de modo que pueda comparar cómo los experimentos afectan ese estado estable.
  • Identificar incidentes del mundo real: los experimentos de ingeniería del caos deben apegarse lo más posible a lo que podría suceder en un día normal en lugar de crear situaciones improbables. Entre situaciones posibles podemos mencionar: fallas de red e infraestructura, código incorrecto, problemas de energía y sobrecarga de tráfico.
  • Crear un día de simulacros (game day): la ingeniería del caos puede estudiar el entorno en un día de simulacros, en el que se producen múltiples pruebas durante un día específico para maximizar sus recursos para identificar y resolver tantos problemas como sea posible.
  • Utilizar la automatización: las organizaciones de todos los tamaños pueden utilizar la ingeniería del caos mediante la automatización de experimentos, los cuales requerirían demasiado trabajo si las empresas los realizaran manualmente. Esto reduce parte de la carga de los equipos de TI durante el proceso de ingeniería del caos. El diseño de experimentos, la inyección de fallas y el aprovisionamiento de la infraestructura son todos aspectos de la experimentación que las organizaciones pueden automatizar.
  • Tener en cuenta el radio de explosión: un ingeniero del caos debe esforzarse mucho en minimizar el radio de explosión para que el daño real a los clientes sea el menor posible. Algunas formas de minimizar el radio de explosión son:
    • Dirigirse a un subconjunto de servicios: la ingeniería del caos, especialmente en un entorno de producción, no debería interrumpir fundamentalmente el servicio de una organización. Centrarse en un subconjunto específico de servicios puede minimizar el impacto de un incidente en caso de que se produzca, garantizando que no derribe todo el sistema.
    • Ejecutar el experimento durante un tiempo finito: el experimento debe tener un principio y un final. El objetivo del experimento es crear un incidente y resolverlo en lugar de dejarlo funcionar sin control durante mucho tiempo.
    • Ejecutar el experimento fuera del pico de tráfico: las organizaciones deben tratar de evitar realizar experimentos durante las horas pico a menos que estén tratando específicamente de medir qué tanto afecta la alta capacidad al sistema durante un incidente.
    • Ejecutar el experimento en el entorno de desarrollo: la forma más fácil de garantizar que los clientes no sufran interrupciones en el servicio es ejecutarlo en el entorno de preproducción. Sin embargo, eso significa que las condiciones diferirán del entorno de producción, lo que potencialmente dará un panorama falso de lo que ocurre. Para minimizar esto, asegúrese de que sus entornos de preproducción y producción sean lo más similares posible.
    • Experimentar en cada componente: la experimentación del caos nunca termina, ya que el sistema de una organización cambia continuamente. Otro objetivo debería ser probar “todo”: examinar todos los componentes, capas, servicios, y sus dependencias, a lo largo del proceso.

Entornos de producción frente a entornos de preproducción

Las organizaciones que utilizan la ingeniería del caos deben decidir si desean aplicar las pruebas del caos en sus entornos de producción o de preproducción. Hay varias razones por las que la ingeniería del caos es más beneficiosa en entornos de producción.

Los entornos en vivo proporcionan el entorno más preciso para comprender cómo afecta un incidente la experiencia del cliente. Otra razón es que el entorno de preproducción puede no tener la misma configuración que el entorno real, lo que provoca cierta variabilidad en los experimentos.

Por ejemplo, un incidente en un entorno de preproducción podría no crear una respuesta realista porque carece de los mismos niveles de tráfico que el entorno en vivo. También es posible que no tenga las mismas configuraciones de seguridad que ese entorno.

Algunas organizaciones temen causar intencionalmente problemas con su sitio en vivo, por lo que ejecutan sus experimentos en su sitio de preproducción o desarrollo. Esto garantiza que cualquier problema que ocurra no afecte la experiencia del cliente en vivo. Para mitigar esto, algunas organizaciones comienzan en entornos de preproducción para manejar el proceso antes de pasar al entorno de producción en vivo.

Las organizaciones eligen el entorno que emplearán en función de su tolerancia al riesgo. En última instancia, el objetivo de la ingeniería del caos es poner a prueba problemas reales a gran escala, por lo que los entornos de producción ofrecen el panorama más preciso de lo que está sucediendo y de lo que es necesario arreglar.

Beneficios de la ingeniería del caos

La ingeniería del caos ofrece a las organizaciones varios beneficios clave.

Mejor servicio al cliente

Los clientes tienen grandes expectativas sobre la disponibilidad de los servicios que compran a las empresas. Cualquier tiempo de inactividad o incapacidad para acceder a lo que han pagado puede tener un efecto grave en su satisfacción con la experiencia, lo que genera pérdida de ingresos y daño a la reputación. Probar los sistemas e identificar soluciones redunda en un menor riesgo de que un sistema deje de funcionar durante un periodo considerable.

Seguridad de datos mejorada

Las interrupciones pueden provenir de un código incorrecto, problemas del servidor o amenazas externas. Esto último puede ocurrir incluso con excelentes prácticas de seguridad. La ingeniería del caos ayuda a identificar problemas que pueden explotarse, de modo que las organizaciones puedan introducir parches y arreglos de errores para mantener protegidos sus servicios.

Tiempo de inactividad minimizado

La ingeniería del caos permite a las organizaciones crear un plan más informado sobre cómo abordar los problemas que se presentarán en el futuro. Las organizaciones que adoptan ingeniería del caos tendrán planes de simulacros específicos para muchos incidentes, lo que ayudará a repararlos con mayor rapidez y a reducir el tiempo de inactividad. La ingeniería del caos puede disminuir el tiempo de inactividad7 hasta en un 20 %.

Mayor escalabilidad

Los experimentos de ingeniería del caos identifican cómo un sistema asigna recursos. La introducción de experimentos demostrará cómo el sistema gestiona las cargas, mostrando dónde se producen o es probable que se produzcan cuellos de botella.

Fundamentar el desarrollo de software futuro

La ingeniería del caos ayuda a los equipos a desarrollar mayor resiliencia y flexibilidad del sistema en su software. Por lo tanto, las organizaciones pueden abordar la codificación de nuevos software y soluciones de manera más inteligente porque saben cómo maneja el sistema actual.

Soluciones relacionadas
Servicios de consultoría empresarial

Reinvente la forma de trabajar mediante la intersección de negocios y tecnología de transformación para desbloquear la agilidad empresarial

    Explore los servicios de consultoría empresarial
    Consultoría de transformación de recursos humanos y talento

    Reinvente y modernice los Recursos Humanos con la IA como centro para ofrecer mejores resultados comerciales y desbloquear todo el potencial de los empleados.

    Explore servicios de transformación de RR. HH.
    Servicios de consultoría financiera

    Desbloquee el rendimiento financiero y el valor empresarial con servicios integrales que infunden la analytics de datos, la IA y la automatización en todos los procesos principales.

      Explore las soluciones financieras
      Dé el siguiente paso

      Haga crecer y transforme su negocio reimaginando su estrategia corporativa y cómo trabaja.

      Explorar los servicios de estrategia empresarial Explorar los servicios de inteligencia artificial
      Notas de pie de página

      1 Chaos Engineering: System Resiliency in Practice (enlace externo a ibm.com). Casey Rosenthal, Nora Jones, 2020.
      What is Chaos Monkey? Chaos engineering explained (enlace externo a ibm.com). InfoWorld, 13 de mayo de 2020.
      Knight Capital Says Trading Glitch Cost It USD 440 Million (enlace externo a ibm.com). New York Times, 2012.
      4 There Is No Resilience without Chaos (enlace externo a ibm.com). The New Stack, 13 de abril de 2023.
      5 Incident Management in the Cloud Era (enlace externo a ibm.com). Constellation Research, 2023.
      6 ChAP: Chaos Automation Platform (enlace externo a ibm.com). Blog de Netflix, 26 de julio de 2017.
      7 The I&O Leader's Guide to Chaos Engineering (enlace externo a ibm.com). Gartner, 28 de octubre de 2021.