Tại sao Dropbox có thể siêu nhanh so với FTP?


36

Tôi muốn biết tại sao Dropbox về mặt kỹ thuật nhanh hơn FTP nhiều? Nó sử dụng loại công nghệ nào?

Tôi không nói về các tệp khác nhau, tôi đang nói về việc chuyển các tệp mới trong cả hai trường hợp, Dropbox nhanh hơn nhiều.

Ý tôi là, nhanh hơn rất nhiều, có thể nhanh hơn 10 lần so với FTP đối với các tệp tôi đã tải lên. Tôi sẽ thử nghiệm lại cho các tập tin lớn hơn sau.


2
Kích thước, loại và số lượng tệp bạn đã tải lên? Mỗi người trong số họ mất bao lâu để tải lên? Bạn đã tải các tệp lên qua FTP ở đâu? Dropbox không phải là phép thuật, lời giải thích đơn giản nhất là máy chủ FTP mà bạn đã tải lên cũng có băng thông ít hơn nhiều so với Amazon.
dùng23307

2
nếu họ đã có nó, nó sẽ không tải lên lại; p
Journeyman Geek

4
Bạn nói rằng các tập tin mới của Cameron, nhưng trừ khi các tệp này là dữ liệu mới, ngẫu nhiên, bạn có thể thấy lợi ích của việc đồng bộ hóa cấp khối (như trong rsync và các công cụ khác).
Chris Johnsen

1
Đây là nhiều hơn so với lưu trữ so sánh lưu trữ, tôi biết các máy chủ FTP nhanh hơn Dropbox và tôi cũng sử dụng nhiều kết nối với Filezilla nên các câu lệnh được liệt kê trong câu trả lời này không được giữ.
Tamara Wijsman

Dropbox không sử dụng chống trùng lặp để tiết kiệm dung lượng lưu trữ của các tệp phổ biến, do đó không cần phải tải chúng lên nếu đã có chúng.
paradroid

Câu trả lời:


31

Có thể có một số lý do cho việc này.
Giao thức FTP không hiệu quả.

  1. Truyền FTP cần ít nhất hai kết nối (một để kiểm soát và một cho dữ liệu) trong đó DropBox có thể chỉ sử dụng một kết nối HTTP. Ngoài ra, kết nối dữ liệu cho phiên FTP có thể được mở từ máy chủ đến máy khách của bạn và nếu bạn bị NAT thì điều này có thể không thành công, vì vậy máy khách FTP của bạn có thể đang cố gắng kết nối theo cách đó, thất bại sau đó thử cách khác.

  2. Có rất nhiều việc phải làm và kết nối trên kết nối FTP. Để gửi một tệp, khách hàng cần gửi tối thiểu hai lệnh (một để mở kết nối dữ liệu và một để bắt đầu gửi) và mỗi lần cần đợi máy chủ phản hồi, thêm độ trễ. Cũng như hai chuyến đi khứ hồi trên mỗi tệp này, có một số chuyến đi khứ hồi đáp ứng lệnh cho kết nối ban đầu - một để gửi tên người dùng, một cho mật khẩu và ít nhất một để đặt tham số truyền (để đảm bảo máy chủ được mong đợi nhị phân, không phải ASCII, dữ liệu). Máy khách cũng có thể đưa ra một vài lệnh bổ sung để lấy thông tin từ máy chủ về chính nó. Dropbox có thể sẽ chỉ sử dụng một yêu cầu HTTP đó, hoặc nhiều nhất là hai (một để xác thực, một để gửi dữ liệu).

  3. Trên hết, tùy thuộc vào ứng dụng khách nào bạn đang sử dụng để chuyển FTP (mà bạn không chỉ định, nên chỉnh sửa câu hỏi của bạn để bao gồm thông tin đó), có thể bạn sẽ bỏ kết nối sau mỗi thao tác gửi và kết nối lại tiếp theo thời gian. Không có khả năng DropBox duy trì kết nối mở trong một thời gian cho mục đích bỏ phiếu dài, để phản ứng ngay khi có thể có dữ liệu mới mà khách hàng này nên tải xuống, vì vậy nó sẽ cần phải đưa ra một kết nối mới Kết nối HTTP để gửi tệp mà nó sẽ không cần xác thực lại.

  4. Không có khả năng máy khách DropBox đang nén dữ liệu trước khi gửi nó (để cải thiện tốc độ và tiết kiệm băng thông), nơi máy khách FTP của bạn sẽ không ở đó. Vì vậy, ngay cả đối với các tệp lớn hơn (trừ khi chúng được nén trước hoặc được mã hóa) DropBox và các tiện ích như nó, có thể nhanh hơn so với chuyển FTP cơ bản bằng một số lề.

Đối với các tệp lớn, ba điểm đầu tiên ở trên sẽ nhạt dần thành không đáng kể so với thời gian thực sự chuyển dữ liệu, nhưng điểm 4 có thể vẫn còn khá quan trọng. Đối với các tệp nhỏ, tất cả thời gian thiết lập bổ sung được thêm bởi giao thức FTP có thể có khả năng lâu hơn một vài lần so với thời gian thực sự gửi dữ liệu.


+1 cho câu trả lời chi tiết. Tôi cũng đã tự hỏi làm thế nào Dropbox nhanh như vậy.
Cấp Palin

1
Tôi đã đọc ở đâu đó rằng dữ liệu dropbox được mã hóa trước khi truyền - vì vậy sẽ có nghĩa là nó cũng (ít nhất là một chút) được nén.
Dean Thay

Một tệp được mã hóa không nên nén - Tôi không bỏ hộp mã hóa các tệp trong khi chuyển
Martin Beckett

@mgb: bạn đã đúng rằng các kỹ thuật nén tệp sẽ không tìm thấy đủ sự dư thừa trong mã hóa thành dữ liệu, vì vậy ban đầu việc gửi tệp sẽ không dẫn đến việc nén. Nhưng nếu dropbox đã có tệp và bạn vừa cập nhật nó (và khóa vẫn như cũ) thì rất có thể nó sẽ không cần chuyển toàn bộ tệp để cập nhật bản sao từ xa. Mặc dù dữ liệu không thể được nén, số tiền bạn cần gửi để duy trì dữ liệu vẫn có thể được giảm (đáng kể đối với các tệp lớn nhìn thấy các bản cập nhật nhỏ).
David Spillett

1
Tôi khá chắc chắn rằng họ sử dụng HTTPS để chuyển (HTTP qua SSL) thay vì gửi dữ liệu ở dạng đơn giản. Tôi không biết mã hóa (nếu có) được sử dụng cho bộ lưu trữ thực tế là gì, nhưng nếu dữ liệu của bạn nhạy cảm, bạn nên mã hóa nó ở bên cạnh để bạn chỉ có một bản sao của các khóa có liên quan.
David Spillett

15

Như những người khác đã đề cập, Dropbox có thể bỏ qua các phần của tệp không thay đổi . Nhưng đồng thời, Dropbox sẽ bỏ qua việc tải lên các tệp nếu nó đã có một bản sao ở phía máy chủ (một tệp mà bạn hoặc bất kỳ ai khác đã tải lên).

Vì vậy, nếu bạn đang cố tải lên một tệp giống hệt với tệp mà Dropbox đã có, tải lên sẽ bị bỏ qua (và các máy được liên kết khác có thể bắt đầu tải xuống từ máy chủ Dropbox). Nếu bạn đang tải lên một tệp gần giống với tệp khác, tệp đã tải lên (không rõ liệu tệp đã tải lên phải là 'của bạn' hay có thể đến từ bất kỳ người dùng nào), thì nó sẽ chỉ gửi đủ các phần của tập tin để tạo lại nó trên máy chủ khi kết hợp với tập tin đã được tải lên.

FTP không thể thực hiện bất kỳ điều nào trong số này (đây là một giao thức đơn giản để gửi và nhận luồng dữ liệu mà không cần tham khảo bất kỳ dữ liệu nào khác có sẵn ở đầu xa). Các công cụ như rsyncUnison có thể 'bỏ qua các đoạn mà phía bên kia đã có', nhưng thường bị giới hạn trong việc so sánh các đoạn bên trong các tệp theo một đường dẫn giống hệt nhau trong hệ thống phân cấp được đồng bộ hóa. Dropbox dường như mở rộng ý tưởng này cho các bộ sưu tập các tệp (vì vậy nếu bạn 'tải lên' hai tệp gần giống nhau, có lẽ nó có thể sắp xếp chỉ gửi một cộng đủ số 'diff' để tạo lại tệp kia).


11

Tôi giả sử bạn có nghĩa là nhanh hơn về mặt chuyển tập tin. Khi bạn lưu tệp trong thư mục Dropbox của mình, Dropbox chỉ gửi delta (hoặc diff) của dữ liệu đến máy chủ lưu trữ từ xa. FTP (rất có thể) gửi byte tệp theo byte (thay vì chỉ gửi các thay đổi), có khả năng mất nhiều thời gian hơn để truyền qua mạng. Tương tự, khi đồng bộ hóa từ máy chủ từ xa, các máy khách cục bộ sẽ chỉ tải xuống các thay đổi.

Tính năng đồng bộ hóa LAN cũng có khả năng tăng tốc độ đồng bộ hóa và giảm lưu lượng mạng cần thiết.


Quả thực tôi đang nói về các tập tin mới cho cả hai trường hợp.

0

Dropbox có thể nhanh hơn khi bạn gửi số lượng tệp lớn hơn. FTP nhanh như bạn có thể nhận được khi chúng tôi nói về tốc độ nhưng phải mất quá nhiều "cuộc nói chuyện" giữa máy chủ và máy khách cho mỗi tệp, do đó, ftp dường như chậm hơn. Nếu bạn đang tải lên một số ứng dụng nguồn mở với hàng ngàn tệp, sẽ thuận tiện hơn khi nén tất cả các tệp, tải lên qua FTP và giải nén nó trên máy chủ.


0

Tôi đoán họ sử dụng các kỹ thuật băm đơn giản tương tự như md5 / sha

Bất cứ khi nào bạn thả một tệp bên trong "dropbox" cục bộ, dropbox-client sẽ tính toán hàm băm của tệp đó và phải gửi một số dữ liệu bổ sung như tệp kích thước, tên tệp đến máy chủ dropbox.

Nếu máy chủ dropbox tìm thấy các tệp tương tự (chúng phải duy trì chỉ mục băm và dữ liệu tệp trên máy chủ của chúng), nó sẽ chỉ thông báo cho khách hàng rằng tệp đã được "tải lên" thành công. ;-)

Bằng cách này, bạn chỉ kết thúc "tải lên" tệp một cách hợp lý. Vì không có chuyển nội dung tập tin thực sự, điều này phải nhanh hơn bất cứ điều gì khác.

Tôi không chắc chắn sử dụng dropbox thuật toán băm nào, nhưng tôi chắc chắn 100% nguyên tắc làm việc của chúng tương tự như tôi đã nêu ở trên.


0

Mặc dù Dropbox đang sử dụng các dịch vụ khác, nhưng trước đây họ đã sử dụng Amazon AWS (Dịch vụ web của Amazon). Có vẻ như chuyển của bạn từ nguồn đến đích có một đường ống chuyển rất lớn. Theo kinh nghiệm của tôi, Dropbox đang sử dụng một điểm đến có thể chấp nhận một lượng lớn dữ liệu cùng một lúc. Dropbox cũng phân phối tải lên các địa chỉ IP khác nhau. Trang web bạn đang FTP có khả năng có một đường truyền nhỏ hơn nhiều và không có khả năng phân phối tải lên một cách hiệu quả.

Nếu bạn chạy Trình giám sát tài nguyên (resmon) và chuyển đến tab Mạng, bạn sẽ nhận thấy các quy trình khác nhau sử dụng băng thông mạng.

  • Trong Quy trình với Hoạt động mạng, chọn cột cho Total (B/sec)
  • Trong Kết nối TCP, chọn cột cho Total (B/sec)

Đối với tôi, khi tôi tải tệp lên Dropbox, nó đang sử dụng 4 kết nối để gửi 4 địa chỉ IP khác nhau.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.