Files
aijianhua/docs/系统架构文档.md

255 lines
6.8 KiB
Markdown
Raw Normal View History

# 爱鉴花小程序 - 系统架构文档
## 版本历史
| 版本 | 日期 | 作者 | 描述 |
|------|------|------|------|
| v1.0 | 2024-03-15 | 系统架构师 | 初始版本 |
## 1. 架构设计原则
### 1.1 设计原则
- **微服务架构**:模块化设计,服务解耦
- **高可用性**99.9%可用性目标
- **可扩展性**:支持水平扩展
- **安全性**:端到端数据加密
- **性能优化**:响应时间<2秒
### 1.2 技术选型理由
| 技术栈 | 选型理由 | 替代方案 |
|--------|----------|----------|
| Node.js + Express | 高性能I/O处理生态丰富 | Python Django, Java Spring Boot |
| MySQL 8.0+ | 事务支持完善,生态成熟 | PostgreSQL, MongoDB |
| Redis Cluster | 高性能缓存,分布式支持 | Memcached, Hazelcast |
| Vue.js 3 + Ant Design | 组件化开发企业级UI | React + AntD, Angular + Material |
| uni-app | 跨端开发,成本效益高 | Taro, React Native |
## 2. 系统架构图
```mermaid
graph TB
subgraph "客户端层"
A[微信小程序] --> B[后台管理系统]
A --> C[官网系统]
end
subgraph "接入层"
D[API网关 - Nginx] --> E[负载均衡]
end
subgraph "应用服务层"
F[用户服务] --> G[认证服务]
H[商品服务] --> I[订单服务]
J[识别服务] --> K[支付服务]
L[推广服务] --> M[统计服务]
end
subgraph "数据层"
N[MySQL 8.0+] --> O[主从复制]
P[Redis Cluster] --> Q[分布式缓存]
R[腾讯云COS] --> S[文件存储]
end
E --> F
E --> H
E --> J
E --> L
F --> N
H --> N
J --> N
L --> N
F --> P
H --> P
J --> P
```
## 3. 微服务架构设计
### 3.1 服务划分
| 服务名称 | 职责 | 技术栈 | 部署方式 |
|----------|------|--------|----------|
| 用户服务 | 用户管理、权限控制 | Node.js + Express | 独立部署 |
| 商品服务 | 商品管理、库存管理 | Node.js + Express | 独立部署 |
| 订单服务 | 订单处理、支付集成 | Node.js + Express | 独立部署 |
| 识别服务 | 植物识别AI集成 | Node.js + TensorFlow.js | 独立部署 |
| 推广服务 | 推广奖励计算 | Node.js + Express | 独立部署 |
| 网关服务 | API路由、认证 | Nginx + Lua | 独立部署 |
### 3.2 服务通信机制
- **同步调用**RESTful APIHTTP/HTTPS
- **异步消息**Redis Pub/Sub预留RabbitMQ集成
- **服务发现**Consul/Nacos预留
- **配置中心**Apollo预留
## 4. 数据库设计
### 4.1 数据库架构
```mermaid
erDiagram
USERS ||--o{ ORDERS : "创建"
USERS ||--o{ IDENTIFICATIONS : "发起"
USERS ||--o{ PROMOTIONS : "参与"
PRODUCTS ||--o{ ORDER_ITEMS : "包含"
CATEGORIES ||--o{ PRODUCTS : "分类"
ORDERS ||--o{ ORDER_ITEMS : "包含"
ORDERS ||--o{ PAYMENTS : "关联"
USERS {
bigint id PK
varchar username
varchar password_hash
varchar phone
varchar email
enum user_type
datetime created_at
datetime updated_at
}
PRODUCTS {
bigint id PK
varchar name
text description
decimal price
int stock
bigint category_id FK
varchar image_url
}
```
### 4.2 关键表结构
**用户表 (users)**
```sql
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
phone VARCHAR(20) NOT NULL UNIQUE,
email VARCHAR(100),
user_type ENUM('consumer', 'gardener', 'merchant', 'creator') DEFAULT 'consumer',
avatar_url VARCHAR(255),
real_name VARCHAR(50),
promotion_balance DECIMAL(10,2) DEFAULT 0.00,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_phone (phone),
INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
**推广记录表 (promotion_records)**
```sql
CREATE TABLE promotion_records (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
promoter_id BIGINT NOT NULL,
referred_id BIGINT NOT NULL,
reward_amount DECIMAL(10,2) DEFAULT 0.00,
reward_type ENUM('registration', 'first_order') NOT NULL,
status ENUM('pending', 'completed', 'rejected') DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMP NULL,
FOREIGN KEY (promoter_id) REFERENCES users(id),
FOREIGN KEY (referred_id) REFERENCES users(id),
INDEX idx_promoter (promoter_id),
INDEX idx_referred (referred_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
## 5. 部署架构
### 5.1 生产环境部署
```mermaid
graph LR
subgraph "负载均衡层"
A[阿里云SLB] --> B[Nginx集群]
end
subgraph "应用服务器集群"
C[用户服务 2台] --> D[MySQL主从]
E[商品服务 2台] --> D
F[订单服务 2台] --> D
G[识别服务 2台] --> D
end
subgraph "缓存层"
H[Redis哨兵模式] --> I[3节点集群]
end
subgraph "存储层"
J[腾讯云COS] --> K[CDN加速]
L[MySQL主库] --> M[MySQL从库]
end
B --> C
B --> E
B --> F
B --> G
C --> H
E --> H
F --> H
G --> H
```
### 5.2 监控告警体系
- **应用监控**Prometheus + Grafana
- **日志收集**ELK Stack
- **链路追踪**Jaeger
- **告警通知**:钉钉/邮件/SMS
## 6. 安全架构
### 6.1 安全防护措施
- **网络层**VPC隔离安全组规则
- **应用层**JWT认证RBAC权限控制
- **数据层**字段级加密SQL注入防护
- **传输层**HTTPS加密TLS 1.3
### 6.2 敏感数据处理
- 密码bcrypt加密存储
- 手机号AES加密存储
- 支付信息PCI DSS合规处理
- 日志数据:脱敏处理
## 7. 性能优化策略
### 7.1 数据库优化
- 索引优化:覆盖索引,联合索引
- 查询优化避免SELECT *,分页查询
- 连接池最大200连接超时30秒
### 7.2 缓存策略
- **Redis缓存**热点数据缓存TTL设置
- **本地缓存**Node.js内存缓存
- **CDN加速**:静态资源加速
### 7.3 异步处理
- 耗时操作异步化
- 消息队列削峰填谷
- 批量处理优化
## 8. 容灾备份方案
### 8.1 数据备份
- **每日全量备份**mysqldump + binlog
- **实时增量备份**MySQL主从复制
- **异地备份**OSS冷备存储
### 8.2 故障恢复
- **数据库故障**主从切换30分钟恢复
- **服务故障**:健康检查,自动重启
- **网络故障**:多可用区部署
## 9. 扩展性设计
### 9.1 水平扩展
- 无状态服务,支持弹性伸缩
- 数据库分库分表方案
- 缓存集群扩展
### 9.2 功能扩展
- 插件化架构设计
- API版本管理
- 灰度发布机制