Chaos engineering
Una metodología que ayuda a predecir desastres en tu producto! ☠️
Chaos engineering es una metodología que se utiliza para evaluar la resiliencia de sistemas y aplicaciones. Su objetivo principal es identificar debilidades y potenciales problemas ocultos en la infraestructura de tu producto, antes de que afecten a los usuarios finales. Para esto, hay que someter deliberadamente el producto y la infra a condiciones caóticas, degradar el servicio y observar cómo responden.
Hace muchos años cuando conocí esta metodología, pensé que era algo clave a la hora de armar tecnología de escala. Nunca pensé que años más tarde iba a tener el desafío, la posibilidad y la necesidad de ponerla en práctica, y aprender algunas condiciones claves para lograrlo.
🚀 Proceso de Pruebas de ‘Chaos engineering’ :
Selección de Objetivos: Como primer paso, es crucial comprender que implementación del ‘Chaos’ se realiza únicamente en los componentes o sistemas más críticos. Desde servidores, aplicaciones, bases de datos hasta cualquier otro elemento clave de la infraestructura. Debes asumir que en situaciones de urgencia, una parte de tu infraestructura podría fallar, pero es fundamental garantizar que la experiencia de los clientes o usuarios no sea negativa.
Diseño de Escenarios de ‘Chaos’: Se crean escenarios de caos, situaciones extraordinarias que degradan deliberadamente servicios para generar escenarios de contingencia. Ellos pueden incluir la degradación del rendimiento, la desconexión de componentes, la sobrecarga de recursos, entre otros.
Implementación de Pruebas: A los escenarios de Caos se les aplican, de manera controlada, tráfico sintético y se utilizan herramientas dedicadas a esto como Gremlin.
Monitoreo y Evaluación: Mientras se ejecutan las pruebas, se monitorea y registra el comportamiento del sistema. Esto incluye métricas como el performance, disponibilidad e integridad de datos.
Análisis de Resultados: Una vez finalizada la prueba, se analizan los resultados para identificar debilidades y áreas de mejora. Esto podría incluir la identificación de cuellos de botella, sistemas críticos que no se recuperan correctamente o problemas de escalabilidad, y acá es donde todo cobra sentido… esto es lo que le hubiera pasado a tu infra de haber sido una situación real.
Iteración y Mejora Continua: Basándose en los resultados de las pruebas, se realizan ajustes y mejoras en la infraestructura. Luego, el proceso se repite de manera regular para garantizar que los sistemas sean más resistentes con el tiempo.
Beneficios de la Ingeniería de Caos:
Mejora de la Resiliencia: Ayuda a identificar y abordar las debilidades en tu infra y arquitectura. Con la iteración continua, estás llevando tu producto a un nivel de excelencia.
Evita Problemas Futuros: Al detectar potenciales problemas antes de que afecten a los usuarios, la ingeniería de ‘Chaos’ ayuda a evitar incidentes graves y costosos.
Mejora la Planificación de Capacidad: Proporciona información sobre cómo los sistemas se comportan bajo cargas inusuales, lo que es útil para planificar la capacidad y el escalamiento.
Fomenta una Cultura de Resiliencia: Al incorporar pruebas de ‘Chaos‘ de manera regular, las organizaciones promueven una mentalidad de resiliencia y preparación para el fallo en su cultura.
Chaos engineering es una práctica tremendamente valiosa desarrollada por Netflix bajo el concepto de "Chaos Monkey" en 2011 - Unos cracks estos pibes! - Me apasiona pensar que algo conceptualmente súper simple(porque es tan fácil como desenchufar un pedazo de tu infra para poner a prueba su capacidad)puede ser al mismo tiempo tan complejo. Desde mi punto de vista, lo considero clave para las startups que desean destacar la integridad y alta disponibilidad de sus sistemas como fortalezas en el negocio.
Dejo varios links abajo:
por acá una que me llena de orgullo 😎
y por acá un Link de una gran charla de los amigos de AWS
👇🏻 Links útiles de Netflix
https://netflixtechblog.com/tagged/chaos-monkey
https://netflix.github.io/chaosmonkey/
☝️ Si implementaste Chaos en tu infra, me encantaría saber si hay algún aprendizaje más para tener en cuenta!