• 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 เป็นต้นนำฟีเจอร์นี้มาใช้ ก็มีแนวโน้มสูงที่ฝั่งไคลเอนต์จะใช้งานโดยอัตโนมัติ

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น