docs: 更新项目文档,完善需求和技术细节
This commit is contained in:
255
docs/系统架构文档.md
Normal file
255
docs/系统架构文档.md
Normal file
@@ -0,0 +1,255 @@
|
||||
# 爱鉴花小程序 - 系统架构文档
|
||||
|
||||
## 版本历史
|
||||
| 版本 | 日期 | 作者 | 描述 |
|
||||
|------|------|------|------|
|
||||
| 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 API(HTTP/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版本管理
|
||||
- 灰度发布机制
|
||||
Reference in New Issue
Block a user