Uber duy trì nhánh chính luôn ổn định trong monorepo đa ngôn ngữ như thế nào?

Phần mềm01 tháng 10, 2026·4 phút đọc

Dhruva Juloori trình bày cách Uber duy trì nhánh chính (mainline) luôn ổn định trong các monorepo khổng lồ với hơn 65.000 thay đổi mỗi tháng. Hệ thống SubmitQueue sử dụng cây suy đoán nhị phân, phân tích xung đột và mô hình machine learning để dự đoán khả năng build thành công cũng như thời gian thực thi. Nhờ bỏ qua các diff lớn, Uber đã cắt giảm 53% tài nguyên CI và tăng tốc độ merge PR lên 37%.

Uber vận hành một trong những monorepo lớn nhất thế giới, nơi diễn ra hơn 65.000 thay đổi code mỗi tháng. Việc giữ cho nhánh chính luôn "xanh" — tức là mọi thay đổi đều phải build và kiểm thử thành công trước khi được hợp nhất — là một bài toán hạ tầng cực kỳ phức tạp. Tại một hội nghị công nghệ gần đây, kỹ sư Dhruva Juloori của Uber đã chia sẻ cách hệ thống SubmitQueue của họ giải quyết bài toán này.

Bài toán nhánh chính trong monorepo khổng lồ

Khi hàng nghìn kỹ sư cùng lúc đẩy thay đổi vào một kho mã nguồn duy nhất, mỗi pull request (PR) đều phải chạy qua một chuỗi kiểm thử tự động nghiêm ngặt. Nếu chỉ một thay đổi khiến build thất bại, toàn bộ nhánh chính có thể bị "đỏ", làm tê liệt công việc của tất cả các nhóm khác.

Vấn đề càng trở nên khó nhằn hơn khi monorepo của Uber chứa nhiều ngôn ngữ lập trình khác nhau — từ Java, Go, Python cho đến các ngôn ngữ chuyên biệt. Mỗi thay đổi có thể ảnh hưởng đến hàng loạt dịch vụ phụ thuộc lẫn nhau, khiến việc xác định xung đột trở thành một thách thức thực sự.

SubmitQueue: cây suy đoán nhị phân và phân tích xung đột

Để giải quyết vấn đề này, Uber đã xây dựng SubmitQueue, một hệ thống hàng đợi thông minh quản lý thứ tự hợp nhất các thay đổi vào nhánh chính.

Điểm cốt lõi của SubmitQueue là cây suy đoán nhị phân (binary speculation tree). Thay vì chạy kiểm thử cho từng thay đổi một cách tuần tự — vốn cực kỳ tốn thời gian và tài nguyên — hệ thống nhóm nhiều thay đổi lại và suy đoán trước kết quả build.

Ý tưởng cốt lõi là tận dụng cấu trúc cây để dự đoán và xác minh song song, giảm thiểu số lần chạy build thực tế cần thiết.

Khi một tập hợp thay đổi được dự đoán là có thể merge thành công, hệ thống sẽ xác minh giả định đó. Nếu phát hiện xung đột, nó sẽ phân tích sâu hơn để khoanh vùng chính xác thay đổi gây lỗi, nhờ đó chỉ cần chạy lại một phần nhỏ các bài kiểm thử.

Machine learning dự đoán kết quả build

Một điểm đáng chú ý trong chia sẻ của Juloori là việc Uber áp dụng mô hình machine learning để dự đoán:

  • Khả năng build thành công của một tổ hợp thay đổi trước khi thực sự chạy kiểm thử.
  • Thời gian thực thi dự kiến, giúp hệ thống lập lịch tài nguyên CI hiệu quả hơn.

Bằng cách học từ dữ liệu lịch sử của hàng trăm nghìn lần build trước đó, mô hình có thể nhận diện các mẫu thay đổi thường gây lỗi hoặc các dịch vụ có xu hướng phụ thuộc nhau mạnh. Điều này cho phép SubmitQueue đưa ra quyết định thông minh về thứ tự và cách thức kiểm thử.

Kết quả ấn tượng: giảm 53% tài nguyên CI, tăng tốc 37%

Theo Juloori, một trong những tối ưu hóa quan trọng nhất là bỏ qua các diff lớn trong quá trình suy đoán. Những thay đổi khổng lồ thường kéo theo chuỗi phụ thuộc phức tạp và chi phí kiểm thử cao, trong khi dự đoán về chúng lại kém tin cậy.

Chiến lược này mang lại hiệu quả rõ rệt:

  • Cắt giảm 53% tài nguyên CI — tiết kiệm đáng kể chi phí hạ tầng tính toán.
  • Tăng tốc độ merge PR lên 37% — giúp các kỹ sư đưa code vào nhánh chính nhanh hơn.

Với quy mô hàng chục nghìn thay đổi mỗi tháng, những con số này đại diện cho khoản tiết kiệm khổng lồ cả về chi phí lẫn thời gian phát triển sản phẩm.

Bài học cho các đội kỹ thuật tại Việt Nam

Câu chuyện của Uber mang lại nhiều gợi ý cho các startup và doanh nghiệp công nghệ Việt Nam đang phát triển nhanh:

  • Đầu tư vào CI/CD thông minh ngay từ khi quy mô còn nhỏ sẽ giúp tránh "nợ kỹ thuật" về sau.
  • Ứng dụng machine learning vào DevOps (MLOps) là xu hướng đang lên, giúp tối ưu chi phí hạ tầng cloud — vốn là khoản chi lớn của nhiều công ty.
  • Monorepo không đáng sợ nếu có công cụ phù hợp; nó giúp quản lý phụ thuộc và tái sử dụng code tốt hơn nhiều so với việc phân tán hàng trăm repo nhỏ.

Bài trình bày của Dhruva Juloori cho thấy rằng ở quy mô cực lớn, giải pháp cho các bài toán kỹ thuật thường nằm ở giao điểm giữa hạ tầng hệ thống, thuật toán và học máy. Đây là minh chứng rõ ràng cho xu hướng kết hợp AI vào vận hành phần mềm — hướng đi mà nhiều đội ngũ kỹ thuật trên toàn thế giới, trong đó có Việt Nam, đang tích cực theo đuổi.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗