Cómo implementar el caos en tus aplicaciones de Azure para garantizar su resiliencia

Las aplicaciones nativas de la nube ya no son los monolitos de antaño que encajaban perfectamente en las categorías cliente-servidor o de tres niveles. Ahora son una conglom eración de servicios, mezclando tu código y herramientas de plataforma, diseñados para gestionar y controlar errores y escalar a nivel mundial.

Esto es maravilloso para nuestros usuarios: obtienen aplicaciones rápidas y receptivas, a las que pueden acceder desde cualquier lugar y cualquier dispositivo. Pero esto dificulta el trabajo de los desarrolladores y los equipos de operaciones, con complejas redes de servicios que son difíciles de probar a escala. Podemos diseñar para el fallo, incorporando redundancia en nuestros sistemas, pero eso agrega complejidad a las arquitecturas con nuevos servidores y más instancias de servicios.

Índice de Contenido
  1. Pruebas de sistemas complejos mediante su falla
  2. Creando tu propio caos
  3. Presentando Azure Chaos Studio

Pruebas de sistemas complejos mediante su falla

Ante mayor complejidad, se requieren más pruebas, y esto puede ser un problema cuando estamos probando lo que sucede cuando un servicio falla bajo carga. ¿Cómo fallan las transacciones cuando el backend de un carrito de compra necesita cambiar de base de datos en medio de una compra? ¿Cómo responderá un rastreador de entrega de un restaurante si su plataforma de mensajería principal deja de funcionar?

Necesitamos un modelo de pruebas que examine sistemas en funcionamiento y luego introduzca fallas, permitiéndonos seguir el comportamiento del sistema en relación a un conjunto de condiciones objetivo. Es una técnica conocida como ingeniería del caos, pionera en Netflix con su herramienta "chaos monkey", que afectaba aleatoriamente las operaciones con el objetivo de revelar modos de fallo que no se consideraron y para los cuales los equipos de desarrollo y operaciones no estaban preparados.

El objetivo de las técnicas de ingeniería del caos no es explorar cómo fallan los sistemas, aunque este puede ser un efecto secundario beneficioso; en cambio, busca demostrar cuán resistentes son. Netflix necesitaba ofrecer una experiencia de cliente sólida en todo momento, asegurándose de que los usuarios pudieran ver sus películas y programas, sin importar lo que estuviera ocurriendo en segundo plano.

No es sorprendente que estas técnicas hayan sido adoptadas por otras plataformas, especialmente por los proveedores de servicios en la nube a gran escala como Microsoft Azure. Si tus aplicaciones se ejecutan en Azure, quieres asegurarte de que incluso si un servidor de Microsoft falla, tu aplicación seguirá funcionando. El equipo de ingeniería del caos de Microsoft regularmente explora cómo las fallas afectan la plataforma, con el objetivo de garantizar que los servicios en los que dependen tus aplicaciones sepan cómo manejar las fallas de manera elegante.

La industria automotriz necesita tomar en serio el software para atraer a los mejores ingenieros

Creando tu propio caos

Pero ¿puedes utilizar las mismas técnicas en tus propias aplicaciones, asegurándote de que tu código sea tan resistente como los servicios que utiliza? No hay razón para que no lo hagas. Si bien Microsoft puede contar con sus propios equipos de ingenieros de confiabilidad del sitio encargados de mantener Azure en funcionamiento, una vez que tu código se ejecute a gran escala, necesitarás tus propios ingenieros de confiabilidad del sitio, quienes estén familiarizados tanto con tu software como con los servicios que utiliza.

Si estás ejecutando tu aplicación a gran escala, necesitarás implementar algún tipo de ingeniería del caos para asegurarte de que tus aplicaciones sean resistentes. Microsoft ofrece orientación sobre cómo pensar en el uso de estas técnicas como parte de su documentación de Azure, gran parte de la cual se deriva de la experiencia de Netflix. El caos, dice Microsoft, es un proceso.

Esto no es sorprendente. Podemos pensar en el caos como aleatoriedad, pero cuando lo utilizamos para probar la resistencia, debe ser planificado y tratado de manera similar a la seguridad. El modelo de Microsoft habla en términos de atacantes y defensores. Los atacantes son un lado de la ecuación, inyectando fallas en un sistema con el objetivo de romperlo. Por otro lado, los defensores evalúan los efectos de los ataques, analizan los resultados y planifican mitigaciones.

Las pruebas deben tratarse como experimentos científicos. Debes comenzar con una hipótesis, algo como "la aplicación seguirá funcionando si pierde una sola instancia de la base de datos backend". Eso define la falla que se inyectará, en este caso, apagando una base de datos en una aplicación en ejecución. Por último, tienes un resultado esperado: que la aplicación siga funcionando. Tu plataforma de ingeniería del caos debe gestionar estos tres pasos, brindando una forma de iniciar y detener las pruebas y acceder a los resultados de las pruebas.

Un aspecto importante de las pruebas de caos es recordar que tienen un radio de acción. Son deliberadamente destructivas, por lo que debes tener en cuenta que pueden salir mal. Esto significa que debes poder detener una prueba en cualquier momento y volver rápidamente a las operaciones normales. Cualquier inyección de caos necesita una forma de revertir los cambios, preferiblemente con un solo botón para automatizar todo el proceso.

Las herramientas de terceros para Azure DevOps muestran el interés en utilizar estas técnicas como parte de la prueba de tus aplicaciones. La herramienta de Proofdock vincula la turbulencia de la ingeniería del caos con los conceptos de desarrollo modernos, trabajando con herramientas de observabilidad para ofrecer lo que llama "verificación continua", ejecutando todo dentro de un portal familiar.

Docker anuncia cambios en sus planes de suscripción para uso profesional y personal

Presentando Azure Chaos Studio

Microsoft está actualmente en fase de vista previa de un conjunto de herramientas de ingeniería del caos para aplicaciones de Azure con una selección de clientes, basadas en su propia herramienta interna. Demostrado por el CTO de Azure, Mark Russinovich, en el evento virtual Spring Ignite de Microsoft, se trata de una combinación de un portal de administración de pruebas de Azure y un lenguaje de scripting de pruebas basado en JSON.

Azure Chaos Studio tiene dos elementos en sus pruebas: un agente que se ejecuta en tus servidores virtuales o que se integra en tu código, y acceso directo a los propios servicios de Azure. Estos se controlan mediante descripciones de experimentos en JSON, por ejemplo, para probar la conmutación por error del backend de Cosmos DB de una aplicación, simulando una falla en una de las regiones de la aplicación. Alternativamente, un experimento podría utilizar un agente para apagar un host de servicio en un servidor que ejecuta una aplicación node.js o código .NET, probando la resistencia en tu propia aplicación.

Los experimentos están compuestos por una serie de pasos, cada uno de los cuales tiene acciones. Microsoft ha desarrollado un lenguaje declarativo específico de dominio para trabajar con infraestructuras de aplicaciones, que comparte cierta similitud con su lenguaje de descripción de recursos Bicep. Podrás construir experimentos dentro de Visual Studio Code, guardándolos en Azure donde se listarán en el portal de Chaos Studio. Desde el portal, comienza seleccionando los experimentos que deseas ejecutar utilizando otros elementos de las herramientas de desarrollo de Azure para monitorear las operaciones de la aplicación, ya sea utilizando el monitoreo de la aplicación incorporado en tu código o las propias herramientas de servicio de Azure.

Si estás utilizando Azure DevOps u otra herramienta de integración y desarrollo continuo, como GitHub Actions, Azure Chaos Studio proporciona una API REST para que puedas usarla como parte de un conjunto de pruebas de integración al compilar una nueva versión de tu código. Ejecutar Chaos Studio temprano en el ciclo de vida de la aplicación tiene sentido, ya que te permite incorporar pruebas de resistencia en tu proceso de lanzamiento.

A medida que el desarrollo nativo de la nube madura, la forma en que construimos aplicaciones se está volviendo cada vez más similar a la manera en que las grandes plataformas y servicios en la nube construyen su código. Técnicas que antes solo eran necesarias para empresas como Netflix o en Azure ahora son necesarias para todos, y la llegada de Chaos Studio en Azure está convirtiendo las herramientas personalizadas en una plataforma que puede ser utilizada por todos, cumpliendo la promesa de sistemas resilientes.

Gitpod lanza proyecto de código abierto para ejecutar Visual Studio Code en el navegador

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo implementar el caos en tus aplicaciones de Azure para garantizar su resiliencia , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.