Directora, Automatización Inteligente
Las organizaciones de IT han experimentado una transformación masiva en términos de personas, procesos y tecnología para abordar sus necesidades comerciales, como lograr un tiempo de comercialización más rápido. Las personas han completado y ampliado sus capacidades; los procesos han pasado de cascada a iterativos y ágiles; los equipos se han vuelto lineales, y las prácticas de DevOps se han aplicado a la automatización del desarrollo y la implementación de software. Aunque la arquitectura monolítica permite la modularidad lógica independientemente de cualquier mejora o nueva característica, sigue implementándose como una sola unidad, lo que hace que la implementación continua resulte tediosa y consuma mucho tiempo. Para superar este reto, las organizaciones han migrado de la arquitectura monolítica a la arquitectura orientada a los servicios y, en la mayoría de los casos, a los microservicios. El cambio a los microservicios ha ayudado a los equipos a desarrollar, probar e implementar aplicaciones con más eficiencia, rapidez y frecuencia. Además, la adopción de microservicios ha mejorado significativamente los indicadores clave de rendimiento (KPI), como la frecuencia de implementación y el tiempo de espera para el cambio, lo que ayuda a que las funciones salgan al mercado en un plazo más corto y a que el negocio se vea favorecido.
Las empresas de TI que han adoptado los microservicios han visto enormes beneficios. Sin embargo, siguen existiendo retos a la hora de gestionar las complejidades operativas y técnicas. Un aumento del número y de las interdependencias de los microservicios también puede aumentar los puntos de fallo, que luego afectan a las siguientes métricas:
Estas métricas miden la disponibilidad de los sistemas y son utilizadas por los equipos de desarrollo y de operaciones de fiabilidad de los sistemas para respaldar los contratos con acuerdos de nivel de servicio (SLA). Un mayor tiempo de recuperación del sistema/MTTR y los fallos frecuentes en el sistema/MTBF pueden afectar a la disponibilidad y fiabilidad del sistema, lo que afecta significativamente a los compromisos SLA/SLO (acuerdo de nivel de servicio/objetivo de nivel de servicio) en los contratos.
La ingeniería del caos implica una serie de experimentos prácticos realizados en los sistemas para comprobar y aumentar la confianza en su capacidad para soportar condiciones turbulentas en la producción.Según un informe de 2021 realizado por Gremlin1, el 23 % de los equipos que realizaban frecuentemente proyectos de ingeniería del caos tuvo un MTTR inferior a una hora; el 60 % tuvo un MTTR inferior a 12 horas. Por ello, la implementación de experimentos de caos en una fase temprana y frecuente del ciclo de vida del desarrollo de software (SDLC) permite lo siguiente:
Hoy en día, muchas empresas de primera línea tienen asegurada una disponibilidad y fiabilidad sin precedentes mediante la implementación de experimentos del caos como parte de su SDLC. Por lo tanto, mejorar el MTBF y el MTTR repercute en una alta disponibilidad del sistema y no se desvía de los SLAs/SLOs comprometidos.
Las organizaciones pueden introducir la ingeniería del caos utilizando una estrategia de seis pasos, representada en el siguiente gráfico:
Figura 1: Estrategia de seis pasos para introducir la ingeniería del caos en una organización.
Vamos a profundizar en los seis pasos mencionados anteriormente. Utilizaremos la ayuda de un ejemplo de aplicación de reserva de películas basada en microservicios. Se despliega en un clúster Kubernetes en un proveedor de nube pública, como se muestra en la Figura 2 a continuación.
Varios servicios, como los horarios, la clasificación de las películas, la compra de entradas, los pagos, el correo electrónico y los SMS, se despliegan en contenedores individuales, cada uno de ellos envuelto en un pod independiente. La interfaz de usuario del front-end y la base de datos también se ejecutan en los pods.
Figura 2: Despliegue de la aplicación de reserva de películas en un clúster Kubernetes en un proveedor de nube pública.
Paso 1: Descubrimiento
Durante esta fase, los equipos deben colaborar para obtener los detalles necesarios sobre una aplicación y su entorno. Para ello, deben:
Figura 3: Representación de los servicios de una aplicación de reserva de películas y sus dependencias.
Paso 2: Definir el estado estable
Durante esta fase, los equipos deben:
En la aplicación de ejemplo de reserva de películas (figura 2), el servicio (reserva de películas) es un componente esencial para el negocio, ya que está ligado a la generación de ingresos. Normalmente, durante los primeros días del estreno de una película, este componente recibe visitas masivas simultáneas. Por lo tanto, el rendimiento (la capacidad de dar servicio a estas solicitudes sin degradación) se convierte en la métrica más importante, y el equipo de gestión de productos define el rendimiento aceptable dentro del rango de 50 a 65 solicitudes por segundo para el servicio de reserva de películas.
Paso 3: Desarrollar una hipótesis
Una vez definido el estado estable para los servicios, identifique los experimentos que se inyectarán y formule una hipótesis sobre lo que puede salir mal (por ejemplo, ¿qué podría afectar al servicio, al sistema y a los clientes?) Además, priorice los experimentos en función del impacto en el cliente y la alta frecuencia de ocurrencia.
Vamos a terminar el pod que está ejecutando el servicio de Book Movie en la aplicación de ejemplo. Nuestra hipótesis es que Kubernetes detectará automáticamente la terminación y aprovisionará un nuevo pod.
Paso 4: Realizar el experimento, medir y analizar los resultados
Comience a realizar experimentos en un entorno que no sea de producción. Sin embargo, es vital entender cómo se comporta el sistema antes de realizar el experimento. Mida las métricas necesarias en condiciones normales y, a continuación, mida las mismas métricas después de inyectar los experimentos. Si hay un impacto significativo después de ejecutar el experimento, abórtelo y ejecute el plan de reversión para volver a un estado estable.
Figura 4: Representación esquemática del experimento global, definido a continuación.
Pasos para realizar un experimento POD kill en reservas de películas:
Figura 5: El rendimiento previo al experimento está en el rango definido de 50 a 65, y no hay errores.
Figura 6: Los resultados de la latencia antes del experimento están en el rango esperado.
Figura 7: Rendimiento y error después de ejecutar el experimento (por ejemplo, después de terminar el pod de reserva de películas).
Figura 8: Latencia después de ejecutar el experimento (por ejemplo, después de terminar el pod de reserva de películas).
Los datos muestran que cuando el pod de reserva de películas termina, la tasa de error y la latencia están por encima del rango normal. El rendimiento disminuye hasta que Kubernetes detecta que ha terminado y saca automáticamente un pod que contiene el servicio de reserva de películas; este fallo debe solucionarse.
Paso 5: Arreglar y volver a probar
En este caso, una de las posibles soluciones es escalar el número de réplicas; esto garantiza que un número determinado de pods se ejecute continuamente. Incluso si uno de los pods falla, los demás se encargarán de la solicitud. Observe que después de la corrección, en la imagen de abajo, no hay errores. El rendimiento y la latencia son los esperados y están dentro del rango.
Figura 9: Después del arreglo, hay cero errores en el rendimiento.
Figura 10: Después del arreglo, la latencia está en el rango aceptable.
Además, con la implementación de patrones de diseño resistentes a los microservicios, los fallos en la aplicación pueden resolverse. Los desarrolladores pueden crear aplicaciones de microservicios resistentes a los fallos mediante el uso de patrones de resiliencia, como un interruptor, un reintento y un tiempo de espera.
Paso 6: Aumentar de forma iterativa el radio de explosión
Una vez que el experimento empieza a funcionar correctamente, la recomendación es aumentar gradualmente el radio del experimento. Por ejemplo, en el experimento de muestra anterior, damos por terminado un servicio y luego damos por terminado otro progresivamente. Por lo tanto, hay que empezar a experimentar en entornos de ensayo y luego pasar a producción.
Para garantizar la satisfacción y la retención de los usuarios en el mundo digital, las empresas deben tener en cuenta ciertos factores (tiempo de comercialización, experiencia del usuario, sistema fiable y capacidad de recuperación rápida) para llevar a cabo las operaciones y proporcionar valor a los usuarios finales. La incorporación de la ingeniería del caos en el SDLC permite obtener beneficios tanto operativos como técnicos, como la prevención de pérdidas de ingresos, la reducción de los costes de mantenimiento, la mejora de la gestión de incidentes, la disminución de los incidentes negativos, la reducción de la carga del personal de guardia y una mejor comprensión de los modos de fallo del sistema y la mejora del diseño del mismo.
Debido a sus numerosas ventajas, las organizaciones deberían dar un paso hacia la ingeniería del caos para facilitar la creación de sistemas de software fiables.
Referencias:
Directora, Automatización Inteligente
Sathyapriya Bhaskar tiene más de 18 años de experiencia en Ingeniería de Calidad y DevOps. Es una Arquitecta de Soluciones en ejercicio, que ayuda a los clientes a diseñar e implementar soluciones de automatización del SDLC. También es una profesional certificada en ingeniería del caos.
Suscríbase para estar al día de las últimas novedades del sector, incluidas las perspectivas de la industria y las capacidades de las soluciones innovadoras