3 điểm bởi xguru 2025-03-25 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • bundle-uri là một tính năng mới của Git, cho phép tải các tệp đã được cache để điền sẵn dữ liệu dự án trước, rồi giảm bớt quy trình fetch phức tạp với máy chủ
  • Thông thường, lệnh git clone sẽ thương lượng với máy chủ rồi tải dữ liệu cần thiết về → điều này có thể kém hiệu quả
  • bundle-uri lấy dữ liệu ban đầu đã được cache từ CDN, sau đó chỉ cập nhật phần mới nhất từ máy chủ → có thể tiết kiệm thời gian

Tốc độ clone có nhanh hơn không?

Yes? - Có thể nhanh hơn

  • Khi dùng tùy chọn tệp cục bộ, tốc độ clone tăng lên rất nhiều
  • Nếu dùng tệp bundle trên hệ thống tệp được mount trong VM hoặc từ cache đám mây, việc đồng bộ có thể nhanh hơn

No? - Có thể chậm hơn

  • Tưởng rằng lấy cùng một dữ liệu từ CDN sẽ nhanh hơn, nhưng thực tế lại chậm hơn
  • Kết quả thử nghiệm: clone dùng bundle chậm hơn clone thông thường
    • Clone thông thường: 2 phút 36 giây
    • Clone dùng bundle: 3 phút 20 giây
  • Xảy ra vấn đề các object đã nhận từ bundle vẫn bị tải lại

Maybe? - Cũng có thể

  • Vấn đề xảy ra vì Git chỉ đọc refs/heads (tham chiếu nhánh) từ tệp bundle
  • Các tham chiếu còn lại bị bỏ qua nên phải tải thêm dữ liệu từ máy chủ
  • Nếu sửa mã Git để sao chép tất cả tham chiếu thì tốc độ clone được cải thiện
    • Thời gian clone sau khi sửa: 2 phút 19 giây (nhanh hơn 2 phút 36 giây trước đó)
    • Số object tải thêm: 43.877 (khoảng 1% tổng số)

Cách sửa và áp dụng bản vá

  • Sửa phần trong mã bundle-uri.c của Git đang bỏ qua các tham chiếu ngoài refs/heads
  • Sau khi sửa, thay đổi để sao chép mọi tham chiếu → tốc độ clone được cải thiện
  • Đây là một bản vá tối thiểu chỉ với 6 ký tự thay đổi

Có nên dùng tính năng này không?

possibly - Có lẽ sẽ hữu ích

  • Với các nền tảng như GitHub, GitLab, lợi ích lớn là có thể giảm tải CPU phía máy chủ
    • Không cần máy chủ trực tiếp tính packfile mà có thể xử lý qua CDN → tiết kiệm tài nguyên máy chủ
  • Một số trường hợp người dùng cá nhân cũng có thể thấy hữu ích:
    • Khi phải lặp lại các lần clone quy mô lớn từ máy chủ Git nội bộ
    • Khi hệ thống CI/CD cần thực hiện lặp đi lặp lại các tác vụ full clone

Khả năng cao là trên thực tế sẽ bị áp dụng bắt buộc

  • Trong giao thức Git mới nhất, máy chủ có thể cung cấp URL bundle cho client
  • Nếu máy chủ cung cấp URL tệp bundle, client sẽ tự động tải về rồi đồng bộ tiếp
  • Nếu GitHub hoặc các dịch vụ tương tự bật tính năng này, người dùng gần như không có quyền lựa chọn

Kết luận

  • Dùng tệp bundle có thể giúp tăng tốc clone, nhưng do cách Git xử lý nên ban đầu thậm chí có thể chậm hơn
  • Nếu sửa mã Git để cải thiện cách xử lý tham chiếu, tốc độ clone sẽ được cải thiện
  • Nếu GitHub, GitLab và các dịch vụ tương tự áp dụng tính năng này trong tương lai, nhiều khả năng client sẽ tự động sử dụng nó

Chưa có bình luận nào.

Chưa có bình luận nào.