Ingeniería del caos
Chaos Monkey y Spring Boot
Chaos Engineering o ingeniería del caos según wikipedia es la disciplina de experimentar fallos a propósito en un sistema de software en produccion con el fin de generar confianza en la capacidad del sistema para resistir condiciones turbulentas e inesperadas.
En el desarrollo de software, la capacidad de un sistema de software dado para tolerar fallas y, al mismo tiempo, garantizar una calidad de servicio adecuada , a menudo generalizada como resiliencia, generalmente se especifica como un requisito. Sin embargo, los equipos de desarrollo a menudo no cumplen con este requisito debido a factores como plazos cortos o falta de conocimiento del campo. La ingeniería del caos es una técnica para cumplir con el requisito de resiliencia. La ingeniería del caos se puede utilizar para lograr resiliencia contra:
- Fallos de infraestructura
- Fallos de la red
- Fallos de la aplicación
Teniendo todo esto en cuenta, las grandes empresas como Netflix o Amazon ven en la ingeniería del caos la posibilidad de poner a prueba su infraestructura para que sus sistemas sean más maduros y cada vez más robustos, pero también más evolucionados. En definitiva, más resilientes. Puesto que realizar un análisis y corregir un problema de forma reiterativa y escalada es una tarea muy difícil, lo ideal es emplear estrategias heurísticas enfocadas en priorizar una buena toma de decisiones donde lo principal sea la sencillez de resolución.
Beneficios de la ingeniería del caos
- Experimentos de caos controlados y planificados
- Preparándose para fallas impredecibles
- Preparando a los ingenieros para el fracaso
- Fortalecimiento de la resiliencia de la arquitectura de microservicios
La integración de la ingeniería del caos en la cadena de herramientas de DevOps contribuye al objetivo de las pruebas continuas. Muchas empresas como Netflix, Amazon, Dropbox, Uber, Slack siguen esa disciplina.
Una de las herramientas que puede ayudarlo a implementar la ingeniería del caos en una aplicación Spring Boot es ChaosMonkey.
Chaos monkey, una herramienta creada internamente por Netflix en 2010 y publicada en 2012, tiene como objetivo ayudar a las aplicaciones a tolerar fallas de instancias aleatorias. Esta herramienta ha introducido algunos principios de ingeniería del caos en la aplicación Spring Boot.
Funcionalidades
- Ataque de latencia: agregar latencia aleatoria a los puntos finales REST
- Ataque de excepción: lanzar excepciones aleatorias en tiempo de ejecución
- Asalto de AppKiller: matar la aplicación
Configuracion de Chaos Monkey en una aplicacion
<dependency> <groupId>de.codecentric</groupId> <artifactId>chaos-monkey-spring-boot</artifactId> <version>2.1.1</version> </dependency>
Inicie su aplicación con el chaos-monkey de Spring Profile para inicializar el Chaos Monkey. Desde la versión 1.5.0 y 2.0.0, todavía no iniciará ataques en su aplicación, puede activar esto dinámicamente en tiempo de ejecución.
java -jar your-app.jar --spring.profiles.active=chaos-monkey
¿Como funciona?
Si Spring Boot Chaos Monkey está en su ruta de clases y se activa con el nombre de perfil "chaos-monkey", automáticamente escaneará su aplicación para todas las clases anotadas con cualquiera de las siguientes anotaciones de Spring:
- @Controlador
- @RestController
- @Servicio
- @Repositorio
- @Componente
Por configuración, usted define qué asaltos y vigilantes se activan, de forma predeterminada solo se activan el vigilante @Service y el asalto de latencia. Chaos Monkey para Spring Boot atacará sus clases de @Service y agregará aleatoriamente algo de latencia a todos los métodos públicos.
Chaos Monkey para microservicios Spring Boot
El código fuente de la aplicación de muestra está disponible en GitHub en el repositorio sample-spring-chaosmonkey. Después de clonar este repositorio y construirlo usando mnv clean install, primero debe ejecutar discovery-service. Luego, ejecute dos instancias de cada microservicio en diferentes puertos configurando la propiedad -Dserver.port con un número apropiado. Aquí hay un conjunto de mis comandos en ejecución:
$ java -jar target/discovery-service-1.0-SNAPSHOT.jar $ java -jar target/order-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey $ java -jar -Dserver.port=9091 target/order-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey $ java -jar target/product-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey $ java -jar -Dserver.port=9092 target/product-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey $ java -jar target/customer-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey $ java -jar -Dserver.port=9093 target/customer-service-1.0-SNAPSHOT.jar --spring.profiles.active=chaos-monkey
El número de solicitudes atacadas depende de la propiedad chaos.monkey.assaults.level, donde 1 significa cada solicitud y 10 significa cada décima solicitud. También podemos habilitar ataques de excepción y appKiller para destruir nuestra aplicación. Por simplicidad, establezco la configuración para todos los microservicios. Echemos un vistazo a la configuración proporcionada en application.yml
chaos: monkey: assaults: level: 8 latencyRangeStart: 1000 latencyRangeEnd: 10000 exceptionsActive: true killApplicationActive: true watcher: repository: true restController: true
En teoría, la configuración visible arriba debería permitir los tres tipos de asaltos disponibles. Sin embargo, si habilita la latencia y las excepciones, killApplication nunca sucederá. Además, si habilita tanto la latencia como las excepciones, todas las solicitudes enviadas a la aplicación serán atacadas, sin importar qué nivel esté configurado con la propiedad chaos.monkey.assaults.level. Es importante recordar activar el observador restController, que está deshabilitado por defecto.
Una vez que ejecute el microservicio, puede verificar en la consola para asegurarse de que el Chaos Monkey esté listo para crear el caos.
Puede consultar la documentación completa de las propiedades en el siguiente enlace.
Espero que haya sido útil y te haya dado una idea de qué es la ingeniería del caos y cómo implementarla usando chaos monkey en un microservicio de Spring Boot.
https://www.pandasecurity.com/spain/mediacenter/seguridad/ingenieria-del-caos-para-que-sirve-introducir-fallos-adrede/
https://medium.com/@eliedhr/chaos-engineering-in-a-spring-boot-microservice-8a17ad536ecf
https://codecentric.github.io/chaos-monkey-spring-boot/
https://dzone.com/articles/chaos-monkey-for-spring-boot-microservices
https://www.gremlin.com/chaos-monkey/