Cómo no romper los límites, cómo crear una buena arquitectura y cómo hacer un buen mantenimiento

Moviendo ficheros de un blob a otro a la velocidad de la luz

Moviendo ficheros de un blob a otro a la velocidad de la luzMuchas veces en un entorno cloud, y en concreto en Azure, nos encontramos en la necesidad de mover todos los ficheros de un Blob Storage a otro.

El Pasado

Hasta hace poco teníamos tres opciones para hacerlo:

  • Por AzCopy.
  • Por la aplicación de Microsoft Azure Sotrage.
  • O bien mediante código.

Al final la opción escogida normalmente es por AzCopy ya que las otras dos opciones tienen muchos inconvenientes y/o incomodidades, por lo que nos encontramos con el problema de que no podemos escribir un código que nos mueva los ficheros de un Blob a otro , que sea óptimo, rápido y aproveche toda la computación del hardware.

El Presente

Hace poquitos meses ya podemos escribir código que nos permite realizar estas operaciones.  Azure Storage Data Movement Library (https://docs.microsoft.com/en-us/azure/storage/common/storage-use-data-movement-library) es una librería de Microsoft que se basa en la tecnología de AzCopy que nos permite realizar estas operaciones.

¿Qué podemos hacer con esta librería?

  • Definir el número operaciones en paralelo que deseamos utilizar para subir, actualizar o bajar ficheros.
  • El tamaño de bloque a utilizar. Cuando interactuamos con ficheros las operaciones nunca se hacen de golpe, sino que se hace mediante trocitos, denominados chunks, con el fin de optimizar las conexiones.
  • Saber el progreso de transferencia.
  • Subir ficheros y directorios a un Blob Storage.
  • Copiar ficheros de una URL a un Blobl Storage.
  • O como ya hemos comentado copiar ficheros de un Blob Storage a otro.

Perfecto, ahora ya tenemos una librería que nos permite realizar código para el objetivo deseado y de forma óptima y rápida, ahora solos nos queda tener suficientes máquinas para llevar a cabo la operación de la forma más rápida.

Pues bien, lo tenemos a nuestro alcance, simplemente hemos de utilizar Durable Azure Functions con Azure Storage Data Movement para paralelizar estas operaciones.

Demo Time

Vamos a ver cómo hacerlo.

Crearemos una Durable Azure Function que lo que hará es ir al Blob Storage de origen, obtener el nombre de todos los ficheros a mover, y después llamar a tantas funciones como archivos haya que lo que hagan es mover el fichero de un Blob a otro.

La Azure Durable Functions finalizará cuando todas las funciones de subida de ficheros hayan acabado.

El código de la Azure Durable Function sería:

Donde la función GetBloBNames devuelve el listado de ficheros a mover.

Después tenemos la función CopyBlob que tiene la forma siguiente:

Obtenemos la URI del Blob de origen, el de destino y mediante TransferManager.CopyBlob que es un método de la librería Azure Storage Data Movement lo llevamos de una al otro.

Show me the result

Vale, de acuerdo ¿queréis pruebas de que esto es la bomba? Ahí van :

Blob de origen –> West Europe – 198 ficheros 11,3 Gb en total

Blob de destino –> North Europe.

Imagen 1: La prueba que los Blobs están en regiones diferentes

Blob de origen:

Imagen 2: Número de ficheros en el Blob de origen

Blob de destino después de lanzar el proceso:

Imagen 3: Número de ficheros en el Blob de destino después del proceso.

Tiempo del proceso:

Imagen 4: Traza de inicio del proceso.

Imagen 5: Traza de fin del proceso.

Como se puede observar hemos transferido 198 ficheros de 11,3 Gb de un Blob a otro de diferentes regiones en 7 minutos aproximadamente.

El código completo lo podéis descargar en:

https://github.com/bermejoblasco/DataMovement-DurableFunctions

Happy coding!

mm

Sobre Robert Bermejo

Robert Bermejo lleva más de 10 años en el mundo Microsoft, principalmente en entornos web y desde hace 4 años en Azure, siendo MVP en esta categoría. Organizador de la comunidad de Azure en Barcelona (@CAT_zure) donde mensualmente organiza meetups sobre esta temática, también escribe en la revista CompartiMOSS así como se le puede ver en los diversos eventos nacionales hablando sobre Azure. Actualmente es Team Leader en ENCAMINA y se puede decir que vive en la nube ;)
Esta entrada ha sido publicada en Azure. Enlace permanente.
  • Lesane Crooks

    Hola Robert. Cual de las 3 Durables Functions utilizas en este caso? Gracias por el artículo, muy útil.

    • ENCAMINA

      Hola Lesane, utilizo el patrón Fan-out/fan-it.

      Muchas Gracias!

ENCAMINA, piensa en colores