Jerry's Blog

Back

一、什么是 Monorepo?#

Monorepo = Mono(单一)+ Repo(仓库)

将组织内所有的代码放在同一个版本控制仓库中管理。

Monorepo vs Polyrepo 对比#

┌─────────────────────────────────────────────────────────────────────────────┐
│  Polyrepo(传统多仓库模式)          Monorepo(单一仓库模式)                 │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐    ┌─────────────────────────────────┐│
│  │ repo-A  │ │ repo-B  │ │ repo-C  │    │          mega-repo              ││
│  │ 前端    │ │ 后端    │ │ 公共库  │    │  ┌───────────────────────────┐  ││
│  │ .git    │ │ .git    │ │ .git    │    │  │ frontend/                 │  ││
│  └─────────┘ └─────────┘ └─────────┘    │  │ backend/                  │  ││
│                                          │  │ libs/common/              │  ││
│  ┌─────────┐ ┌─────────┐ ┌─────────┐    │  │ services/auth/            │  ││
│  │ repo-D  │ │ repo-E  │ │ repo-F  │    │  │ services/payment/         │  ││
│  │ 认证    │ │ 支付    │ │ 工具库  │    │  │ tools/                    │  ││
│  │ .git    │ │ .git    │ │ .git    │    │  └───────────────────────────┘  ││
│  └─────────┘ └─────────┘ └─────────┘    │          .git (唯一)            ││
│                                          └─────────────────────────────────┘│
│  每个项目独立的 Git 仓库                 所有项目在同一个 Git 仓库            │
└─────────────────────────────────────────────────────────────────────────────┘
plaintext

二、Monorepo 要解决什么问题?#

Polyrepo(多仓库)模式在实践中会遇到一系列痛点:

1. 依赖地狱 (Dependency Hell)#

repo-A (前端)         repo-B (后端)         repo-C (公共库)
├── package.json      ├── go.mod            ├── common v1.0
│   common: "^1.0"    │   common v1.2       │
│                     │                     │
└── 使用 v1.0         └── 使用 v1.2         └── 最新是 v2.0

😱 问题: 每个仓库依赖不同版本,升级公共库要协调多个团队
        "先升级 C,再升级 B,最后升级 A" ← 顺序错了就炸
plaintext

2. 跨仓库修改困难#

场景:修改一个 API 接口,需要同时改前端和后端

Polyrepo 流程

  1. 在 repo-B 创建分支,修改后端 API
  2. 提交 PR,等待 review,合并
  3. 发布新版本 v1.2.3
  4. 在 repo-A 创建分支,升级依赖到 v1.2.3
  5. 修改前端代码适配新 API
  6. 提交 PR,等待 review,合并
  7. 部署…

😱 一个简单的改动需要跨 2 个仓库、2 次 PR、2 次 review

3. 代码复用困难#

团队 A: "我写了一个很好用的日志库"
团队 B: "在哪?我怎么用?"
团队 A: "在 repo-X 里,你需要配置私有 npm registry..."
团队 B: "太麻烦了,我自己写一个吧"

结果: 组织内出现 N 个功能重复的日志库 😱
plaintext

4. 工具链和标准不统一#

仓库Lint格式化测试框架
repo-AESLintPrettierJest
repo-BTSLintMocha
repo-C

每个仓库各自为政,代码质量参差不齐。

5. 原子提交不可能#

需求:“重命名 User 为 Account,涉及 10 个服务”

  • Polyrepo:需要 10 个 PR,10 次 review,必须按顺序合并。中间状态系统不可用,出错回滚困难。
  • Monorepo:1 个 PR,1 次 review,原子提交。要么全部生效,要么全部回滚 ✅

三、Monorepo 的优势#

优势说明
统一版本,无依赖地狱所有代码在同一仓库,总是使用最新版本。修改公共库 → 自动影响所有使用者 → CI 立即告诉你哪里坏了
原子提交,跨项目修改简单一个 commit 可以同时修改前端 + 后端 + 公共库。一个 PR,一次 review,一次部署
代码可见性,促进复用所有代码在同一个地方,搜索即可发现。“有人写过这个功能吗?” → grep 一下就知道
统一工具链和标准根目录统一配置 eslint.config.js, tsconfig.json, CI/CD。所有项目自动继承,保证一致性
简化团队协作新人 onboarding:clone 一个仓库,所有代码都有了。跨团队协作:直接改代码,不需要等对方发版

四、为什么 Monorepo 需要”Google 级别的基础设施”?#

这是关键问题。Monorepo 理念很美好,但实现起来有严重的技术挑战:

挑战 1:仓库体积爆炸 💥#

公司规模
Google Piper~86 TB 代码,20 亿行,3500 万次提交
Microsoft~300 GB (Windows 仓库)

传统 Git 的问题

$ git clone mega-repo
Cloning into 'mega-repo'...
Receiving objects: 100% (50000000/50000000), 50.00 GiB | 10.00 MiB/s
... 等待 1.5 小时 ...

$ git status
... 等待 30 ...  (扫描数百万文件)

$ git log
... 等待 10 ...  (遍历数千万提交)
bash

😱 Git 在设计时没考虑这种规模,完全不可用

挑战 2:必须 clone 整个仓库#

开发者: "我只想改 frontend/button.tsx,为什么要下载 50 GB?"

Git 的设计: 仓库是一个整体,要么全有,要么全无
           (sparse-checkout 只是不显示文件,数据还是要下载)
plaintext

挑战 3:CI/CD 时间爆炸#

场景:修改了 libs/common/utils.ts

天真的 CI: "common 改了,重新构建所有依赖它的 100 个项目"
           → 构建时间: 4 小时

需要: 智能的增量构建 + 依赖分析 + 分布式构建 + 远程缓存
plaintext

挑战 4:权限控制#

  • Git 权限:仓库级别(要么能访问整个仓库,要么不能)
  • 现实需求
    • 财务代码只有财务团队能看
    • 安全相关代码只有安全团队能改
    • 实习生不能碰生产配置

需要:文件夹/文件级别的细粒度权限控制


五、Google 的解决方案 vs 普通团队的困境#

Google 的解决方案#

组件功能
Piper (版本控制)自研的集中式版本控制系统(不是 Git),服务端存储,客户端只下载需要的文件
CitC (Clients in the Cloud)云端虚拟文件系统。开发者的 workspace 在云端,本地只是一个薄客户端。修改的文件按需同步,不需要 clone
Blaze/Bazel (构建系统)增量构建,只构建真正改变的部分。分布式构建,数千台机器并行。远程缓存,相同输入直接复用结果
Critique (代码审查)支持超大规模的 code review 工具
基础设施数万台服务器

普通团队的困境#

“我们想用 Monorepo,但是…”

  • ❌ Git 在大仓库下太慢
  • ❌ 没有云端 workspace,必须 clone 整个仓库
  • ❌ GitHub/GitLab 不支持文件级权限
  • ❌ 没有分布式构建集群
  • ❌ 没有智能的增量 CI

结果:仓库一大就卡死,只能拆分成多个仓库 → 回到 Polyrepo 😢


六、Mega 如何填补这个空白#

Mega 是一个开源项目,旨在为普通团队提供类似 Google Piper 的能力:

能力Google PiperMega
版本控制Piper (自研)Mega Server (Git 兼容),服务端存储,支持标准 Git 协议
虚拟文件系统CitC (云端 workspace)Scorpio (FUSE),将 Monorepo 挂载为本地文件系统,按需加载,不需要 clone
构建系统Blaze/BazelBuck2 集成,Meta 开源的构建系统,增量构建 + 远程缓存
权限控制内部 ACL 系统Saturn (Cedar Policy),基于 AWS Cedar 的策略引擎,文件/目录级别的细粒度权限
开源❌ 不开源✅ 完全开源
自托管❌ 只能在 Google 内部✅ 可以自己部署
Git 兼容❌ 完全不同的协议✅ 使用标准 Git 命令

七、总结#

问题答案
什么是 Monorepo?将所有代码放在单一仓库中管理的实践
解决什么问题?依赖管理混乱、跨项目修改困难、代码复用低、标准不统一
为什么需要特殊基础设施?Git 在设计时没考虑超大仓库:必须 clone 整个仓库(太大)、大仓库下所有操作都很慢、没有文件级权限控制、需要智能的增量构建系统
Mega 的价值?开源的 Google Piper 替代品:Scorpio FUSE 按需加载、Git 兼容无学习成本、Cedar 细粒度权限、Buck2 高效构建、可自托管

一句话:Mega 让没有 Google 级别资源的团队,也能享受 Monorepo 的好处。


八、Mega 系统架构深度解析#

下面我们深入 Mega 的技术架构,看看它是如何实现 “开源版 Google Piper” 的。

8.1 整体架构总览#

┌─────────────────────────────────────────────────────────────────────────────────────────┐
│                                    MEGA 系统架构                                         │
│                       (Monorepo & Monolithic Codebase Management)                       │
│                              Google Piper 的开源实现                                      │
├─────────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                         │
│   ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│   │                              Client Layer 客户端层                               │   │
│   ├─────────────────────────────────────────────────────────────────────────────────┤   │
│   │                                                                                 │   │
│   │  ┌─────────────┐   ┌─────────────┐   ┌─────────────┐   ┌─────────────────────┐  │   │
│   │  │   Git CLI   │   │   Moon      │   │  Scorpio    │   │    IDE/Editor       │  │   │
│   │  │  (git push  │   │ (Web UI)    │   │  (FUSE FS)  │   │  (VSCode, etc.)     │  │   │
│   │  │   git pull) │   │  React/TS   │   │  挂载 Mono  │   │                     │  │   │
│   │  └──────┬──────┘   └──────┬──────┘   └──────┬──────┘   └─────────┬───────────┘  │   │
│   │         │                 │                 │                   │              │   │
│   └─────────┼─────────────────┼─────────────────┼───────────────────┼──────────────┘   │
│             │                 │                 │                   │                  │
│             │ SSH/HTTP        │ HTTP REST       │ HTTP REST         │ HTTP/Git         │
│             │ Git Protocol    │ API             │ API               │ Protocol         │
│             ▼                 ▼                 ▼                   ▼                  │
│   ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│   │                          Gateway Layer 网关层 (Mono)                             │   │
│   ├─────────────────────────────────────────────────────────────────────────────────┤   │
│   │                                                                                 │   │
│   │  ┌─────────────────────────────────────────────────────────────────────────┐    │   │
│   │  │                         mono (Main Binary)                              │    │   │
│   │  │  ┌───────────────┐  ┌───────────────┐  ┌───────────────────────────┐    │    │   │
│   │  │  │  HTTP Server  │  │  SSH Server   │  │      REST API Router      │    │    │   │
│   │  │  │  (Axum)       │  │  (Russh)      │  │  /api/v1/repo/*           │    │    │   │
│   │  │  │  :8000        │  │  :8100        │  │  /api/v1/cl/*             │    │    │   │
│   │  │  └───────────────┘  └───────────────┘  │  /api/v1/issue/*          │    │    │   │
│   │  │                                        │  /api/v1/lfs/*            │    │    │   │
│   │  │  ┌───────────────────────────────────┐ │  /api/v1/user/*           │    │    │   │
│   │  │  │      Git Protocol Handler         │ └───────────────────────────┘    │    │   │
│   │  │  │  git-upload-pack / receive-pack   │                                  │    │   │
│   │  │  └───────────────────────────────────┘                                  │    │   │
│   │  └─────────────────────────────────────────────────────────────────────────┘    │   │
│   │                                                                                 │   │
│   └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                          │                                              │
│                                          ▼                                              │
│   ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│   │                         Core Services Layer 核心服务层                           │   │
│   ├─────────────────────────────────────────────────────────────────────────────────┤   │
│   │                                                                                 │   │
│   │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────────┐ │   │
│   │  │   Ceres     │  │   Vault     │  │   Saturn    │  │        Context          │ │   │
│   │  │  Git 业务   │  │  密钥管理   │  │  权限控制   │  │     请求上下文管理       │ │   │
│   │  │  API Service│  │  GPG/Sign   │  │  Cedar      │  │                         │ │   │
│   │  │  Pack处理   │  │  Crypto     │  │  Policy     │  │                         │ │   │
│   │  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘  └─────────────────────────┘ │   │
│   │         │                │                │                                     │   │
│   └─────────┼────────────────┼────────────────┼─────────────────────────────────────┘   │
│             │                │                │                                         │
│             └────────────────┴────────────────┘                                         │
│                              │                                                          │
│                              ▼                                                          │
│   ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│   │                       Data Access Layer 数据访问层                               │   │
│   ├─────────────────────────────────────────────────────────────────────────────────┤   │
│   │                                                                                 │   │
│   │  ┌─────────────────────────────────────────────────────────────────────────┐    │   │
│   │  │                    Jupiter (Storage & ORM)                              │    │   │
│   │  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │    │   │
│   │  │  │ git_db_stg  │  │ mono_stg    │  │ lfs_db_stg  │  │ user_stg    │     │    │   │
│   │  │  │ raw_db_stg  │  │ cl_stg      │  │ lfs_s3_stg  │  │ vault_stg   │     │    │   │
│   │  │  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────┘     │    │   │
│   │  │                                                                         │    │   │
│   │  │  ┌─────────────────────────────────────────────────────────────────┐    │    │   │
│   │  │  │          Callisto (Entity Models - SeaORM)                      │    │    │   │
│   │  │  │   mega_commit, mega_tree, mega_blob, mega_cl, mega_issue...     │    │    │   │
│   │  │  └─────────────────────────────────────────────────────────────────┘    │    │   │
│   │  └─────────────────────────────────────────────────────────────────────────┘    │   │
│   │                                                                                 │   │
│   └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                          │                                              │
│                                          ▼                                              │
│   ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│   │                        Storage Layer 存储层                                      │   │
│   ├─────────────────────────────────────────────────────────────────────────────────┤   │
│   │                                                                                 │   │
│   │  ┌─────────────────┐    ┌─────────────────┐    ┌─────────────────────────────┐  │   │
│   │  │   PostgreSQL    │    │     Redis       │    │        AWS S3 / Local       │  │   │
│   │  │   (主数据库)     │    │   (缓存/锁)     │    │       (LFS 对象存储)         │  │   │
│   │  └─────────────────┘    └─────────────────┘    └─────────────────────────────┘  │   │
│   │                                                                                 │   │
│   └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                         │
└─────────────────────────────────────────────────────────────────────────────────────────┘
plaintext

分层解读

  • Client Layer - 支持多种客户端接入:标准 Git CLI、Moon Web UI、Scorpio FUSE 挂载、IDE 插件
  • Gateway Layer - mono 主程序作为统一入口,处理 HTTP/SSH/Git 协议
  • Core Services Layer - 核心业务逻辑:Ceres (Git 操作)、Vault (密钥)、Saturn (权限)、Context (上下文)
  • Data Access Layer - Jupiter 统一数据访问,Callisto 定义 ORM 实体
  • Storage Layer - PostgreSQL 主存储 + Redis 缓存 + S3/本地 LFS 存储

8.2 Crate 依赖关系#

┌──────────────────────────────────────────────────────────────────────────────────────────┐
│                              Mega Crate 依赖关系                                          │
└──────────────────────────────────────────────────────────────────────────────────────────┘

                                      ┌──────────────┐
                                      │     mono     │  ← 主入口 (HTTP/SSH Server)
                                      │   (binary)   │
                                      └──────┬───────┘

               ┌─────────────────────────────┼─────────────────────────────┐
               │                             │                             │
               ▼                             ▼                             ▼
        ┌─────────────┐              ┌─────────────┐              ┌─────────────┐
        │   context   │              │    ceres    │              │    vault    │
        │ 请求上下文   │              │  Git业务层  │              │  密钥管理   │
        └──────┬──────┘              └──────┬──────┘              └──────┬──────┘
               │                            │                            │
               │         ┌──────────────────┼──────────────────┐         │
               │         │                  │                  │         │
               │         ▼                  ▼                  ▼         │
               │  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐  │
               │  │  bellatrix  │    │    common   │    │   saturn    │  │
               │  │ Orion协议   │    │  公共工具   │    │  权限策略   │  │
               │  └─────────────┘    └──────┬──────┘    │  (Cedar)    │  │
               │                            │           └─────────────┘  │
               │                            │                            │
               └────────────────────────────┼────────────────────────────┘


                                     ┌─────────────┐
                                     │   jupiter   │  ← 数据访问核心
                                     │  Storage &  │
                                     │    ORM      │
                                     └──────┬──────┘

                         ┌──────────────────┼──────────────────┐
                         │                  │                  │
                         ▼                  ▼                  ▼
                  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
                  │  callisto   │    │ git-internal│    │ libvault-   │
                  │  DB Entity  │    │  Git 对象   │    │    core     │
                  │  (SeaORM)   │    │   解析库    │    │  加密核心   │
                  └─────────────┘    └─────────────┘    └─────────────┘


                 ┌─────────────┐
                 │  PostgreSQL │
                 │   SeaORM    │
                 └─────────────┘


═══════════════════════════════════════════════════════════════════════════════════════════

                                 独立组件 (不在主依赖链中)

        ┌─────────────┐         ┌─────────────────┐         ┌─────────────────┐
        │   scorpio   │         │  orion-server   │         │    extensions   │
        │  FUSE 客户端 │         │  构建执行服务   │         │     扩展功能    │
        │  (独立进程)  │         │                 │         │                 │
        └──────┬──────┘         └────────┬────────┘         └────────┬────────┘
               │                         │                           │
               │                         │                           │
        ┌──────┴──────┐           ┌──────┴──────┐            ┌───────┴───────┐
        │             │           │             │            │               │
        ▼             ▼           ▼             ▼            ▼               ▼
    ┌───────┐   ┌─────────┐  ┌───────┐   ┌───────────┐  ┌─────────┐   ┌─────────┐
    │rfuse3 │   │libfuse  │  │ orion │   │ bellatrix │  │  RAG    │   │  Rust   │
    │       │   │   -fs   │  │Client │   │           │  │ AI检索  │   │ 安全分析│
    └───────┘   └─────────┘  └───────┘   └───────────┘  └─────────┘   └─────────┘
plaintext

依赖层次

  1. mono - 最上层的二进制入口,组装所有服务
  2. ceres/vault/context - 核心业务模块,直接被 mono 调用
  3. jupiter - 数据访问抽象层,被所有需要持久化的模块依赖
  4. callisto/git-internal - 最底层的实体定义和 Git 对象解析

8.3 各 Crate 职责详解#

┌────────────────────────────────────────────────────────────────────────────────────────┐
│                               Crate 职责说明                                            │
├────────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                          🚀 mono (主程序入口)                                    │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ • HTTP Server (Axum) - 提供 REST API                                       │ │   │
│  │  │ • SSH Server (Russh) - 提供 Git SSH 协议                                   │ │   │
│  │  │ • Git Protocol Handler - 处理 git push/pull/fetch                          │ │   │
│  │  │ • API Routes - CL/Issue/Commit/LFS/User/Repo 等接口                        │ │   │
│  │  │ • OAuth Integration - GitHub/GitLab OAuth 登录                             │ │   │
│  │  │ • Swagger UI - API 文档 (utoipa)                                           │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                          📦 ceres (Git 业务核心)                                 │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ • API Service - Mono API 业务逻辑实现                                       │ │   │
│  │  │ • Pack Processing - Git pack 文件解析与处理                                 │ │   │
│  │  │ • Protocol - Smart HTTP/SSH Git 协议实现                                   │ │   │
│  │  │ • LFS Handler - Git LFS 协议支持                                           │ │   │
│  │  │ • Merge Checker - CL 合并检查 (代码审查/GPG签名/提交信息)                    │ │   │
│  │  │ • Model - 业务模型 (CL, Issue, Commit, Blame, Tag...)                      │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                        💾 jupiter (数据访问层)                                   │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ • Storage Modules:                                                         │ │   │
│  │  │   - git_db_storage - Git 对象存储 (commit/tree/blob)                       │ │   │
│  │  │   - mono_storage - Monorepo 特有数据                                       │ │   │
│  │  │   - cl_storage - Change List 存储                                          │ │   │
│  │  │   - issue_storage - Issue 存储                                             │ │   │
│  │  │   - lfs_db_storage - LFS 元数据                                            │ │   │
│  │  │   - vault_storage - 密钥存储                                               │ │   │
│  │  │ • LFS Storage - 本地/S3 大文件存储                                          │ │   │
│  │  │ • Migration - 数据库迁移脚本 (SeaORM)                                       │ │   │
│  │  │ • Redis - 分布式锁与缓存                                                    │ │   │
│  │  │ • Service - CL/Issue/MergeQueue 服务                                       │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                        📊 callisto (实体模型)                                    │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ • SeaORM Entity 定义:                                                      │ │   │
│  │  │   - mega_commit, mega_tree, mega_blob, mega_tag                            │ │   │
│  │  │   - mega_cl (Change List), mega_issue, mega_conversation                   │ │   │
│  │  │   - mega_user, mega_cl_reviewer, mega_label                                │ │   │
│  │  │   - lfs_locks, lfs_objects                                                 │ │   │
│  │  │   - vault_key, gpg_key                                                     │ │   │
│  │  │   - merge_queue, builds, tasks, checks                                     │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                         🔐 vault (密钥管理)                                      │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ • GPG Key Management - GPG 密钥存储与验证                                   │ │   │
│  │  │ • Commit Signing - 提交签名验证                                            │ │   │
│  │  │ • Crypto Operations - secp256k1/ed25519 加密操作                           │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                         🛡️ saturn (权限控制)                                    │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ • Cedar Policy Engine - 基于 AWS Cedar 的策略引擎                           │ │   │
│  │  │ • Access Control - 仓库/分支/CL 的访问控制                                  │ │   │
│  │  │ • Policy Evaluation - 权限策略评估                                          │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                         🔧 common (公共工具)                                     │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ • Config - 配置文件加载 (config crate)                                      │ │   │
│  │  │ • Error Types - 公共错误类型                                                │ │   │
│  │  │ • Utils - ID 生成器、正则等工具函数                                         │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                         🌐 context (请求上下文)                                  │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ • Request Context - HTTP 请求上下文管理                                     │ │   │
│  │  │ • User Session - 用户会话信息                                               │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
└────────────────────────────────────────────────────────────────────────────────────────┘
plaintext

8.4 独立子系统#

┌────────────────────────────────────────────────────────────────────────────────────────┐
│                                 独立子系统                                              │
├────────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                      🦂 Scorpio (FUSE 文件系统客户端)                            │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ 独立进程,将 Monorepo 挂载为本地文件系统                                     │ │   │
│  │  │                                                                            │ │   │
│  │  │  ┌─────────────┐   ┌─────────────┐   ┌─────────────┐   ┌─────────────┐     │ │   │
│  │  │  │  MegaFuse   │   │   Dicfuse   │   │  OverlayFs  │   │   Daemon    │     │ │   │
│  │  │  │  FUSE核心   │   │  虚拟只读层  │   │  读写工作层  │   │  HTTP API   │     │ │   │
│  │  │  └─────────────┘   └─────────────┘   └─────────────┘   └─────────────┘     │ │   │
│  │  │                                                                            │ │   │
│  │  │  功能: 挂载/卸载、文件读写、Git 操作 (status/add/commit/push)               │ │   │
│  │  │  依赖: rfuse3, libfuse-fs, ceres                                          │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                      🌟 Orion (构建执行系统)                                     │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ 类似 GitHub Actions 的 CI/CD 执行引擎                                       │ │   │
│  │  │                                                                            │ │   │
│  │  │  ┌─────────────────┐              ┌─────────────────────────────┐          │ │   │
│  │  │  │  orion (Client) │◄────────────►│    orion-server             │          │ │   │
│  │  │  │  WebSocket连接  │              │    任务调度与管理            │          │ │   │
│  │  │  │  任务执行       │              │    结果存储                  │          │ │   │
│  │  │  └─────────────────┘              └─────────────────────────────┘          │ │   │
│  │  │                                                                            │ │   │
│  │  │  ┌─────────────────────────────────────────────────────────────┐           │ │   │
│  │  │  │          bellatrix (协议层)                                 │           │ │   │
│  │  │  │          Client-Server 通信协议定义                          │           │ │   │
│  │  │  └─────────────────────────────────────────────────────────────┘           │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                       🌙 Moon (Web 前端)                                         │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │ React + TypeScript + pnpm monorepo                                         │ │   │
│  │  │                                                                            │ │   │
│  │  │  ┌─────────────┐   ┌─────────────┐   ┌─────────────────────────────────┐   │ │   │
│  │  │  │    apps     │   │   packages  │   │              api                │   │ │   │
│  │  │  │  Web 应用   │   │  UI 组件库  │   │          API 客户端             │   │ │   │
│  │  │  └─────────────┘   └─────────────┘   └─────────────────────────────────┘   │ │   │
│  │  │                                                                            │ │   │
│  │  │  构建工具: Turbo (monorepo 构建)                                           │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
│  ┌─────────────────────────────────────────────────────────────────────────────────┐   │
│  │                      🧩 Extensions (扩展功能)                                    │   │
│  │  ┌────────────────────────────────────────────────────────────────────────────┐ │   │
│  │  │                                                                            │ │   │
│  │  │  ┌─────────────────┐   ┌─────────────────┐   ┌───────────────────────┐     │ │   │
│  │  │  │   RAG (AI)      │   │   Observatory   │   │   Rust Security       │     │ │   │
│  │  │  │  ┌───────────┐  │   │                 │   │   ┌─────────────────┐ │     │ │   │
│  │  │  │  │   chat    │  │   │   代码可观测    │   │   │   sensleak      │ │     │ │   │
│  │  │  │  │   index   │  │   │   性分析        │   │   │   CVE 分析      │ │     │ │   │
│  │  │  │  └───────────┘  │   │                 │   │   │   MIR checker   │ │     │ │   │
│  │  │  │  向量检索/问答  │   │                 │   │   └─────────────────┘ │     │ │   │
│  │  │  └─────────────────┘   └─────────────────┘   └───────────────────────┘     │ │   │
│  │  │                                                                            │ │   │
│  │  └────────────────────────────────────────────────────────────────────────────┘ │   │
│  └─────────────────────────────────────────────────────────────────────────────────┘   │
│                                                                                        │
└────────────────────────────────────────────────────────────────────────────────────────┘
plaintext

关键子系统说明

子系统类比核心功能
ScorpioGoogle CitC将超大仓库挂载为本地文件系统,按需加载,无需完整 clone
OrionGitHub Actions分布式 CI/CD 任务执行,支持构建/测试自动化
MoonGitHub Web UI现代化 Web 界面,支持 CL/Issue/代码浏览
Extensions-AI 辅助 (RAG)、安全扫描、代码分析等增值功能

8.5 核心数据流#

Git Push 流程#

┌─────────────┐                                              ┌─────────────┐
│  Developer  │                                              │  PostgreSQL │
│   (git)     │                                              │  (Storage)  │
└──────┬──────┘                                              └──────▲──────┘
       │                                                            │
       │ 1. git push                                                │
       ▼                                                            │
┌─────────────┐    2. Git Protocol    ┌─────────────┐              │
│    mono     │ ◄────────────────────►│   ceres     │──────────────┘
│  HTTP/SSH   │    git-receive-pack   │  Pack处理   │   4. Store Objects
│   Server    │                       │  协议解析   │
└──────┬──────┘                       └──────┬──────┘
       │                                     │
       │                                     │ 3. Parse Pack
       │                                     ▼
       │                              ┌─────────────┐
       │                              │   jupiter   │
       │                              │   Storage   │
       │                              └─────────────┘

       │ 5. Trigger CI (optional)

┌─────────────┐                       ┌─────────────┐
│   orion     │ ◄────────────────────►│orion-server │
│   Client    │      WebSocket        │  CI/CD      │
└─────────────┘                       └─────────────┘
plaintext

流程说明

  1. 开发者执行 git push
  2. mono 服务器接收 Git 协议请求,调用 ceres 处理
  3. ceres 解析 pack 文件,提取 Git 对象
  4. jupiter 将对象持久化到 PostgreSQL
  5. (可选) 触发 Orion CI 执行构建任务

Scorpio FUSE 流程#

┌─────────────┐                                              ┌─────────────┐
│  Developer  │                                              │    mono     │
│  (ls, cat)  │                                              │   Server    │
└──────┬──────┘                                              └──────▲──────┘
       │                                                            │
       │ 1. File Operation                                          │
       ▼                                                            │
┌─────────────┐    2. FUSE Callback   ┌─────────────┐              │
│   Mount     │ ◄────────────────────►│   Scorpio   │──────────────┘
│   Point     │                       │   MegaFuse  │   4. HTTP API
│  /workspace │                       │             │      (if needed)
└─────────────┘                       └──────┬──────┘

                                             │ 3. Local Cache

                                      ┌─────────────┐
                                      │   Store     │
                                      │  (Local)    │
                                      └─────────────┘
plaintext

流程说明

  1. 开发者在挂载点执行文件操作 (ls, cat, vim 等)
  2. FUSE 拦截系统调用,转发给 Scorpio
  3. Scorpio 检查本地缓存
  4. 如缓存未命中,通过 HTTP API 从 mono 服务器拉取
  5. 返回数据给开发者,同时更新本地缓存

8.6 技术栈汇总#

┌────────────────────────────────────────────────────────────────────────────────────────┐
│                                   技术栈汇总                                            │
├────────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                        │
│  ┌──────────────────────────────────────────────────────────────────────────────┐      │
│  │  后端 (Rust)                                                                 │      │
│  │  ├── Web Framework:    Axum                                                  │      │
│  │  ├── Async Runtime:    Tokio                                                 │      │
│  │  ├── SSH Protocol:     Russh                                                 │      │
│  │  ├── ORM:              SeaORM                                                │      │
│  │  ├── Database:         PostgreSQL                                            │      │
│  │  ├── Cache:            Redis                                                 │      │
│  │  ├── Object Storage:   AWS S3 / Local                                        │      │
│  │  ├── Auth:             OAuth2, Cedar Policy                                  │      │
│  │  ├── Crypto:           secp256k1, ed25519, ring, pgp                        │      │
│  │  ├── API Docs:         utoipa + Swagger UI                                   │      │
│  │  └── Git Library:      git-internal (自研)                                   │      │
│  └──────────────────────────────────────────────────────────────────────────────┘      │
│                                                                                        │
│  ┌──────────────────────────────────────────────────────────────────────────────┐      │
│  │  FUSE 客户端 (Scorpio)                                                       │      │
│  │  ├── FUSE Library:     rfuse3, libfuse-fs                                    │      │
│  │  ├── Async Runtime:    Tokio (目标迁移到 Monoio)                              │      │
│  │  ├── Local Storage:    Sled DB                                               │      │
│  │  └── HTTP Client:      Reqwest                                               │      │
│  └──────────────────────────────────────────────────────────────────────────────┘      │
│                                                                                        │
│  ┌──────────────────────────────────────────────────────────────────────────────┐      │
│  │  前端 (Moon)                                                                 │      │
│  │  ├── Framework:        React + TypeScript                                    │      │
│  │  ├── Build Tool:       Turbo (monorepo)                                      │      │
│  │  ├── Package Manager:  pnpm                                                  │      │
│  │  └── Node Version:     .nvmrc managed                                        │      │
│  └──────────────────────────────────────────────────────────────────────────────┘      │
│                                                                                        │
│  ┌──────────────────────────────────────────────────────────────────────────────┐      │
│  │  DevOps                                                                      │      │
│  │  ├── Container:        Docker                                                │      │
│  │  ├── CI/CD:            GitHub Actions                                        │      │
│  │  ├── Build System:     Buck2 (可选集成)                                       │      │
│  │  └── Memory Alloc:     jemalloc (Linux), mimalloc (Windows)                  │      │
│  └──────────────────────────────────────────────────────────────────────────────┘      │
│                                                                                        │
└────────────────────────────────────────────────────────────────────────────────────────┘
plaintext

技术亮点

  • 全 Rust 后端 - 高性能、内存安全,适合处理大规模 Git 操作
  • Axum + Tokio - 现代异步 Web 框架,支持高并发
  • SeaORM - 类型安全的 ORM,编译期检查 SQL
  • Cedar Policy - AWS 开源的策略语言,支持复杂权限规则
  • FUSE 虚拟文件系统 - 无需 clone 整个仓库,按需加载文件

九、延伸阅读#

Monorepo 详解:从理念到 Mega 实践
https://jerry609.github.io/blog/monorepo-mega-explained
Author Jerry
Published at December 9, 2025
Comment seems to stuck. Try to refresh?✨