Google đã mở mã nguồn CDC File Transfer , một công cụ đồng bộ hóa tệp hiệu suất cao ban đầu được phát triển cho các nhà phát triển game Stadia . Dự án này xuất hiện từ một nhu cầu thực tế: các nhà phát triển game làm việc trên Windows cần đồng bộ nhanh chóng các bản build game lớn lên các instance Linux trên cloud, nhưng các công cụ truyền thống như rsync quá chậm đối với các tệp có kích thước khổng lồ.
Cải tiến tốc độ cách mạng thông qua Content-Defined Chunking
Đổi mới cốt lõi nằm ở việc thay thế chunking kích thước cố định của rsync bằng Content-Defined Chunking ( CDC ). Rsync truyền thống chia tệp thành các khối cố định, điều này tạo ra vấn đề khi dữ liệu được chèn hoặc xóa ở giữa tệp - tất cả các chunk tiếp theo đều xuất hiện thay đổi ngay cả khi chúng giống hệt nhau. CDC giải quyết điều này bằng cách xác định ranh giới chunk dựa trên nội dung tệp thay vì vị trí, có nghĩa là việc chèn chỉ ảnh hưởng đến các chunk được sửa đổi.
Những cải tiến hiệu suất là đáng kể. Thử nghiệm của Google cho thấy CDC đạt tốc độ truyền 1.500 MB/s so với 50 MB/s của rsync - cải thiện 30 lần. Trong các tình huống thực tế với các bản build game từ 49-58 GB , CDC rsync hoàn thành đồng bộ trong 75 giây so với 270 giây của rsync truyền thống.
So sánh hiệu suất
- CDC rsync: tốc độ truyền tải 1,500 MB/s
- rsync truyền thống: tốc độ truyền tải 50 MB/s
- Cải thiện tốc độ: nhanh hơn 30 lần
- Thời gian đồng bộ thực tế: 75 giây ( CDC ) so với 270 giây ( rsync truyền thống )
- Dữ liệu thử nghiệm: các bản build game 49-58 GB
Triển khai kỹ thuật thu hút sự quan tâm của nhà phát triển
Cộng đồng kỹ thuật đã thể hiện sự quan tâm đặc biệt đến các cải tiến thuật toán chunking. Một số nhà phát triển đã thử nghiệm với các phiên bản nâng cao của FastCDC , thuật toán cơ bản, với một triển khai cho thấy cải thiện hiệu quả thêm 3,4% thông qua các kỹ thuật lookahead. Cách tiếp cận này phản ánh các chiến lược tối ưu hóa được sử dụng trong nén dữ liệu, cho thấy còn nhiều chỗ để cải thiện.
Tuy nhiên, sự nhầm lẫn tồn tại về khả năng hiện có của rsync. Trong khi một số thành viên cộng đồng ban đầu nghĩ rsync đã sử dụng ranh giới được xác định bởi nội dung, thực tế là rsync sử dụng các khối kích thước cố định với phát hiện rolling hash - một cách tiếp cận khác ít hiệu quả CPU hơn phương pháp của CDC .
Các Tính Năng Kỹ Thuật Chính
- Phân Chia Khối Dựa Trên Nội Dung (CDC): Các khối có kích thước biến đổi dựa trên nội dung tệp thay vì vị trí cố định
- Thuật Toán FastCDC: Phân chia khối hiệu quả với chi phí CPU tối thiểu cho mỗi byte
- Khả Năng Streaming: Đồng bộ hóa tệp thời gian thực với độ trễ ~0.04 giây
- Hỗ Trợ Nén: Tích hợp sẵn tính năng nén nhanh cho việc truyền dữ liệu
- Tích Hợp SSH/SFTP: Sử dụng các giao thức tiêu chuẩn để truyền tải an toàn
Hạn chế nền tảng làm dấy lên lo ngại về việc áp dụng
Mặc dù có những cải tiến hiệu suất ấn tượng, hỗ trợ nền tảng hạn chế của công cụ đã thu hút sự chỉ trích. CDC File Transfer hiện chỉ hỗ trợ các kết hợp cụ thể Windows-to-Linux và Windows-to-Windows , phản ánh thiết kế tập trung vào Stadia ban đầu. Dự án không hỗ trợ truyền Linux-to-Linux , điều mà nhiều nhà phát triển coi là một hạn chế đáng kể.
Sáng kiến tuyệt vời, đặc biệt là thuật toán đồng bộ mới, nhưng có những rào cản khổng lồ đối với việc áp dụng: chỉ hoạt động trên một kết hợp kỳ lạ của (nền tảng nguồn / nền tảng đích). Tại sao???? Viết mã độc lập nền tảng để đọc/ghi byte và gửi chúng qua dây trong năm 2025 khó đến thế nào?
Hệ thống build của dự án cũng tạo ra các rào cản. Nó yêu cầu Bazel , công cụ build của Google , mà một số nhà phát triển thấy cồng kềnh so với các hệ thống build tiêu chuẩn hơn.
Ma trận hỗ trợ nền tảng
Công cụ | Windows x64 | Ubuntu 22.04 x64 | Ubuntu 22.04 aarch64 | macOS |
---|---|---|---|---|
cdc_rsync (Từ) | ✓ | ✓ | ✓ | - |
cdc_rsync (Đến) | ✓ | ✓ | ✓ | - |
cdc_stream (Từ) | ✓ | ✓ | - | - |
cdc_stream (Đến) | ✓ | ✓ | - | - |
Triển vọng tương lai và khả năng tích hợp
Các cuộc thảo luận cộng đồng đã khám phá liệu những cải tiến này có thể được tích hợp vào rsync tiêu chuẩn hay áp dụng cho các công cụ khác. Một số nhà phát triển tò mò về các ứng dụng tiềm năng trong các hệ thống kiểm soát phiên bản như Git , nơi các chiến lược chunking tương tự có thể cải thiện hiệu suất cho các repository lớn.
Dự án dường như đã bị đình trệ, với repository được lưu trữ chín tháng trước và không có commit nào trong hai năm. Tuy nhiên, việc phát hành mã nguồn mở cung cấp nền tảng cho phát triển do cộng đồng thúc đẩy, và một số nhà phát triển đã bày tỏ sự quan tâm đến việc mở rộng hỗ trợ nền tảng và cải thiện quy trình build.
Dự án CDC File Transfer chứng minh cách giải quyết các vấn đề nội bộ cụ thể có thể dẫn đến những đổi mới có thể áp dụng rộng rãi. Mặc dù triển khai hiện tại có những hạn chế, thuật toán chunking cơ bản đại diện cho một tiến bộ đáng kể trong công nghệ đồng bộ hóa tệp có thể mang lại lợi ích cho cộng đồng phát triển rộng lớn hơn nếu các rào cản áp dụng được giải quyết.
Tham khảo: CDC File Transfer