- CDC File Transfer là công cụ mã nguồn mở do Google phát triển, hỗ trợ đồng bộ hóa và streaming tệp giữa Windows và Linux
- Công cụ sử dụng kỹ thuật Content Defined Chunking (CDC) để chỉ truyền những phần đã thay đổi của tệp, nhờ đó đạt tốc độ nhanh hơn tới 30 lần so với rsync truyền thống
- Cung cấp hai công cụ chính là cdc_rsync và cdc_stream, lần lượt đảm nhiệm chức năng đồng bộ tệp và streaming thời gian thực
- Được thiết kế để giúp nhà phát triển dùng Windows triển khai và kiểm thử tệp hiệu quả trong môi trường Linux, nên đặc biệt phù hợp với môi trường phát triển từ xa và phát triển game
- Hỗ trợ xác thực dựa trên ssh và sftp, cách sử dụng trực quan, đồng thời cung cấp binary cho nhiều nền tảng khác nhau
Tổng quan và tầm quan trọng của dự án
- CDC File Transfer là bộ công cụ truyền tệp được Google phát hành dưới dạng mã nguồn mở, xử lý đồng bộ hóa và streaming tệp giữa Windows với Linux hoặc giữa các máy Windows một cách nhanh và hiệu quả
- Dự án này được tạo ra cho môi trường phát triển game Stadia, và ra đời để giải quyết các giới hạn của scp hay rsync hiện có (truyền chậm, sao chép toàn bộ tệp, thiếu chế độ delta)
- Công nghệ cốt lõi là thuật toán FastCDC, một dạng Content Defined Chunking, giúp chỉ truyền phần dữ liệu thực sự thay đổi khi tệp bị chỉnh sửa, tối ưu cho việc đồng bộ lặp lại với dữ liệu lớn
- Dù là mã nguồn mở, công cụ vẫn cung cấp hiệu năng ở mức thương mại (ví dụ: tốc độ đồng bộ 1500 MB/s, streaming nhanh hơn 2~5 lần so với sshfs), và cho thấy hiệu quả vượt trội so với các dịch vụ cạnh tranh trong môi trường cloud/phát triển từ xa
Giải thích các công cụ chính
cdc_rsync
- Là công cụ đồng bộ tệp từ Windows sang Linux, khắc phục các nhược điểm của rsync trên Linux hiện có
- Nhanh chóng bỏ qua các tệp có thời gian và kích thước trùng khớp, và chỉ truyền hiệu quả các tệp đã thay đổi
- Sử dụng FastCDC để phát hiện và truyền đúng vị trí dữ liệu đã thay đổi, từ đó giảm lưu lượng xuống mức tối thiểu và tăng tốc độ truyền
- Kết quả thử nghiệm đồng bộ cho thấy hiệu năng nhanh hơn khoảng 3 lần so với rsync chạy trên Cygwin, và nhanh hơn đáng kể so với rsync Linux tiêu chuẩn
- Hỗ trợ nén tốc độ cao cùng cấu trúc thuật toán đơn giản nhưng hiệu quả, có thể xác minh tệp tới từng byte
cdc_stream
- Giúp các thư mục và tệp trên Windows có thể được truy cập từ Linux bằng streaming thời gian thực như thể là tệp cục bộ
- Có cấu trúc tương tự sshfs hiện có, nhưng được tối ưu về tốc độ đọc tệp và hiệu năng cache
- Thông qua phát hiện thay đổi và streaming vi sai, chỉ dữ liệu đã thay đổi mới được truyền lại, đồng thời việc xử lý metadata cũng rất nhanh
- Thư mục trên Linux được cung cấp ở chế độ chỉ đọc, và các tệp thay đổi trên Windows được phản ánh sang Linux gần như ngay lập tức (tối đa ở mức vài giây)
- Trong môi trường phát triển cần truy cập các tệp dung lượng lớn như dữ liệu game, công cụ thực tế cho thấy hiệu năng tăng 2~5 lần so với sshfs
Nền tảng được hỗ trợ
- cdc_rsync: chủ yếu hỗ trợ giữa Windows x86_64 ↔ Ubuntu 22.04 x86_64, đồng thời dần hỗ trợ cả đồng bộ từ xa và đồng bộ cục bộ
- cdc_stream: hỗ trợ streaming từ Windows x86_64 sang Ubuntu 22.04 x86_64; chiều ngược lại hoặc nền tảng khác không được hỗ trợ
Phương thức xác thực/cấu hình
- Xác thực không mật khẩu thông qua ssh.exe và sftp.exe (khuyến nghị xác thực bằng khóa)
- Trên Windows có thể chỉ định đường dẫn chi tiết của lệnh qua command line hoặc biến môi trường
- Có thể dùng thêm tùy chọn lệnh SSH và tệp cấu hình theo người dùng (
%USERPROFILE%\\.ssh\\config)
- Người dùng nội bộ của Google có thêm biến môi trường cho cơ chế xác thực bằng khóa bảo mật riêng
Ví dụ sử dụng
Ví dụ dùng cdc_rsync
- Đồng bộ tệp:
cdc_rsync C:\path\to\file.txt user@linux.device.com:~
- Hỗ trợ wildcard và đồng bộ đệ quy toàn bộ thư mục:
cdc_rsync C:\path\to\assets\* user@linux.device.com:~/assets -r
- Có thể theo dõi trạng thái đồng bộ theo thời gian thực (tùy chọn
-v), đồng thời cũng hỗ trợ đồng bộ giữa các tệp cục bộ
Ví dụ dùng cdc_stream
- Bắt đầu streaming thư mục:
cdc_stream start C:\path\to\assets user@linux.device.com:~/assets
- Dừng phiên streaming:
cdc_stream stop user@linux.device.com:~/assets
- Có thể quản lý nhiều phiên bằng wildcard
Khắc phục sự cố và logging
- cdc_stream hoạt động dựa trên dịch vụ nền, log mặc định được lưu tại
%APPDATA%\\cdc-file-transfer\\logs
- Cung cấp tùy chọn log chi tiết và debug (thiết lập JSON cho mức
verbosity)
- cdc_rsync xuất log ra console, có thể dùng
-vvv, -vvvv để in log chi tiết
- Có thể theo dõi các lệnh SSH/SFTP thất bại và chạy trực tiếp chúng để dễ phân tích nguyên nhân sự cố
Ngăn xếp công nghệ và thông tin vận hành
- Ngôn ngữ phát triển chính là C++, ngoài ra có một phần Python/Starlark dùng cho build management
- Giấy phép Apache-2.0, có hơn 8 người đóng góp, đạt 3.3k stars trên GitHub
- Từ sau năm 2023, dự án không được phát triển thêm và ở trạng thái Archived
Tóm tắt
- CDC File Transfer mang lại mức hiệu quả và tốc độ hàng đầu ngành cho việc truyền lặp lại các tệp và thư mục dung lượng lớn giữa Windows và Linux
- Công cụ đem lại lợi ích rõ rệt trong việc rút ngắn quá trình đồng bộ và streaming trong các môi trường làm việc đa nền tảng như phát triển từ xa, game, media, phân tích dữ liệu
- So với các công cụ đồng bộ/streaming khác, nó có tính đơn giản, khả năng phát hiện thay đổi cục bộ nhanh và cache xuất sắc, tạo nên sức cạnh tranh mạnh
- Với xác thực SSH/SFTP cùng thiết lập môi trường linh hoạt bằng command line hoặc tệp cấu hình, kỹ sư có thể dễ dàng triển khai và vận hành
- Có thể xem và tùy biến mã nguồn, đồng thời đã ghi nhận uy tín và mức độ sử dụng cao trong cộng đồng mã nguồn mở
1 bình luận
Ý kiến Hacker News
Từ năm ngoái tôi đã thử nghiệm nhiều thứ với Content Defined Chunking (đặc biệt là bonanza.build). Tôi nhận ra rằng ngay cả thuật toán FastCDC được dùng rộng rãi nhất cũng vẫn còn chỗ để cải thiện, và nếu tận dụng cách tiếp cận lookahead thì hiệu năng tăng lên đáng kể. Có thể tham khảo phần triển khai về việc này tại buildbarn/go-cdc
Không phải rsync vốn đã dùng ranh giới chunk xác định theo nội dung bằng điều kiện rolling hash hay sao? (link wiki 1, link wiki 2). Tôi nghi ngờ việc nhanh hơn rsync có thể đến từ hiệu quả của rolling hash và việc dùng file thực thi Windows native (vì hệ thống file của Windows chậm). Dù sao thì mức tăng hiệu năng này vẫn rất thú vị, và việc mã nguồn đã được mở cũng là tín hiệu tích cực. Hy vọng cách này sẽ được đưa vào bên trong rsync
Tôi vui vì Stadia lại để lại thêm một lợi ích dài hạn như thế này. Hơi tiếc là không có bản self-hosted; nhưng trong thế giới đầy DRM hiện nay, nếu có thì có lẽ cũng sẽ lập tức bị coi là công cụ cho nội dung lậu
Với ai từng tò mò Content Defined Chunking thực sự tạo chunk như thế nào, bài blog này và bài blog này giải thích khái niệm rất dễ hiểu
Câu then chốt: "Thuật toán remote diffing này dựa trên CDC (Content Defined Chunking), và theo kết quả thử nghiệm thì nhanh hơn rsync tới 30 lần (1500MB/s so với 50MB/s)"
Tôi tò mò không biết đã có ai đang làm việc để tích hợp tính năng này vào công cụ rsync tiêu chuẩn hay chưa. Tôi rất muốn tính năng này được dùng rộng rãi hơn, nhưng chỉ nhìn vào website chính thức thì thấy có vẻ thậm chí chưa hỗ trợ Linux-to-Linux nên khá đáng tiếc
Tôi cũng thấy dự án này khá hay. Tôi từng tự triển khai thứ gì đó tương tự để phù hợp với công việc của mình, và trong những điều kiện khó nhằn thì nó khá quan trọng. Tuy nhiên tôi vẫn nghĩ có lẽ bắt đầu từ rsync sẽ dễ hơn chăng
Tôi tự hỏi liệu công nghệ này có thể áp dụng cho git hay không. git blob tạo hash có kèm thông tin độ dài, nên chỉ cần sửa một phần dữ liệu là phải tính lại hash từ đầu. Với CDC thì có vẻ sẽ hiệu quả hơn nhiều
Tôi thấy ấn tượng với phần mô tả: “Chỉ cần tải và giải nén binary precompiled của bản phát hành mới nhất trên Windows. Binary Linux sẽ được công cụ Windows tự động triển khai vào ~/.cache/cdc-file-transfer. Không cần cài đặt riêng.” Khác với rsync, việc nó hoạt động mà không cần cài thêm dịch vụ ở máy đích Linux là một điểm hay. Tôi luôn thấy điểm này của rsync hơi phiền
Tôi tự hỏi IBM Aspera có hoạt động tương tự như cách này không. Khi còn làm QA cho một nhà phát hành game, tôi từng dùng Aspera để tải lên các bản ghi màn hình, và tốc độ nhanh hơn rất nhiều so với tốc độ upload thông thường của Internet ở văn phòng (giới thiệu IBM Aspera)