bundle-uri เป็นฟีเจอร์ใหม่ของ Git ที่ดาวน์โหลดไฟล์แคชมาเติมข้อมูลโปรเจ็กต์ล่วงหน้า แล้วลดขั้นตอนการ fetch ที่ซับซ้อนกับเซิร์ฟเวอร์ลง
- โดยทั่วไปคำสั่ง
git clone จะเจรจากับเซิร์ฟเวอร์ก่อนดาวน์โหลดข้อมูลที่ต้องใช้ → ซึ่งอาจไม่มีประสิทธิภาพ
bundle-uri จะดึงข้อมูลตั้งต้นที่ถูกแคชไว้จาก CDN มาก่อน แล้วค่อยอัปเดตเฉพาะส่วนล่าสุดจากเซิร์ฟเวอร์ภายหลัง → ช่วยประหยัดเวลาได้
ความเร็วในการ clone ดีขึ้นหรือไม่?
Yes? - อาจเร็วขึ้น
- หากใช้ตัวเลือกไฟล์ภายในเครื่อง ความเร็วในการ clone จะเพิ่มขึ้นมาก
- หากใช้ไฟล์ bundle บนระบบไฟล์ที่เมานต์ไว้ใน VM หรือบน cloud cache ก็อาจซิงก์ได้เร็วขึ้น
No? - อาจช้าลง
- เดิมคิดว่าถ้ารับข้อมูลเดียวกันจาก CDN น่าจะเร็วกว่า แต่กลับช้ากว่าเดิม
- ผลการทดลอง: การ clone ที่ใช้ bundle ช้ากว่าการ clone แบบปกติ
- clone ปกติ: 2 นาที 36 วินาที
- clone แบบใช้ bundle: 3 นาที 20 วินาที
- พบปัญหาว่าอ็อบเจ็กต์ที่รับมาจาก bundle แล้วถูกดาวน์โหลดซ้ำอีกครั้ง
Maybe? - ก็เป็นไปได้
- ปัญหาเกิดจาก Git อ่านแค่
refs/heads (การอ้างอิงของ branch) จากไฟล์ bundle
- การอ้างอิงที่เหลือถูกมองข้าม ทำให้ต้องดาวน์โหลดข้อมูลเพิ่มจากเซิร์ฟเวอร์
- หากแก้โค้ด Git ให้คัดลอกการอ้างอิงทั้งหมด ความเร็วในการ clone จะดีขึ้น
- เวลาหลังแก้ไข: 2 นาที 19 วินาที (เร็วกว่าเดิมที่ 2 นาที 36 วินาที)
- จำนวนอ็อบเจ็กต์ที่ดาวน์โหลดเพิ่ม: 43,877 รายการ (ประมาณ 1% ของทั้งหมด)
วิธีแก้และการใช้แพตช์
- แก้ส่วนของโค้ด
bundle-uri.c ใน Git ที่มองข้ามการอ้างอิงนอกเหนือจาก refs/heads
- หลังแก้แล้วเปลี่ยนให้คัดลอกการอ้างอิงทั้งหมด → ความเร็วในการ clone ดีขึ้น
- การแก้นี้เป็นแพตช์ขนาดเล็กมากที่เปลี่ยนเพียง 6 ตัวอักษร
ควรใช้ฟีเจอร์นี้หรือไม่?
possibly - อาจช่วยได้
- บนแพลตฟอร์มอย่าง GitHub และ GitLab ข้อดีสำคัญคือช่วยลดภาระ CPU ฝั่งเซิร์ฟเวอร์ได้มาก
- ไม่ต้องให้เซิร์ฟเวอร์คำนวณ packfile โดยตรง แต่ให้ CDN จัดการแทน → ประหยัดทรัพยากรเซิร์ฟเวอร์
- กรณีที่อาจมีประโยชน์สำหรับผู้ใช้ทั่วไปด้วย:
- ต้องทำ clone ขนาดใหญ่ซ้ำๆ จาก Git server ภายในองค์กร
- ระบบ CI/CD ต้องทำ full clone ซ้ำเป็นประจำ
ในทางปฏิบัติมีโอกาสสูงที่จะถูกบังคับใช้
- ใน Git protocol รุ่นใหม่ เซิร์ฟเวอร์สามารถส่ง URL ของ bundle ให้ไคลเอนต์ได้
- เมื่อเซิร์ฟเวอร์ส่ง URL ของไฟล์ bundle มา ไคลเอนต์จะดาวน์โหลดและซิงก์ต่อโดยอัตโนมัติ
- หาก GitHub เป็นต้นเปิดใช้ฟีเจอร์นี้ ผู้ใช้ก็แทบไม่มีทางเลือก
บทสรุป
- การใช้ไฟล์ bundle อาจทำให้ clone เร็วขึ้นได้ แต่ในช่วงแรกก็อาจช้าลงเพราะวิธีประมวลผลของ Git
- หากแก้โค้ด Git เพื่อปรับปรุงวิธีจัดการการอ้างอิง ความเร็วในการ clone จะดีขึ้น
- หากในอนาคต GitHub, GitLab เป็นต้นนำฟีเจอร์นี้มาใช้ ก็มีแนวโน้มสูงที่ฝั่งไคลเอนต์จะใช้งานโดยอัตโนมัติ
ยังไม่มีความคิดเห็น