de monolitos a microservicios

Migrar de monolitos a microservicios: Cuatro Estrategias Exitosas

Al migrar de monolitos a microservicios y con la intención de mejorar tiempos, los equipos de desarrollo y operaciones tienen una fuerte presión de mejorar este despliegue y reducirlo a componentes específicos independientes para así limitar el impacto de una actualización y mitigar los riesgos. Esto implica moverse de componentes y aplicaciones monolíticas a estructuras de microservicios. Ya que en las monolíticas cualquier cambio implica tener que modificar toda la aplicación entera. A esto añadimos que la nube está más optimizada para usar microservicios, con lo que moverse a ella suele implicar un cambio de perspectiva.

La opción Lift-and-shift de subir una aplicación monolítica a la nube e ir modificándola para crear microservicios complementarios no es fácil y tiende a presentar problemas. Es mejor realizar una refactorización más profunda y crear servicios y microservicios a partir de la aplicación monolítica.

Para ello hay cuatro estrategias que nos sirven para asegurar una correcta migración a microservicios.

1.  Entender el monolito

Las aplicaciones monolíticas suelen ser frágiles, al tener dependencias e interacciones complejas entre sus componentes internos. Al intentar fragmentarlas es fácil crear disrupciones y problemas.

Antes de empezar el proceso, es vital primero preparar esta migración mapeando correctamente las interacciones entre componentes y diferentes dependencias que existan. Sabiendo con profundidad las acciones que realiza la aplicación monolítica es básico para evitar problemas. Para ello hay que definir un plan claro de dependencias y funciones para toda la aplicación.

Recomendamos evitar errores humanos mediante herramientas que consigan realizar este mapeo automático. De esta manera se puede visualizar la aplicación en tiempo real y crear topologías a partir de las trazas de transacciones y llamadas. Esto resulta en una representación gráfica de los componentes e interacciones que debe usarse como base para el desarrollo posterior.

2.  Realizar la transición en incrementos

Refactorizar una aplicación monolítica para usar contenedores de Kubernetes es una tarea muy grande y complicada que muchas veces implica reestructurar y desarrollar desde 0. Por tanto, es vital dividir esta tarea en pequeñas tareas incrementales, más fáciles de gestionar.

Después de mapear la aplicación, los equipos de DevOps pueden ir reemplazando sus componentes por microservicios uno a uno. Así, cada microservicio se puede testear de manera individual antes de realizar el siguiente. Comparándolo con la aplicación monolítica y observando su rendimiento y resistencia.

Una vez la aplicación se comporta de igual manera con el microservicio que con la versión monolítica, se puede eliminar las dependencias al antiguo componente monolítico. Y, entonces, empezar a desarrollar el siguiente microservicio.

3.  Crear dependencias ligeras

Las dependencias entrelazadas de las aplicaciones monolíticas son una de las razones por las cuales es bueno migrar a microservicios. Estas dependencias no permiten cambios flexibles ni despliegues ágiles.

Cuando se realiza la migración a microservicios es vital que se entiendan estas dependencias y se reduzcan las mismas al mínimo necesario. Es muy importante que la mensajería entre aplicaciones sea asíncrona y se utilicen colas.

Al implementar comunicación asíncrona reducimos las posibilidades de crear cuellos de botella y facilitamos la posibilidad de cambiar o substituir un microservicio individual.

4.  Implementar monitoraje en todo el proceso

Al migrar de monolitos a microservicios en Kubernetes implica que una aplicación se convierta en varias microaplicaciones. Cada una con su tecnología, corriendo de manera independiente. Esto suele ser más complejo de monitorizar y de revisar.

De la misma manera que hace falta mapear las dependencias de la aplicación monolítica antes de migrar, se han de mantener mapas de los entornos con microservicios que sean observables en cada paso del proceso.

Esto implica utilizar datos de logs, métricas y trazas de componentes en la tecnología de la nube. Y, así entender las relaciones entre servicios y sus dependencias.

Esta monitorización se debe extender a cada componente de la aplicación, incluyendo clústeres, nodos, pods, workloads, etc. Cuando alguna incidencia ocurra, los datos de monitorización deben permitir al equipo de DevOps identificar la raíz del problema. Y, de esta manera, poder resolverlo rápidamente.

Para una mayor eficacia, los equipos deberían usar plataformas de monitoreo que unifiquen todos los datos de la aplicación e infraestructura usada. Esta plataforma debería también usar IA para dar respuestas exactas sobre la salud de los entornos. Con esto podremos automatizar parte del trabajo alrededor de la revisión y solución de problemas.

Conclusiones

Migrar aplicaciones monolíticas a microservicios puede ser difícil y largo. Sin embargo, una vez la migración se ha completado, los equipos de DevOps son libres para ser mas interactivos y flexibles, a la vez que se pueden aprovechar mejor los servicios disponibles en la nube.

El trabajo realizado para la migración dará beneficios a largo plazo. Adoptar tecnologías modernas para facilitar la migración como monitoraje integrado o IA permite a los equipos optimizar los entornos y despliegues, y dará pie a facilitar mejoras y desarrollos nuevos a la vez que reducir costes posteriores y conseguir ventajas competitivas.

Daniel Morales – Cloud Enginee