Perché Dropbox può essere super veloce rispetto a FTP?


36

Vorrei sapere perché tecnicamente Dropbox è molto più veloce di FTP? Che tipo di tecnologia utilizza?

Non sto parlando di file diff, sto parlando di trasferire nuovi file in entrambi i casi, Dropbox è molto più veloce.

Voglio dire, molto più veloce, forse 10 volte più veloce di FTP per i file che ho caricato. Sperimenterò di nuovo per file più grandi in seguito.


2
Quali dimensioni, tipo e numero di file hai caricato? Quanto tempo ha impiegato il caricamento di ciascuno di essi? Dove stavi caricando i file via FTP? Dropbox non è magico, la spiegazione più semplice è che anche il server FTP che stai caricando ha una larghezza di banda molto inferiore rispetto ad Amazon.
user23307

2
se ce l'hanno già, non dovrebbe ricaricarsi; p
Journeyman Geek

4
Dici "nuovi file", ma a meno che questi file non siano dati casuali e aggiornati, probabilmente stai vedendo il vantaggio della sincronizzazione a livello di blocco (come in rsync e altri strumenti).
Chris Johnsen,

1
Questo è più di un confronto di hosting, so che i server FTP sono più veloci di Dropbox e utilizzo anche connessioni multiple con Filezilla, quindi le affermazioni elencate in queste risposte non valgono.
Tamara Wijsman,

Dropbox utilizza la deduplicazione per risparmiare spazio di archiviazione dei file comuni, quindi non è necessario caricarli se li ha già.
paradroid

Risposte:


31

Potrebbero esserci diverse ragioni per questo.
Il protocollo FTP è tutt'altro che efficiente.

  1. Un trasferimento FTP richiede almeno due connessioni (una per il controllo e una per i dati) in cui DropBox potrebbe utilizzare solo una singola connessione HTTP. Inoltre, la connessione dati per una sessione FTP può essere aperta dal server al tuo client e, se sei NATed, questo potrebbe non riuscire, quindi il tuo client FTP potrebbe provare a connettersi in quel modo, fallendo, quindi provando il contrario.

  2. C'è un sacco di cose da fare su una connessione FTP. Per inviare un file, il client deve inviare almeno due comandi (uno per aprire la connessione dati e uno per avviare l'invio) e ogni volta che deve attendere che il server risponda, aggiungendo ulteriore latenza. Oltre a questi due round-trip per file, esistono diversi round-trip di risposta al comando per la connessione iniziale: uno per inviare il nome utente, uno per la password e almeno uno per impostare i parametri di trasferimento (per assicurarsi che il server sia in attesa di dati binari, non ASCII). Il client può anche emettere un paio di comandi extra per ottenere informazioni dal server su se stesso. È probabile che Dropbox stia utilizzando solo una richiesta HTTP o al massimo due (una per l'autenticazione, una per inviare i dati).

  3. Inoltre, a seconda del client che si sta utilizzando per i trasferimenti FTP (che non si specifica, sarebbe una buona idea modificare la domanda per includere tali informazioni), potrebbe cadere la connessione dopo ogni operazione di invio e riconnettersi successivamente tempo. Non è improbabile che DropBox mantenga una connessione aperta per un po 'ai fini del polling lungo, per reagire appena possibile ai nuovi dati disponibili che questo client dovrebbe scaricare, quindi mentre dovrà far apparire un nuovo Connessione HTTP per inviare un file che non dovrà essere autenticato nuovamente.

  4. Non è improbabile che il client DropBox comprima i dati prima di inviarli (per migliorare la velocità e risparmiare larghezza di banda) dove il tuo client FTP non sarà. Quindi, anche per file più grandi (a meno che non siano pre-compressi o crittografati) DropBox e utilità come questa potrebbero essere più veloci di un trasferimento FTP di base con un certo margine.

Per i file di grandi dimensioni, i primi tre punti sopra riportati diventeranno insignificanti rispetto al tempo impiegato per trasferire effettivamente i dati, ma il punto 4 potrebbe essere ancora abbastanza importante. Per file di piccole dimensioni, tutto il tempo di installazione aggiuntivo aggiunto dal protocollo FTP può potenzialmente essere un paio di volte più lungo del tempo impiegato per inviare effettivamente i dati.


+1 per la risposta dettagliata. Anch'io mi ero chiesto come Dropbox fosse così veloce.
Grant Palin,

1
Ho letto da qualche parte che i dati di Dropbox sono crittografati prima del trasferimento, quindi avrebbe senso che siano anche (almeno un po ') compressi.
Decano piuttosto il

Un file crittografato non dovrebbe essere comprimibile - non trascino comunque i file crittografati durante il trasferimento
Martin Beckett

@mgb: hai ragione nel dire che le tecniche di compressione dei file non dovrebbero trovare abbastanza ridondanza nei dati crittografati per essere utili, quindi inizialmente l'invio di un file non comporterà alcun aiuto dalla compressione. Ma se dropbox ha già il file e lo hai appena aggiornato (e la chiave è sempre la stessa), è probabile che non sarà necessario trasferire l'intero file per aggiornare la copia remota. Sebbene i dati non possano essere compressi, la quantità che è necessario inviare per mantenerli aggiornati può essere comunque ridotta (considerevolmente per file di grandi dimensioni che vedono piccoli aggiornamenti).
David Spillett,

1
Sono abbastanza sicuro che usano HTTPS per il trasferimento (HTTP su SSL) piuttosto che per l'invio di dati in forma semplice. Non so quale (se presente) crittografia viene utilizzata per l'archiviazione effettiva, ma se i tuoi dati sono sensibili dovresti comunque crittografarli al tuo fianco, quindi solo tu hai una copia delle chiavi pertinenti.
David Spillett,

15

Come altri hanno già detto, Dropbox può saltare parti di file che non sono state modificate . Inoltre, Dropbox salterà il caricamento dei file se ne ha già una copia sul lato server (uno che tu o chiunque altro ha già caricato).

Quindi, se stai provando a caricare un file identico a un file che già Dropbox ha, il caricamento viene ignorato (e le altre macchine collegate possono iniziare a scaricarlo dai server Dropbox). Se stai caricando un file che è quasi identico a un altro, file già caricato (non è chiaro se il file già caricato deve essere "tuo" o potrebbe provenire da qualsiasi utente), invierà solo parti sufficienti del file per ricrearlo sul server quando combinato con il file che era già stato caricato.

FTP non può fare nulla di tutto ciò (è un protocollo semplice per inviare e ricevere flussi di dati senza riferimento ad altri dati disponibili sull'estremità remota). Strumenti come rsync e Unison possono "saltare blocchi che l'altra parte ha già", ma di solito si limitano a confrontare blocchi all'interno di file in un identico percorso nella gerarchia sincronizzata. Dropbox sembra estendere questa idea a raccolte di file (quindi se si "caricano" due file quasi identici, presumibilmente potrebbe organizzare di inviare solo uno più un "diff" sufficiente per ricreare l'altro).


11

Suppongo che intendi più velocemente in termini di trasferimento di file. Quando si salva un file nella cartella Dropbox, Dropbox invia solo il delta (o diff) dei dati al server di archiviazione remoto. FTP (molto probabilmente) invia il file byte per byte (piuttosto che inviare semplicemente le modifiche), che potenzialmente impiega molto più tempo a trasferire su una rete. Allo stesso modo, durante la sincronizzazione dal server remoto, i client locali scaricheranno solo le modifiche.

La funzione di sincronizzazione LAN può anche potenzialmente velocizzare le sincronizzazioni e ridurre il traffico di rete necessario.


In effetti sto parlando di nuovi file per entrambi i casi.

0

Dropbox potrebbe essere più veloce quando invii una maggiore quantità di file. FTP è più veloce che puoi ottenere quando parliamo di velocità, ma ci vuole troppo "parlare" tra server e computer client per ogni file, quindi l'ftp sembra essere più lento. Se stai caricando qualche applicazione open source con migliaia di file, è più conveniente comprimere tutti i file, caricarlo via FTP e decomprimerlo sul server.


0

Immagino che usino semplici tecniche di hashing simili a md5 / sha

Ogni volta che si rilascia un file all'interno di "dropbox" locale, dropbox-client calcola l'hash di quel file e deve inviare alcuni dati extra come dimensione file, nome file al server dropbox.

Se il server dropbox trova file simili (devono mantenere l'indice degli hash e dei dati dei file sul loro server) informerà semplicemente il client che il file è stato "caricato" correttamente. ;-)

In questo modo si finisce per "caricare" il file solo logicamente. Poiché non esiste un vero trasferimento del contenuto del file, questo deve essere più veloce di ogni altra cosa.

Non sono sicuro dell'algoritmo di hashing dropbox utilizzato, ma sono sicuro al 100% che il loro principio di funzionamento è simile a quello che ho descritto sopra.


0

Sebbene Dropbox stia utilizzando altri servizi, storicamente utilizza Amazon AWS (Amazon Web Services). Sembra che il tuo trasferimento dalla sorgente alla destinazione abbia una pipa di trasferimento molto grande. Nella mia esperienza, Dropbox sta usando una destinazione che può accettare grandi quantità di dati contemporaneamente. Dropbox distribuisce inoltre il caricamento a diversi indirizzi IP. Il sito su cui stai eseguendo FTP ha probabilmente una pipa di trasferimento molto più piccola e non ha la possibilità di distribuire i caricamenti in modo efficiente.

Se si esegue Resource Monitor (resmon) e si passa alla scheda Rete, si noteranno i diversi processi utilizzando la larghezza di banda della rete.

  • In Processi con attività di rete, selezionare la colonna per Total (B/sec)
  • In Connessioni TCP, selezionare la colonna per Total (B/sec)

Per quanto mi riguarda, quando sto caricando un file su Dropbox, utilizza 4 connessioni per inviare 4 indirizzi IP diversi.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.