Site icon Khoa Phạm BK Blog

Giới thiệu về Mono-Repo.

Trong các hệ thống kiểm soát sửa đổi (Revision Control System), monorepo là một chiến lược phát triển phần mềm trong đó mã cho nhiều dự án được lưu trữ trong cùng một kho. Tính đến năm 2017, các  hình thức khác nhau của thực hành kỹ thuật phần mềm này đã được hơn hai  thập kỷ, nhưng khái niệm chung mới chỉ được đặt tên gần đây.

Theo Wikipedia

Mono trong tiếng Hy Lạp là một, cô đơn, đơn lẻ và repo ở đây là repository (trong tiếng anh là kho chứa). Trường hợp ở đây là các repository trong các hệ thống kiểm soát phiên bản (Version Control System) như Git hay SVN.

Mono-repo là repository đơn lẻ mà trong đó các module con nằm gói gọn trong 1 repo. Ngoài ra, bên cạnh mono-repo thì còn có Multi-repo (nhiều repository) và Monolith (nguyên khối).

Mỗi kiến trúc Microservice trên đều đem lại một lợi ích nhất định. Với Monolith thì đây là kiến trúc căn nguyên và thường được sử dụng để kiến trúc các mô hình đúng nghĩa “nguyên khối” là không có sự phân chia module. Hiểu nôm na là mã nguồn dành cho giao diện người dùng (front-end)  truy vấn, truy cập vào database (back-end) sẽ nằm chung một repository.

Song các kiến trúc như Multi-repo và Mono-repo được tái kiến trúc từ Monolith để cách thức lưu trữ và quản lý mã nguồn trở nên “dễ thở” hơn.

Không phải mỗi ứng dụng nào cũng được phát triển dưới dạng microservices. Tuy nhiên, dù có phải tái cấu trúc mã nguồn từ một khối nguyên khối hay không, chúng ta đều sẽ phải lựa chọn cách thức lưu trữ và quản lý mã nguồn theo kiểu multiple repositories (multirepo) hay mono repositories (monorepo). Sơ lược của hai kiểu cách thức lưu trữ và quản lý này như sau:

Ưu điểm của Monorepo

Monorepos không chỉ duy trì được hầu hết các ưu điểm khi triển khai dưới dạng microservices mà còn đơn giản hóa việc chia sẻ mã và tái cấu trúc dự án chéo, chúng giảm đáng kể chi phí tạo libs, microservices và microfrontends. Vì vậy, việc áp dụng monorepo thường cho phép triển khai linh hoạt hơn.

Các tools sử dụng để triển khai Monorepo

  1. Yarn Workspaces: https://classic.yarnpkg.com/en/docs/workspaces/
  2. Bit: https://bit.dev/
  3. NX: https://nx.dev/
  4. Rush: https://rushjs.io/
  5. Lerna: https://lerna.js.org/
  6. Bazel Build System (Google): https://bazel.build/
  7. Buck: https://buck.build/
  8. Pants Build System (Twitter): https://github.com/pantsbuild/pants
  9. Please Build System: https://please.build/
  10. Oao: https://github.com/guigrpa/oao
  11. Bolt: https://github.com/boltpkg/bolt

Exit mobile version