Ejecutar importaciones de forma gradual es la estrategia de migración de datos ganadora
La importación de datos es una tarea común en las implementaciones de proyectos de TI. Ya sea que estés realizando migraciones de contenido desde un sistema de administración de contenido web heredado o importando millones de puntos de datos a tu nueva y brillante plataforma de datos del cliente, es probable que las migraciones estén en la lista de tareas de tu equipo de desarrollo antes de la gran puesta en marcha.
El rango de migraciones de datos es amplio, pero el núcleo es siempre el mismo; Mover datos de un sistema a otro. En muchos casos, el proceso se complica por el hecho de que el sistema existente debe ejecutarse hasta el último minuto antes de cambiar a las nuevas herramientas. Los datos de origen a menudo están contaminados por inconsistencias o incluso pueden contener información falsa, por lo que hacer una limpieza o depuración de datos podría ser algo necesario antes de la migración.
Las migraciones no son una ciencia exacta, pero en general podrías considerar que hay dos enfoques; Un big bang y migraciones graduales. Las migraciones big bang adoptan el enfoque de ejecutar toda la migración en un solo momento. Las migraciones graduales, a veces llamadas migraciones lentas, adoptan un enfoque gradual: importan datos continuamente del sistema en vivo al sistema que se está desarrollando.
Ambos métodos pueden conducir a una transición exitosa a un nuevo sistema de producción, pero podría decirse que el método incremental conlleva menos riesgo cuando llega a la línea de meta. Las migraciones big bang se pueden simular de antemano con instantáneas de datos, pero a menudo no es factible ejecutarlas con frecuencia, lo que hace que el ciclo de retroalimentación entre la ejecución y la verificación sea más largo. Con importaciones graduales, puedes obtener puntos de datos individuales de los sistemas de producción a un ritmo más rápido, lo que aumenta la agilidad de todo el proceso.
Ningún dato esta aislado
Un sistema es, por definición, un grupo de elementos que interactúan regularmente o son interdependientes y forman un todo unificado. Cualquier dato con el que esté importando eventualmente será consumido por otros sistemas. Por ejemplo, una plataforma de experiencia digital es un sistema que integra funciones como el almacenamiento de datos en una base de datos y un backend de almacenamiento de archivos (ambos sistemas complejos en sí mismos) y una interfaz de gestión.
Muchas cosas pueden salir mal aquí. Supongamos que estás importando contenido generado por el usuario desde un sitio de comercio electrónico. Alguien dejó un comentario sobre un producto con mil emojis de tabletas de chocolate (🍫🍫🍫🍫…) que funciona bien en el sistema fuente. Pero tal vez en algún momento hubo algunas soluciones y las tablas de chocolate no son realmente tabletas de chocolate porque el sistema anterior no funciona con el juego de caracteres UTF-8. Entonces, en lugar de 🍫, se almacenan como marcadores de posición como :candybar: en los datos de origen.
No hay problema. Nuestro proceso de importación puede manejar esto, al convertirlos de marcadores de posición a tabletas de chocolate reales. El campo de contenido ahora se ve como debería, pero espera un minuto... ¿por qué no aparece la imagen del avatar del usuario? Ah, decidimos almacenar el archivo en función del nombre de usuario y el almacenamiento de archivos que tenemos no permite almacenar un archivo como 氷の男.png. Fácil, simplemente ejecútalo a través de una función hash y guárdalo como f07db9de.png.
¡Perfecto! El campo de comentarios y la imagen se muestran tal como lo esperarías en la oficina administrativa. Pero, ¿eh? ¿Ahora recibimos informes del equipo de pruebas de aceptación de usuarios de que están viendo cajas en lugar de tabletas de chocolate? Ahh, no es gran cosa, es solo que la fuente que hemos seleccionado no admite emojis y aparecen como caracteres desconocidos. Nuestro equipo de diseño y los desarrolladores front-end pueden cambiar a una variante que los admita.
Y ahora, finalmente, todo lo que podría salir mal (y salió mal) en nuestro caso ficticio se ha solucionado y estamos listos para comenzar. La diferencia con respecto al proceso (big bang versus gradual) es que todos estos problemas podrían habernos golpeado al mismo tiempo con otros quince problemas similares. Habría sido una cantidad abrumadora de trabajo arreglar "una cosa tan simple como esa". Con las importaciones incrementales diarias, es más probable que esto haya surgido antes y con tiempo suficiente para manejar el problema antes del lanzamiento de producción.
Implementación de migraciones lentas con Ibexa DXP
Ibexa DXP expone una amplia gama de API abiertas a los desarrolladores para implementar tareas de migración de datos. Con ellos, tienes la libertad de trabajar volcando grandes blobs de datos o manejando importaciones mediante procesos incrementales granulares. Antes de comenzar a evaluar cuál de estos es el mejor para tu caso de uso, debes analizar cuáles son las opciones disponibles como datos de origen. ¿Proporcionan toda la información necesaria? ¿Deberías importar desde una sola fuente o desde varios sistemas? ¿Necesitas recursos para desarrollar algo nuevo para el sistema de origen?
Algunos métodos comunes para exponer datos de origen para procesos de migración son:
- API públicas estándar (REST, SOAP, etc.)
- Puntos finales personalizados creados específicamente (exposición de datos usando un formato JSON personalizado, etc.)
- Formatos comunes de fuentes de contenido (ATOM, RSS, etc.)
- Un conjunto de archivos almacenados en el disco (XML, CSV, etc.).
Una vez que hayas resuelto sus fuentes de datos, puedes considerar cuál es la forma óptima de implementar el sistema de destino. Los métodos disponibles para ti a través de Ibexa DXP son:
- Archivos de migración
- API HTTP públicas
- API de PHP del lado del servidor.
El paquete de migraciones introducido en Ibexa DXP 3.3 permite mover estructuras de repositorio entre entornos usando un formato YAML estándar. Está diseñado para usarse en cambios de estructura de datos movidos (agregar campos a elementos de contenido, crear objetos de contenedor raíz, etc.), pero también se puede usar para importar contenido. Este método puede ser limitante para los casos en los que se necesita una lógica compleja, pero puede ser útil para una cantidad modesta de contenidos sencillos para admitir la creación de prototipos de modelos de datos.
La familia de productos Ibexa DXP admite API comunes basadas en HTTP listas para ser usadas. Con nuestras API RESTful y GraphQL, los desarrolladores pueden obtener acceso de lectura y escritura a los repositorios de datos en las instancias de Ibexa DXP. Con estos, los desarrolladores pueden interactuar con el sistema en sus lenguajes de programación y secuencias de comandos específicos, como JavaScript y Python. Estas API brindan una flexibilidad total, pero el rendimiento puede ser un factor limitante si mueve gigabytes de archivos binarios de un lado a otro, por ejemplo.
La API pública de PHP brinda a los desarrolladores acceso directo a nuestras API del lado del servidor. Estas son las mismas API que impulsan la interfaz de administración y todas las demás funciones que utiliza nuestro producto principal. Es común usar la capacidad del marco de trabajo de la consola Symfony para exponer estas API para importar y otros fines de secuencias de comandos. Las capacidades de la API de PHP proporcionan el acceso de más bajo nivel a nuestras API seguras y, en general, es el camino a seguir para las integraciones más complejas que requieren ejecuciones de múltiples secuencias para formar relaciones entre los objetos migrados.
Conclusión
Los procesos de migración en los que ejecuta el sistema antiguo y los sistemas nuevos en paralelo mucho antes de que entren en funcionamiento tienen muchas ventajas. Con las importaciones de datos incrementales, puedes encontrar problemas más rápido y asegurarte de que todas las piezas de la integración encajen perfectamente. Ejecutar migraciones continuamente desde el principio hasta el último minuto te brinda confianza para la implementación final.
Además, esto podría hacerte repensar partes de su proyecto. Algunas tareas etiquetadas como importaciones pueden volverse irrelevantes, por ejemplo, cuando estás integrando varios sistemas, la importación inicial también puede usarse como el método de integración principal en el futuro. Supongamos que deseas exponer los datos de ventas de productos a los operadores de tu plataforma de comercio electrónico. Estos datos se almacenan en la solución de comercio en línea heredada, pero los datos de origen son en realidad su ERP. Si su plataforma ERP continúa funcionando como lo ha hecho en el pasado, podría tener sentido importar datos directamente desde allí y dejar la plataforma de comercio electrónico heredada fuera de ella por completo.
Para los desarrolladores, Ibexa DXP ofrece flexibilidad y diferentes métodos para realizar migraciones. Con nuestra estructura modular de productos, sus desarrolladores también pueden seguir usando las mismas API familiares a medida que su organización pasa de las ventas digitales con Ibexa Experience al comercio transaccional completo con Ibexa Commerce.