Hasta hace poco teníamos tres opciones para hacerlo:
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.
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?
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.
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.
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!
Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continuas navegando, estás dando tu consentimiento para aceptar las cookies y también nuestra política de cookies (esperemos que no te empaches con tanta cookie 😊)