Mono-Repo 與 Multi-Repo:代碼存儲策略的亮點

已發表: 2021-12-22

Mono-repo 和 Multi-repo 是通過 Git 託管和管理代碼的兩種主要策略。 我們詳細討論了這些策略及其優缺點。

介紹

大多數現代項目都在 Git 上進行管理和託管。 Git 已成為在世界任何地方進行分佈式源代碼管理、版本控制和協作的標準平台。 Git 快速高效。 託管和管理 Git 代碼有兩種主要方法:

  • 單一回購
  • 多回購

在深入研究這些方法之前,讓我們了解 repo 的工作原理。

什麼是回購?

存儲庫 (Repo) 包含項目的所有文件夾和文件。 它還包含有關用戶、人員和計算機的信息。

存儲庫數據受版本控制。 回購可以由個人或一組團隊成員擁有。

Git 是一個存儲庫。 它可以是公共的、私有的或內部的。 GitHub 是 Git 存儲庫的託管服務,具有用戶界面。

Git 提供版本控制和代碼共享功能,然而,Git 的不同之處在於,如果開發人員想要對他們的文件進行一些更改,他們可以將整個存儲庫複製到他們的本地系統。 因此,即使開發人員沒有對特定項目的寫入權限,他們也可以在本地複制內容並對其進行修改(稱為分叉)。

此外,如果開發人員想要共享本地所做的更改,他們可以向項目所有者發送“拉取請求”。

一個項目可以有一個服務。 如果您的項目有多個工作流,您可以為每個工作流創建多個服務。 大多數開發人員更喜歡將較大的項目拆分為具有一個或多個功能的較小的獨立服務。 每個服務都可以解決各種業務問題。 隨著無服務器框架的流行,用戶可以將功能作為服務訪問。

一旦您創建了這些功能即服務並部署它們,下一步就是對它們進行結構化和版本控制——您可以將所有服務放在一個存儲庫中(mono-repo)——或者為您擁有的每個服務擁有一個單獨的存儲庫(多回購)!

單回購 多回購

什麼是 Mono-repo?

在單一存儲庫方法中,您可以將所有服務保存在單個(單一)存儲庫中。 您仍然可以獨立部署和管理每個服務。 這些服務可以共享公共庫和代碼。

Facebook、Google 和 Dropbox 等公司使用 mono-repo。

Mono-repo 的優勢

Mono-repo 方法有很多優點:

  • 一個存儲所有項目代碼的地方,團隊中的每個人都可以訪問
  • 易於重用和共享代碼,與團隊協作
  • 易於理解您的更改對整個項目的影響
  • 代碼重構和大量代碼更改的最佳選擇
  • 團隊成員可以全面了解整個項目
  • 易於管理依賴項

Mono-repo 的缺點

當然,mono-repo 有一些缺點,主要是性能。 如果您的項目增長並且每隔一天添加更多文件,則簽出、拉取和其他操作可能會變慢並且文件搜索可能需要更長的時間。

此外,如果您為您的項目僱用了很多獨立承包商,那麼讓他們訪問整個代碼庫可能並不那麼安全。

此外,實施持續部署 (CD) 也很困難,因為很多人可以簽入他們的更改,而您的持續集成 (CI) 系統可能必須進行多次重建。

使用單一存儲庫的大公司已經定制了工具來處理擴展問題。 例如,Facebook 使用自定義文件系統和源代碼控制。

什麼是多回購?

在多存儲庫方法中,有多個存儲庫託管項目的多個庫和服務。 如果服務發生更改,開發人員只需重建該服務而不是整個項目。 個人和團隊可以處理他們的特定服務,並且他們只能訪問所需的服務。

Netflix 和 Amazon 等公司使用多存儲庫。

多回購的優勢

採用多回購的公司數量遠多於採用單一回購的公司,原因如下:

  • 每個服務和庫都有自己的版本控制
  • 代碼簽出和拉取小而獨立,因此即使項目規模增長也不存在性能問題
  • 團隊可以獨立工作,無需訪問整個代碼庫
  • 更快的開發和靈活性
  • 每個服務可以單獨發布,有自己的部署週期,從而使 CI 和 CD 更容易實現
  • 更好的訪問控制——所有團隊不需要擁有對所有庫的完全訪問權限——但如果需要,可以獲得讀取訪問權限

多回購的缺點

  • 跨服務和項目使用的依賴項和庫必須定期同步以獲取最新版本
  • 在某些時候鼓勵孤立的文化,導致重複的代碼和單個團隊試圖解決相同的問題
  • 每個團隊可能會為其代碼遵循一組不同的最佳實踐,從而導致難以遵循常見的最佳實踐

Mono 和 Multi Repo 的區別

讓我們概括一下單回購和多回購之間的區別:

單一回購多回購
一個組織的所有項目的所有代碼都駐留在一個中央存儲庫中每個服務和項目都有一個單獨的存儲庫
團隊可以協作和一起工作; 他們可以看到彼此的變化團隊可以自主工作; 個別更改不會影響其他團隊或項目的更改
每個人都可以訪問整個項目結構管理員可以限制對開發人員需要訪問的項目或服務的訪問控制
如果項目規模不斷增長,可能會出現放大問題良好的性能,因為有限的代碼和較小的服務單元
難以實施持續部署(CD)和持續集成(CI) 開發者可以輕鬆實現CD和CI,因為他們可以獨立構建服務
開發人員可以輕鬆共享庫、API 和其他公共代碼,因為它們在中央存儲庫中更新對庫和其他常見代碼的任何更改都應定期同步以避免以後出現問題

結論

mono-repo 和 multi-repo 都同樣受歡迎,哪個更好取決於您的項目規模、項目要求以及您需要的版本控制和訪問控制級別。

Mono-repo 有利於一致性,而 multi-repo 側重於解耦。 在單存儲庫中,整個團隊可以看到一個人所做的更改,多存儲庫為每個團隊創建一個單獨的存儲庫,他們只能訪問所需的服務。 如果你想在你的項目中結合使用 mono-repo 和 multi-repo,你可以選擇 meta,一個管理多個項目和庫的工具。

您可能還對學習 Git 的免費資源感興趣。