Gestire l’archiviazione dei dati basata su cloud con Rclone |  di Chaim Rand |  Novembre 2023

 | Intelligenza-Artificiale

Come ottimizzare il trasferimento dei dati tra più sistemi di storage di oggetti

fotografato da Tom Podmore SU Unsplash

Poiché le aziende diventano sempre più dipendenti da soluzioni di storage basate su cloud, è fondamentale che dispongano degli strumenti e delle tecniche adeguate per una gestione efficace delle proprie attività. grandi dati. Nei post precedenti (es. Qui E Qui) abbiamo esplorato diversi metodi per recuperare dati dallo spazio di archiviazione nel cloud e ne abbiamo dimostrato l’efficacia in diversi tipi di attività. Abbiamo scoperto che lo strumento più ottimale può variare in base all’attività specifica da svolgere (ad esempio, formato file, dimensione dei file di dati, modello di accesso ai dati) e alle metriche che desideriamo ottimizzare (ad esempio, latenza, velocità o costo). In questo post esploriamo un altro strumento popolare per la gestione dello storage basato su cloud, a volte riferito a COME “il coltellino svizzero del cloud storage” – IL rclone utilità della riga di comando. Supportare più di 70 fornitori di servizi di stoccaggiorclone supporta funzionalità simili alle applicazioni di gestione dello storage specifiche del fornitore come AWS CLI (per Amazon S3) e gsutil (per Spazio di archiviazione Google). Ma funziona abbastanza bene da costituire una valida alternativa? Ci sono situazioni in cui rclone sarebbe lo strumento preferito? Nelle sezioni seguenti dimostreremo l’utilizzo di rclone, ne valuteremo le prestazioni e evidenziarne il valore in un caso d’uso particolare: trasferire dati tra diversi sistemi di object storage.

Disclaimer

Questo incarico non è in alcun modo destinato a sostituire il funzionario documentazione di rclone. Né vuole essere un’approvazione dell’uso di rclone o di qualsiasi altro strumento che dovremmo menzionare. La scelta migliore per la gestione dei dati basata sul cloud dipenderà in gran parte dai dettagli del progetto e dovrebbe essere effettuata dopo test approfonditi e specifici per il caso d’uso. Assicurati di rivalutare le dichiarazioni che facciamo rispetto agli strumenti più aggiornati disponibili nel momento in cui stai leggendo questo articolo.

Utilizza la seguente riga di comando sincronizzazione rclone per sincronizzare il contenuto di un percorso di archiviazione di oggetti basato su cloud con una directory locale. Questo esempio dimostra l’uso di Amazon S3 servizio di archiviazione ma avrebbe potuto facilmente utilizzare un diverso servizio di archiviazione cloud.

rclone sync -P \
--transfers 4 \
--multi-thread-streams 4 \
S3store:my-bucket/my_files ./my_files

Il comando rclone ne ha dozzine bandiere per programmarne il comportamento. IL -P flag mostra l’avanzamento del trasferimento dei dati, inclusa la velocità di trasferimento e il tempo complessivo. Nel comando precedente abbiamo incluso due (dei tanti) controlli che possono influire sulle prestazioni di runtime di rclone: ​​The trasferimenti flag determina il numero massimo di file da scaricare contemporaneamente e flussi multi-thread determina il numero massimo di thread da utilizzare per trasferire un singolo file. Qui abbiamo lasciato entrambi ai valori predefiniti (4).

La funzionalità di Rclone si basa sulla definizione appropriata di file di configurazione rclone. Di seguito mostriamo la definizione di telecomando S3negozio posizione di archiviazione degli oggetti utilizzata nella riga di comando precedente.

(S3store)
type = s3
provider = AWS
access_key_id = <id>
secret_access_key = <key>
region = us-east-1

Ora che abbiamo visto rclone in azione, la domanda che sorge spontanea è se fornisce qualche valore rispetto agli altri strumenti di gestione dell’archiviazione cloud disponibili, come il popolare AWS CLI. Nelle prossime due sezioni valuteremo le prestazioni di rclone rispetto ad alcune delle sue alternative in due scenari che abbiamo esplorato in dettaglio nei nostri post precedenti: 1) download di un file da 2 GB e 2) download di centinaia di file da 1 MB.

Caso d’uso 1: download di un file di grandi dimensioni

La riga di comando seguente utilizza il file AWS CLI per scaricare un file da 2 GB da Amazon S3. Questo è solo uno dei tanti metodi che abbiamo valutato un post precedente. Usiamo Linux tempo comando per misurare la prestazione.

time aws s3 cp s3://my-bucket/2GB.bin .

Il tempo di download riportato è stato di circa 26 secondi (vale a dire, ~79 MB/s). Tieni presente che questo valore è stato calcolato sul nostro PC locale e può variare notevolmente da un ambiente di runtime all’altro. L’equivalente copia rclone il comando appare di seguito:

rclone sync -P S3store:my-bucket/2GB.bin .

Nella nostra configurazione, abbiamo riscontrato che il tempo di download di rclone è più di due volte più lento rispetto all’AWS CLI standard. È molto probabile che ciò possa essere migliorato in modo significativo attraverso un’appropriata messa a punto dei flag di controllo rclone.

Caso d’uso 2: download di un gran numero di file di piccole dimensioni

In questo caso d’uso valutiamo le prestazioni di runtime del download 800 file relativamente piccoli di 1 MB ciascuno. In un post precedente del blog abbiamo discusso questo caso d’uso nel contesto dello streaming di campioni di dati in un carico di lavoro di formazione sul deep learning e ne abbiamo dimostrato le prestazioni superiori s5cmd bestia modalità. In bestia creiamo un file con un elenco di operazioni sul file oggetto che s5cmd esegue utilizzando più lavoratori paralleli (256 per impostazione predefinita). L’opzione della modalità bestia s5cmd è illustrata di seguito:

time s5cmd --run cmds.txt

IL cmds.txt il file contiene un elenco di 800 righe del modulo:

cp s3://my-bucket/small_files/<i>.jpg <local_path>/<i>.jpg

Il comando s5cmd ha richiesto un tempo medio di 9,3 secondi (media su dieci prove).

Rclone supporta una funzionalità simile alla modalità bestia di s5cmd con il file file da opzione della riga di comando. Di seguito eseguiamo rclone copy sul nostro 800 file con il trasferimenti valore impostato su 256 per corrispondere a quello predefinito concorrenza impostazioni di s5cmd.

rclone -P --transfers 256 --files-from files.txt S3store:my-bucket /my-local

IL file.txt il file contiene 800 righe del modulo:

small_files/<i>.jpg

La copia rclone del nostro 800 i file hanno impiegato in media 8,5 secondi, leggermente meno di s5cmd (media su dieci prove).

Riconosciamo che i risultati dimostrati finora potrebbero non essere sufficienti per convincerti a preferire rclone rispetto agli strumenti esistenti. Nella prossima sezione descriveremo un caso d’uso che evidenzia uno dei potenziali vantaggi di rclone.

Al giorno d’oggi non è raro che i team di sviluppo mantengano i propri dati in più di un archivio oggetti. La motivazione potrebbe essere la necessità di proteggersi dalla possibilità di un guasto dello storage o la decisione di utilizzare offerte di elaborazione dati di più fornitori di servizi cloud. Ad esempio, la tua soluzione per lo sviluppo dell’intelligenza artificiale potrebbe basarsi sull’addestramento dei modelli in AWS utilizzando i dati in Amazon S3 e sull’esecuzione dell’analisi dei dati in Microsoft Azure utilizzando gli stessi dati archiviati in Archiviazione di Azure. Inoltre, potresti voler conservare una copia dei tuoi dati in un’infrastruttura di archiviazione locale come FlashBlade, NubianoO VASTO. Queste circostanze richiedono la capacità di trasferire e sincronizzare i dati tra più archivi oggetti in modo sicuro, affidabile e tempestivo.

Alcuni fornitori di servizi cloud offrono servizi dedicati a tali scopi. Tuttavia, questi non sempre soddisfano le esigenze precise del tuo progetto o potrebbero non consentirti il ​​livello di controllo che desideri. Per esempio, Trasferimento di spazio di archiviazione di Google eccelle nella migrazione rapida di tutti i dati all’interno di una cartella di archiviazione specificata, ma non supporta (al momento della stesura di questo articolo) il trasferimento di un sottoinsieme specifico di file al suo interno.

Un’altra opzione che potremmo prendere in considerazione sarebbe quella di applicare la nostra gestione dei dati esistente a questo scopo. Il problema è che strumenti come AWS CLI e s5cmd non supportano (al momento della stesura di questo articolo) la specifica di diversi accedere alle impostazioni E credenziali di sicurezza per i sistemi di storage di origine e di destinazione. Pertanto, la migrazione dei dati tra posizioni di archiviazione richiede il loro trasferimento in una posizione intermedia (temporanea). Nel comando seguente combiniamo l’uso di s5cmd e AWS CLI per copiare un file da Amazon S3 a Google Storage tramite la memoria di sistema e utilizzando il piping Linux:

s5cmd cat s3://my-bucket/file \
| aws s3 cp --endpoint-url https://storage.googleapis.com
--profile gcp - s3://gs-bucket/file

Anche se questo è un modo legittimo, anche se goffo, di trasferire a separare file, in pratica, potremmo aver bisogno della capacità di trasferire molti milioni di file. Per supportare ciò, dovremmo aggiungere un ulteriore livello per la generazione e la gestione di più lavoratori/processori paralleli. Le cose potrebbero mettersi male abbastanza rapidamente.

Trasferimento dati con Rclone

Contrariamente a strumenti come AWS CLI e s5cmd, rclone ci consente di specificare diverse impostazioni di accesso per l’origine e la destinazione. Nel seguente file di configurazione rclone aggiungiamo le impostazioni per l’accesso 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

Il trasferimento di un singolo file tra sistemi di storage ha lo stesso formato della copiatura in una directory locale:

rclone copy -P S3store:my-bucket/file GSstore:gs-bucket/file

Tuttavia, il vero potere di rclone deriva dalla combinazione di questa funzionalità con file da opzione sopra descritta. Invece di dover orchestrare una soluzione personalizzata per parallelizzare la migrazione dei dati, possiamo trasferire un lungo elenco di file utilizzando un unico comando:

rclone copy -P --transfers 256 --files-from files.txt \
S3store:my-bucket/file GSstore:gs-bucket/file

In pratica, possiamo accelerare ulteriormente la migrazione dei dati analizzando l’elenco dei file oggetto in elenchi più piccoli (ad esempio, con 10.000 file ciascuno) ed eseguendo ciascun elenco su una risorsa di calcolo separata. Anche se l’impatto preciso di questo tipo di soluzione varierà da progetto a progetto, può fornire un notevole impulso alla velocità e all’efficienza del tuo sviluppo.

In questo post abbiamo esplorato la gestione dello storage basata su cloud utilizzando rclone e dimostrato la sua applicazione alla sfida di mantenere e sincronizzare i dati su più sistemi di storage. Esistono senza dubbio molte soluzioni alternative per il trasferimento dei dati. Ma non c’è dubbio sulla comodità e l’eleganza del metodo basato su rclone.

Questo è solo uno dei tanti post che abbiamo scritto sul tema della massimizzazione dell’efficienza delle soluzioni di storage basate su cloud. Assicurati di controllarne alcuni gli altri nostri post su questo importante argomento.

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *