Volver a todos los artículos

De App Service Plans a Azure Container Apps: Reduciendo Costes en un 99%

Azure Container Apps

Transformando nuestra infraestructura con Azure Container Apps

1. Introducción: El Contexto y el Desafío Inicial

Como ingeniero de software y líder del proyecto, en el departamento de Sistemas de Información de Adevinta, nos dimos cuenta de que estábamos desperdiciando una cantidad significativa de dinero en recursos de computación que apenas utilizábamos. Nuestra arquitectura original en Azure se basaba en App Service Plans, una solución común, pero que en nuestro caso, se había convertido en un lastre económico y operativo.

Gestionábamos una variedad de aplicaciones, cada una con requisitos específicos. Para dar cabida a estas necesidades, habíamos implementado una arquitectura compleja con diferentes tipos de App Service Plans: planes simples para aplicaciones sin requisitos especiales, planes asociados a App Service Environments (ASE) para aquellas que necesitaban una IP fija de salida, y planes segregados para aplicaciones Linux y Windows. Esta fragmentación, si bien respondía a necesidades iniciales, generaba una gestión compleja y poco eficiente.

Azure Container Apps

Arquitectura de app service plans

Realicé un análisis exhaustivo del uso real de nuestras aplicaciones durante el último mes y los resultados fueron impactantes. Descubrí que, en promedio, el 99% de nuestras aplicaciones solo estaban activas durante un 5% del día. A pesar de esta bajísima utilización, estábamos pagando religiosamente 3000 euros al mes por recursos de computación que permanecían ociosos la mayor parte del tiempo.

Azure Container Apps

Porcentage de uso de una de nuestras aplicaciones con mas uso

Decidí que necesitábamos un cambio radical. Y la necesidad era aún más apremiante dado que nos encontramos inmersos en un proyecto de "splitting" de gran envergadura, donde debemos multiplicar por tres toda nuestra infraestructura actual. Este crecimiento exponencial, de mantener la arquitectura anterior, hubiera cuadruplicado nuestros ya elevados costes, haciendo criticó el proyecto desde el punto de vista económico. La optimización de costes no era solo deseable, ¡era imprescindible!

2. Los Problemas con la Arquitectura Basada en App Service Plans (El "Por qué" del Cambio)

Nuestra arquitectura basada en App Service Plans, aunque inicialmente funcional, nos estaba generando varios problemas críticos:

Costes Desorbitados

El principal dolor de cabeza era, sin duda, el coste. Pagar 3000€ al mes por recursos que se utilizaban de forma intermitente era inaceptable. Estábamos asumiendo un desperdicio económico significativo debido a un modelo de precios basado en la reserva constante de recursos, en lugar del consumo real.

"Backside Effects": El Efecto Vecino No Deseado

Experimentábamos los temidos "backside effects". Cuando una de nuestras aplicaciones, por un pico de demanda puntual, consumía la mayor parte de los recursos de su App Service Plan, las demás aplicaciones alojadas en el mismo plan se veían directamente afectadas. Esto se traducía en degradación del rendimiento, inestabilidad y una experiencia de usuario inconsistente.

Escalado Ineficiente y Costoso

El escalado era otro punto débil. Si una sola aplicación dentro de un App Service Plan necesitaba escalar para hacer frente a un aumento de tráfico, todo el App Service Plan se escalaba, incluso para aquellas aplicaciones que no lo requerían. Este escalado "en bloque" no solo era ineficiente en términos de recursos, sino que también disparaba aún más nuestros costes.

Complejidad de Gestión

Gestionar múltiples App Service Plans de diferentes tipos, con sus configuraciones específicas, se había convertido en una tarea compleja y laboriosa. Esto consumía tiempo valioso de nuestro equipo y aumentaba el riesgo de errores de configuración.

Estaba claro que necesitábamos una solución que nos permitiera optimizar costes, mejorar la escalabilidad y simplificar la gestión de nuestra infraestructura. Buscábamos una arquitectura más moderna, eficiente y adaptada a las características de uso de nuestras aplicaciones.

3. Azure Container Apps: La Solución (El "Cómo" lo Hicieron)

Tras evaluar diversas alternativas, la respuesta a nuestros problemas llegó de la mano de Azure Container Apps. Esta plataforma, basada en Kubernetes y serverless, se presentaba como la solución ideal para nuestro caso de uso específico. ¿Por qué Azure Container Apps? Por sus características clave que resolvían directamente nuestras principales preocupaciones:

  • Modelo de Consumo: Paga Solo por lo que Usas: Azure Container Apps opera bajo un modelo de consumo. Solo pagamos por los recursos de CPU y memoria que nuestras aplicaciones realmente utilizan, y solo durante el tiempo que están activas. Esto eliminaba de raíz el problema del coste fijo de la reserva de recursos, permitiéndonos un ahorro drástico.
  • Escalado Automático y Preciso: La plataforma escala automáticamente y de forma individual cada Container App según la demanda. Si una aplicación necesita más recursos, Container Apps la escala de forma granular, sin afectar a otras aplicaciones y sin escalar la infraestructura completa innecesariamente. Esto nos garantizaba una escalabilidad eficiente y optimizada en costes.
  • Aislamiento Total de Aplicaciones: Cada Container App se ejecuta en su propio entorno aislado. Esto eliminaba por completo los "backside effects". El rendimiento de una aplicación ya no se vería afectado por el consumo de recursos de otra, garantizando una experiencia consistente para cada usuario.
  • Simplificación Radical de la Arquitectura: Con Azure Container Apps, pudimos consolidar todas nuestras aplicaciones en un único Azure Container Environment. Adiós a la complejidad de gestionar múltiples App Service Plans. Una arquitectura más simple, más fácil de gestionar y mantener.
  • Homogeneización de CI/CD y Dockerización: Azure Container Apps requiere que las aplicaciones se ejecuten en contenedores Docker. Esta exigencia nos impulsó a adoptar la Dockerización en todo nuestro portfolio de aplicaciones. Si bien esto implicó un esfuerzo inicial de adaptación, el resultado ha sido una homogeneización completa de nuestra CI/CD. Anteriormente, gestionábamos pipelines de CI/CD diferentes para webapps y functions. Ahora, gracias a la containerización, contamos con un único proceso de CI/CD unificado para todas nuestras aplicaciones.

4. El Proceso de Migración: Paso a Paso y Entorno Dual (Pre y Pro)

Diseñé un proceso de migración gradual y planificada, App Service Plan por App Service Plan. Esta estrategia nos permitía minimizar riesgos, validar cada paso del proceso y asegurar una transición suave.

1

Entorno Dual

Creamos un entorno "Pre" idéntico al de producción para validar la migración.

2

Pruebas Exhaustivas

Validamos rendimiento, estabilidad y funcionalidad en el entorno de pre-producción.

3

Migración Gradual

Implementamos la migración en producción, App Service Plan por App Service Plan.

Una pieza clave de la estrategia fue la implementación de entornos Pre-producción (Pre) y Producción (Pro) duplicados. Creamos un entorno "Pre" completamente idéntico a nuestro entorno de producción actual. En este entorno "Pre", realizamos pruebas exhaustivas de la migración a Azure Container Apps, validando la funcionalidad, el rendimiento y la estabilidad de las aplicaciones migradas sin afectar en absoluto a nuestros servicios en producción.

Una vez superadas las pruebas en "Pre" y con la confianza de un proceso validado, procedimos a replicar la migración en nuestro entorno de Producción "Pro". Este enfoque nos brindó seguridad y control durante todo el proceso de migración.

Es importante destacar que aún no hemos completado el 50% de la migración total. Estamos migrando App Service Plan por App Service Plan, pero incluso en esta etapa inicial, los resultados ya son extraordinarios.

5. La Nueva Arquitectura con Azure Container Apps (El "Resultado")

Nueva Arquitectura con Azure Container Apps

La nueva arquitectura simplificada con Azure Container Apps

La nueva arquitectura basada en Azure Container Apps es radicalmente más simple y eficiente. Hemos pasado de una constelación de App Service Plans a un único Azure Container Environment que alberga todas nuestras aplicaciones containerizadas.

Esta simplificación se traduce en:

  • Gestión Centralizada: Administrar un único entorno en lugar de múltiples planes fragmentados reduce drásticamente la complejidad operativa.
  • Visibilidad Unificada: Tener todas las aplicaciones en un mismo entorno facilita la monitorización, el seguimiento y la gestión general de la infraestructura.
  • Menos Mantenimiento: Una arquitectura más simple implica menos componentes que mantener, reduciendo el esfuerzo y el riesgo de errores.

6. Resultados y Beneficios Tangibles: ¡Ahorro Superior al 99%, Viabilidad de la Expansión y CI/CD Homogeneizada!

Ahorro espectacular

Los resultados han superado nuestras expectativas más optimistas. Hemos logrado un ahorro de costes superior al 99%. Pasamos de pagar 3000€ al mes a apenas 30€ mensuales. En nuestro proyecto de "splitting", este ahorro se vuelve colosal: de 12000€ a solo 75€ mensuales.

Los resultados de la migración a Azure Container Apps han superado nuestras expectativas más optimistas. El dato más impactante, y ahora aún más relevante dado nuestro proyecto de "splitting", es el ahorro de costes superior al 99%. Hemos pasado de pagar 3000€ al mes para nuestra infraestructura actual a una fracción de esa cantidad, aproximadamente 30€ mensuales. Pero si consideramos la expansión que implica multiplicar por tres nuestra infraestructura, el ahorro se vuelve colosal.

En un escenario de "splitting" con la arquitectura anterior, nuestros costes mensuales proyectados se habrían disparado hasta los 12000 euros (4 veces los 3000€ iniciales). Con Azure Container Apps, incluso con la infraestructura cuadruplicada, mantenemos un coste mínimo, estimado en menos de 120€ mensuales. Este ahorro masivo, que supera los 11800€ al mes, no solo impacta directamente en nuestro presupuesto, sino que hace viable económicamente nuestro proyecto de expansión. La migración a Azure Container Apps ha sido fundamental para asegurar la escalabilidad de nuestra infraestructura sin comprometer la sostenibilidad financiera de nuestro crecimiento.

Además del ahorro y la simplificación, hemos obtenido beneficios significativos en nuestros procesos de desarrollo:

CI/CD Homogeneizada y Mejorada

La Dockerización, impulsada por la migración a Azure Container Apps, nos ha permitido unificar y simplificar radicalmente nuestra CI/CD. Ahora gestionamos un único pipeline de CI/CD para todas nuestras aplicaciones, independientemente de si son webapps o functions. Esta homogeneización simplifica enormemente la gestión de despliegues y reduce la complejidad operativa de nuestros equipos de desarrollo.

Versioning y Rollbacks Eficientes

Implementamos un sistema de versionado de nuestros repositorios dentro de la CI/CD. Esto nos proporciona una trazabilidad completa del código desplegado en cada versión de cada aplicación. En caso de necesidad, podemos realizar rollbacks a versiones anteriores de manera rápida, sencilla y con total seguridad. Este control de versiones ha mejorado significativamente nuestra capacidad de respuesta ante posibles problemas y la estabilidad general de nuestras aplicaciones en producción.

7. Lecciones Aprendidas y Próximos Pasos

La migración a Azure Container Apps ha sido un éxito rotundo, y una decisión estratégica clave para el futuro de nuestra infraestructura. Uno de los mayores aprendizajes ha sido comprender la importancia de planificar la arquitectura cloud no solo para las necesidades actuales, sino también anticipando escenarios de crecimiento futuro como nuestro proyecto de "splitting". Aunque inicialmente la migración se centró en la optimización de costes inmediata, ha demostrado ser una inversión aún más valiosa al prepararnos para la expansión.

También hemos aprendido el valor de una CI/CD robusta y homogeneizada, especialmente en arquitecturas containerizadas. La migración a Azure Container Apps nos impulsó a mejorar nuestros procesos de CI/CD, y esta mejora en el flujo de desarrollo se ha convertido en un beneficio adicional muy importante. Si volviéramos a empezar, dedicaríamos aún más tiempo a la fase de planificación y pruebas en el entorno "Pre" para refinar aún más la estrategia de migración y documentar cada paso para futuras migraciones.

Nuestro próximo paso es completar la migración del 100% de nuestros App Service Plans a Azure Container Apps. También estamos explorando otras funcionalidades avanzadas de la plataforma, como el autoescalado basado en métricas personalizadas y la integración con otros servicios de Azure, para seguir optimizando nuestra infraestructura y mejorar la experiencia de nuestros usuarios.

8. Conclusión: El Futuro es Container Apps

En este proyecto que lideré y gestioné, Azure Container Apps ha transformado por completo nuestra infraestructura en Azure. Hemos logrado un ahorro de costes espectacular, superior al 99%, una simplificación radical de la arquitectura, una mejora significativa del rendimiento y la escalabilidad de nuestras aplicaciones, una CI/CD homogeneizada y eficiente, y lo más importante, hemos hecho viable nuestra ambiciosa expansión de infraestructura.

Para empresas B2B con patrones de uso intermitente como la nuestra, y para cualquier empresa que busque optimizar costes, mejorar sus procesos de desarrollo y prepararse para el crecimiento, Azure Container Apps se ha convertido en la plataforma ideal para construir una infraestructura cloud moderna, eficiente, escalable, rentable y ágil.

Si estás buscando una solución para los mismos desafíos, ¡te recomendamos encarecidamente que explores Azure Container Apps!

Este proyecto ha demostrado el enorme potencial de Azure Container Apps para optimizar costes y escalar infraestructuras en la nube, así como para modernizar los flujos de trabajo de desarrollo.

#Azure #ContainerApps #Optimización #Kubernetes #Docker #Arquitectura #Cloud #AhorroEnCostes #DevOps #Microservicios