Marcos Martínez Pérez

Marcos Martínez Pérez

Product Manager de los Servicios Profesionales de nube pública (Azure, AWS y GCP) en Telefónica Tech. Ingeniero de Telecomunicaciones por la Universidad de Vigo. Me encantan los deportes de motor.

Cloud
Modernización de ​aplicaciones en AWS: aprovechando la nube para impulsar la escalabilidad, eficiencia y agilidad
La modernización de aplicaciones en AWS consiste en transformar las aplicaciones monolíticas, que son difíciles de escalar, mantener y actualizar, en aplicaciones nativas de la nube, que aprovechan los beneficios de la elasticidad, la disponibilidad, la seguridad y la innovación que ofrece AWS. Esta modernización implica migrar las aplicaciones heredadas a la nube, reescribir o refactorizar el código para aprovechar las tecnologías y servicios más recientes, y adoptar prácticas de desarrollo ágiles y DevOps. Como veremos a lo largo de este artículo, los beneficios de la modernización de aplicaciones en AWS son numerosos, entre ellos: Aprovechar la escalabilidad y flexibilidad de la nube, lo que permite a las empresas adaptarse rápidamente a las demandas cambiantes del mercado y acomodar el crecimiento de su negocio. Mejorar el rendimiento, la eficiencia y la calidad de sus aplicaciones, reduciendo los costes operativos al eliminar la necesidad de mantener infraestructuras propias y permitir el pago por uso. Optimizando el uso de los recursos y mejorando la experiencia de los usuarios finales. Aumentar la agilidad, la velocidad y la frecuencia de las entregas, facilitando la integración y el despliegue continuos, así como la adopción de metodologías ágiles y DevOps. Incrementar la resiliencia, la fiabilidad y la recuperación ante desastres, aprovechando la redundancia, la automatización y la capacidad de replicar y migrar las aplicaciones entre regiones y zonas de disponibilidad. ¿Qué es una aplicación monolítica? Se entiende por aplicación monolítica aquella que se desarrolla siguiendo una arquitectura en la que su funcionalidad sea lo más completa y autocontenida posible, minimizando las dependencias con otras aplicaciones y otros sistemas. La aplicación monolítica aúna todas estas dependencias y librerías necesarias para englobar toda la funcionalidad necesaria a fin de ofrecer la funcionalidad para la que fue diseñada El resultado de este tipo de desarrollos suele ser una aplicación grande en tamaño y número de líneas de código, con varios flujos funcionales que acaban teniendo una elevada complejidad desde el punto de vista de la secuencia de acciones que hay que realizar para completarlos. Además, este tipo de aplicaciones son difíciles de evolucionar, lo que muchas veces se convierte en un incremento de la complejidad a la hora de solucionar incidencias. Esto implica generar una serie de pruebas (unitarias, funcionales, de regresión, etc.) con muchas opciones a tener en cuenta, complejas y con muchos tests, ocasionando que la etapa de validación o QA sea cada vez más enrevesado. Por todo ello, tanto el mantenimiento como la evolución de la aplicación se vuelve cada vez más difícil a medida que pasa el tiempo, con mayor probabilidad de tener errores al ser modificada, implicando baterías de pruebas cada vez más grandes y costosas de completar satisfactoriamente. El resultado acaba siendo una aplicación compleja, difícil de evolucionar, cada vez con necesidad de más recursos, y más lenta y costosa para poder ser desplegada en entornos productivos. En definitiva, sin oportunidad de aprovechar las ventajas que proporciona la nube. ¿Qué es modernizar una aplicación monolítica? Los problemas que conlleva una aplicación monolítica pueden ser solventados o mitigados siguiendo una estrategia de modernización. Como comentábamos al principio del artículo, modernizar una aplicación significa seguir algún proceso que lleve a obtener mejoras en su mantenimiento, evolución y/o rendimiento, permitiendo al mismo tiempo sacar un provecho de las oportunidades de innovación que ofrece la nube. Para ello pueden seguirse diferentes estrategias o combinaciones de ellas. Para mejorar el rendimiento, se puede plantear un enfoque de modernización que consiste en trasladar la aplicación a un entorno que permita encapsular esa aplicación de manera que se pueda gestionar independientemente. ✅ Por ejemplo, ponerla en un contenedor que pueda replicarse fácilmente, de forma que si se necesita un mayor consumo de recursos, el entorno pueda escalar con facilidad o, si es necesario que la aplicación tenga mayor capacidad de respuesta, se pueda replicar y ser invocada desde un balanceador de carga. Para mejorar sus posibilidades de mantenimiento y evolución, se puede seguir la estrategia de dividirla en unidades funcionales más pequeñas e independientes entre ellas. ✅ De esta forma, mantener, cambiar o evolucionar cada una de esas funcionalidades, se hace más cómodo y fácil, pudiendo seguir sus propias líneas de evolución independientes sin estar vinculadas entre ellas. Esto permite que se pueda disponer de equipos de desarrollo reducidos, aumentando la agilidad y el TTM de forma exponencial, lo que se traduce en ofrecer nuevas funcionalidades a los clientes. Cómo modernizar aplicaciones monolíticas La modernización de aplicaciones monolíticas es un proceso imprescindible para adaptarse a las demandas cambiantes en el ámbito empresarial. Dos métodos populares para modernizar estas aplicaciones son la adopción de contenedores y microservicios. ¿Qué es una aplicación basada en contenedores? Una aplicación desarrollada en el marco de una arquitectura de contenedores es una aplicación funcionalmente independiente que se prepara y empaqueta, junto con las piezas de software que necesita (librerías y dependencias) para funcionar correctamente, y después desplegarse en un contenedor de aplicaciones. Una arquitectura basada en contenedores se apoya en un entorno que actúa como orquestador de estos contenedores y que permite a los equipos de gestión y operación aprovisionar y mantener la infraestructura necesaria para ejecutar las aplicaciones embebidas en dichos contenedores garantizando el correcto rendimiento y respondiendo a necesidades de escalado y disponibilidad de manera rápida y automatizada. ✅ El resultado implica una mejora en el despliegue y posterior gestión de las tareas necesarias para poner una aplicación en producción y dar servicio a los clientes, automatizando toda la gestión del entorno de ejecución y su respuesta a las necesidades de disponibilidad y de recuperación ante desastres. Sin olvidar las ventajas intrínsecas al uso de contenedores asociadas a la escalabilidad y resiliencia. ¿Qué es una aplicación basada en microservicios? Una aplicación diseñada sobre la base de una arquitectura de microservicios es una aplicación compuesta por varios componentes de software independientes, desacoplados, llamados servicios (o microservicios), en donde cada de los cuales encapsula y ofrece una funcionalidad específica. Cada unidad funcional, o microservicio, es independiente del resto. Es responsable de su propia funcionalidad, así como de ofrecerla por medio de las API para que pueda ser consumida por el resto de los módulos. De la misma manera, es capaz de consumir la funcionalidad que ofrecen otros microservicios haciendo llamadas a las respectivas API. Esto constituye un sistema débilmente acoplado que puede ser coordinando mediante el uso de eventos y que permite, además, sacar mayor partido al uso de las tecnologías serverless. Esa autocontención e independencia, favorece que el microservicio pueda ser desarrollado y mantenido por un equipo concreto, totalmente autónomo, con sus propias dinámicas y metodologías de desarrollo, facilitando entregas continuas e independientes de otros desarrollos e incluso con su particular stack tecnológico. ✅ El resultado es una aplicación modular fácil de mantener, eficiente a la hora de evolucionar y poner en producción, sin dependencias, con ciclos de desarrollo y validación (QA) rápidos y reduciendo la probabilidad de errores, aumentando la resiliencia y escalabilidad del sistema. Estrategias para la modernización de aplicaciones con AWS Migración a contenedores En ocasiones la aplicación a modernizar puede ser excesivamente complicada de refactorizar o no se dispone del tiempo necesario para transformarla en una arquitectura basada en microservicios. Una solución menos costosa y más asequible consiste en prepararla para ser desplegada y ejecutada en un entorno basado en contenedores. Sin realizar cambios en el código. Dicho entorno se monta sobre la nube de Amazon y se basa en su modelo EKS (Elastic Kubernetes Service) para la posterior gestión de los contenedores. La aplicación por modernizar se prepara con las librerías y todas las dependencias que necesita para compilar y poder ejecutarse correctamente y se empaqueta. De esta forma la aplicación está preparada para poder ser desplegada en cualquier entorno basado en contenedores. Moviendo aplicaciones difíciles de mantener y escalar a una arquitectura basada en contenedores se consigue cumplir con los requisitos de seguridad, observabilidad, escalabilidad, disponibilidad, tolerancia a fallos y portabilidad que ofrece la nube. Patrones, principios y herramientas Empleo de App2Container (A2C). Herramienta utilizada para transformar aplicaciones en formato contenedor. Enfoque IaC, para la gestión de las necesidades a nivel de infraestructura. ✅ BENEFICIOS EN CIFRAS ◾ 28% de incremento de los beneficios gracias al aumento en la velocidad de despliegue de nuevos servicios. ◾ 40% de reducción en paradas no programadas: desplegar nuevas funcionalidades mediante el uso de contenedores aumenta la granularidad y la creación de productos más estables. ◾ 13% de incremento en releases que cumplen la fecha de lanzamiento: disponer de ligthweigth containers con soluciones empaquetadas más seguras y fiables permite reducir el número de errores. Transformación en microservicios La estrategia de transformación de una aplicación monolítica a una basada en microservicios comienza con un proceso de estudio y análisis del código fuente de la aplicación en cuestión. Detectando todas las necesidades que tiene a nivel de recursos, librerías, dependencias e infraestructura y todas las interconexiones que tiene entre las diferentes partes que la conforman como un todo así como los patrones de codificación. Además, se analiza la aplicación para identificar qué flujo o flujos funcionales contiene y poder extraerlos a componentes independientes (microservicios). De esta manera se puede plantear una estrategia de divide y vencerás, en la que inicialmente se irán desgranando funcionalidades simples y sin dependencias de otras (o con pocas dependencias) creando servicios que ofrezcan la misma funcionalidad de manera independiente. Para posteriormente continuar con el resto de las funcionalidades. Con este enfoque, se implementa lo que conoce como patrón Strangler Fig, que implica crear una fachada entre el usuario y la aplicación a modernizar para ir transformando la lógica interior de la aplicación de forma transparente para el usuario. A medida que se extraen funcionalidades de la aplicación monolítica, se crean servicios que ofrecen la funcionalidad extraída y pueden ser fácilmente utilizados cambiando la llamada entre la aplicación monolítica y el nuevo microservicio sin que el usuario sea consciente. Al mismo tiempo que se utiliza la aplicación original para el resto de las funcionalidades no modernizadas, favoreciendo que la modernización se haga de forma gradual y progresiva. Patrones, principios y herramientas Domain Driven Design, para delimitar el contexto de cada microservicio y diseñar la lógica que la encapsula y el modelo de negocio que lo implementa. Event Driven Design, para facilitar la comunicación asíncrona y desacoplada entre componentes basada en eventos. Principio API First, a fin de definir comunicaciones entre módulos y favorecer de una arquitectura distribuida y desacoplada. Enfoque IaC para la gestión de las necesidades a nivel de infraestructura Patrón Strangler Fig (divide y vencerás) ✅ BENEFICIOS EN CIFRAS ◾ 25% de reducción en el ciclo de creación de nuevas funcionalidades al no ser necesarias labores administrativas relativas a despliegue y configuración de servidores aumenta el foco en el desarrollo de funcionalidades. ◾ 41% de incremento en la frecuencia de despliegues: las tecnologías serverless permiten el desarrollo de funcionalidades de forma más ágil, eficiente y rápida. ◾ 39% de reducción del gasto en infraestructura inherente al uso de arquitecturas serverless que potencian los modelos de ppu que evitan aprovisionamiento de infraestructuras. Retos y desafíos en la modernización de aplicaciones Sin embargo, la modernización de aplicaciones en AWS también presenta desafíos y retos. Uno de los desafíos más comunes es la complejidad técnica de migrar y actualizar aplicaciones heredadas, lo que requiere: Un profundo conocimiento de las tecnologías y servicios de AWS. Habilidades de desarrollo y arquitectura de software. Cambios en los procesos y la cultura de desarrollo de una organización, lo que puede ser un desafío adicional. Es importante abordar esta transformación de manera correcta y apoyada en servicios profesionales expertos en modernización de aplicaciones. Estos servicios profesionales pueden proporcionar la experiencia y el conocimiento necesarios para guiar a las organizaciones a través del proceso de modernización, desde la evaluación y planificación inicial hasta la implementación y optimización continua. Al contar con el apoyo de un equipo especializado, las organizaciones pueden minimizar los riesgos y maximizar los beneficios de la modernización de aplicaciones en AWS, asegurando una transición exitosa a la nube y un rendimiento óptimo de las aplicaciones modernizadas. Servicios profesionales de Telefónica Tech para la modernización de aplicaciones En Telefónica Tech ofrecemos servicios profesionales de modernización de aplicaciones para AWS, proporcionado a las empresas y organizaciones el apoyo necesario para llevar a cabo una modernización exitosa. Nuestra amplia experiencia y profundo conocimiento en entornos Cloud y digitalización, nos posiciona como un socio confiable para acompañar a las empresas en su viaje de modernización. Para ofrecer los servicios profesionales de modernización de aplicaciones de Telefónica Tech adoptamos un enfoque integral y personalizado: Comenzamos el proceso con una evaluación exhaustiva de la aplicación a modernizar y los requisitos específicos de la organización. A partir de esta evaluación, desarrollamos una estrategia de modernización adaptada a las necesidades y objetivos del cliente. Contamos con un equipo de expertos en AWS que poseen un profundo conocimiento de las tecnologías y servicios de la nube de Amazon. Estos profesionales trabajan estrechamente con las organizaciones para migrar las aplicaciones heredadas a la nube de AWS, reescribir o refactorizar el código para aprovechar las últimas tecnologías y adoptar prácticas de desarrollo ágiles y DevOps. Además, Ofrecemos servicios de consultoría y arquitectura para diseñar la mejor arquitectura de aplicaciones en la nube garantizando la escalabilidad, la seguridad y el rendimiento óptimo. Proporcionamos servicios de implementación y optimización continua, asegurando que las aplicaciones modernizadas funcionen de manera eficiente y cumplan con los objetivos de negocio del cliente. Los servicios profesionales de Telefónica Tech en la modernización de aplicaciones a AWS permiten que las empresas y organizaciones pueden aprovechar la experiencia y el conocimiento de nuestros especialistas, lo que minimiza los riesgos y acelerar el proceso de modernización. También proporcionamos un soporte continuo y una atención personalizada a lo largo de todo el proceso de modernización para ayudar a las empresas a aprovechar al máximo los beneficios de la modernización de aplicaciones en AWS. Cloud Servicios gestionados de AWS para optimizar cargas: importancia y beneficios 24 de octubre de 2023
30 de noviembre de 2023