Dlaczego Dropbox może być super szybki w porównaniu z FTP?

36

Chciałbym wiedzieć, dlaczego technicznie Dropbox jest znacznie szybszy niż FTP? Jakiej technologii używa?

Nie mówię o plikach różnicowych, mówię o przesyłaniu nowych plików w obu przypadkach, Dropbox jest znacznie szybszy.

Mam na myśli to, znacznie szybciej, może 10 razy szybciej niż FTP dla plików, które przesłałem. Później będę ponownie eksperymentować z większymi plikami.

Peter Mortensen
źródło
2
Jaki rozmiar, typ i liczbę plików przesłałeś? Jak długo trwało przesłanie każdego z nich? Gdzie przesyłałeś pliki przez FTP? Dropbox nie jest magią, najprostszym wyjaśnieniem jest to, że serwer FTP, który przesyłasz, ma znacznie mniejszą przepustowość niż Amazon.
user23307,
2
jeśli już go mają, nie będzie ponownie przesyłany; p
Journeyman Geek
4
Mówisz „nowe pliki”, ale jeśli te pliki nie są świeżymi, losowymi danymi, prawdopodobnie widzisz korzyści z synchronizacji na poziomie bloku (jak w rsync i innych narzędziach).
Chris Johnsen
1
To jest raczej porównanie hostingu imo, znam serwery FTP, które są szybsze niż Dropbox, a także korzystam z wielu połączeń z Filezillą, więc oświadczenia wymienione w tych odpowiedziach się nie utrzymują.
Tamara Wijsman,
Dropbox korzysta z usuwania duplikacji, aby zaoszczędzić miejsce na wspólnych plikach, więc nie trzeba ich przesyłać, jeśli już je mają.
paradroid

Odpowiedzi:

31

Może być wiele przyczyn tego.
Protokół FTP jest daleki od wydajności.

  1. Transfer FTP wymaga co najmniej dwóch połączeń (jednego dla kontroli i jednego dla danych), przy czym DropBox może używać tylko jednego połączenia HTTP. Również połączenie danych dla sesji FTP może zostać otwarte z serwera do klienta, a jeśli masz NAT, może to się nie powieść, więc klient FTP może próbować połączyć się w ten sposób, nieudany, a następnie odwrotnie.

  2. Połączenie FTP jest bardzo wymagające. Aby wysłać plik, klient musi wysłać co najmniej dwa polecenia (jedno, aby otworzyć połączenie danych, a drugie, aby rozpocząć wysyłanie) i za każdym razem musi czekać na odpowiedź serwera, co zwiększa opóźnienie. Oprócz tych dwóch podróży w obie strony na plik istnieje kilka podróży w obie strony dla pierwszego połączenia - jedna do wysłania nazwy użytkownika, jedna do hasła i co najmniej jedna do ustawienia parametrów przesyłania (aby upewnić się, że serwer jest oczekiwanie danych binarnych, a nie ASCII). Klient może również wydać kilka dodatkowych poleceń, aby uzyskać z serwera informacje o sobie. Dropbox prawdopodobnie używa tylko tego jednego żądania HTTP lub co najwyżej dwóch (jednego do uwierzytelnienia, drugiego do wysłania danych).

  3. Ponadto w zależności od klienta, którego używasz do przesyłania FTP (którego nie określasz, dobrym pomysłem byłoby edytowanie pytania w celu uwzględnienia tych informacji), może to oznaczać zerwanie połączenia po każdej operacji wysyłania i ponowne połączenie czas. Nie jest wykluczone, że DropBox utrzymuje połączenie otwarte przez jakiś czas w celu długiego odpytywania, aby jak najszybciej zareagować na nowe dostępne dane, które ten klient powinien pobrać, więc podczas gdy będzie musiał przywołać nowy Połączenie HTTP w celu wysłania pliku nie będzie wymagało ponownego uwierzytelnienia.

  4. Nie jest mało prawdopodobne, że klient DropBox kompresuje dane przed wysłaniem (w celu zwiększenia prędkości i oszczędności przepustowości) tam, gdzie nie będzie klienta FTP. Tak więc nawet w przypadku większych plików (chyba że są one wstępnie skompresowane lub zaszyfrowane) DropBox i podobne narzędzia mogą być szybsze niż podstawowy transfer FTP o pewien margines.

W przypadku dużych plików pierwsze trzy punkty powyżej staną się nieznaczne w porównaniu do czasu potrzebnego na faktyczne przesłanie danych, ale punkt 4 może nadal być dość ważny. W przypadku małych plików cały dodatkowy czas konfiguracji dodany przez protokół FTP może potencjalnie być kilka razy dłuższy niż czas potrzebny na przesłanie danych.

David Spillett
źródło
+1 za szczegółową odpowiedź. Ja też zastanawiałem się, jak Dropbox jest taki szybki.
Grant Palin
1
Czytałem gdzieś, że dane Dropbox są szyfrowane przed przesłaniem - więc miałoby to sens, że jest (przynajmniej trochę) skompresowane.
Dean Rather
Zaszyfrowany plik nie powinien podlegać kompresji - i tak nie upuszczam pola szyfrującego pliki podczas przesyłania
Martin Beckett
@mgb: masz rację, że techniki kompresji plików nie powinny znaleźć wystarczającej nadmiarowości w zaszyfrowanych danych, aby były przydatne, więc początkowe wysłanie pliku nie spowoduje żadnej pomocy z kompresji. Ale jeśli dropbox już ma plik i właśnie go zaktualizowałeś (a klucz jest nadal taki sam), istnieje szansa, że ​​nie będzie konieczne przesłanie całego pliku, aby zaktualizować kopię zdalną. Chociaż danych nie można skompresować, ilość, którą musisz wysłać, aby je zaktualizować, nadal można zmniejszyć (znacznie w przypadku dużych plików, które zawierają małe aktualizacje).
David Spillett
1
Jestem pewien, że używają HTTPS do przesyłania (HTTP przez SSL) zamiast wysyłać dane w postaci zwykłej. Nie wiem, jakie (jeśli w ogóle) szyfrowanie jest używane do faktycznego przechowywania, ale jeśli twoje dane są wrażliwe, powinieneś szyfrować je po swojej stronie, więc tylko Ty masz kopię odpowiednich kluczy.
David Spillett,
15

Jak wspomnieli inni, Dropbox może pomijać części plików, które nie uległy zmianie . Ale Dropbox pominie przesyłanie plików, jeśli ma już kopię po stronie serwera (taką, którą Ty lub ktokolwiek inny już przesłałeś).

Tak więc, jeśli próbujesz przesłać plik, który jest identyczny z plikiem, który już ma Dropbox, przesyłanie jest pomijane (a inne połączone komputery mogą rozpocząć pobieranie z serwerów Dropbox). Jeśli przesyłasz plik, który jest prawie identyczny z innym, już przesłanym plikiem (nie jest jasne, czy już przesłany plik musi być „twój”, czy może pochodzić od dowolnego użytkownika), to po prostu wyśle ​​wystarczającą część plik, aby odtworzyć go na serwerze w połączeniu z plikiem, który został już przesłany.

FTP nie może wykonać żadnej z tych czynności (jest to prosty protokół do wysyłania i odbierania strumieni danych bez odniesienia do jakichkolwiek innych danych dostępnych na zdalnym końcu). Narzędzia takie jak rsync i Unison mogą „pomijać fragmenty, które już ma druga strona”, ale zwykle ograniczają się do porównywania fragmentów wewnątrz plików na identycznej ścieżce w zsynchronizowanej hierarchii. Wydaje się, że Dropbox rozszerza ten pomysł na kolekcje plików (więc jeśli „prześlesz” dwa prawie identyczne pliki, prawdopodobnie można by wysłać tylko jeden plus „diff”, aby odtworzyć drugi).

Chris Johnsen
źródło
11

Zakładam, że masz na myśli szybsze przesyłanie plików. Podczas zapisywania pliku w folderze Dropbox Dropbox wysyła tylko różnicę (lub różnicę) danych do zdalnego serwera pamięci. FTP (najprawdopodobniej) wysyła plik bajt po bajcie (zamiast tylko wysyłania zmian), co potencjalnie zajmuje znacznie więcej czasu w sieci. Podobnie podczas synchronizacji ze zdalnego serwera lokalni klienci będą pobierać tylko zmiany.

Funkcja synchronizacji LAN może również potencjalnie przyspieszyć synchronizację i zmniejszyć potrzebny ruch w sieci.

sblair
źródło
Rzeczywiście mówię o nowych plikach dla obu przypadków.
0

Dropbox może być szybszy, gdy wysyłasz większą liczbę plików. FTP jest tak szybki, jak to tylko możliwe, gdy mówimy o szybkości, ale zajmuje zbyt dużo „rozmowy” między serwerem a komputerem klienckim dla każdego pliku, więc ftp wydaje się być wolniejszy. Jeśli przesyłasz aplikację typu open source z tysiącami plików, wygodniej jest skompresować wszystkie pliki, przesłać je przez FTP i rozpakować na serwerze.

Greenleader
źródło
0

Sądzę, że używają prostych technik mieszania podobnych do md5 / sha

Ilekroć upuszczasz plik w lokalnym „dropbox”, klient dropbox oblicza skrót tego pliku i musi wysyłać dodatkowe dane, takie jak rozmiar pliku, nazwa pliku na serwer dropbox.

Jeśli dropbox-server znajdzie podobne pliki (muszą utrzymywać indeks skrótów i danych plików na swoim serwerze) , po prostu poinformuje klienta, że ​​plik został „przesłany” pomyślnie. ;-)

W ten sposób kończy się „przesyłanie” pliku tylko logicznie. Ponieważ nie ma prawdziwego transferu zawartości pliku, musi to być szybsze niż cokolwiek innego.

Nie jestem pewien, którego algorytmu hashującego używa, ale jestem w 100% pewien, że ich zasada działania jest podobna do tej, którą opisałem powyżej.

rahul286
źródło
0

Chociaż Dropbox korzysta z innych usług, historycznie korzystały z Amazon AWS (Amazon Web Services). Wygląda na to, że przesyłanie ze źródła do miejsca docelowego ma bardzo dużą rurkę przesyłową. Z mojego doświadczenia wynika, że ​​Dropbox używa miejsca docelowego, które może akceptować duże ilości danych jednocześnie. Dropbox dystrybuuje również przesyłanie do różnych adresów IP. Witryna, do której przesyłasz FTP, prawdopodobnie ma znacznie mniejszy strumień przesyłania i nie ma możliwości tak efektywnego rozpowszechniania przesyłanych plików.

Jeśli uruchomisz Resource Monitor (resmon) i przejdziesz do zakładki Network, zauważysz różne procesy wykorzystujące przepustowość sieci.

  • W obszarze Procesy z aktywnością sieciową wybierz kolumnę dla Total (B/sec)
  • W obszarze Połączenia TCP wybierz kolumnę dla Total (B/sec)

Dla mnie, gdy przesyłam plik do Dropbox, używa 4 połączeń, aby wysłać 4 różne adresy IP.

wprowadź opis zdjęcia tutaj

Słońce
źródło