Modernización de aplicaciones cloud y sostenibilidad, una gran oportunidad

Publish date:

El camino al Cloud introduce grandes oportunidades para acercarse a los objetivos de sostenibilidad. Tras la migración de aplicaciones, la fase de modernización que muchas organizaciones están acometiendo ofrece una ocasión irrepetible para incorporar mejoras profundas en los procesos de diseño y desarrollo de aplicaciones que ayuden en estos objetivos. Este artículo expone algunas ideas a considerar durante este proceso de modernización.

Sostenibilidad IT, una prioridad creciente

El crecimiento exponencial de la digitalización y su potencial impacto medioambiental en todo el mundo, hace que la sostenibilidad de las tecnologías de la información esté cada vez más presente en los ámbitos de decisión IT de todas las organizaciones.

En el informe TI Sostenible, Capgemini identifica, sin embargo, que esta prioridad aún no está suficientemente extendida, ya que sólo un 20% de las compañías dispone de una estrategia completa de TIC sostenible. Este mismo informe señala que, frecuentemente, las medidas de sostenibilidad pasan por alto el ecosistema de las aplicaciones, como demuestra el hecho de que casi un 60% de las organizaciones no tiene planes de eficiencia para su arquitectura o implementación de aplicaciones.

El “efecto cloud” en la sostenibilidad

El Cloud Computing se está erigiendo en una palanca fundamental para mejorar la sostenibilidad IT. La mera decisión de migrar al Cloud habilita relevantes mejoras respecto al TI tradicional. Algunos estudios cuantifican esta mejora en unos valores entre 72% y 98% de eficiencia en huella de carbono, apalancándose en las capacidades de escalado e innovación de los hyperscalers.

Debemos aprovechar aún más el impacto de esta decisión, incorporando en nuestro proceso de adopción del Cloud una cultura sostenible para el diseño e implementación de la modernización de aplicaciones.

Pero, ¿cómo aprovechar la modernización de mi aplicación para que contamine menos?  Aunque la pregunta parezca nueva, en realidad está presente desde que se empezó a diseñar software, cuando los recursos eran escasos y caros, y los ingenieros de software pensaban constantemente en optimizar el uso de CPU, RAM, red y almacenamiento.

Con el Cloud y su promesa de recursos ilimitados a bajo coste, comenzamos a olvidarnos de esa búsqueda. A continuación, se enumeran algunas ideas para recuperar esta preocupación en las etapas de diseño, desarrollo y despliegue de nuestras aplicaciones.

Multiplicar las oportunidades de optimización con un diseño modular

El diseño modular destaca como una de las mejores prácticas de arquitectura y forma parte de las recomendaciones de arquitecturas de los principales HyperScalers. Este principio enfatiza la modularidad y desacoplamiento de los sistemas, utilizando, por ejemplo, microservicios, APIs o eventos. Esto permite implementar optimizaciones incrementales focalizadas en los puntos calientes del sistema:

  • Usando el poliglotismo que habilita una arquitectura de microservicios para seleccionar el lenguaje de programación más adecuado a cada situación. Aunque las mejoras son continuas, aún parece claro, según algunos estudios, que los lenguajes interpretados son menos eficientes en uso de CPU y memoria que los lenguajes compilados. En escenarios exigentes, la diferencia en consumo de recursos puede llegar a ser bastante relevante.
  • Asilando en contenedores o funciones serverless casos de uso especialmente favorecidos por lenguajes optimizados, y aprovechar la versatilidad del Cloud (por ejemplo, custom handlers de Azure Functions) para utilizar lenguajes de nicho como Rust o Go, si esto nos da una ventaja relevante.
  • Aprovechando las palancas de optimización que incorporan de manera continua los lenguajes más extendidos en el mundo corporativo. Actualizar la versión de Java o .NET puede proporcionar mejoras automáticas en la eficiencia del código existente, pero también puede habilitar nuevas herramientas. Por ejemplo, la compilación nativa Ahead-Of-Time (AOT) para Java reduce considerablemente el start-up time y el uso de memoria. Posibles estándares de futuro están en desarrollo con Spring Native o el Project Layden de OpenJDK, mientras que otros actores como GraalVM o Quarkus ya tienen soluciones completamente operativas. Microsoft también incluye en el roadmap la compilación nativa AOT en .NET 7.

Un diseño modular en un entorno cloud simplifica notablemente la implementación de buenas prácticas adicionales de diseño sostenible, como mover cargas intensivas a localizaciones con menos emisiones o establecer mecanismos de caché o CDN para reducir procesamiento y tráfico.

Asegurar la eficiencia del código generado

Tras un diseño ecoeficiente, hay que observar las decisiones que tomamos a la hora de codificar nuestra solución. Como organización debemos ayudar a generar preocupación por código sostenible mediante la incorporación de indicadores específicos en nuestros pipelines de desarrollo.

Un buen primer paso es chequear el uso de mejores prácticas para el rendimiento en nuestro código mediante reglas de validación en las herramientas de análisis estático.

Un paso más allá es implementar indicadores específicos sobre la eficiencia en el uso de recursos del código generado. En Capgemini, hemos desarrollado internamente Greensight, un plugin de Sonarqube que chequea la aplicación de mejores prácticas en el diseño sostenible de las aplicaciones. Este plugin está integrado en nuestro acelerador de DevOps Production Line y está en uso en más de 100 proyectos. Adicionalmente, Greenlight Probe es un complemento para validar la ganancia en eficiencia durante las pruebas de carga del sistema. Estos datos pueden alimentar árboles de decisión sobre el portfolio de aplicaciones, como los de eAPM (economic Aplication Portfolio Manager) de Capgemini, que puede enriquecer con otras fuentes de información para establecer la huella de carbono de las aplicaciones y acelerar el proceso de modernización sostenible.

Pipelines de despliegue rápidos y artefactos reducidos

Aunque los recursos dedicados a la compilación y despliegue suelen ser relativamente mucho menos importantes que los dedicados a la ejecución, es también necesario consolidar buenas prácticas de eficiencia en esta fase del ciclo de vida del software;  más si cabe, en los entornos ágiles de integración y despliegue continuo, que se beneficiarán adicionalmente de ciclos de desarrollo más cortos y ligeros.

Estos objetivos de eficiencia se pueden concretar en buscar la reducción de los tiempos de compilación (mejora en uso de CPU y RAM) y reducir el tamaño de los artefactos producidos (mejoras en networking y almacenamiento).

Trabajando con contenedores y técnicas ágiles de DevOps, podemos aprovechar la compilación multi-etapa de nuestras imágenes. Utilizando imágenes independientes para la precompilación de dependencias y utilizando distroless images como contenedor de despliegue final, se pueden conseguir reducciones de más del 95% en los tiempos de compilación o del tamaño del contenedor resultante.

Creando una cultura sostenible

Este artículo enumera algunas decisiones de diseño y técnicas que pueden aportar un empuje sostenible adicional durante el proceso de modernización de nuestras aplicaciones:

  • Diseñar sistemas modulares que faciliten el aprovechamiento de las ventajas de un entorno cloud y la utilización del paradigma de programación más eficiente en cada momento.
  • Tener en cuenta las diferencias en eficiencia en lenguajes de programación, frameworks o incluso sus diferentes versiones.
  • Implementar técnicas de análisis estático y dinámico de la eficiencia del código.
  • Utilizar las técnicas disponibles para reducir los tiempos de compilación y los tamaños de los artefactos.

Estos son sólo algunos ejemplos dentro de un amplio conjunto de decisiones que se toman en el día a día de los equipos de arquitectura, ingeniería o desarrollo. Para garantizar resultados, es imprescindible instaurar una cultura que favorezca la búsqueda continua de esta eficiencia y dotar a estos equipos de herramientas que simplifiquen el proceso, buscando, por ejemplo:

  • Establecer objetivos claros y cuantificables y sistemas de monitorización que permitan realizar un seguimiento y celebrar los éxitos conseguidos.
  • Introducir políticas de formación continua en técnicas y herramientas.
  • Facilitar herramientas y frameworks de desarrollo alineados con prácticas sostenibles y sustainability by design.

Una vez comience a interiorizarse esta cultura, los resultados se irán produciendo de manera natural. No es necesario esperar a diseñar y acometer grandes cambios organizativos o técnicos, pero sí empezar pronto a tomar decisiones;  dar pasos pequeños, pero constantes y firmes, para hacer del proceso de modernización de aplicaciones Cloud una herramienta relevante en nuestra búsqueda de un futuro más sostenible.

 

Autor:

Juan Pablo Antequera, Cloud advisor | South & Central Europe Cloud CoE

Post relacionados

cloud

El modelo multicloud híbrido, la palanca para la modernización de las Administraciones Públicas

José Ricardo Plá Pons
Date icon 2 Diciembre, 2022

A lo largo de la Historia, las diferentes sociedades se han enfrentado a desafíos y han...

ciberseguridad

La sinergia entre la ciberseguridad y la preponderancia de la soberanía en el Cloud

Date icon 2 Diciembre, 2022

La digitalización acelerada por parte de las compañías en los últimos años y el cambio hacia...

cloud

Defensa de infraestructuras críticas en coyunturas de alto riesgo

Date icon 22 Septiembre, 2022

Las infraestructuras críticas deben protegerse, siempre. Pero cuando la probabilidad de que...