Google ได้เปิดซอร์สโค้ด CDC File Transfer ซึ่งเป็นเครื่องมือซิงโครไนซ์ไฟล์ประสิทธิภาพสูงที่พัฒนาขึ้นเดิมสำหรับนักพัฒนาเกม Stadia โปรเจกต์นี้เกิดขึ้นจากความต้องการในทางปฏิบัติ นักพัฒนาเกมที่ทำงานบน Windows ต้องการซิงค์เกมบิลด์ขนาดใหญ่ไปยัง Linux instances ในคลาวด์อย่างรวดเร็ว แต่เครื่องมือดั้งเดิมอย่าง rsync ช้าเกินไปสำหรับไฟล์ขนาดใหญ่มหาศาล
การปรับปรุงความเร็วที่ปฏิวัติวงการผ่าน Content-Defined Chunking
นวัตกรรมหลักอยู่ที่การแทนที่การแบ่งชิ้นแบบขนาดคงที่ของ rsync ด้วย Content-Defined Chunking (CDC) rsync แบบดั้งเดิมแบ่งไฟล์เป็นบล็อกขนาดคงที่ ซึ่งสร้างปัญหาเมื่อมีการแทรกหรือลบข้อมูลตรงกลางไฟล์ ชิ้นส่วนที่ตามมาทั้งหมดจะดูเหมือนเปลี่ยนแปลงแม้ว่าจะเหมือนเดิม CDC แก้ปัญหานี้โดยการกำหนดขอบเขตของชิ้นส่วนตามเนื้อหาไฟล์แทนที่จะเป็นตำแหน่ง หมายความว่าการแทรกจะส่งผลกระทบเฉพาะชิ้นส่วนที่ถูกแก้ไขเท่านั้น
ผลการปรับปรุงประสิทธิภาพน่าประทับใจมาก การทดสอบของ Google แสดงให้เห็นว่า CDC บรรลุความเร็วในการถ่ายโอน 1,500 MB/s เมื่อเทียบกับ 50 MB/s ของ rsync ซึ่งเป็นการปรับปรุง 30 เท่า ในสถานการณ์จริงกับเกมบิลด์ขนาด 49-58 GB, CDC rsync ทำการซิงค์เสร็จใน 75 วินาทีเมื่อเทียบกับ 270 วินาทีของ rsync แบบดั้งเดิม
การเปรียบเทียบประสิทธิภาพ
- CDC rsync: ความเร็วในการถ่ายโอนข้อมูล 1,500 MB/s
- Traditional rsync: ความเร็วในการถ่ายโอนข้อมูล 50 MB/s
- การปรับปรุงความเร็ว: เร็วขึ้น 30 เท่า
- เวลาในการซิงค์จริง: 75 วินาที ( CDC ) เทียบกับ 270 วินาที ( traditional rsync )
- ข้อมูลทดสอบ: เกมบิลด์ขนาด 49-58 GB
การใช้งานทางเทคนิคกระตุ้นความสนใจของนักพัฒนา
ชุมชนเทคนิคแสดงความสนใจเป็นพิเศษในการปรับปรุงอัลกอริทึมการแบ่งชิ้น นักพัฒนาบางคนได้ทดลองกับเวอร์ชันที่ปรับปรุงแล้วของ FastCDC ซึ่งเป็นอัลกอริทึมพื้นฐาน โดยมีการใช้งานหนึ่งแสดงประสิทธิภาพเพิ่มขึ้น 3.4% ผ่านเทคนิค lookahead แนวทางนี้สะท้อนกลยุทธ์การปรับปรุงที่ใช้ในการบีบอัดข้อมูล ซึ่งบ่งบอกว่ายังมีพื้นที่สำหรับการปรับปรุงเพิ่มเติม
อย่างไรก็ตาม มีความสับสนเกี่ยวกับความสามารถที่มีอยู่ของ rsync ในขณะที่สมาชิกชุมชนบางคนคิดในตอนแรกว่า rsync ใช้ขอบเขตที่กำหนดโดยเนื้อหาอยู่แล้ว ความจริงคือ rsync ใช้บล็อกขนาดคงที่กับการตรวจจับ rolling hash ซึ่งเป็นแนวทางที่แตกต่างและมีประสิทธิภาพ CPU น้อยกว่าวิธีของ CDC
คุณสมบัติทางเทคนิคหลัก
- Content-Defined Chunking (CDC): การแบ่งข้อมูลเป็นชิ้นขนาดผันแปรตามเนื้อหาของไฟล์แทนที่จะใช้ตำแหน่งคงที่
- FastCDC Algorithm: การแบ่งข้อมูลที่มีประสิทธิภาพด้วยการใช้ CPU น้อยที่สุดต่อไบต์
- ความสามารถในการสตรีม: การซิงโครไนซ์ไฟล์แบบเรียลไทม์ด้วยความล่าช้าประมาณ 0.04 วินาที
- รองรับการบีบอัด: มีการบีบอัดข้อมูลแบบเร็วในตัวสำหรับการถ่ายโอนข้อมูล
- การรวม SSH/SFTP: ใช้โปรโตคอลมาตรฐานสำหรับการถ่ายโอนที่ปลอดภัย
ข้อจำกัดของแพลตฟอร์มทำให้เกิดความกังวลเรื่องการนำไปใช้
แม้จะมีผลการปรับปรุงประสิทธิภาพที่น่าประทับใจ การรองรับแพลตฟอร์มที่จำกัดของเครื่องมือนี้ได้รับการวิพากษ์วิจารณ์ CDC File Transfer ปัจจุบันรองรับเฉพาะการรวมกันเฉพาะของ Windows-to-Linux และ Windows-to-Windows ซึ่งสะท้อนการออกแบบที่มุ่งเน้น Stadia เดิม โปรเจกต์นี้ไม่รองรับการถ่ายโอน Linux-to-Linux ซึ่งนักพัฒนาหลายคนถือว่าเป็นข้อจำกัดที่สำคัญ
ความคิดริเริ่มที่ยอดเยี่ยม โดยเฉพาะอัลกอริทึมซิงค์ใหม่ แต่มีอุปสรรคใหญ่ต่อการนำไปใช้ ทำงานได้เฉพาะกับการรวมกันแปลกๆ ของ (แพลตฟอร์มต้นทาง / แพลตฟอร์มปลายทาง) ทำไม???? มันยากแค่ไหนที่จะเขียนโค้ดที่ไม่ขึ้นกับแพลตฟอร์มเพื่ออ่าน/เขียนไบต์และส่งผ่านสายในปี 2025?
ระบบบิลด์ของโปรเจกต์ยังสร้างอุปสรรค มันต้องการ Bazel ซึ่งเป็นเครื่องมือบิลด์ของ Google ที่นักพัฒนาบางคนพบว่าใช้งานยุ่งยากเมื่อเทียบกับระบบบิลด์มาตรฐานอื่นๆ
ตารางการรองรับแพลตฟอร์ม
เครื่องมือ | Windows x64 | Ubuntu 22.04 x64 | Ubuntu 22.04 aarch64 | macOS |
---|---|---|---|---|
cdc_rsync (จาก) | ✓ | ✓ | ✓ | - |
cdc_rsync (ไปยัง) | ✓ | ✓ | ✓ | - |
cdc_stream (จาก) | ✓ | ✓ | - | - |
cdc_stream (ไปยัง) | ✓ | ✓ | - | - |
แนวโน้มอนาคตและความเป็นไปได้ในการบูรณาการ
การอภิปรายของชุมชนได้สำรวจว่าการปรับปรุงเหล่านี้สามารถบูรณาการเข้ากับ rsync มาตรฐานหรือนำไปใช้กับเครื่องมืออื่นๆ ได้หรือไม่ นักพัฒนาบางคนสนใจเกี่ยวกับการประยุกต์ใช้ที่เป็นไปได้ในระบบควบคุมเวอร์ชันอย่าง Git ซึ่งกลยุทธ์การแบ่งชิ้นที่คล้ายกันสามารถปรับปรุงประสิทธิภาพสำหรับ repositories ขนาดใหญ่
โปรเจกต์ดูเหมือนจะหยุดชะงัก โดย repository ถูกเก็บถาวรเมื่อเก้าเดือนที่แล้วและไม่มี commits ในสองปี อย่างไรก็ตาม การเปิดซอร์สโค้ดให้รากฐานสำหรับการพัฒนาที่ขับเคลื่อนโดยชุมชน และนักพัฒนาหลายคนแสดงความสนใจในการขยายการรองรับแพลตฟอร์มและปรับปรุงกระบวนการบิลด์
โปรเจกต์ CDC File Transfer แสดงให้เห็นว่าการแก้ปัญหาภายในเฉพาะสามารถนำไปสู่นวัตกรรมที่ใช้ได้อย่างกว้างขวาง แม้ว่าการใช้งานปัจจุบันจะมีข้อจำกัด อัลกอริทึมการแบ่งชิ้นพื้นฐานแสดงถึงความก้าวหน้าที่สำคัญในเทคโนโลยีการซิงโครไนซ์ไฟล์ที่สามารถเป็นประโยชน์ต่อชุมชนนักพัฒนาในวงกว้างหากมีการแก้ไขอุปสรรคการนำไปใช้
อ้างอิง: CDC File Transfer