559 lines
9.9 KiB
Markdown
559 lines
9.9 KiB
Markdown
# 抽奖盲盒系统架构图
|
|
|
|
## 1. 系统整体架构
|
|
|
|
```mermaid
|
|
graph TB
|
|
subgraph "客户端层"
|
|
A1[微信小程序]
|
|
A2[H5页面]
|
|
A3[管理后台]
|
|
end
|
|
|
|
subgraph "网关层"
|
|
B1[Nginx反向代理]
|
|
B2[负载均衡]
|
|
end
|
|
|
|
subgraph "应用层"
|
|
C1[API接口模块]
|
|
C2[管理后台模块]
|
|
C3[定时任务模块]
|
|
end
|
|
|
|
subgraph "业务服务层"
|
|
D1[用户服务]
|
|
D2[商品服务]
|
|
D3[订单服务]
|
|
D4[支付服务]
|
|
D5[抽奖服务]
|
|
D6[物流服务]
|
|
D7[集市服务]
|
|
end
|
|
|
|
subgraph "数据层"
|
|
E1[MySQL主库]
|
|
E2[MySQL从库]
|
|
E3[Redis缓存]
|
|
E4[文件存储]
|
|
end
|
|
|
|
subgraph "外部服务"
|
|
F1[微信支付]
|
|
F2[支付宝]
|
|
F3[短信服务]
|
|
F4[物流接口]
|
|
F5[腾讯云COS]
|
|
end
|
|
|
|
A1 --> B1
|
|
A2 --> B1
|
|
A3 --> B1
|
|
|
|
B1 --> B2
|
|
B2 --> C1
|
|
B2 --> C2
|
|
|
|
C1 --> D1
|
|
C1 --> D2
|
|
C1 --> D3
|
|
C1 --> D4
|
|
C1 --> D5
|
|
C1 --> D6
|
|
C1 --> D7
|
|
|
|
C2 --> D1
|
|
C2 --> D2
|
|
C2 --> D3
|
|
|
|
C3 --> D1
|
|
C3 --> D2
|
|
C3 --> D3
|
|
|
|
D1 --> E1
|
|
D2 --> E1
|
|
D3 --> E1
|
|
D4 --> E1
|
|
D5 --> E1
|
|
D6 --> E1
|
|
D7 --> E1
|
|
|
|
D1 --> E2
|
|
D2 --> E2
|
|
D3 --> E2
|
|
|
|
D1 --> E3
|
|
D2 --> E3
|
|
D3 --> E3
|
|
D4 --> E3
|
|
D5 --> E3
|
|
|
|
D2 --> E4
|
|
D6 --> E4
|
|
|
|
D4 --> F1
|
|
D4 --> F2
|
|
D1 --> F3
|
|
D6 --> F4
|
|
D2 --> F5
|
|
```
|
|
|
|
## 2. 应用模块架构
|
|
|
|
```mermaid
|
|
graph TD
|
|
subgraph "ThinkPHP 6.0 框架"
|
|
A[应用入口 public/index.php]
|
|
|
|
subgraph "多应用模式"
|
|
B1[admin - 管理后台]
|
|
B2[api - 接口服务]
|
|
B3[index - 前台页面]
|
|
end
|
|
|
|
subgraph "公共模块"
|
|
C1[common/model - 数据模型]
|
|
C2[common/service - 业务服务]
|
|
C3[common/helper - 工具类]
|
|
C4[common/server - 服务类]
|
|
end
|
|
|
|
subgraph "中间件层"
|
|
D1[认证中间件]
|
|
D2[权限中间件]
|
|
D3[日志中间件]
|
|
D4[跨域中间件]
|
|
end
|
|
|
|
subgraph "配置管理"
|
|
E1[数据库配置]
|
|
E2[缓存配置]
|
|
E3[路由配置]
|
|
E4[应用配置]
|
|
end
|
|
end
|
|
|
|
A --> B1
|
|
A --> B2
|
|
A --> B3
|
|
|
|
B1 --> C1
|
|
B1 --> C2
|
|
B2 --> C1
|
|
B2 --> C2
|
|
B3 --> C1
|
|
B3 --> C2
|
|
|
|
B1 --> D1
|
|
B1 --> D2
|
|
B2 --> D1
|
|
B2 --> D3
|
|
|
|
C1 --> E1
|
|
C2 --> E2
|
|
B1 --> E3
|
|
B2 --> E3
|
|
```
|
|
|
|
## 3. 数据库架构设计
|
|
|
|
```mermaid
|
|
erDiagram
|
|
USER ||--o{ ORDER : "下单"
|
|
USER ||--o{ ORDER_LIST : "中奖"
|
|
USER ||--o{ COUPON_RECEIVE : "领取"
|
|
USER ||--o{ PROFIT_MONEY : "资金变动"
|
|
|
|
GOODS ||--o{ GOODS_LIST : "包含"
|
|
GOODS ||--o{ ORDER : "被购买"
|
|
GOODS_LIST ||--o{ ORDER_LIST : "中奖奖品"
|
|
|
|
ORDER ||--o{ ORDER_LIST : "包含"
|
|
ORDER_LIST ||--o{ ORDER_LIST_SEND : "发货"
|
|
ORDER_LIST ||--o{ MARKET : "集市"
|
|
|
|
CATEGORY ||--o{ GOODS : "分类"
|
|
COUPON ||--o{ COUPON_RECEIVE : "优惠券"
|
|
|
|
USER {
|
|
int id PK
|
|
string phone
|
|
string nickname
|
|
decimal money
|
|
decimal integral
|
|
int level
|
|
datetime addtime
|
|
}
|
|
|
|
GOODS {
|
|
int id PK
|
|
int category_id FK
|
|
string title
|
|
string imgurl
|
|
decimal price
|
|
int stock
|
|
int type
|
|
int status
|
|
datetime addtime
|
|
}
|
|
|
|
GOODS_LIST {
|
|
int id PK
|
|
int goods_id FK
|
|
string title
|
|
string imgurl
|
|
int stock
|
|
decimal price
|
|
decimal real_pro
|
|
int goods_type
|
|
}
|
|
|
|
ORDER {
|
|
int id PK
|
|
int user_id FK
|
|
string order_num
|
|
decimal order_total
|
|
decimal price
|
|
int goods_id FK
|
|
int prize_num
|
|
int status
|
|
datetime addtime
|
|
}
|
|
|
|
ORDER_LIST {
|
|
int id PK
|
|
int order_id FK
|
|
int user_id FK
|
|
int goods_id FK
|
|
int goodslist_id FK
|
|
string goodslist_title
|
|
decimal goodslist_price
|
|
int status
|
|
datetime addtime
|
|
}
|
|
```
|
|
|
|
## 4. 抽奖算法架构
|
|
|
|
```mermaid
|
|
graph TD
|
|
A[抽奖请求] --> B{抽奖类型判断}
|
|
|
|
B --> C1[一番赏算法]
|
|
B --> C2[无限赏算法]
|
|
B --> C3[抽卡机算法]
|
|
B --> C4[其他类型算法]
|
|
|
|
subgraph "抽奖算法核心"
|
|
D1[加权随机算法]
|
|
D2[概率区间算法]
|
|
D3[库存消耗算法]
|
|
|
|
E1[奖品池构建]
|
|
E2[权重计算]
|
|
E3[随机数生成]
|
|
E4[结果匹配]
|
|
end
|
|
|
|
C1 --> D1
|
|
C2 --> D2
|
|
C3 --> D3
|
|
C4 --> D1
|
|
|
|
D1 --> E1
|
|
D2 --> E1
|
|
D3 --> E1
|
|
|
|
E1 --> E2
|
|
E2 --> E3
|
|
E3 --> E4
|
|
|
|
E4 --> F{奖品类型}
|
|
F --> G1[普通奖品]
|
|
F --> G2[宝箱奖品]
|
|
F --> G3[特殊奖品]
|
|
|
|
G2 --> H[递归抽奖]
|
|
H --> E1
|
|
|
|
G1 --> I[更新库存]
|
|
G3 --> I
|
|
|
|
I --> J[生成中奖记录]
|
|
J --> K[返回结果]
|
|
```
|
|
|
|
## 5. 支付系统架构
|
|
|
|
```mermaid
|
|
graph TD
|
|
A[支付请求] --> B[支付路由]
|
|
|
|
B --> C{支付方式}
|
|
C --> D1[微信支付]
|
|
C --> D2[支付宝支付]
|
|
C --> D3[余额支付]
|
|
C --> D4[虚拟货币支付]
|
|
|
|
subgraph "支付处理"
|
|
E1[订单验证]
|
|
E2[金额计算]
|
|
E3[优惠券处理]
|
|
E4[支付执行]
|
|
E5[回调处理]
|
|
end
|
|
|
|
D1 --> E1
|
|
D2 --> E1
|
|
D3 --> E1
|
|
D4 --> E1
|
|
|
|
E1 --> E2
|
|
E2 --> E3
|
|
E3 --> E4
|
|
|
|
E4 --> F{支付结果}
|
|
F -->|成功| G[触发抽奖]
|
|
F -->|失败| H[订单取消]
|
|
|
|
subgraph "外部支付"
|
|
I1[微信支付API]
|
|
I2[支付宝API]
|
|
end
|
|
|
|
D1 --> I1
|
|
D2 --> I2
|
|
|
|
I1 --> E5
|
|
I2 --> E5
|
|
|
|
E5 --> J[更新订单状态]
|
|
J --> G
|
|
```
|
|
|
|
## 6. 缓存架构设计
|
|
|
|
```mermaid
|
|
graph TD
|
|
subgraph "应用层缓存"
|
|
A1[用户信息缓存]
|
|
A2[商品信息缓存]
|
|
A3[配置信息缓存]
|
|
A4[热点数据缓存]
|
|
end
|
|
|
|
subgraph "Redis集群"
|
|
B1[Redis Master]
|
|
B2[Redis Slave 1]
|
|
B3[Redis Slave 2]
|
|
end
|
|
|
|
subgraph "缓存策略"
|
|
C1[读写分离]
|
|
C2[主从同步]
|
|
C3[故障转移]
|
|
C4[数据持久化]
|
|
end
|
|
|
|
A1 --> B1
|
|
A2 --> B1
|
|
A3 --> B1
|
|
A4 --> B1
|
|
|
|
B1 --> B2
|
|
B1 --> B3
|
|
|
|
B1 --> C1
|
|
B2 --> C1
|
|
B3 --> C1
|
|
|
|
C1 --> C2
|
|
C2 --> C3
|
|
C3 --> C4
|
|
|
|
subgraph "缓存更新策略"
|
|
D1[定时更新]
|
|
D2[事件触发更新]
|
|
D3[LRU淘汰]
|
|
D4[TTL过期]
|
|
end
|
|
|
|
C4 --> D1
|
|
C4 --> D2
|
|
C4 --> D3
|
|
C4 --> D4
|
|
```
|
|
|
|
## 7. 消息队列架构
|
|
|
|
```mermaid
|
|
graph TD
|
|
subgraph "消息生产者"
|
|
A1[订单服务]
|
|
A2[支付服务]
|
|
A3[抽奖服务]
|
|
A4[物流服务]
|
|
end
|
|
|
|
subgraph "消息队列"
|
|
B1[支付成功队列]
|
|
B2[抽奖结果队列]
|
|
B3[发货通知队列]
|
|
B4[数据统计队列]
|
|
end
|
|
|
|
subgraph "消息消费者"
|
|
C1[抽奖处理器]
|
|
C2[通知处理器]
|
|
C3[统计处理器]
|
|
C4[日志处理器]
|
|
end
|
|
|
|
A1 --> B1
|
|
A2 --> B1
|
|
A2 --> B4
|
|
A3 --> B2
|
|
A3 --> B4
|
|
A4 --> B3
|
|
|
|
B1 --> C1
|
|
B2 --> C2
|
|
B3 --> C2
|
|
B4 --> C3
|
|
|
|
C1 --> D1[执行抽奖]
|
|
C2 --> D2[发送通知]
|
|
C3 --> D3[更新统计]
|
|
C4 --> D4[记录日志]
|
|
```
|
|
|
|
## 8. 安全架构设计
|
|
|
|
```mermaid
|
|
graph TD
|
|
subgraph "网络安全"
|
|
A1[HTTPS加密]
|
|
A2[防火墙]
|
|
A3[DDoS防护]
|
|
A4[IP白名单]
|
|
end
|
|
|
|
subgraph "应用安全"
|
|
B1[JWT认证]
|
|
B2[权限控制]
|
|
B3[参数验证]
|
|
B4[SQL注入防护]
|
|
B5[XSS防护]
|
|
end
|
|
|
|
subgraph "数据安全"
|
|
C1[数据加密]
|
|
C2[敏感信息脱敏]
|
|
C3[数据备份]
|
|
C4[访问日志]
|
|
end
|
|
|
|
subgraph "业务安全"
|
|
D1[防刷机制]
|
|
D2[风控系统]
|
|
D3[异常监控]
|
|
D4[操作审计]
|
|
end
|
|
|
|
A1 --> B1
|
|
A2 --> B2
|
|
A3 --> B3
|
|
A4 --> B4
|
|
|
|
B1 --> C1
|
|
B2 --> C2
|
|
B3 --> C3
|
|
B4 --> C4
|
|
B5 --> C4
|
|
|
|
C1 --> D1
|
|
C2 --> D2
|
|
C3 --> D3
|
|
C4 --> D4
|
|
```
|
|
|
|
## 9. 监控运维架构
|
|
|
|
```mermaid
|
|
graph TD
|
|
subgraph "应用监控"
|
|
A1[性能监控]
|
|
A2[错误监控]
|
|
A3[业务监控]
|
|
A4[用户行为监控]
|
|
end
|
|
|
|
subgraph "系统监控"
|
|
B1[服务器监控]
|
|
B2[数据库监控]
|
|
B3[缓存监控]
|
|
B4[网络监控]
|
|
end
|
|
|
|
subgraph "日志管理"
|
|
C1[应用日志]
|
|
C2[访问日志]
|
|
C3[错误日志]
|
|
C4[审计日志]
|
|
end
|
|
|
|
subgraph "告警系统"
|
|
D1[实时告警]
|
|
D2[邮件通知]
|
|
D3[短信通知]
|
|
D4[钉钉通知]
|
|
end
|
|
|
|
A1 --> D1
|
|
A2 --> D1
|
|
A3 --> D1
|
|
A4 --> D1
|
|
|
|
B1 --> D1
|
|
B2 --> D1
|
|
B3 --> D1
|
|
B4 --> D1
|
|
|
|
C1 --> D2
|
|
C2 --> D2
|
|
C3 --> D2
|
|
C4 --> D2
|
|
|
|
D1 --> D3
|
|
D2 --> D3
|
|
D3 --> D4
|
|
```
|
|
|
|
## 架构特点说明
|
|
|
|
### 1. 高可用性
|
|
- 采用主从数据库架构,支持读写分离
|
|
- Redis集群提供缓存高可用
|
|
- 负载均衡确保服务高可用
|
|
|
|
### 2. 高性能
|
|
- 多层缓存策略减少数据库压力
|
|
- 异步消息队列处理耗时操作
|
|
- 优化的抽奖算法提升处理效率
|
|
|
|
### 3. 可扩展性
|
|
- 微服务化的业务模块设计
|
|
- 水平扩展支持
|
|
- 插件化的支付和物流接口
|
|
|
|
### 4. 安全性
|
|
- 多层安全防护机制
|
|
- 完善的权限控制体系
|
|
- 全面的审计和监控
|
|
|
|
### 5. 可维护性
|
|
- 清晰的分层架构
|
|
- 标准化的开发规范
|
|
- 完善的日志和监控体系
|
|
|
|
这个架构设计充分考虑了抽奖盲盒系统的业务特点,在保证系统稳定性和性能的同时,也为未来的功能扩展预留了空间。 |