Saltar al contenido principal

migration-task-processor

El objetivo de esta función es procesar tareas para la migración de datos desde una base de datos MySQL hacia Google BigQuery, utilizando una arquitectura basada en eventos y tareas en la nube. La migración se ejecuta a través de una Cloud Function que, al recibir una petición HTTP POST desde una Cloud Task, desencadena el procesamiento y migración de datos en función de un rango de fechas definido por parámetros.

Descripción

La Cloud Function migration-task-processor tiene como finalidad el procesamiento de tareas para la migración de datos desde una base de datos MySQL hacia Google BigQuery. El disparador de la misma consiste en una peticion HTTP POST que, al recibirlo, extrae los parámetros necesarios para el proceso de migración. Luego de validar los parámetros, se realiza una serie de validaciones previas al proceso de migración, como comprobar que los parámetros de fecha sean correctos o si las fechas ya se encuentran migradas en BigQuery, en ese caso se registra la fecha en Redis y se cancela el proceso de migración. Luego de verificar los parámetros, se procede con la ejecución de dicho proceso, consultando los registros de MySQL entre las fechas comprendidas y las tablas correspondientes para cada parámetro de configuración, para luego procesarlos y almacenarlos en BigQuery.

Funcionamiento detallado

  • Punto de Entrada HTTP:

    El proceso se activa mediante una llamada HTTP (método POST) que envía un JSON con la configuración necesaria para procesar una tarea de migración. El endpoint, implementado como una Cloud Function, valida que la solicitud cumpla con el formato esperado y luego delega el procesamiento al módulo encargado de la migración.

  • Parámetros de Configuración:

    La solicitud JSON debe incluir los siguientes parámetros:

    ParámetroDescripción
    source_tableNombre de la tabla en MySQL de la cual se extraerán los datos.
    dest_tableNombre de la tabla destino en BigQuery.
    filter_columnNombre de la columna que se utiliza para filtrar los registros basándose en una fecha.
    table_schemaEsquema de la tabla (lista de columnas y sus tipos) que se usa para definir las estructuras y validar los datos.
    start_date y end_dateIntervalo de fechas en el cual se seleccionarán los registros a migrar. Estas fechas se deben enviar en formato ISO.
  • Proceso de Migración:

    1. Validación del Payload:

      Se verifica que el JSON de la solicitud contenga todos los campos obligatorios y que las fechas estén en un formato válido. Esto permite asegurarse de que la información proporcionada es la necesaria para ejecutar el proceso.

    2. Conexión a Servicios:

      El sistema se conecta a los siguientes servicios:

      • MySQL: Para obtener los registros que deben migrarse, según el filtro de fecha.

      • BigQuery: Para insertar los registros extraídos, mediante una consulta externa que permite acceder a MySQL.

      • Redis: Para registrar y controlar los rangos de fechas que ya han sido migrados, evitando duplicidad en el procesamiento.

    3. Extracción de Datos desde MySQL:

      Se ejecuta una consulta en MySQL para contar y extraer los registros que cumplen con el filtro definido en el intervalo [start_date, end_date). Si no se encuentran registros a migrar, se registra esta situación en Redis y se informa al solicitante.

    4. Inserción en BigQuery:

      Utilizando el cliente de BigQuery y un job de consulta, se ejecuta una consulta de inserción que emplea la funcionalidad de external query para leer los datos de MySQL y volcarlos en la tabla de destino en BigQuery. Se registra el número total de registros migrados.

    5. Verificación y Registro:

      Se consulta BigQuery para obtener el total de registros insertados durante la migración. Posteriormente, se compara este valor con el número de filas obtenidas de MySQL para determinar si la migración se completó exitosamente o si quedó incompleta. Además, se registra el rango migrado en Redis para evitar reprocesamientos futuros.

    6. Manejo de Errores:

      En caso de producirse errores durante el procesamiento (por ejemplo, en la extracción de datos, en la inserción en BigQuery o en la validación del payload), se capturan y se registran dichos errores, devolviendo un mensaje descriptivo en la respuesta.

Beneficios y Consideraciones

  • Integración Sencilla mediante HTTP:

    Al exponer la funcionalidad a través de un endpoint HTTP, el proceso de migración puede ser invocado fácilmente por otras aplicaciones o procesos automatizados.

  • Control de Procesos y Reintentos:

    El uso de Redis para almacenar el estado de cada tarea de migración ayuda a prevenir duplicados y permite reintentar migraciones parciales en caso de fallo.

  • Optimización del Rendimiento:

    La solución aprovecha las capacidades de BigQuery para ejecutar consultas externas y la escalabilidad de Google Cloud para manejar grandes volúmenes de datos.

  • Validación Rigurosa:

    La validación previa del payload asegura que solo se ejecuten migraciones con la configuración correcta, reduciendo el riesgo de errores en la transferencia de datos.