Marcos Martínez Pérez

Marcos Martínez Pérez

Product Manager for Telefónica Tech's Public Cloud Professional Services (Azure, AWS, and GCP). Engineer in telecommunications from the University of Vigo. I'm a fan of motor sports.

Cloud
Application modernization on AWS: leveraging the Cloud to drive scalability, efficiency, and agility
Application modernization on AWS is about transforming monolithic applications, which are difficult to scale, maintain and update, into cloud-native applications that leverage the benefits of elasticity, availability, security and innovation that AWS offers. This modernization involves migrating legacy applications to the cloud, rewriting or refactoring code to take advantage of the latest technologies and services, and adopting agile and DevOps development practices. The benefits of modernizing applications on AWS are numerous, including the following: Leverage the scalability and flexibility of the cloud, enabling companies to quickly adapt to changing market demands and accommodate business growth. Improve the performance, efficiency, and quality of their applications, reducing operational costs by eliminating the need to maintain in-house infrastructures and enabling pay-per-use. Optimizing the use of resources and improving the end-user experience. Increase agility, speed, and frequency of deliveries, facilitating continuous integration and deployment, as well as the adoption of agile and DevOps methodologies. Increase resiliency, reliability, and disaster recovery by leveraging redundancy, automation, and the ability to replicate and migrate applications across regions and availability zones. What is a monolithic application? A monolithic application is one that is developed following an architecture in which its functionality is as complete and self-contained as possible, minimizing dependencies with other applications and systems. The monolithic application brings together all these dependencies and libraries necessary to encompass all the necessary functionality in order to offer the functionality for which it was designed. This type of development usually results in a large application in terms of size and number of lines of code, with several functional flows that end up being highly complex from the point of view of the sequence of actions that must be performed to complete them. This type of application is also difficult to evolve, which often increases the complexity of troubleshooting. This implies generating a series of tests (unit, functional, regression, etc.) with many options to take into account, complex and with many tests, causing the validation or QA stage to be increasingly complex. Therefore, both the maintenance and the evolution of the application becomes more and more difficult as time goes by, with a higher probability of having errors when it is modified, involving increasingly large and costly test batteries to complete satisfactorily. The result ends up being a complex application, difficult to evolve, requiring more and more resources, and slower and more expensive to be deployed in productive environments. In short, no opportunity to take advantage of the benefits provided by the cloud. What is modernizing a monolithic application? The problems associated with a monolithic application can be solved or mitigated by following a modernization strategy. As we mentioned at the beginning of the article, modernizing an application means following a process that leads to improvements in its maintenance, evolution and/or performance, while taking advantage of the innovation opportunities offered by the cloud. Different strategies or combinations of strategies can be followed for this purpose. Modernizing the application by moving it to an environment that allows the application to be encapsulated so that it can be managed independently can be an approach to modernization to improve performance. ✅ Put it in a container that can be easily replicated, for example, so that if higher resource consumption is required, the environment can easily scale or, if the application needs to be more responsive, it can be replicated and invoked from a load balancer. 2. To improve its maintenance and evolution possibilities, it is possible to follow the strategy of dividing it into smaller and independent functional units. ✅ In this way, maintaining, changing or evolving each of these functionalities becomes more comfortable and easier, being able to follow their own independent lines of evolution without being linked to each other. This makes it possible to have reduced development teams, increasing agility and TTM exponentially, which translates into offering new functionalities to customers. How to modernize monolithic applications Modernizing monolithic applications is an essential process to adapt to changing demands in the enterprise. There are two popular methods to modernize these applications are the adoption of containers and microservices. What is a container-based application? An application developed within the framework of a container architecture is a functionally independent application that is prepared and packaged, along with the pieces of software it needs (libraries and dependencies) to function properly, and then deployed in an application container. A container-based architecture relies on an environment that acts as an orchestrator of these containers and allows management and operations teams to provision and maintain the infrastructure needed to run the applications embedded in these containers. Ensuring proper performance and responding to scaling and availability needs in a fast and automated way. ✅ The result implies an improvement in the deployment and subsequent management of the tasks required to put an application into production and provide service to customers, automating the entire management of the execution environment and its response to availability and disaster recovery needs. Not to mention the intrinsic advantages, through the use of containers, associated with scalability and resilience. What is a microservices-based application? It is an application made up of several independent, decoupled software components, called services (or microservices), each of which encapsulates and offers a specific functionality. Each functional unit, or microservice, is independent of the rest. It is responsible for its own functionality, as well as for offering it through APIs so that it can be consumed by the rest of the modules. Likewise, it is able to consume the functionality offered by other microservices by making calls to the respective APIs. This constitutes a loosely coupled system that can be coordinated through the use of events and also allows to take advantage of the use of serverless technologies. This self-containment and independence allow the microservice to be developed and maintained by a specific team, totally autonomous, with its own dynamics and development methodologies, facilitating continuous deliveries independent of other developments and even with its own particular technological stack. ✅ The result is a modular application that is easy to maintain, efficient to evolve and put into production, without dependencies, with fast development and validation (QA) cycles and reducing the probability of errors. Increasing system resilience and scalability. Strategies for application modernization with AWS Migration to containers There are times when the application to be modernized may be too complicated to refactor or you don't have the time to transform it to a microservices-based architecture. A less expensive and more affordable solution is to prepare it to be deployed and run in a container-based environment. No code changes are made. This environment is mounted on the Amazon cloud and is based on its EKS (Elastic Kubernetes Service) model for the subsequent management of containers. The application to be modernized is prepared with the libraries and all the dependencies it needs to compile and be able to run correctly and is packaged. This way the application is ready to be deployed in any container-based environment. The requirements of security, observability, scalability, availability, fault tolerance and portability offered by the cloud are met by moving applications that are difficult to maintain and scale to a container-based architecture. Patterns, principles, and tools Use of App2Container (A2C). Tool used to transform applications into container format. IaC approach, for managing requirements at the infrastructure level. ✅ BENEFITS IN NUMBERS ◾ 28% increased profits thanks to the increased speed of deployment of new services. ◾ 40% reduction on unscheduled downtime: Deploying new functionality through the use of containers increases granularity and the creation of more stable products. ◾ 13% increase in releases that meet the launch date: Having lightweight containers with more secure and reliable packaged solutions reduces the number of errors. Transformation into microservices The transformation strategy of a monolithic application to one based on microservices begins with a process of study and analysis of the source code of the application in question. Detecting all the needs it has in terms of resources, libraries, dependencies, and infrastructure and all the interconnections it has between the different parts that make it up as a whole as well as the coding patterns. In addition, the application is analyzed to identify which functional flow or flows it contains and to be able to extract them to independent components (microservices, etc.). Therefore, a divide and conquer strategy can be proposed, in which initially simple functionalities without dependencies on others (or with few dependencies) will be broken down, creating services that offer the same functionality independently. To later continue with the rest of the functionalities. It involves creating a façade between the user and the application to be modernized in order to transform the internal logic of the application transparently to the user. As functionality is extracted from the monolithic application, services are created that provide the extracted functionality and can be easily used by switching the call between the monolithic application and the new microservice without the user being aware of it. At the same time the original application is used for the rest of the non-modernized functionalities, favoring a gradual and progressive modernization. Patterns, principles and tools Domain Driven Design, to delimit the context of each microservice and design the logic that encapsulates it and the business model that implements it. Event Driven Design, to facilitate asynchronous and decoupled communication between components based on events. API First principles, to define communications between modules and promote decoupled, distributed architectures. IaC approach for the management of requirements at infrastructure level. Strangler Fig pattern (divide and conquer) ✅ BENEFITS IN NUMBERS ◾ 25% reduction in the cycle of creation of new functionalities By eliminating the need for administrative tasks related to server deployment and configuration, the focus on functionality development increases ◾ 41% increase in the frequency of deployments: Serverless technologies allow the development of functionalities in a more agile, efficient, and faster way. ◾ 39% reduced infrastructure costs Inherent in the use of serverless architectures that leverage ppu models that avoid infra provisioning. Challenges in application modernization However, application modernization on AWS also presents some challenges. One of the most common is the technical complexity of migrating and upgrading legacy applications, which requires: A deep understanding of AWS technologies and services. Software development and architecture skills. Changes to an organization's development processes and culture, which can be an additional challenge. It is important to approach this transformation in the right way and supported by expert application modernization professional services. These professional services can provide the experience and expertise to guide organizations through the modernization process, from initial assessment and planning to implementation and ongoing optimization. With the support of a dedicated team, organizations can minimize the risks and maximize the benefits of application modernization on AWS, ensuring a successful transition to the cloud and optimal performance of modernized applications. Telefónica Tech's professional services for application modernization Telefónica Tech offers professional application modernization services for AWS, providing companies and organizations with the necessary support to carry out a successful modernization. Our extensive experience and deep knowledge in Cloud environments and digitization, positions us as a reliable partner to accompany companies in their modernization journey. We adopt a comprehensive and customized approach to deliver Telefónica Tech's professional application modernization services: We begin the process with a thorough assessment of the application to be modernized and the specific requirements of the organization. We develop a modernization strategy tailored to the client's needs and objectives based on this assessment. We have a team of AWS experts who have a deep understanding of Amazon cloud technologies and services. These professionals work closely with organizations to migrate legacy applications to the AWS cloud, rewrite or refactor code to take advantage of the latest technologies and adopt agile and DevOps development practices. We also offer: Consulting and architecture services to design the best cloud application architecture ensuring scalability, security, and optimal performance. Implementation and ongoing optimization services, ensuring that the modernized applications run efficiently and meet the customer's business objectives. Telefónica Tech's professional services in modernizing applications to AWS enable companies and organizations to leverage the experience and expertise of our specialists, minimizing risks and accelerating the modernization process. We also provide ongoing support and personalized attention throughout the entire modernization process to help companies take full advantage of the benefits of modernizing applications on AWS. Cloud Servicios gestionados de AWS para optimizar cargas: importancia y beneficios 24 de octubre de 2023
November 30, 2023