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.
Odpowiedzi:
Może być wiele przyczyn tego.
Protokół FTP jest daleki od wydajności.
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.
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).
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.
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.
źródło
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).
źródło
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.
źródło
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.
źródło
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.
źródło
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.
Total (B/sec)
Total (B/sec)
Dla mnie, gdy przesyłam plik do Dropbox, używa 4 połączeń, aby wysłać 4 różne adresy IP.
źródło