HaniBlindBox/docs/系统架构图.md
2026-01-01 21:01:50 +08:00

9.9 KiB

抽奖盲盒系统架构图

1. 系统整体架构

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. 应用模块架构

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. 数据库架构设计

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. 抽奖算法架构

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. 支付系统架构

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. 缓存架构设计

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. 消息队列架构

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. 安全架构设计

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. 监控运维架构

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. 可维护性

  • 清晰的分层架构
  • 标准化的开发规范
  • 完善的日志和监控体系

这个架构设计充分考虑了抽奖盲盒系统的业务特点,在保证系统稳定性和性能的同时,也为未来的功能扩展预留了空间。