Migrar a microservicios desde una aplicación monolítica

Cuando empiezas con una aplicación monolítica antigua, debes encontrar las partes que se pueden separar y mover a microservicios independientes. 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 los clientes al microservicio.

Separar funciones en una aplicación monolítica

Puedes separar tu aplicación de varias formas:

  • Busca lógica empresarial en tu aplicación que se pueda separar.
  • Busca el código que esté aislado de forma natural. Por ejemplo, puedes usar herramientas de análisis de código estático para identificar las secciones.
  • Examina tu aplicación para determinar si hay alguna lógica que pueda beneficiarse de una configuración de escalado o unos requisitos de memoria diferentes a los del resto de la aplicación. Esto podría suponer un ahorro de costes que podría llevar a una mejor utilización de los recursos.

Es posible que tengas que refactorizar tu código para eliminar las dependencias no naturales. Te recomendamos que refactorices el código antiguo y lo implementes en producción antes de intentar separar la aplicación en servicios independientes.

Estos son algunos de los ámbitos habituales de los microservicios:

  • Información de usuario o de cuenta
  • Autorización y gestión de sesiones
  • Preferencias o ajustes de configuración
  • Servicios de notificaciones y comunicaciones
  • Fotos y contenido multimedia, sobre todo metadatos
  • Trabajadores de colas de tareas

Pasos para migrar una aplicación

Una vez que se ha identificado un conjunto de clases como candidato para convertirse en un microservicio, los siguientes pasos son:

  • Dejar el código en su sitio y operativo en la aplicación antigua para facilitar la reversión.
  • Crear un nuevo repositorio de código o, al menos, un subdirectorio en el repositorio que ya tengas.
  • Copiando las clases en la nueva ubicación.
  • Escribir una capa de vista que proporcione los ganchos de la API HTTP y dé formato a los documentos de respuesta de la forma correcta.
  • Formular el nuevo código como una aplicación independiente (crear un app.yaml).
  • Desplegar el nuevo microservicio como un servicio o un proyecto independiente.
  • Probar el código para asegurarse de que funciona correctamente.
  • Migrar los datos de la aplicación antigua al nuevo microservicio. Consulta la conversación que aparece más abajo.
  • Modificar tu aplicación antigua para que use la nueva aplicación de microservicios.
  • Desplegar la aplicación antigua modificada
  • Verificar que todo funciona según lo previsto y que no es necesario volver a la aplicación antigua.
  • Eliminar el código obsoleto de la aplicación antigua.

Migrar datos en una aplicación activa

La migración de datos en una aplicación activa puede ser complicada y depende en gran medida de tu situación. A menudo, para facilitar la actualización y la restauración, tendrás que escribir código que rellene las entidades antiguas y nuevas de Cloud Datastore, posiblemente mediante una API temporal en el microservicio, y, a continuación, escribir código que migre el conjunto de datos, por ejemplo, como MapReduce. Este proceso suele implicar una cierta cantidad de código temporal y datos redundantes. En función de las características específicas de tu situación, es posible que también tengas que ejecutar una migración de datos de puesta al día después del lanzamiento. Tenga cuidado de no sobrescribir datos más recientes con datos antiguos.

Aunque parezca mucho trabajo, es algo habitual y es importante para poder avanzar y retroceder en caso de que no se complete el cambio al nuevo microservicio. Solo puedes quitar el código temporal y eliminar los datos de la ubicación de almacenamiento antigua después de haber verificado que todo se ha migrado correctamente y que funciona como se espera. Asegúrate de hacer copias de seguridad durante el proceso.

Siguientes pasos