Dropbox Đã Chinh Phục 100 Nghìn Người Dùng Sau Một Năm Ra Mắt Như Thế Nào?
Dropbox Đã Chinh Phục 100 Nghìn Người Dùng Sau Một Năm Ra Mắt Như Thế Nào?
Vào tháng Ba năm 2009,
Sunil đã mua một chiếc iPhone mới.
Nhưng anh ấy cảm thấy rất khó chịu khi phải sao chép từng file từ máy tính để bàn sang iPhone mỗi lần.
Đúng lúc đó, anh ấy được một người bạn giới thiệu về dịch vụ chia sẻ file gọi là Dropbox.
Sunil lập tức cài đặt nó và anh ấy đã bị choáng ngợp bởi sự đơn giản của nó trong việc tự động đồng bộ hóa files giữa các thiết bị.
Sự tiện lợi mà Dropbox mang lại đã thực sự làm thay đổi cách thức làm việc của anh ấy, giúp mọi thứ trở nên nhanh chóng và hiệu quả hơn bao giờ hết.
Bạn cho chúng mình xin 1 upvote và comment để chúng mình nhận giải của viblo nha. Và chúng mình có động lực ra những bài viết thú vị hơn nữa 😄😄😄
Chúng mình có tạo Group cho các bạn cùng chia sẻ và học hỏi về thiết kế hệ thống nha 😄😄😄
Các bạn tham gia để gây dựng cộng đồng System Design Việt Nam thật lớn mạnh nhé 😍😍😍
Cộng Đồng System Design Việt Nam: https://www.facebook.com/groups/sydexa
Kênh TikTok: https://www.tiktok.com/@sydexa.com
Cùng Sydexa khám phá thôi nào!!! 😄😄
Dropbox là gì?
Dropbox là một dịch vụ lưu trữ đám mây với các yêu cầu ACID như sau:
- Tính nguyên tử (Atomicity): Khi một file lớn được tải lên, toàn bộ file đó sẽ có trên dopbox.
- Tính nhất quán (Consistency): Khi cập nhật hay xoá file trong thư mục được chia sẻ, thì toàn bộ client truy cập được vào file đấy cũng sẽ được cập nhật hoặc xoá đúng như thế.
- Tính độc lập (Isolation): Cho phép người dùng thực hiện các thao tác trên file khi họ không kết nối với Internet và sau đó đồng bộ hóa các thay đổi khi họ trở lại trực tuyến.
- Tính bền bỉ (Durability): Đảm bảo rằng dữ liệu mà người dùng lưu trữ trên Dropbox sẽ không bị hỏng hoặc mất, ngay cả trong trường hợp có sự cố với hệ thống.
Họ đã mở rộng quy mô Dropbox lên 100 nghìn người dùng chỉ với 9 kỹ sư. Và có thể xử lý hàng triệu lần đồng bộ hóa file mỗi ngày. Tuy nhiên, việc đồng bộ hóa files trên nhiều thiết bị một cách hiệu quả là rất khó. Cùng xem Dropbox đã làm điều này như thế nào nhé!
Kiến trúc của Dropbox
1. Tải lên và tải xuống files (Upload và Download)
Ứng dụng Dropbox chạy trên máy tính và thiết bị di động được gọi là Client.
Dropbox sử dụng client để theo dõi các thay đổi của file và xử lý logic upload-download.
Dropbox nhận được cùng một lượng đọc và ghi vào server. Điều đó có nghĩa là số lượng file tải xuống và tải lên là giống nhau.
Khi một người dùng sử dụng Dropbox, client của họ sẽ tải xuống và tải lên dữ liệu đến server. Số lượng client càng nhiều, lượng dữ liệu cần truyền càng lớn. Nếu nhiều client đang sửa đổi cùng một file, file đó cần được truyền đi nhiều lần đến mỗi client. Việc này gây tốn kém băng thông mạng, càng nhiều client thì vấn đề này càng lớn. Do đó, Dropbox không truyền toàn bộ file trên mỗi lần thay đổi file. Thay vào đó, client sẽ chia file thành các chunk có kích thước 4 MB và chỉ tải lên những chunk đã được sửa đổi. Điều này giúp giảm việc sử dụng băng thông mạng và làm cho việc tiếp tục tải lên-tải xuống dễ dàng hơn nếu có xảy ra sự gián đoạn mạng. Khi bạn kết nối lại với mạng, Dropbox sẽ tiếp tục quá trình tải lên hoặc tải xuống từ điểm mà nó đã dừng lại, thay vì bắt đầu lại từ đầu. Hãy tưởng tượng mỗi chunk này là một khối chứa dữ liệu.
Họ sử dụng Rsync để tải lên dữ liệu nếu có sự khác biệt nhỏ về dữ liệu (data diff) để giúp đơn giản hóa.
Rsync được viết tắt cho từ remote sync. Nó sử dụng thuật toán khi copy dữ liệu sao cho dữ liệu phải copy là nhỏ nhất (chỉ copy những gì thay đổi giữa nguồn và gốc), khi đồng bộ nó giữ nguyên mọi thuộc tính của file, thư mục (từ chủ sở hữu, quyền truy cập file ...).
Thêm vào đó, Dropbox triển khai một cơ chế độc đáo để ngăn chặn việc lưu trữ dữ liệu trùng lặp. Mỗi chunk được gán một ID duy nhất thông qua thuật toán băm SHA-256. Điều này tạo ra một “dấu vân tay” duy nhất cho mỗi chunk, cho phép Dropbox xác định nhanh chóng liệu một chunk đã tồn tại trên hệ thống hay chưa.
Khi hai chunks tạo ra cùng một giá trị hash, chúng được xem là giống nhau và do đó, chỉ cần lưu trữ một lần. Điều này được thực hiện bằng cách ánh xạ cả hai chunks tới cùng một đối tượng dữ liệu trong Amazon S3
Tác dụng của việc này là nếu hai người dùng tải lên cùng một file, file đó chỉ được lưu trữ một lần ở phía back-end, dẫn đến việc giảm đáng kể chi phí lưu trữ, tối ưu hóa không gian lưu trữ.
Họ thực hiện việc lưu trữ dữ liệu files trong Amazon S3 và sao chép nó để đảm bảo tính bền bỉ (Durability). Họ chạy block service để xử lý việc tải lên-tải xuống file từ client.
Amazon Simple Storage Service (Amazon S3) là một dịch vụ lưu trữ đối tượng với khả năng thay đổi theo quy mô, tính khả dụng của dữ liệu, độ bảo mật và hiệu năng hàng đầu.
2. Đồng bộ hóa các files giữa các thiết bị.
Họ khởi chạy một cơ sở dữ liệu metadata ở bên phía client. Nó lưu trữ thông tin về files (như tên file, kích thước, ngày tạo,…), khối files (file chunks), các thiết bị và các chỉnh sửa file.
Bằng cách sử dụng cơ sở dữ liệu metadata này, Dropbox có thể kiểm tra xem một file đã được tải xuống chưa, hoặc xem một file đã được tải lên chưa, mà không cần phải liên lạc với máy chủ. Điều này giúp tiết kiệm băng thông mạng và thời gian. Khi một file được tải xuống, nó được chia thành các khối dữ liệu được lưu trong cở sở dữ liệu metadata. Cơ sở dữ liệu metadata giúp Dropbox biết cách ghép các khối này lại với nhau để tái tạo lại file gốc. Cho phép người dùng truy cập vào file mà không cần kết nối internet.
Bên cạnh đó, Dropbox cũng chạy một phiên bản của cơ sở dữ liệu metadata này trên máy chủ của họ sử dụng MySQL. Điều này cho phép họ theo dõi thông tin về tất cả files và khối dữ liệu được lưu trữ trên hệ thống của họ.
Tuy nhiên, việc truy vấn cơ sở dữ liệu metadata thường xuyên có thể trở nên tốn kém. Vì vậy, họ thiết lập một bộ đệm Memcached trước cơ sở dữ liệu để cho việc mở rộng hệ thống. Bằng cách sử dụng Memcached như một bộ đệm trước cơ sở dữ liệu, các truy vấn thường xuyên có thể được phản hồi mà không cần truy cập vào cơ sở dữ liệu. Điều này giúp giảm tải cho cơ sở dữ liệu, giúp ứng dụng hoạt động nhanh hơn và có thể phục vụ được nhiều người dùng hơn.
Hiểu một cách đơn giản, S3 lưu trữ dữ liệu file trong khi MySQL lưu trữ metadata file. Họ tách chức năng tải lên-tải xuống khỏi chức năng đồng bộ hóa file để tăng hiệu suất.
Đây là một dịch vụ chạy trên máy chủ Dropbox, có nhiệm vụ đồng bộ hóa metadata giữa client và máy chủ. Khi một client kết nối với máy chủ (ví dụ: khi người dùng mở ứng dụng Dropbox trên thiết bị của họ), meta service sẽ truy vấn metadata cache để xác định xem client đó có phiên bản mới nhất của mỗi file hay không. Nếu một file đã được thay đổi (ví dụ: nếu nó đã được chỉnh sửa trên một thiết bị khác), meta service sẽ thông báo cho client về sự thay đổi này. Điều này cho phép client cập nhật phiên bản của file đó để nhận được những sự thay đổi mới.
Mỗi khi một file được chỉnh sửa, thông tin về sự thay đổi này được lưu trữ trong một “nhật ký” (thường được gọi là Log) trên cơ sở dữ liệu metadata. Cả client và máy chủ đều giữ một phiên bản của nhật ký này. Nhật ký này cho phép Dropbox theo dõi lịch sử của mỗi file.
Block Service cập nhật metadata sau khi một client tải lên-tải xuống bất kỳ thay đổi tệp nào. Nhưng Block Service không tương tác trực tiếp với cơ sở dữ liệu metadata. Thay vào đó, nó gọi meta service qua RPC để cập nhật cơ sở dữ liệu metadata.
Một thay đổi file phải được hiển thị cho mọi client đang xem tệp đó. Vì vậy, họ sử dụng dịch vụ thông báo để thông báo các thay đổi file đến client. Client giữ một kết nối mở với máy chủ sử dụng Server-Sent Events (SSE). Và máy chủ gửi file thay đổi tới client
3. Khả năng mở rộng
Để đảm bảo tính sẵn sàng và thông lượng cao, Dropbox chạy nhiều phiên bản của các dịch vụ.
Họ sử dụng một bộ cân bằng tải (load balancer) được cài đặt trước mỗi service để phân phối tải đồng đều. Ngoài ra, họ còn chạy một hot backup của bộ cân bằng tải. Nếu bộ cân bằng tải chính bị lỗi, hệ thống sẽ tự động chuyển sang hot backup để đảm bảo hoạt động liên tục.
Khi kết nối client với server bị gián đoạn, Dropbox sử dụng thuật toán lùi theo cấp số nhân (exponential backoff) để tránh tình trạng quá tải máy chủ. Thuật toán này hoạt động bằng cách tăng thời gian chờ giữa các lần thử kết nối lại sau mỗi lần thất bại. Điều này giúp tránh việc tất cả các client cùng cố gắng kết nối lại cùng một lúc, gây ra đột biến lưu lượng truy cập và làm giảm hiệu suất máy chủ.
Mặc dù giải pháp lưu trữ hiện tại hoạt động hiệu quả, Dropbox không ngừng cải tiến. Họ đã thay thế Amazon S3 bằng một hệ thống lưu trữ nội bộ có tên gọi Magic Pocket. Magic Pocket cung cấp hiệu suất tốt hơn và khả năng tùy biến cao hơn, đáp ứng tốt hơn các yêu cầu lưu trữ ngày càng tăng của Dropbox.
Bằng việc đổi mới và thích nghi, Dropbox vẫn duy trì vị thế là một trong những tên tuổi hàng đầu trong ngành lưu trữ đám mây.
Và đó là một chuyến thám hiểm hệ hống của Dropbox. Sydexa hẹn các bạn ở một bài viết thú vị nữa nha 😍😍😍😍
Nếu thấy bài viết này hay thì cho chúng mình xin 1 upvote và comment để chúng mình nhận giải của viblo nha 😄😄😄
Lời nhắn
Chúng mình có tạo Group cho các bạn cùng chia sẻ và học hỏi về thiết kế hệ thống nha 😄😄😄
Các bạn tham gia để gây dựng cộng đồng System Design Việt Nam thật lớn mạnh nhé 😍😍😍
Cộng Đồng System Design Việt Nam: https://www.facebook.com/groups/sydexa
Kênh TikTok: https://www.tiktok.com/@sydexa.com
All rights reserved