Backend Architecture MOC
后端架构学习入口,从模块边界与依赖方向开始,进入 Layered Architecture、DDD/Bounded Context、BFF/API Gateway、模块化单体、微服务、EDA、CQRS 与 Event Sourcing。
#moc
#growing
#backend
#architecture
[!info] related notes
Backend Architecture MOC
知识总览
filters:
and:
- 'file.ext == "md"'
- 'file.inFolder("z")'
- 'this.file.links.contains(file)'
- 'file.path != this.file.path'
formulas:
knowledge: 'file.asLink(title)'
properties:
formula.knowledge:
displayName: 知识
note.description:
displayName: Description
note.mastery:
displayName: Mastery
views:
- type: table
name: 知识总览
order:
- formula.knowledge
- note.description
- note.mastery
columnSize:
formula.knowledge: 280
note.description: 760
note.mastery: 56
[!abstract] 核心认识 架构不是套模板,而是根据变化率、业务事实、团队边界、故障域和部署需求,决定模块怎样分割、依赖朝哪里、数据由谁拥有。先把单体内部边界做清楚,再判断是否值得提升为分布式部署边界。
推荐学习顺序
- 分层架构:Presentation、Application、Domain、Infrastructure 的职责。
- 依赖反转与 Port / Adapter:业务规则不直接依赖外部框架细节。
- DDD Architecture、Bounded Context:按业务语言和事实所有权划边界。
- Backend For Frontend 与 API Gateway:客户端适配和统一流量治理。
- 模块化单体:在一个部署单元内保持模块、数据和依赖边界。
- 微服务:只有独立部署、扩缩、故障隔离或团队自治收益明确时再拆。
- 事件驱动架构:用事件降低时间耦合,同时承担最终一致性。
- CQRS 与 Event Sourcing:在读写模型或审计/重放需求成立时使用。
架构决策顺序
业务能力与不变量是什么?
→ 谁拥有事实和写权限?
→ 哪些变化需要隔离?
→ 哪些依赖应通过接口反转?
→ 单体模块是否已经足够?
→ 是否真的需要独立部署和分布式通信?
→ 失败、数据一致性和观测成本能否承担?
常见模式的职责
| 模式 | 主要价值 | 典型误用 |
|---|---|---|
| Layered Architecture | 分离输入、用例、领域与基础设施 | 只有目录,没有依赖约束 |
| DDD / Bounded Context | 保护业务语言和事实边界 | 每个 CRUD 都建复杂聚合 |
| Modular Monolith | 低运维成本下保持模块自治 | 所有模块仍直接访问彼此表 |
| BFF | 针对客户端聚合与适配 | 把所有业务逻辑堆进 BFF |
| API Gateway | 统一路由、认证、限流与治理 | 取代业务授权和领域规则 |
| Microservices | 独立部署、扩缩与故障隔离 | 小团队过早拆分 |
| EDA | 时间解耦、异步扩展 | 没有 schema、幂等和观测 |
| CQRS | 读写模型可独立优化 | 简单 CRUD 也强行双模型 |
数据所有权
架构边界最容易被数据库绕过。即使代码模块分开,只要所有模块随意写同一张表,边界仍然不存在。
Module owns write model
→ exposes command / query / event contract
→ other modules do not bypass invariants
与 Agent 系统的关系
- Backend 持有身份、权限、业务事实与最终副作用。
- Agent Runtime 持有 Run、State、Checkpoint 与工具循环。
- Model 在受控节点提供语义决策,不拥有最终授权。
掌握标准
- 能用变化率和事实所有权解释模块边界。
- 能说明依赖方向,而不只展示目录结构。
- 能解释为什么当前项目暂不拆微服务。
- 能说明同步 API 与异步事件各自的失败语义。
- 能为跨模块/跨服务数据更新设计事务或最终一致方案。