很多开发者会问:"我用了 monorepo,是不是就等于微服务架构?"答案是否定的。这两者根本不在同一个层面上。
一个仓库里放了多个应用,只能说明源代码的组织方式;而微服务,定义的是运行时和运维的边界。两者描述的是系统不同层面的问题。
![]()
四个概念,四个不同层面
在梳理 SlotSyncro 这个作品集项目的架构时,作者发现这几个概念经常被混在一起讨论。它们虽然名字相近,但各自解决的问题完全不同:
- Monorepo:仓库组织方式
- Turborepo:任务编排工具
- Modular monolith:应用内部结构
- Microservices:运行时架构
还有一个容易混淆的:Turbopack。它负责打包 Next.js 应用,和 Turborepo 也不是一回事。Turborepo 协调各个 workspace 的任务,Turbopack 做编译打包,它们不在同一个架构层,所以根本不存在"二选一"的问题。
这也是为什么"该用 monorepo 还是微服务"这种问题很难回答——因为一个团队可以两个都用,也可以都不用。
什么才算 monorepo?
monorepo 就是一个 Git 仓库里包含多个相关项目。这些项目可以是应用、共享库、配置包或服务。它们共享 Git 历史,可以一起修改和提交,但各自可以拥有独立的依赖、脚本和发布流程。
以 SlotSyncro 为例,它的 workspace 结构是这样的:
slotsyncro/
├── apps/
│ ├── marketing/ # 公开营销网站
│ └── app/ # 预约产品
├── packages/
│ └── db/ # Prisma 和数据库基础设施
├── package.json
├── pnpm-workspace.yaml
└── turbo.json
这就是一个典型的 monorepo:多个可识别的项目放在同一个 Git 仓库里。应用和数据库包各自有独立的 package.json,通过 pnpm workspaces 连接起来。产品代码和数据库包的改动可以一起评审、一起提交。
workspace 又是什么?
workspace 是仓库的包管理器识别和管理的单个项目。在 SlotSyncro 里,apps/app、apps/marketing 和 packages/db 是三个独立的 pnpm workspace。每个 workspace 可以定义自己的包名、依赖和命令,同时也可以把本地另一个 workspace 当作依赖来使用。
所以,下次再看到"一个仓库里有多个应用"的结构,别急着说这是微服务。先搞清楚它说的是哪一层——是代码怎么放,还是运行时怎么跑。这两个问题,答案可能完全不同。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.