255 lines
6.8 KiB
Markdown
255 lines
6.8 KiB
Markdown
|
|
# 爱鉴花小程序 - 系统架构文档
|
|||
|
|
|
|||
|
|
## 版本历史
|
|||
|
|
| 版本 | 日期 | 作者 | 描述 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| 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版本管理
|
|||
|
|
- 灰度发布机制
|