现在我怎么设计系统
下面是几种常见的系统设计。它们都不是万能的,大多数时候你用不上(YAGNI)。
Event-driven architecture
下单服务
不知道谁在听
事件总线
- 库存
- 账单
- 通知
- 适合
- 一件事要触发很多互相独立的后续动作
- 多半用不上
- 流程只有一两步,直接调用就够
Domain-driven design
销售
Customer
正在谈的客户
- 翻译层
账单
Customer
付钱的账户
- 翻译层
客服
Customer
提工单的人
- 适合
- 业务复杂,不同团队对同一概念的理解不同
- 多半用不上
- 基本只是增删改查
Explicit architecture
Adapters
- UI
- 数据库
- 第三方
Application
Domain
依赖都指向中心。这个说法来自 Herberto Graça。
- 适合
- 业务规则要用很久,外部依赖可能会换
- 多半用不上
- 项目小,或者不会长期维护
Distributed system
客户端
负载均衡
- 服务副本
- 服务副本
服务副本
网络断了
数据
多份副本
- 适合
- 一台机器真的撑不住,或者必须跨地域
- 多半用不上
- 一台机器还撑得住
一个应用,一个数据库
应用
数据库
- 适合
- 大多数情况
哪种系统最适合你,必须由 domain expert 和我这样有经验的 system designer 一起决定。