Cómo migrar a microservicios desde una app monolítica

Cuando comienzas con una aplicación monolítica heredada, debes encontrar partes que se puedan extraer y mover a microservicios separados. A menudo, una aplicación monolítica bien estructurada tendrá divisiones muy naturales, y una clase de servicio ya funcionará como interfaz para una capa de almacenamiento de datos y lógica empresarial. Estas clases son el lugar ideal para conectar las llamadas de clientes con el microservicio.

Cómo separar la funcionalidad en una aplicación monolítica

Para separar tu aplicación, puedes adoptar los siguientes enfoques:

  • Busca la lógica empresarial de tu aplicación que puede separarse.
  • Encuentra un código que esté aislado de manera natural, por ejemplo, mediante herramientas de análisis de código estático para identificar las secciones.
  • Examina tu aplicación para encontrar lógica que te pueda favorecer a partir de la configuración de escalamiento o requisitos de memoria distintos a los del resto de tu aplicación. Esto puede reducir costos y generar una mejor utilización de los recursos.

Es posible que debas refactorizar tu código para quitar dependencias no naturales. Recomendamos que realices la refactorización de tu código heredado y lo implementes en producción antes de intentar separar la aplicación en servicios independientes.

A continuación, se detallan las áreas comunes de microservicios:

  • Información del usuario o de la cuenta
  • Administración de autorización y de sesión
  • Preferencias o ajustes de configuración
  • Servicios de notificaciones y de comunicaciones
  • Fotografías y recursos multimedia, en especial, metadatos
  • Trabajadores de la lista de tareas en cola

Pasos para migrar una aplicación

Después de identificar un conjunto de clases como candidato para convertirse en un microservicio, sigue los pasos que se indican a continuación:

  • Deja el código existente implementado y operativo en la aplicación heredada para facilitar la reversión.
  • Crea un repositorio de código nuevo, o al menos un subdirectorio en tu repositorio existente.
  • Copia las clases en la ubicación nueva.
  • Escribe una capa de vista que proporcione los hooks de API HTTP y le de formato a los documentos de respuesta de la manera adecuada.
  • Formula el código nuevo como una aplicación separada (crea un app.yaml).
  • Implementa tu microservicio nuevo como un servicio o como un proyecto separado.
  • Prueba el código para garantizar que funciona correctamente.
  • Migra los datos desde la aplicación heredada hacia el microservicio nuevo. Consulta a continuación un debate al respecto.
  • Modifica tu aplicación heredada existente para usar la nueva aplicación de microservicios.
  • Implementa la aplicación heredada modificada.
  • Verifica que todo funcione según lo esperado y que no necesites revertir a la aplicación heredada.
  • Quita cualquier código no alcanzado de la aplicación heredada.

Cómo migrar datos en una aplicación activa

La migración de datos en una aplicación activa puede ser complicada y depender mucho de tu situación. . A menudo, para facilitar el avance y la reversión, tendrás que escribir un código que propague las entidades de Cloud Datastore antiguas y nuevas, quizás mediante una API temporal en el microservicio, y, luego, escribir un código que migre el conjunto de datos existente, como un MapReduce, por ejemplo. Este proceso suele implicar cierta cantidad de código temporal y datos redundantes. Según las características específicas de tu situación, es posible que también tengas que ejecutar una migración de datos compensatoria después de actualizar. Ten cuidado de no reemplazar datos nuevos con datos antiguos.

Aunque esto parece mucho trabajo, es una situación común y es importante permitir el avance y la reversión en caso de que la transición al nuevo microservicio no tenga éxito. Solo puedes quitar tu código temporal y borrar los datos de la ubicación de almacenamiento antigua cuando hayas verificado que todo se haya migrado correctamente y funcione según lo esperado. Asegúrate de hacer copias de seguridad durante el proceso.

¿Qué sigue?