Dropbox cải tiến quy trình nén dữ liệu để giải phóng không gian lưu trữ trong Magic Pocket
Dropbox đã công bố các cải tiến quan trọng đối với hệ thống lưu trữ Magic Pocket, tập trung vào việc thiết kế lại chiến lược nén dữ liệu (compaction). Biến pháp này giúp giải phóng không gian từ các ổ lưu trữ bị lấp đầy không đầy đủ, giảm thiểu phân mảnh dữ liệu và tối ưu hóa hiệu suất hạ tầng.

Dropbox gần đây đã giải thích cách họ nâng cao hiệu quả lưu trữ trong Magic Pocket — hệ thống lưu trữ blob bất biến (immutable blob store) nội bộ dùng để lưu trữ file người dùng với quy mô lớn — bằng cách thiết kế lại các chiến lược nén dữ liệu nhằm thu hồi không gian từ các ổ lưu trữ bị lấp đầy không đầy đủ. Hệ thống hiện nay định kỳ tái tổ chức dữ liệu hợp lệ vào các ổ mới, cho phép xóa và tái sử dụng các ổ cũ chỉ được sử dụng một phần.
Như đã mô tả trong bài viết trước về việc tăng tốc độ ghi (write throughput) bằng cách loại bỏ đĩa cache SSD, năm ngoái Dropbox đã giới thiệu một dịch vụ mới thay đổi cách phân phối dữ liệu trên kho lưu trữ bất biến, giúp giảm khuyếch đại ghi (write amplification) cho các tác vụ ghi ngầm. Tuy nhiên, thay đổi này cũng dẫn đến sự gia tăng ngoài mong muốn về phân mảnh dữ liệu.
Thách thức về tính bất biến của dữ liệu
Hệ thống backend của Dropbox lưu trữ các tệp dưới dạng các đối tượng nhỏ trên các máy chủ khác nhau và coi dữ liệu được lưu trữ là bất biến (immutable). Mặc dù thiết kế này cải thiện độ tin cậy, dữ liệu cũ không thể bị xóa ngay lập tức khi các tệp được cập nhật hoặc xóa. Facundo Agriel, kỹ sư phần mềm cấp cao tại Dropbox, giải thích về thách thức này:
"Vì dữ liệu là bất biến, các thao tác xóa không giải phóng dung lượng đĩa ngay lập tức. Dữ liệu cũ vẫn nằm trên đĩa bên trong các ổ lưu trữ. Một khi ổ lưu trữ bị đóng, nó sẽ không bao giờ được mở lại. Sự đánh đổi là việc xóa để lại không gian không sử dụng, và sự lãng phí này tăng lên theo thời gian trừ khi chúng tôi chủ động thu hồi nó. Nếu không có việc thu hồi, các ổ lưu trữ dần dần bị lấp đầy một phần, lan tỏa dữ liệu trực tiếp (live data) trên nhiều đĩa hơn mức cần thiết. Phân mảnh do thiếu thu hồi có thể làm tăng đáng kể chi phí lưu trữ."
Đầu năm nay, Dropbox phát hiện ra rằng dịch vụ "Live Coder" mới đang tạo ra các ổ lưu trữ bị thiếu hụt dữ liệu nghiêm trọng, đôi khi chỉ sử dụng dưới 5% dung lượng. Điều này làm lan tỏa dữ liệu trên nhiều ổ gần như trống rỗng, làm tăng phân mảnh và chi phí lưu trữ, đồng thời phơi bày các giới hạn trong hệ thống nén hiện có.
Chiến lược nén dữ liệu mới: L2 và L3
Chiến lược nén ban đầu của Dropbox hoạt động tốt khi hầu hết các ổ lưu trữ gần đầy, nhưng trở nên kém hiệu quả khi nhiều ổ bị thiếu hụt nghiêm trọng. Để giải quyết vấn đề này, Dropbox đã thiết kế lại hệ thống chịu trách nhiệm thu hồi không gian. Cách tiếp cận được cập nhật ưu tiên các ổ kém hiệu quả nhất và quản lý công việc dọn dẹp kỹ lưỡng hơn để tránh gây căng thẳng cho tài nguyên hệ thống.
Sơ đồ minh họa quy trình nén dữ liệu mới của Dropbox
Agriel bổ sung:
"Nén thực hiện việc thu hồi vật lý. Vì các ổ lưu trữ không thể được sửa đổi sau khi đóng, chúng tôi thu thập các blob trực tiếp từ các ổ, ghi chúng vào các ổ mới, và cho nghỉ hưu các ổ cũ. Đây là cách các thao tác xóa cuối cùng chuyển đổi thành không gian có thể tái sử dụng."
Chiến lược nén mới, được gọi là L2, hiện được sử dụng để thu hồi không gian nhanh hơn khi nhiều ổ lưu trữ bị thiếu hụt. Thay vì từ từ lấp đầy các ổ đã dày đặc như cách tiếp cận trước đây, L2 kết hợp nhiều ổ thưa thớt thành một ổ duy nhất gần như đầy, cho phép hệ thống thu hồi không gian nhanh hơn.
Ngoài ra, Dropbox cũng giới thiệu chiến lược nén thứ ba, L3, để xử lý các ổ lưu trữ bị thiếu hụt cực độ mà các phương pháp trước đó không thể thu hồi hiệu quả. L3 truyền dữ liệu trực tiếp còn lại từ các ổ thưa thớt này thông qua dịch vụ Live Coder và dần dần ghi lại chúng vào các ổ lưu trữ mã hóa xóa (erasure-coded) mới.
Bối cảnh kỹ thuật và phản ứng cộng đồng
Quá trình nén thu hồi dung lượng đĩa trong hệ thống lưu trữ bất biến của Dropbox bằng cách ghi lại dữ liệu trực tiếp vào các ổ mới và cho nghỉ hưu các ổ cũ. Trong khi đó, mã hóa xóa (erasure coding) bảo vệ dữ liệu khỏi lỗi phần cứng bằng cách chia nhỏ dữ liệu thành các mảnh với các phần parity cho phép tái tạo lại nếu một phần bị mất.
Trong một chủ đề trên Hacker News, một số người dùng đã thảo luận về sự phức tạp của hạ tầng so với trải nghiệm người dùng, trong khi những người khác tranh luận về khó khăn trong việc dự đoán các hậu quả ngoài mong muốn khi thay đổi hạ tầng ở quy mô lớn. Một người dùng nhận định hài hước rằng ngay cả những tập đoàn lớn cũng giống như các lập trình viên cá nhân: "triển khai và xem điều gì bị hỏng".
Magic Pocket là hệ thống lưu trữ blob có khả năng mở rộng theo chiều ngang, quy mô exabyte độc quyền của Dropbox, thay thế Amazon S3 làm đối tượng lưu trữ, duy trì tính sẵn sàng 99,99% và độ bền cực cao.



