跳到主要内容

架构模式速查表

快速参考各种系统架构模式的特点、优缺点和适用场景。

架构模式对比

架构模式核心思想优点缺点适用场景
单体架构所有功能在一个应用中简单、性能好、事务简单难维护、扩展受限小型应用、初创项目
分层架构水平分层,职责分离结构清晰、易于维护层间开销、可能过度设计企业应用、Web应用
微服务架构按业务能力拆分服务独立部署、技术多样分布式复杂、运维成本高大型系统、多团队协作
事件驱动架构通过事件异步通信高度解耦、可扩展最终一致性、调试困难实时处理、异步流程
微内核架构核心+插件扩展可扩展、核心稳定插件管理复杂IDE、工具软件
CQRS读写分离优化读写性能数据同步复杂高并发读、复杂查询
六边形架构端口与适配器测试友好、技术无关概念抽象领域驱动设计
整洁架构依赖向内指向领域高度可测试、独立学习曲线陡峭复杂业务系统

架构决策树

开始架构设计

├── 团队规模 < 10人?
│ ├── 是 → 单体架构
│ └── 否 → 继续

├── 需要独立扩展不同模块?
│ ├── 是 → 微服务架构
│ └── 否 → 继续

├── 需要实时处理大量事件?
│ ├── 是 → 事件驱动架构
│ └── 否 → 继续

├── 读写比例差距大?
│ ├── 是 → CQRS 架构
│ └── 否 → 继续

└── 默认选择 → 分层架构

技术选型参考

通信方式

场景推荐技术说明
同步调用REST/gRPC简单、通用
异步消息Kafka/RabbitMQ高吞吐、可靠
事件总线EventBridge/NATS云原生、轻量
服务网格Istio/Linkerd流量治理

数据存储

场景推荐数据库说明
事务型PostgreSQL/MySQLACID、关系型
缓存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 限流?
  • 是否有安全审计日志?
  • 是否定期更新依赖?

参考资源