# 架构设计模式

## 常见系统架构

### 1. 分层架构

```
┌─────────────────────────────────┐
│          表现层 (API/UI)         │
├─────────────────────────────────┤
│          业务逻辑层               │
├─────────────────────────────────┤
│          数据访问层               │
├─────────────────────────────────┤
│          数据存储层               │
└─────────────────────────────────┘
```

**适用场景：** 传统企业应用、管理系统
**优点：** 结构清晰、易于理解和测试
**缺点：** 层层调用可能有性能损耗

---

### 2. 微服务架构

```
┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│   用户服务    │    │   订单服务    │    │   商品服务    │
└──────┬───────┘    └──────┬───────┘    └──────┬───────┘
       │                   │                   │
       └───────────────────┼───────────────────┘
                          │
                    ┌─────┴─────┐
                    │  API 网关  │
                    └───────────┘
```

**适用场景：** 大型互联网应用、高并发系统
**优点：** 独立部署、技术异构、容错性好
**缺点：** 复杂度高、分布式事务难处理

---

### 3. 事件驱动架构

```
┌──────────┐     ┌──────────┐     ┌──────────┐
│  生产者A  │────▶│  消息队列  │────▶│  消费者X  │
└──────────┘     └────┬─────┘     └──────────┘
                      │
                ┌─────┴─────┐
                ▼           ▼
          ┌──────────┐ ┌──────────┐
          │  消费者Y  │ │  消费者Z  │
          └──────────┘ └──────────┘
```

**适用场景：** 异步处理、解耦系统、实时通知
**优点：** 松耦合、高扩展、异步处理
**缺点：** 消息丢失风险、调试困难

---

## 数据架构模式

### 1. 主从复制

```
┌─────────┐
│  Master │ ────写入
└────┬────┘
     │ 复制
     ▼
┌─────────┐ ┌─────────┐
│ Slave 1 │ │ Slave 2 │ ────读取
└─────────┘ └─────────┘
```

**适用场景：** 读多写少、读写分离

---

### 2. 分库分表

```
┌─────────────────────────────────────┐
│            分片键 (Sharding Key)      │
└─────────────────────────────────────┘
          │
    ┌─────┴─────┐
    ▼           ▼
┌───────┐   ┌───────┐
│ DB 0  │   │ DB 1  │
├───────┤   ├───────┤
│ Table │   │ Table │
│  0-99 │   │100-199│
└───────┘   └───────┘
```

**适用场景：** 单表数据量大、需要水平扩展

---

## 常见业务场景架构

### 1. 电商订单系统

```
┌──────────────────────────────────────────────────┐
│                    API 网关                        │
└──────────────────────────────────────────────────┘
         │              │              │
    ┌────┴────┐    ┌────┴────┐    ┌────┴────┐
    │ 商品服务 │    │ 订单服务 │    │ 支付服务 │
    └─────────┘    └────┬────┘    └─────────┘
                        │
              ┌─────────┼─────────┐
              ▼         ▼         ▼
         ┌────────┐ ┌────────┐ ┌────────┐
         │库存服务│ │物流服务│ │通知服务│
         └────────┘ └────────┘ └────────┘
```

**关键设计：**
- 订单状态机：待支付 → 已支付 → 已发货 → 已完成
- 库存扣减：预占 → 实扣 → 释放
- 分布式事务：TCC 或最终一致性

---

### 2. 内容管理系统

```
┌──────────────────────────────────────────────────┐
│                    CMS 核心                        │
├──────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐        │
│  │ 内容管理  │  │ 用户权限  │  │ 工作流   │        │
│  └──────────┘  └──────────┘  └──────────┘        │
├──────────────────────────────────────────────────┤
│  ┌──────────────────────────────────────┐        │
│  │           内容存储 (DB + OSS)          │        │
│  └──────────────────────────────────────┘        │
└──────────────────────────────────────────────────┘
```

**关键设计：**
- 内容版本控制
- 审核工作流
- 权限粒度控制

---

### 3. 实时数据处理

```
┌──────────┐    ┌──────────┐    ┌──────────┐
│ 数据采集  │───▶│ 流处理   │───▶│ 数据存储  │
└──────────┘    └──────────┘    └──────────┘
                     │
                     ▼
               ┌──────────┐
               │ 实时分析  │
               └──────────┘
```

**关键设计：**
- 消息队列缓冲
- 流式计算引擎
- 实时告警机制

---

## 技术选型参考

| 场景 | 推荐技术 | 说明 |
|-----|---------|------|
| Web框架 | Gin / Spring Boot | 高性能、生态完善 |
| ORM | GORM / MyBatis | 成熟稳定 |
| 缓存 | Redis | 分布式缓存首选 |
| 消息队列 | Kafka / RabbitMQ | 高吞吐 / 可靠性 |
| 搜索引擎 | Elasticsearch | 全文检索 |
| 监控 | Prometheus + Grafana | 指标监控 |
| 日志 | ELK / Loki | 日志收集分析 |
| 配置中心 | Nacos / Apollo | 动态配置 |

---

## 架构评审清单

设计完成后，自查以下问题：

### 功能性
- [ ] 是否满足所有业务需求？
- [ ] 边界场景是否考虑？
- [ ] 异常处理是否完善？

### 非功能性
- [ ] 性能是否达标？
- [ ] 可扩展性如何？
- [ ] 安全性是否足够？
- [ ] 可用性如何保证？

### 可维护性
- [ ] 模块是否高内聚低耦合？
- [ ] 接口设计是否合理？
- [ ] 文档是否完善？

### 成本
- [ ] 开发成本是否可控？
- [ ] 运维成本是否合理？
- [ ] 是否存在过度设计？
