A medida que las empresas se vuelven cada vez más dependientes de las soluciones de almacenamiento basadas en la nube, es imperativo que cuenten con las herramientas y técnicas adecuadas para una gestión eficaz de sus grandes datos. En publicaciones anteriores (por ejemplo, aquí y aquí) hemos explorado varios métodos diferentes para recuperar datos del almacenamiento en la nube y hemos demostrado su eficacia en diferentes tipos de tareas. Descubrimos que la herramienta más óptima puede variar según la tarea específica en cuestión (p. ej., formato de archivo, tamaño de los archivos de datos, patrón de acceso a los datos) y las métricas que deseamos optimizar (p. ej., latencia, velocidad o costo). En esta publicación, exploramos otra herramienta popular para la administración del almacenamiento basado en la nube, a veces referido a como “la navaja suiza del almacenamiento en la nube” – el clonar utilidad de línea de comandos. Apoyando a más de 70 proveedores de servicios de almacenamientorclone admite una funcionalidad similar a las aplicaciones de administración de almacenamiento específicas del proveedor, como AWS CLI (para Amazon S3) y gsutil (para almacenamiento de Google). ¿Pero funciona lo suficientemente bien como para constituir una alternativa viable? ¿Existen situaciones en las que rclone sería la herramienta elegida? En las siguientes secciones demostraremos el uso de rclone, evaluaremos su rendimiento y resaltar su valor en un caso de uso particular: transferir datos a través de diferentes sistemas de almacenamiento de objetos.
Descargos de responsabilidad
Esta publicación no pretende, de ninguna manera, reemplazar la publicación oficial. documentación de clonación. Tampoco pretende ser un respaldo al uso de rclone o cualquiera de las otras herramientas que debemos mencionar. La mejor elección para su gestión de datos basada en la nube dependerá en gran medida de los detalles de su proyecto y debe tomarse después de pruebas exhaustivas y específicas de cada caso de uso. Asegúrese de reevaluar las declaraciones que hacemos con las herramientas más actualizadas disponibles en el momento de leer esto.
La siguiente línea de comando utiliza sincronización de clonación para sincronizar el contenido de una ruta de almacenamiento de objetos basada en la nube con un directorio local. Este ejemplo demuestra el uso de la amazon s3 servicio de almacenamiento en la nube, pero también podría haber utilizado un servicio de almacenamiento en la nube diferente.
rclone sync -P \
--transfers 4 \
--multi-thread-streams 4 \
S3store:my-bucket/my_files ./my_files
El comando rclone tiene docenas de banderas para programar su comportamiento. El -PAG flag genera el progreso de la transferencia de datos, incluida la velocidad de transferencia y el tiempo total. En el comando anterior incluimos dos (de los muchos) controles que pueden afectar el rendimiento del tiempo de ejecución de rclone: transferencias El indicador determina el número máximo de archivos que se descargarán simultáneamente y flujos de subprocesos múltiples determina el número máximo de subprocesos que se utilizarán para transferir un solo archivo. Aquí hemos dejado ambos en sus valores predeterminados (4).
La funcionalidad de Rclone se basa en la definición adecuada del archivo de configuración rclone. A continuación demostramos la definición de control remoto. Tienda S3 ubicación de almacenamiento de objetos utilizada en la línea de comando anterior.
[S3store]
type = s3
provider = AWS
access_key_id = <id>
secret_access_key = <key>
region = us-east-1
Ahora que hemos visto rclone en acción, la pregunta que surge es si proporciona algún valor sobre otras herramientas de administración de almacenamiento en la nube que existen, como la popular CLI de AWS. En las siguientes dos secciones evaluaremos el rendimiento de rclone en comparación con algunas de sus alternativas en dos escenarios que hemos explorado en detalle en nuestras publicaciones anteriores: 1) descargar un archivo de 2 GB y 2) descargar cientos de archivos de 1 MB.
Caso de uso 1: descargar un archivo grande
La siguiente línea de comando utiliza el CLI de AWS para descargar un archivo de 2 GB desde Amazon S3. Este es sólo uno de los muchos métodos que evaluamos en una publicación anterior. Usamos Linux tiempo comando para medir el desempeño.
time aws s3 cp s3://my-bucket/2GB.bin .
El tiempo de descarga informado ascendió a aproximadamente 26 segundos (es decir, ~79 MB/s). Tenga en cuenta que este valor se calculó en nuestra propia PC local y puede variar mucho de un entorno de ejecución a otro. El equivalente copia clonada El comando aparece a continuación:
rclone sync -P S3store:my-bucket/2GB.bin .
En nuestra configuración, encontramos que el tiempo de descarga de rclone es más de dos veces más lento que el de la CLI estándar de AWS. Es muy probable que esto pueda mejorarse significativamente mediante el ajuste adecuado de los indicadores de control de rclone.
Caso de uso 2: descargar una gran cantidad de archivos pequeños
En este caso de uso evaluamos el rendimiento en tiempo de ejecución de la descarga. 800 archivos relativamente pequeños de 1 MB cada uno. en un entrada anterior del blog Discutimos este caso de uso en el contexto de la transmisión de muestras de datos a una carga de trabajo de capacitación de aprendizaje profundo y demostramos el rendimiento superior de s5cmd bestia modo. En bestia modo creamos un archivo con una lista de operaciones de archivo objeto que s5cmd realiza al usar múltiples trabajadores paralelos (256 por defecto). La opción del modo bestia s5cmd se muestra a continuación:
time s5cmd --run cmds.txt
El cmds.txt El archivo contiene una lista de 800 líneas de la forma:
cp s3://my-bucket/small_files/<i>.jpg <local_path>/<i>.jpg
El comando s5cmd tomó un tiempo promedio de 9,3 segundos (promedio de diez pruebas).
Rclone admite una funcionalidad similar al modo bestia de s5cmd con el archivos de opción de línea de comando. A continuación ejecutamos rclone copy en nuestro 800 archivos con el transferencias valor establecido en 256 para que coincida con el valor predeterminado concurrencia configuración de s5cmd.
rclone -P --transfers 256 --files-from files.txt S3store:my-bucket /my-local
El archivos.txt el archivo contiene 800 líneas de la forma:
small_files/<i>.jpg
La copia clonada de nuestro 800 Los archivos tardaron un promedio de 8,5 segundos, un poco menos que s5cmd (promediado en diez pruebas).
Reconocemos que los resultados demostrados hasta ahora pueden no ser suficientes para convencerlo de que prefiera rclone a sus herramientas existentes. En la siguiente sección describiremos un caso de uso que destaca una de las ventajas potenciales de rclone.
Hoy en día no es raro que los equipos de desarrollo mantengan sus datos en más de un almacén de objetos. La motivación detrás de esto podría ser la necesidad de protegerse contra la posibilidad de una falla en el almacenamiento o la decisión de utilizar ofertas de procesamiento de datos de múltiples proveedores de servicios en la nube. Por ejemplo, su solución para el desarrollo de IA podría depender de entrenar sus modelos en AWS usando datos en Amazon S3 y ejecutar análisis de datos en Microsoft Azure usando los mismos datos almacenados en Azure Storage. Además, es posible que desee mantener una copia de sus datos en una infraestructura de almacenamiento local como FlashBlade, cloudianoo VASTO. Estas circunstancias requieren la capacidad de transferir y sincronizar sus datos entre múltiples almacenes de objetos de manera segura, confiable y oportuna.
Algunos proveedores de servicios en la nube ofrecen servicios dedicados para tales fines. Sin embargo, estos no siempre abordan las necesidades precisas de su proyecto o pueden no permitirle el nivel de control que desea. Por ejemplo, Transferencia de almacenamiento de Google sobresale en la rápida migración de todos los datos dentro de una carpeta de almacenamiento específica, pero no admite (al momento de escribir este artículo) la transferencia de un subconjunto específico de archivos desde allí.
Otra opción que podríamos considerar sería aplicar nuestra gestión de datos existente para este propósito. El problema con esto es que herramientas como AWS CLI y s5cmd no admiten (en el momento de escribir este artículo) la especificación de diferentes acceder a la configuración y credenciales-de-seguridad para los sistemas de almacenamiento de origen y de destino. Por lo tanto, migrar datos entre ubicaciones de almacenamiento requiere transferirlos a una ubicación intermedia (temporal). En el siguiente comando combinamos el uso de s5cmd y AWS CLI para copiar un archivo de Amazon S3 a Google Storage a través de la memoria del sistema y usando la tubería de Linux:
s5cmd cat s3://my-bucket/file \
| aws s3 cp --endpoint-url https://storage.googleapis.com
--profile gcp - s3://gs-bucket/file
Si bien ésta es una forma legítima, aunque torpe, de transferir una soltero archivo, en la práctica, es posible que necesitemos la capacidad de transferir muchos millones de archivos. Para respaldar esto, necesitaríamos agregar una capa adicional para generar y administrar múltiples trabajadores/procesadores paralelos. Las cosas podrían ponerse feas con bastante rapidez.
Transferencia de datos con Rclone
A diferencia de herramientas como AWS CLI y s5cmd, rclone nos permite especificar diferentes configuraciones de acceso para el origen y el destino. En el siguiente archivo de configuración de rclone agregamos configuraciones para el acceso a Google Cloud Storage:
[S3store]
type = s3
provider = AWS
access_key_id = <id>
secret_access_key = <key>[GSstore]
type = google cloud storage
provider = GCS
access_key_id = <id>
secret_access_key = <key>
endpoint = https://storage.googleapis.com
Transferir un único archivo entre sistemas de almacenamiento tiene el mismo formato que copiarlo a un directorio local:
rclone copy -P S3store:my-bucket/file GSstore:gs-bucket/file
Sin embargo, el verdadero poder de rclone proviene de combinar esta característica con la archivos de opción descrita anteriormente. En lugar de tener que organizar una solución personalizada para paralelizar la migración de datos, podemos transferir una larga lista de archivos usando un solo comando:
rclone copy -P --transfers 256 --files-from files.txt \
S3store:my-bucket/file GSstore:gs-bucket/file
En la práctica, podemos acelerar aún más la migración de datos analizando la lista de archivos objeto en listas más pequeñas (por ejemplo, con 10 000 archivos cada una) y ejecutando cada lista en un recurso informático independiente. Si bien el impacto preciso de este tipo de solución variará de un proyecto a otro, puede proporcionar un impulso significativo a la velocidad y eficiencia de su desarrollo.
En esta publicación, exploramos la administración de almacenamiento basada en la nube utilizando rclone y demostramos su aplicación al desafío de mantener y sincronizar datos en múltiples sistemas de almacenamiento. Sin duda existen muchas soluciones alternativas para la transferencia de datos. Pero no hay duda de la conveniencia y elegancia del método basado en rclone.
Esta es solo una de las muchas publicaciones que hemos escrito sobre el tema de maximizar la eficiencia de las soluciones de almacenamiento basadas en la nube. Asegúrese de revisar algunos de nuestras otras publicaciones sobre este importante tema.