架构模式速查表
快速参考各种系统架构模式的特点、优缺点和适用场景。
架构模式对比
| 架构模式 | 核心思想 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 单体架构 | 所有功能在一个应用中 | 简单、性能好、事务简单 | 难维护、扩展受限 | 小型应用、初创项目 |
| 分层架构 | 水平分层,职责分离 | 结构清晰、易于维护 | 层间开销、可能过度设计 | 企业应用、Web应用 |
| 微服务架构 | 按业务能力拆分服务 | 独立部署、技术多样 | 分布式复杂、运维成本高 | 大型系统、多团队协作 |
| 事件驱动架构 | 通过事件异步通信 | 高度解耦、可扩展 | 最终一致性、调试困难 | 实时处理、异步流程 |
| 微内核架构 | 核心+插件扩展 | 可扩展、核心稳定 | 插件管理复杂 | IDE、工具软件 |
| CQRS | 读写分离 | 优化读写性能 | 数据同步复杂 | 高并发读、复杂查询 |
| 六边形架构 | 端口与适配器 | 测试友好、技术无关 | 概念抽象 | 领域驱动设计 |
| 整洁架构 | 依赖向内指向领域 | 高度可测试、独立 | 学习曲线陡峭 | 复杂业务系统 |
架构决策树
开始架构设计
│
├── 团队规模 < 10人?
│ ├── 是 → 单体架构
│ └── 否 → 继续
│
├── 需要独立扩展不同模块?
│ ├── 是 → 微服务架构
│ └── 否 → 继续
│
├── 需要实时处理大量事件?
│ ├── 是 → 事件驱动架构
│ └── 否 → 继续
│
├── 读写比例差距大?
│ ├── 是 → CQRS 架构
│ └── 否 → 继续
│
└── 默认选择 → 分层架构
技术选型参考
通信方式
| 场景 | 推荐技术 | 说明 |
|---|---|---|
| 同步调用 | REST/gRPC | 简单、通用 |
| 异步消息 | Kafka/RabbitMQ | 高吞吐、可靠 |
| 事件总线 | EventBridge/NATS | 云原生、轻量 |
| 服务网格 | Istio/Linkerd | 流量治理 |
数据存储
| 场景 | 推荐数据库 | 说明 |
|---|---|---|
| 事务型 | PostgreSQL/MySQL | ACID、关系型 |
| 缓存 | Redis | 高性能、丰富数据结构 |
| 文档型 | MongoDB | 灵活Schema |
| 时序数据 | InfluxDB/TimescaleDB | 时间序列优化 |
| 搜索 | Elasticsearch | 全文检索 |
| 图数据 | Neo4j | 关系分析 |
服务治理
| 功能 | 推荐方案 | 说明 |
|---|---|---|
| 服务发现 | Consul/Eureka | 服务注册发现 |
| 配置中心 | Apollo/Nacos | 集中配置管理 |
| 熔断限流 | Resilience4j/Sentinel | 容错保护 |
| 链路追踪 | Jaeger/Zipkin | 分布式追踪 |
| 监控告警 | Prometheus/Grafana | 指标监控 |
常见反模式
1. 分布式单体
错误:服务间紧耦合,必须一起部署
┌─────┐ ┌─────┐ ┌─────┐
│ A │<────>│ B │<────>│ C │
└─────┘ └─────┘ └─────┘
↑ ↑
└──────── 循环依赖 ────────┘
正确:服务独立,通过接口契约通信
┌─────┐ ┌─────┐ ┌─────┐
│ A │─────>│ B │ │ C │
└─────┘ └─────┘<─────┘─────┘
2. 过度拆分
错误:服务过多,管理复杂
┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐
│用户││地址││偏好││订单││支付││库存││物流│
└───┘└───┘└───┘└───┘└───┘└───┘└───┘
正确:合理的粒度
┌─────┐┌─────┐┌─────┐
│ 用户 ││ 订单 ││ 商品 │
└─────┘└─────┘└─────┘
3. 共享数据库
错误:多个服务共享数据库
┌─────────┐
│ 数据库 │
└────┬────┘
┌────────┼────────┐
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│ A │ │ B │ │ C │
└─────┘ └─────┘ └─────┘
正确:每个服务独立数据库
┌─────┐ ┌─────┐ ┌─────┐
│ A │ │ B │ │ C │
└──┬──┘ └──┬──┘ └──┬──┘
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│DB-A │ │DB-B │ │DB-C │
└─────┘ └─────┘ └─────┘
性能指标参考
| 指标 | 优秀 | 良好 | 需优化 |
|---|---|---|---|
| API 响应时间 (P99) | < 100ms | < 500ms | > 500ms |
| 数据库查询时间 | < 10ms | < 50ms | > 50ms |
| 服务启动时间 | < 10s | < 30s | > 30s |
| 系统可用性 | 99.99% | 99.9% | < 99.9% |
| 错误率 | < 0.1% | < 1% | > 1% |
扩展性检查清单
- 是否支持水平扩展?
- 是否无状态设计?
- 会话是否外部化存储?
- 缓存策略是否合理?
- 数据库是否支持分片?
- 消息队列是否可扩展?
- 是否有自动扩缩容机制?
安全 checklist
- 服务间通信是否加密?
- 是否有身份认证机制?
- 是否有权限控制?
- 敏感数据是否加密存储?
- 是否有 API 限流?
- 是否有安全审计日志?
- 是否定期更新依赖?