Dropbox, FTP ile karşılaştırıldığında neden süper hızlı olabilir?


36

Teknik olarak Dropbox'ın neden FTP'den daha hızlı olduğunu bilmek ister misiniz ? Ne tür bir teknoloji kullanıyor?

Farklı dosyalar hakkında konuşmuyorum, her iki durumda da yeni dosyaları aktarmaktan bahsediyorum, Dropbox çok daha hızlı.

Yani, çok daha hızlı, belki de yüklediğim dosyalar için FTP'den 10 kat daha hızlı. Daha sonra daha büyük dosyalar için tekrar deneyeceğim.


2
Hangi boyutta, türde ve sayıda dosya yüklediniz? Her birinin yüklenmesi ne kadar sürdü? Dosyaları FTP üzerinden nereye yüklüyordunuz? Dropbox sihirli değildir, en basit açıklama, yüklediğiniz FTP sunucusunun Amazon’dan çok daha az bant genişliğine sahip olmasıdır.
user23307 15.03.2010

2
Zaten sahiplerse, yeniden yükleme yapılmaz; p
Journeyman Geek

4
“Yeni dosyalar” diyorsunuz, ancak bu dosyalar taze ve rastgele veriler olmadıkça, muhtemelen blok düzeyinde senkronizasyonun faydasını görüyorsunuz ( rsync ve diğer araçlarda olduğu gibi).
Chris Johnsen

1
Bu daha çok bir hosting karşılaştırması imo, Dropbox'tan daha hızlı olan FTP sunucularını biliyorum ve Filezilla ile birden fazla bağlantı kullanıyorum, böylece bu cevaplarda listelenen ifadeler de geçerli değil.
Tamara Wijsman

Dropbox, ortak dosyaların depolama alanından tasarruf etmek için çoğaltmayı kaldırmayı kullanır, bu nedenle zaten varsa, onları yüklemeye gerek yoktur.
paradroid

Yanıtlar:


31

Bunun birkaç nedeni olabilir.
FTP protokolü verimli olmaktan uzak .

  1. Bir FTP aktarımı, DropBox'un yalnızca tek bir HTTP bağlantısı kullanabileceği en az iki bağlantıya (kontrol için bir tane ve veri için bir tane) ihtiyaç duyar. Ayrıca bir FTP oturumu için veri bağlantısı sunucudan istemcinize açılabilir ve eğer NATed iseniz bu başarısız olabilir, bu nedenle FTP istemciniz bu yolla bağlanmaya çalışıyor olabilir, arızalanır ve başka yolla dener.

  2. Bir FTP bağlantısında birçok şey var ve donuyor. Bir dosyayı göndermek için müşterinin en az iki komut göndermesi gerekir (biri veri bağlantısını açmak, diğeri göndermeyi başlatmak için) ve sunucunun yanıt vermesini beklemek için her defasında ekstra gecikme süresi eklemesi gerekir. Dosya başına bu iki gidiş-dönüşün yanı sıra, ilk bağlantı için birkaç komut-yanıt gidiş-dönüşü vardır - biri kullanıcı adı, şifre için diğeri transfer parametrelerini ayarlamak için en az biri (sunucunun doğru olduğundan emin olmak için) İkili bekleniyor, ASCII değil, veri). Müşteri ayrıca sunucudan kendisiyle ilgili bilgi almak için birkaç ekstra komut verebilir. Dropbox'ın yalnızca bir HTTP isteği kullanıyor olması veya en fazla iki (biri kimlik doğrulaması, biri veri göndermek için) kullanıyor olabilir.

  3. Bunun üzerine, FTP transferleri için hangi müşteriyi kullandığınıza bağlı olarak (bu bilgileri eklemek için sorunuzu düzenlemenin iyi olacağını düşünmüyorsunuz), her gönderim işleminden sonra bağlantıyı kesiyor olabilir ve daha sonra yeniden bağlanıyor olabilir. saati. DropBox'ın uzun süren bir oylama için bir süre açık bir bağlantı sağlaması, bu müşterinin indirmesi gereken yeni verilere mümkün olan en kısa sürede tepki vermesi pek mümkün değildir; Bir dosyayı göndermek için HTTP bağlantısı yeniden kimlik doğrulaması gerekmez.

  4. DropBox istemcisinin, FTP istemcinizin olmayacağı bir yere göndermeden önce (hızı artırmak ve bant genişliğinden tasarruf etmek için) verileri sıkıştırması olası değildir. Bu yüzden daha büyük dosyalar için bile (önceden sıkıştırılmış veya şifreli olmadıkça) DropBox ve bunun gibi araçlar, bir miktar marjla temel bir FTP aktarımından daha hızlı olabilir.

Büyük dosyalar için, yukarıdaki ilk üç nokta verilerin gerçekten aktarılması için harcanan süreye kıyasla önemsiz hale gelecektir, ancak 4. nokta yine de oldukça önemli olabilir. Küçük dosyalar için, FTP protokolü tarafından eklenen tüm ekstra kurulum süresi, verilerin gerçekten gönderilmesi için geçen süreden birkaç kat daha uzun olabilir.


Detaylı cevap için +1. Ben de Dropbox’ın bu kadar hızlı olduğunu merak etmiştim.
Grant Palin,

1
Bir yere, dropbox verilerinin aktarmadan önce şifrelenmiş olduğunu okudum - bu da (en azından biraz) sıkıştırılmış olması mantıklı olacaktır.
Dean Rather

Şifrelenmiş bir dosya sıkıştırılamaz olmalıdır - Kutuyu yine de aktarırken dosyaları şifrelemem
Martin Beckett

@mgb: Dosya sıkıştırma tekniklerinin, yararlı olmak için verilere şifreli olarak yeterince fazlalık bulamaması konusunda haklısınız, bu nedenle başlangıçta bir dosya göndermek, sıkıştırma işleminde yardımcı olmayacaktır. Ancak dropbox zaten bir dosyaya sahipse ve onu yeni güncellediyseniz (ve anahtar hala aynıysa), şansınızı uzak kopyayı güncellemek için tüm dosyayı aktarmanız gerekmez. Veriler sıkıştırılamazken, güncel tutulması için göndermeniz gereken miktar hala azaltılabilir (küçük güncellemeler gören büyük dosyalar için).
David Spillett

1
Düz formda veri göndermek yerine, HTTPS'yi transfer için (SSL üzerinden HTTP) kullandıklarından eminim. Asıl depolama için (eğer varsa) şifrelemenin kullanıldığını bilmiyorum, ancak verileriniz hassassa, yine de sizin tarafınızdan şifrelemelisiniz, böylece yalnızca ilgili anahtarların bir kopyası elinizde olmalıdır.
David Spillett

15

Diğerlerinin de söylediği gibi, Dropbox değişmeyen dosyaların bölümlerini atlayabilir . Ancak , sunucu tarafında zaten bir kopyası varsa Dropbox dosya yükleme işlemini atlayacaktır (siz veya bir başkasının yüklediği dosya ).

Dolayısıyla, Dropbox'ın sahip olduğu bir dosyayla aynı olan bir dosyayı yüklemeye çalışıyorsanız, yükleme atlanır (ve bağlı diğer makineler onu Dropbox sunucularından indirmeye başlayabilir). Eğer bir başkasıyla hemen hemen aynı olan, zaten yüklenmiş olan bir dosyayı yüklüyorsanız (önceden yüklenen dosyanın 'sizin' olması gerekip gerekmediği veya herhangi bir kullanıcıdan gelip gelmediği belli değildir), o zaman Önceden yüklenen dosyayla birleştirildiğinde sunucuda yeniden oluşturmak için dosya.

FTP bunlardan hiçbirini yapamaz (uzak uçta bulunan diğer verilere atıfta bulunmadan veri akışlarını göndermek ve almak için basit bir protokoldür). Rsync ve Unison gibi araçlar , 'diğer tarafın sahip olduğu parçaları atlayabilir', ancak genellikle dosyalar içindeki parçaları, senkronize hiyerarşideki özdeş yoldan karşılaştırmakla sınırlıdır. Dropbox bu fikri dosya koleksiyonlarına genişletiyor gibi görünmektedir (bu nedenle neredeyse aynı iki dosyayı 'yüklerseniz, muhtemelen diğerini yeniden oluşturmak için yalnızca bir artı bir' fark 'gönderecek şekilde ayarlayabilir).


11

Dosya aktarımı konusunda daha hızlı demek istediğinizi varsayıyorum. Bir dosyayı Dropbox klasörünüze kaydettiğinizde, Dropbox yalnızca verilerin delta (veya farkını) uzaktaki depolama sunucusuna gönderir . FTP (büyük olasılıkla) dosya baytını bayt (yalnızca değişiklikleri göndermek yerine) gönderir; bu da bir ağ üzerinden aktarılması çok daha uzun sürer. Senkronize Benzer şekilde, gelen uzak sunucuya, yerel istemcilerin yalnızca değişiklikleri indirecektir.

LAN senkronizasyon özelliği, senkronizasyonu potansiyel olarak hızlandırabilir ve gereken ağ trafiğini azaltabilir.


Aslında her iki durumda da yeni dosyalardan bahsediyorum.

0

Daha fazla dosya gönderdiğinizde Dropbox daha hızlı olabilir. FTP, konuşma hızımız olduğunda elde edebileceğiniz kadar hızlıdır, ancak her dosya için sunucu ve istemci bilgisayar arasında çok fazla "konuşma" gerekir, bu nedenle ftp daha yavaş görünmektedir. Bazı açık kaynaklı uygulamaları binlerce dosya ile yüklüyorsanız, tüm dosyaları sıkıştırmak, FTP yoluyla yüklemek ve sunucuda sıkıştırmasını açmak daha uygundur.


0

Sanırım md5 / sha'ya benzer basit karma teknikleri kullanıyorlar.

Ne zaman yerel "dropbox" 'a bir dosya bıraksanız, dropbox-client bu dosyanın karmasını hesaplar ve dropbox-server'a dosya boyutu, dosya adı gibi bazı ekstra veriler gönderiyor olmalıdır.

Dropbox-server benzer dosyalar bulursa ( sunuculardaki karma ve dosya-veri endeksini korumalıdırlar) sadece müşteriye dosyanın başarıyla "yüklendiğini" bildirir. ;-)

Bu şekilde sadece mantıksal olarak "yükleme" dosyasını sonlandırırsınız. Gerçek bir dosya içeriği aktarımı olmadığından, bunun her şeyden daha hızlı olması gerekir.

Hangi karma algoritma dropbox'ının kullandığından emin değilim, ancak çalışma prensiplerinin yukarıda ana hatlarıyla belirtilenlere benzer olduğundan% 100 eminim.


0

Dropbox başka hizmetler kullanıyor olsa da, tarihsel olarak Amazon AWS (Amazon Web Services) kullanıyorlar. Kaynaktan hedefe transferiniz çok büyük bir transfer borusuna sahip gibi görünüyor. Deneyimlerime göre, Dropbox aynı anda büyük miktarda veri kabul edebilecek bir hedef kullanıyor. Dropbox ayrıca yüklemeyi farklı IP adreslerine dağıtır. FTP'ye gönderdiğiniz site, çok daha küçük bir aktarma borusuna sahip ve yüklemeleri daha verimli bir şekilde dağıtamaz.

Kaynak İzleyicisi'ni (resmon) çalıştırıp Ağ sekmesine giderseniz, ağ bant genişliğini kullanan farklı işlemleri fark edeceksiniz.

  • Ağ Etkinliği olan İşlemler altında, için sütunu seçin. Total (B/sec)
  • TCP bağlantıları altında için sütun seçin. Total (B/sec)

Benim için, Dropbox'a bir dosya yüklerken, 4 farklı IP adresi göndermek için 4 bağlantı kullanıyor.

görüntü tanımını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.