Tại sao Google lại sử dụng Monorepo?
Ngày đó vào công ty, tôi thực sự ngạc nhiên khi thấy rằng ở đây mọi người đang setup môi trường coding dùng concept Monorepo cho tất cả các dự án và sản phẩm. Dành cho những ai chưa biết thì chúng ta cùng tìm hiểu một chút xem Monorepo là gì nhé!
Ngày đó vào công ty, tôi thực sự ngạc nhiên khi thấy rằng ở đây mọi người đang setup môi trường coding dùng concept Monorepo cho tất cả các dự án và sản phẩm. Dành cho những ai chưa biết thì chúng ta cùng tìm hiểu một chút xem Monorepo là gì nhé!
Theo sách giáo khoa thì: Monorepo (hay còn gọi là Mono-repo) là một chiến lược phát triển phần mềm trong đó mã nguồn cho tất cả các dự án liên quan được lưu trữ trong cùng một kho lưu trữ kiểm soát phiên bản (ví dụ: Git). Nó trái ngược với phương pháp truyền thống là lưu trữ mỗi dự án trong một kho lưu trữ riêng biệt. Nói cách khác, thì toàn bộ các dự án ở công ty chỉ có một repository duy nhất, có nghĩa là khi bạn clone git về, bạn có thể nhìn thấy toàn bộ tất cả các project khác đang chạy trong công ty.
Nghe cứ sao sao ấy phải không nhỉ, điều đầu tiên tôi quan ngại đó chính là khả năng bảo mật khi mà ai ai cũng có thể nhìn thấy code trong tất cả các dự án, ngoài ra cách này lại còn rất khó quản lý nữa chứ. Tại sao lại có cái concept mà chưa biết rõ lợi ích là gì đã thấy ngay rủi ro như vậy. Tuy nhiên, với quan điểm rằng: Cái gì hợp lý thì nó sẽ tồn tại mà nó tồn tại thì ắt nó phải hợp lý. Thế nên tôi đã thử đi khảo sát xem nó có gì thú vị mà công ty lại lựa chọn concept này. Khi khảo sát tôi mới ngã ngửa ra rằng, hoá ra các ông lớn như Google và Facebook cũng có dùng concept này

Vậy tại sao Google cũng dùng Monorepo, nó có điểm mạnh gì đáng để đánh đổi như vậy? Về cơ bản nó những điểm lợi như sau:
1. Dễ dàng chia sẻ mã:
Gogle có nhiều dự án liên quan cần chia sẻ mã chung. Monorepo giúp cho việc chia sẻ mã này trở nên dễ dàng hơn, giúp giảm bớt sự trùng lặp và cải thiện khả năng bảo trì.Ví dụ: mã cho các thư viện chung có thể được sử dụng bởi nhiều dự án khác nhau mà không cần phải sao chép mã vào mỗi dự án.
2. Tăng khả năng về tổng quan:
Việc quản lý tất cả mã trong một kho lưu trữ giúp Google có cái nhìn tổng quan về toàn bộ hệ thống, giúp việc theo dõi tiến độ và phát hiện lỗi dễ dàng hơn.Ví dụ, Google có thể sử dụng các công cụ phân tích để xác định các phần mã không được sử dụng hoặc các phần mã có thể được cải thiện.
3. Tăng hiệu quả:
Monorepo có thể giúp Google tăng hiệu quả quy trình phát triển phần mềm bằng cách giảm bớt sự chuyển đổi ngữ cảnh và tự động hóa các tác vụ.Ví dụ, Google có thể sử dụng các công cụ để tự động kiểm tra mã, xây dựng dự án và triển khai các thay đổi.
4. Cải thiện chất lượng:
Monorepo có thể giúp Google cải thiện chất lượng phần mềm bằng cách giúp cho việc phát hiện và sửa lỗi dễ dàng hơn.Ví dụ, Google có thể sử dụng các công cụ để tự động phát hiện các lỗi tiềm ẩn trong mã.
5. Hỗ trợ phát triển nhanh:
Monorepo có thể giúp Google phát triển phần mềm nhanh hơn bằng cách giúp cho việc hợp tác giữa các nhóm phát triển dễ dàng hơn.Ví dụ, các nhóm phát triển khác nhau có thể làm việc trên cùng một mã trong kho lưu trữ mà không cần phải lo lắng về việc xung đột mã.
Tuy nhiên nói đi cũng phải nói lại, đó là những điểm yếu chết người của concept này:
- Phức tạp: Quản lý một kho lưu trữ lớn có thể phức tạp hơn so với việc quản lý nhiều repository nhỏ.
- Hiệu suất: Việc thực hiện các tác vụ trên repository lớn có thể ảnh hưởng đến hiệu suất.
- Rủi ro bảo mật: Một lỗ hổng bảo mật trong repository có thể ảnh hưởng đến tất cả các dự án được lưu trữ trong đó.
Và để giải quyết những nhược điểm này, Google đã phát triển một số công cụ và quy trình để quản lý Monorepo hiệu quả. Như là:
- Repo: Repo là một công cụ mã nguồn mở giúp quản lý kho lưu trữ Monorepo của Google. Repo giúp cho việc thực hiện các tác vụ trên kho lưu trữ hiệu quả hơn.
- Piper: Piper là một hệ thống tự động hóa quy trình phát triển phần mềm của Google.
- Blaze: Blaze là một hệ thống xây dựng phần mềm của Google. Blaze giúp xây dựng các dự án phần mềm một cách nhanh chóng và hiệu quả.
Vậy chốt lại là, thay vì cứ đi thắc mắc tại sao công ty lại dùng concept này rồi phủ nhận việc dùng nó thì mindset của tôi sẽ là nó đang được dùng có nghĩa là nó hợp lý, và khi đi tìm hiểu thì thấy nó cũng hợp lý thật :D
Về cơ bản, đây là một khái niệm rất hay và có nhiều điểm lợi. Tuy nhiên trước khi áp dụng concept này, chúng ta phải suy nghĩ thật kỹ mức độ rủi ro của nó và có kế hoạch để phòng ngừa phù hợp. Không phải là vì các ông lớn làm thì chúng ta cũng cứ mặc định áp dụng theo, chết dở đấy.
Hi vọng, keyword mình chia sẻ có hữu ích cho bạn. Xin cảm ơn, mình là Huy Đê Tê!

Khoa học - Công nghệ
/khoa-hoc-cong-nghe
Bài viết nổi bật khác
- Hot nhất
- Mới nhất