Saltar al contenido principal

migration-mysql-to-store

El objetivo de esta función es encolar 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 un mensaje de Pub/Sub, desencadena el procesamiento y encolado de tareas para la migración de datos en función de un rango de fechas.

Descripción

La Cloud Function migration-mysql-to-store tiene como finalidad la creación de tareas (Cloud Tasks) para la migración de datos desde una base de datos MySQL hacia Google BigQuery. El disparador de la misma consiste en un evento de Cloud Pub/Sub que, al recibirlo, primero decodifica el mensaje y extrae los parámetros necesarios para el proceso de migración. Luego de validar los parámetros, se crean las tareas correspondientes para cada tabla de origen y destino, con cada una de ellas incluyendo el esquema de la tabla y el intervalo de fechas a migrar, agregando las mismas a la cola de tareas de Cloud Tasks. Dichas tareas se ejecutan en paralelo, procesando y almacenando los datos de manera incremental, asegurando una mayor eficiencia y control sobre los recursos de la infraestructura.

Funcionamiento detallado

  • Activación mediante Eventos: La migración se inicia a partir de un evento mediante un mensaje en Pub/Sub. La Cloud Function recibe este mensaje, decodifica la carga útil (en formato base64 y JSON) y extrae los parámetros necesarios para el proceso.

  • Parámetros de Configuración: Para definir el alcance de la migración, se espera recibir un JSON con los siguientes parámetros:

    ParámetroDescripción
    years_to_migrateNúmero de años en el pasado desde la fecha actual que se desea migrar.
    months_to_migrateMeses adicionales a restar para definir el límite de migración.
    source_tablesLista de las tablas de origen en la base de datos MySQL.
    destination_tablesLista de las tablas destino en BigQuery.
    filter_columnsLista de columnas (una para cada tabla) que se utilizan para filtrar los registros en función de una fecha (estas columnas deben ser de tipo DATETIME e Index para optimizar la consulta).
    tasks_enqueued_limitLímite máximo de tareas a encolar para cada tabla, que permite controlar la carga del proceso.
  • Proceso de Migración:

    1. Decodificación del Mensaje: Al recibir el evento, se decodifica y parsea el mensaje para obtener el JSON con la configuración.

    2. Cálculo del Rango de Fechas: Se establece un límite de fecha restando los años y meses indicados a la fecha actual. Solo se migran los registros anteriores a esta fecha.

    3. Conexión a Servicios: Se conectan los clientes necesarios para interactuar con MySQL, BigQuery y Redis (usado para el seguimiento del estado de las migraciones).

    4. Preparación de la Migración: Para cada conjunto de tabla de origen/destino y columna de filtrado, el sistema:

      • Valida la estructura de la tabla y verifica que la columna de fecha sea del tipo adecuado.

      • Crea la tabla destino en BigQuery si aún no existe, generando el esquema a partir de la estructura de la tabla MySQL.

      • Determina el primer registro a migrar que cumple la condición de fecha.

    5. Encolado de Tareas: Se recorre el intervalo de días (día a día) desde el primer registro encontrado hasta la fecha límite establecida. Para cada día:

      • Si no se ha migrado previamente (comprobado a través de Redis), se encola una tarea.

      • Cada tarea incluye la información necesaria (tablas de origen y destino, columna de filtrado, intervalo de fechas y el esquema de la tabla) para procesar la migración de forma individual mediante Cloud Tasks.

    6. Ejecución y Control: El proceso registra en logs cada acción realizada y controla el número máximo de tareas encoladas, de forma que se evite una sobrecarga del sistema. En caso de errores (por ejemplo, en la conexión a MySQL o en la decodificación del mensaje), se registran y se gestionan adecuadamente.

Beneficios y Consideraciones

  • Modularidad: La arquitectura separa claramente la recepción de eventos, la validación de parámetros, el procesamiento de cada tabla y el encolado de tareas, lo que facilita el mantenimiento y la escalabilidad.

  • Eficiencia y Control: Al migrar los datos en intervalos diarios y respetar un límite de tareas por tabla, se garantiza un procesamiento controlado y se evitan problemas de sobrecarga en la infraestructura.

  • Integración con Servicios de Google Cloud: El uso de Cloud Functions, Cloud Tasks y BigQuery permite aprovechar la infraestructura escalable de Google Cloud para manejar grandes volúmenes de datos de manera eficiente.