跳至主要内容

代碼倉庫架構概覽 (Repository Architecture Overview)

選擇代碼倉庫策略是多服務平台的基礎決策。選擇 Monorepo(單體倉庫)還是 Polyrepo(多倉庫)取決於團隊規模、發布頻率以及組織需求。

比較:Monorepo vs Polyrepo

維度MonorepoPolyrepo
代碼共享跨應用原生引用。需要發布到註冊表或使用 Git 子模組。
原子性變更在單個 PR 中進行跨應用變更。需要多個 PR 並進行協調。
入職流程單個 git clone 指令。需要克隆多個代碼倉庫。
CI/CD 複雜性高(需要路徑過濾)。低(標準的單倉庫流水線)。
權限控制整個倉庫級別。每個服務細粒度控制。

Monorepo 策略

Monorepo 將所有服務存儲在 單個 Git 倉庫 中。

優點
  • 原子性變更:在一次提交中更新 API、後端和前端。
  • 簡化依賴管理:通過本地引用共享代碼。
  • 集成工具鏈:IDE 可以立即顯示所有使用者的錯誤。
權衡
  • 規模問題:隨著時間推移,倉庫可能會變得非常龐大。
  • 工具開銷:需要 Nx、Turborepo 或 Bazel 等專門工具。

Polyrepo 策略

在 Polyrepo 策略中,每個服務都位於其 獨立的代碼倉庫 中。

優點
  • 獨立生命週期:自主的 CI/CD、版本控制和發布。
  • 清晰邊界:自然防止意外耦合。
  • 細粒度訪問:團隊僅訪問其擁有的代碼。
權衡
  • 協調開銷:跨服務變更需要多個 PR。
  • 封裝複雜性:共享代碼必須作為包發布。

決策指南

因素MonorepoPolyrepo
團隊規模中小型 (< 30 名開發者)中大型
發布頻率協同發布每個服務獨立發布
共享代碼重度跨服務共享極少;首選 API 契約
所有權共享/流動每個倉庫明確歸屬

推薦選擇 Monorepo 的情況:

  • 團隊在全棧範圍內協作。
  • 內部包版本管理引起摩擦(“版本地獄”)。
  • 需要在整個平台實現端到端的類型安全。

推薦選擇 Polyrepo 的情況:

  • 團隊高度專業化且自主。
  • 某個倉庫包含海量二進制文件或模型。
  • 需要對每個服務進行嚴格的訪問控制。