📄 docs: 添加游戏加速器完整技术方案(14部分)
This commit is contained in:
@@ -0,0 +1,673 @@
|
||||
# 第二部分:整体系统架构设计
|
||||
|
||||
## 2.1 全局架构总览
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 加速器系统全局架构 │
|
||||
├─────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────────── 客户端层 ───────────────────────┐ │
|
||||
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
|
||||
│ │ │ Windows │ │ Mac │ │ Android │ │ iOS │ │ │
|
||||
│ │ │ Client │ │ Client │ │ Client │ │ Client │ │ │
|
||||
│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │
|
||||
│ │ └─────────────┴─────────────┴─────────────┘ │ │
|
||||
│ │ │ HTTPS/WSS │ │
|
||||
│ └─────────────────────────┼───────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌─────────────────────────┼──── API Gateway层 ───────────┐ │
|
||||
│ │ ┌────┴────┐ │ │
|
||||
│ │ │ Nginx │ (负载均衡/限流/WAF) │ │
|
||||
│ │ │ OpenResty│ │ │
|
||||
│ │ └────┬────┘ │ │
|
||||
│ └─────────────────────────┼───────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌─────────────────────────┼──── 微服务层 ────────────────┐ │
|
||||
│ │ ┌──────────┐ ┌────────┴───┐ ┌──────────┐ ┌────────┐ │ │
|
||||
│ │ │ 用户中心 │ │ 订单中心 │ │ 会员中心 │ │ 风控 │ │ │
|
||||
│ │ │ User │ │ Order │ │ VIP │ │ Risk │ │ │
|
||||
│ │ └──────────┘ └────────────┘ └──────────┘ └────────┘ │ │
|
||||
│ │ ┌──────────┐ ┌────────────┐ ┌──────────┐ ┌────────┐ │ │
|
||||
│ │ │ 节点管理 │ │ 调度中心 │ │ 游戏配置 │ │ 监控 │ │ │
|
||||
│ │ │ Node │ │ Dispatch │ │ Game │ │ Monitor│ │ │
|
||||
│ │ └──────────┘ └────────────┘ └──────────┘ └────────┘ │ │
|
||||
│ │ ┌──────────┐ ┌────────────┐ ┌──────────┐ │ │
|
||||
│ │ │ 日志中心 │ │ 通知中心 │ │ 配置中心 │ │ │
|
||||
│ │ │ Log │ │ Notify │ │ Config │ │ │
|
||||
│ │ └──────────┘ └────────────┘ └──────────┘ │ │
|
||||
│ └────────────────────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌─────────────────────────┼──── 数据层 ──────────────────┐ │
|
||||
│ │ ┌──────┐ ┌──────┐ ┌───┴───┐ ┌──────┐ ┌──────────┐ │ │
|
||||
│ │ │MySQL │ │Redis │ │MongoDB│ │Kafka │ │ClickHouse│ │ │
|
||||
│ │ │主数据 │ │缓存 │ │日志 │ │消息 │ │分析 │ │ │
|
||||
│ │ └──────┘ └──────┘ └───────┘ └──────┘ └──────────┘ │ │
|
||||
│ └────────────────────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌─────────────────────────┼──── 加速网络层 ──────────────┐ │
|
||||
│ │ ┌──────────┐ ┌────────┴───┐ ┌──────────┐ │ │
|
||||
│ │ │ 接入节点 │ │ 中转节点 │ │ 出口节点 │ │ │
|
||||
│ │ │ Access │ │ Relay │ │ Exit │ │ │
|
||||
│ │ │ (200+) │ │ (50+) │ │ (100+) │ │ │
|
||||
│ │ └──────────┘ └────────────┘ └──────────┘ │ │
|
||||
│ └────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 2.2 客户端模块设计
|
||||
|
||||
### 2.2.1 模块总览
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Windows 客户端架构 │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||||
│ │ UI 层 (Electron/Tauri) │ │
|
||||
│ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │
|
||||
│ │ │ 登录 │ │ 主页 │ │ 游戏 │ │ 加速 │ │ 设置 │ │ │
|
||||
│ │ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │ │
|
||||
│ └───────────────────────────┬─────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌───────────────────────────┼──── 业务层 ─────────────────┐ │
|
||||
│ │ ┌──────────┐ ┌──────────┼──────────┐ ┌──────────┐ │ │
|
||||
│ │ │ 登录模块 │ │ 游戏识别 ││ 测速模块 │ │ 诊断模块 │ │ │
|
||||
│ │ │ Auth │ │ GameDetect│ SpeedTest │ │ Diagnose │ │ │
|
||||
│ │ └──────────┘ └──────────┴──────────┘ └──────────┘ │ │
|
||||
│ │ ┌──────────┐ ┌──────────────┐ ┌──────────┐ │ │
|
||||
│ │ │ 自动更新 │ │ 崩溃上报 │ │ 数据统计 │ │ │
|
||||
│ │ │ Updater │ │ CrashReport │ │ Analytics│ │ │
|
||||
│ │ └──────────┘ └──────────────┘ └──────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌───────────────────────────┼──── 核心层 ─────────────────┐ │
|
||||
│ │ ┌──────────────────┐ ┌──┴────────────┐ ┌───────────┐ │ │
|
||||
│ │ │ 流量捕获模块 │ │ 隧道模块 │ │ 路由模块 │ │ │
|
||||
│ │ │ TrafficCapture │ │ Tunnel │ │ Router │ │ │
|
||||
│ │ │ (WFP/WinDivert) │ │ (UDP/QUIC) │ │ (Smart) │ │ │
|
||||
│ │ └──────────────────┘ └───────────────┘ └───────────┘ │ │
|
||||
│ │ ┌──────────────────┐ ┌───────────────┐ ┌───────────┐ │ │
|
||||
│ │ │ 协议识别模块 │ │ 加密模块 │ │ 压缩模块 │ │ │
|
||||
│ │ │ ProtocolDetect │ │ Crypto │ │ Compress │ │ │
|
||||
│ │ └──────────────────┘ └───────────────┘ └───────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌───────────────────────────┼──── 驱动层 ─────────────────┐ │
|
||||
│ │ ┌──────────────────────────────────────────────────┐ │ │
|
||||
│ │ │ WFP Callout Driver │ │ │
|
||||
│ │ │ (Windows Filtering Platform) │ │ │
|
||||
│ │ └──────────────────────────────────────────────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 2.2.2 各模块详细设计
|
||||
|
||||
#### 模块1:登录模块(Auth Module)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 用户注册/登录(手机号/邮箱/第三方OAuth)
|
||||
- Token管理(JWT Access Token + Refresh Token)
|
||||
- 设备绑定与管理
|
||||
- 多设备限制(防共享账号)
|
||||
- 自动登录与Token刷新
|
||||
|
||||
技术实现:
|
||||
┌──────────┐ ┌──────────┐ ┌──────────┐
|
||||
│ 登录页面 │────→│ Auth API │────→│ 用户中心 │
|
||||
└──────────┘ └──────────┘ └──────────┘
|
||||
│ │ │
|
||||
│ ┌────┴────┐ ┌────┴────┐
|
||||
│ │ JWT签发 │ │ Redis │
|
||||
│ │ RS256 │ │ Session │
|
||||
│ └─────────┘ └─────────┘
|
||||
│
|
||||
└──→ 本地存储加密Token(Keychain/DPAPI)
|
||||
|
||||
数据流:
|
||||
1. 用户输入凭证 → HTTPS POST /api/v1/auth/login
|
||||
2. 服务端验证 → 签发JWT(有效期2h)+ Refresh Token(有效期30d)
|
||||
3. 客户端存储Token → 后续请求自动携带Authorization头
|
||||
4. Token过期 → 使用Refresh Token自动刷新
|
||||
5. Refresh Token过期 → 重新登录
|
||||
```
|
||||
|
||||
#### 模块2:游戏识别模块(Game Detection Module)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 自动识别已安装游戏
|
||||
- 匹配游戏配置(服务器地址、端口、协议)
|
||||
- 支持手动添加游戏
|
||||
- 游戏版本检测
|
||||
|
||||
技术实现:
|
||||
┌──────────────────────────────────────────────────────────┐
|
||||
│ 游戏识别流程 │
|
||||
├──────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 方式1:进程名匹配 │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ 进程快照 │───→│ 进程名 │───→│ 匹配游戏 │ │
|
||||
│ │ CreateTool│ │ 比对 │ │ 配置库 │ │
|
||||
│ │ Snapshot │ │ │ │ │ │
|
||||
│ └──────────┘ └──────────┘ └──────────┘ │
|
||||
│ │
|
||||
│ 方式2:注册表扫描 │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ 注册表 │───→│ 安装路径 │───→│ EXE信息 │ │
|
||||
│ │ HKLM\...\│ │ 提取 │ │ 匹配 │ │
|
||||
│ │ Uninstall │ │ │ │ │ │
|
||||
│ └──────────┘ └──────────┘ └──────────┘ │
|
||||
│ │
|
||||
│ 方式3:Steam库扫描 │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ Steam │───→│ appinfo │───→│ 游戏列表 │ │
|
||||
│ │ library │ │ .vdf解析 │ │ 匹配 │ │
|
||||
│ │folders │ │ │ │ │ │
|
||||
│ └──────────┘ └──────────┘ └──────────┘ │
|
||||
│ │
|
||||
│ 游戏配置数据库结构 (GameConfig): │
|
||||
│ { │
|
||||
│ "game_id": "genshin_impact", │
|
||||
│ "name": "原神", │
|
||||
│ "process_names": ["GenshinImpact.exe", "YuanShen.exe"],│
|
||||
│ "servers": [ │
|
||||
│ { │
|
||||
│ "name": "亚服", │
|
||||
│ "ip_ranges": ["47.245.0.0/16"], │
|
||||
│ "ports": [443, 80, 22102], │
|
||||
│ "protocol": "tcp+udp", │
|
||||
│ "region": "asia" │
|
||||
│ } │
|
||||
│ ], │
|
||||
│ "capture_mode": "process", │
|
||||
│ "tunnel_mode": "udp_relay" │
|
||||
│ } │
|
||||
│ │
|
||||
└──────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 模块3:流量捕获模块(Traffic Capture Module)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 捕获指定游戏进程的网络流量
|
||||
- 区分游戏流量和非游戏流量
|
||||
- 支持TCP和UDP流量
|
||||
- 零拷贝转发(性能优化)
|
||||
|
||||
技术实现(Windows):
|
||||
|
||||
方案对比:
|
||||
┌──────────────┬────────────┬────────────┬───────────┬──────────┐
|
||||
│ 方案 │ 兼容性 │ 性能 │ 稳定性 │ 推荐度 │
|
||||
├──────────────┼────────────┼────────────┼───────────┼──────────┤
|
||||
│ WFP │ Win7+ │ 高 │ 高 │ ★★★★★ │
|
||||
│ WinDivert │ Win7+ │ 中高 │ 中高 │ ★★★★ │
|
||||
│ TUN/TAP │ 全平台 │ 中 │ 中 │ ★★★ │
|
||||
│ NDIS Filter │ Win7+ │ 高 │ 中 │ ★★★ │
|
||||
│ LSP/WFP │ Win7+ │ 中 │ 低 │ ★★ │
|
||||
└──────────────┴────────────┴────────────┴───────────┴──────────┘
|
||||
|
||||
推荐方案:WFP (Windows Filtering Platform)
|
||||
原因:
|
||||
1. 微软官方支持,稳定性最高
|
||||
2. 内核态过滤,性能最好
|
||||
3. 支持按进程过滤
|
||||
4. 支持Win7-Win11全系列
|
||||
|
||||
WFP架构:
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 用户态 (Ring 3) │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ 加速器客户端进程 │ │
|
||||
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
|
||||
│ │ │ 流量管理 │ │ 隧道封装 │ │ 策略引擎 │ │ │
|
||||
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
|
||||
│ └──────────────────────────┬──────────────────────┘ │
|
||||
│ │ IOCTL │
|
||||
├─────────────────────────────┼───────────────────────────┤
|
||||
│ 内核态 (Ring 0) │
|
||||
│ ┌──────────────────────────┴──────────────────────┐ │
|
||||
│ │ WFP Callout Driver │ │
|
||||
│ │ ┌──────────────────────────────────────────┐ │ │
|
||||
│ │ │ ALE Layer (Application Layer Enforcement)│ │ │
|
||||
│ │ │ - ALE_AUTH_CONNECT_V4 │ │ │
|
||||
│ │ │ - ALE_AUTH_RECV_ACCEPT_V4 │ │ │
|
||||
│ │ │ ↓ 按进程PID过滤 │ │ │
|
||||
│ │ │ ↓ 按目标IP/端口过滤 │ │ │
|
||||
│ │ │ ↓ 决定:放行/拦截/重定向 │ │ │
|
||||
│ │ └──────────────────────────────────────────┘ │ │
|
||||
│ │ ┌──────────────────────────────────────────┐ │ │
|
||||
│ │ │ Transport Layer │ │ │
|
||||
│ │ │ - FWPM_LAYER_OUTBOUND_TRANSPORT_V4 │ │ │
|
||||
│ │ │ - FWPM_LAYER_INBOUND_TRANSPORT_V4 │ │ │
|
||||
│ │ │ ↓ 数据包级别的过滤和修改 │ │ │
|
||||
│ │ └──────────────────────────────────────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 模块4:隧道模块(Tunnel Module)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 封装游戏流量为隧道协议
|
||||
- 加密传输(防止DPI检测和中间人攻击)
|
||||
- 多节点间中转
|
||||
- 协议自适应(根据网络状况选择最优协议)
|
||||
|
||||
技术实现:
|
||||
┌──────────────────────────────────────────────────────────┐
|
||||
│ 隧道协议栈 │
|
||||
├──────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌────────────────────────────────────────────────────┐ │
|
||||
│ │ Layer 5: 应用层 │ │
|
||||
│ │ ┌──────────────────────────────────────────────┐ │ │
|
||||
│ │ │ 游戏原始数据 │ │ │
|
||||
│ │ └──────────────────────────────────────────────┘ │ │
|
||||
│ └────────────────────────────────────────────────────┘ │
|
||||
│ ↓ │
|
||||
│ ┌────────────────────────────────────────────────────┐ │
|
||||
│ │ Layer 4: 隧道封装层 │ │
|
||||
│ │ ┌──────────────────────────────────────────────┐ │ │
|
||||
│ │ │ 隧道头 | 序列号 | 时间戳 | 校验和 | 原始数据 │ │ │
|
||||
│ │ └──────────────────────────────────────────────┘ │ │
|
||||
│ └────────────────────────────────────────────────────┘ │
|
||||
│ ↓ │
|
||||
│ ┌────────────────────────────────────────────────────┐ │
|
||||
│ │ Layer 3: 加密层 │ │
|
||||
│ │ ┌──────────────────────────────────────────────┐ │ │
|
||||
│ │ │ AES-256-GCM / ChaCha20-Poly1305 │ │ │
|
||||
│ │ └──────────────────────────────────────────────┘ │ │
|
||||
│ └────────────────────────────────────────────────────┘ │
|
||||
│ ↓ │
|
||||
│ ┌────────────────────────────────────────────────────┐ │
|
||||
│ │ Layer 2: 传输层 │ │
|
||||
│ │ ┌──────────────────────────────────────────────┐ │ │
|
||||
│ │ │ UDP Relay / QUIC / KCP / 自定义协议 │ │ │
|
||||
│ │ └──────────────────────────────────────────────┘ │ │
|
||||
│ └────────────────────────────────────────────────────┘ │
|
||||
│ ↓ │
|
||||
│ ┌────────────────────────────────────────────────────┐ │
|
||||
│ │ Layer 1: 网络层 │ │
|
||||
│ │ ┌──────────────────────────────────────────────┐ │ │
|
||||
│ │ │ IP / IPv4 / IPv6 │ │ │
|
||||
│ │ └──────────────────────────────────────────────┘ │ │
|
||||
│ └────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└──────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 模块5:测速模块(Speed Test Module)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 测试到各节点的延迟、丢包、抖动
|
||||
- 测试带宽
|
||||
- 节点评分
|
||||
- 历史数据存储
|
||||
|
||||
技术实现:
|
||||
┌──────────────────────────────────────────────────────────┐
|
||||
│ 测速算法设计 │
|
||||
├──────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 1. 延迟测试(RTT) │
|
||||
│ - 发送UDP探测包,记录往返时间 │
|
||||
│ - 连续发送10个包,取中位数(去除异常值) │
|
||||
│ - 每30秒更新一次 │
|
||||
│ │
|
||||
│ 2. 丢包率测试 │
|
||||
│ - 发送20个UDP包,统计未收到回复的数量 │
|
||||
│ - 丢包率 = 未回复数 / 总发送数 │
|
||||
│ - 连续3轮测试取平均值 │
|
||||
│ │
|
||||
│ 3. 抖动测试(Jitter) │
|
||||
│ - Jitter = Σ|RTTi - RTTi-1| / (N-1) │
|
||||
│ - 连续10个包的RTT标准差 │
|
||||
│ │
|
||||
│ 4. 带宽测试 │
|
||||
│ - 发送递增大小的数据包 │
|
||||
│ - 测量吞吐量上限 │
|
||||
│ - TCP + UDP分别测试 │
|
||||
│ │
|
||||
│ 5. 综合评分公式 │
|
||||
│ Score = 100 │
|
||||
│ - RTT扣分: max(0, (RTT - 30) × 0.5) │
|
||||
│ - Loss扣分: Loss × 200 │
|
||||
│ - Jitter扣分: Jitter × 2 │
|
||||
│ Score = max(0, Score) │
|
||||
│ │
|
||||
│ 评分等级: │
|
||||
│ 90-100: 极佳(绿色) │
|
||||
│ 70-89: 良好(黄色) │
|
||||
│ 50-69: 一般(橙色) │
|
||||
│ <50: 较差(红色) │
|
||||
│ │
|
||||
└──────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 模块6:诊断模块(Diagnostic Module)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 网络环境诊断
|
||||
- 加速效果诊断
|
||||
- 问题排查与上报
|
||||
- 一键诊断报告生成
|
||||
|
||||
诊断项:
|
||||
┌────────────────┬──────────────────────────────────────┐
|
||||
│ 诊断项 │ 说明 │
|
||||
├────────────────┼──────────────────────────────────────┤
|
||||
│ DNS解析 │ 检测DNS是否正常,是否被污染 │
|
||||
│ 网络连通性 │ Ping测试各节点可达性 │
|
||||
│ 路由追踪 │ Traceroute分析路由路径 │
|
||||
│ 端口检测 │ 检测游戏所需端口是否可达 │
|
||||
│ MTU检测 │ 检测最大传输单元,避免分片 │
|
||||
│ NAT类型 │ 检测NAT类型(影响P2P游戏) │
|
||||
│ 防火墙 │ 检测防火墙是否阻止游戏流量 │
|
||||
│ 驱动状态 │ 检测WFP驱动是否正常加载 │
|
||||
│ 系统兼容性 │ 检测操作系统版本兼容性 │
|
||||
└────────────────┴──────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 模块7:自动更新模块(Updater Module)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 增量更新(只下载变化的部分)
|
||||
- 静默更新(后台自动完成)
|
||||
- 回滚机制(更新失败可回退)
|
||||
- 灰度发布
|
||||
|
||||
技术实现:
|
||||
┌──────────────────────────────────────────────────────────┐
|
||||
│ 自动更新流程 │
|
||||
├──────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ 检查更新 │───→│ 下载差异 │───→│ 校验文件 │ │
|
||||
│ │ GET /api │ │ bsdiff │ │ SHA256 │ │
|
||||
│ │ /version │ │ 增量包 │ │ 签名验证 │ │
|
||||
│ └──────────┘ └──────────┘ └──────────┘ │
|
||||
│ │ │ │
|
||||
│ │ ┌───────────────────┘ │
|
||||
│ │ ↓ │
|
||||
│ │ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ │ 备份当前 │───→│ 应用更新 │ │
|
||||
│ │ │ 版本 │ │ 替换文件 │ │
|
||||
│ │ └──────────┘ └──────────┘ │
|
||||
│ │ │ │
|
||||
│ │ ┌───────────────┘ │
|
||||
│ │ ↓ │
|
||||
│ │ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ │ 验证更新 │───→│ 重启应用 │ │
|
||||
│ │ │ 启动测试 │ │ 完成更新 │ │
|
||||
│ │ └──────────┘ └──────────┘ │
|
||||
│ │ │
|
||||
│ │ 更新失败?→ 回滚到备份版本 │
|
||||
│ │
|
||||
└──────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 模块8:崩溃上报模块(Crash Report Module)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 捕获未处理异常
|
||||
- 生成MiniDump文件
|
||||
- 收集系统环境信息
|
||||
- 上传崩溃报告
|
||||
|
||||
技术实现:
|
||||
- Windows: SetUnhandledExceptionFilter + MiniDumpWriteDump
|
||||
- 收集信息:CPU/内存/磁盘/网络/驱动版本/系统版本
|
||||
- 上传:压缩后HTTPS上传到崩溃收集服务
|
||||
- 分析:服务端自动符号解析,生成可读堆栈
|
||||
```
|
||||
|
||||
## 2.3 服务端微服务架构
|
||||
|
||||
### 2.3.1 服务关系图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────┐
|
||||
│ 微服务架构关系图 │
|
||||
├─────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────┐ │
|
||||
│ │ API Gateway │ │
|
||||
│ │ (OpenResty) │ │
|
||||
│ └──────┬───────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────┬──────────┼──────────┬──────────┐ │
|
||||
│ ↓ ↓ ↓ ↓ ↓ │
|
||||
│ ┌──────────┐┌──────────┐┌──────────┐┌──────────┐┌──────────┐ │
|
||||
│ │ 用户中心 ││ 订单中心 ││ 节点管理 ││ 调度中心 ││ 游戏配置 │ │
|
||||
│ │ ││ ││ ││ ││ │ │
|
||||
│ │ - 注册 ││ - 创建 ││ - 节点 ││ - 路由 ││ - 游戏 │ │
|
||||
│ │ - 登录 ││ 订单 ││ 注册 ││ 决策 ││ 列表 │ │
|
||||
│ │ - Token ││ - 支付 ││ - 健康 ││ - 负载 ││ - 服务器 │ │
|
||||
│ │ - 设备 ││ - 退款 ││ 检查 ││ 均衡 ││ 配置 │ │
|
||||
│ │ - 会员 ││ - 续费 ││ - 节点 ││ - 智能 ││ - 版本 │ │
|
||||
│ │ ││ ││ 发现 ││ 选路 ││ 更新 │ │
|
||||
│ └────┬─────┘└────┬─────┘└────┬─────┘└────┬─────┘└────┬─────┘ │
|
||||
│ │ │ │ │ │ │
|
||||
│ └───────────┴───────────┴─────┬─────┴───────────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────┬────────────────┼──────────┬──────────┐ │
|
||||
│ ↓ ↓ ↓ ↓ ↓ │
|
||||
│ ┌──────────┐┌──────────┐ ┌──────────┐┌──────────┐┌──────────┐ │
|
||||
│ │ 监控中心 ││ 风控中心 │ │ 日志中心 ││ 通知中心 ││ 配置中心 │ │
|
||||
│ │ ││ │ │ ││ ││ │ │
|
||||
│ │ - 指标 ││ - 异常 │ │ - 日志 ││ - 推送 ││ - 动态 │ │
|
||||
│ │ 采集 ││ 检测 │ │ 收集 ││ - 短信 ││ 配置 │ │
|
||||
│ │ - 告警 ││ - 频控 │ │ - 分析 ││ - 邮件 ││ - 灰度 │ │
|
||||
│ │ - 面板 ││ - 黑名单 │ │ - 存储 ││ - 站内信 ││ - 版本 │ │
|
||||
│ └──────────┘└──────────┘ └──────────┘└──────────┘└──────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 2.3.2 各服务详细设计
|
||||
|
||||
#### 用户中心(User Service)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 用户注册、登录、注销
|
||||
- Token签发与验证
|
||||
- 设备绑定与管理
|
||||
- 会员状态管理
|
||||
- 用户信息CRUD
|
||||
|
||||
接口设计:
|
||||
POST /api/v1/auth/register # 注册
|
||||
POST /api/v1/auth/login # 登录
|
||||
POST /api/v1/auth/logout # 登出
|
||||
POST /api/v1/auth/refresh # 刷新Token
|
||||
GET /api/v1/user/profile # 获取用户信息
|
||||
PUT /api/v1/user/profile # 更新用户信息
|
||||
POST /api/v1/user/bindDevice # 绑定设备
|
||||
DELETE /api/v1/user/unbindDevice # 解绑设备
|
||||
GET /api/v1/user/devices # 设备列表
|
||||
POST /api/v1/user/changePassword # 修改密码
|
||||
POST /api/v1/user/resetPassword # 重置密码
|
||||
|
||||
技术栈:
|
||||
- Go (Gin框架)
|
||||
- MySQL (用户数据)
|
||||
- Redis (Session/Token缓存)
|
||||
- gRPC (服务间通信)
|
||||
```
|
||||
|
||||
#### 订单中心(Order Service)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 订单创建与管理
|
||||
- 支付对接(支付宝/微信/Apple Pay)
|
||||
- 退款处理
|
||||
- 订单统计
|
||||
|
||||
接口设计:
|
||||
POST /api/v1/order/create # 创建订单
|
||||
GET /api/v1/order/{id} # 查询订单
|
||||
GET /api/v1/order/list # 订单列表
|
||||
POST /api/v1/order/pay # 发起支付
|
||||
POST /api/v1/order/callback # 支付回调
|
||||
POST /api/v1/order/refund # 申请退款
|
||||
GET /api/v1/order/statistics # 订单统计
|
||||
|
||||
支付流程:
|
||||
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
|
||||
│ 创建 │───→│ 支付 │───→│ 回调 │───→│ 激活 │
|
||||
│ 订单 │ │ 请求 │ │ 验签 │ │ 会员 │
|
||||
└────────┘ └────────┘ └────────┘ └────────┘
|
||||
│ │ │ │
|
||||
MySQL 支付宝/ 异步通知 更新用户
|
||||
订单表 微信支付 验证签名 会员状态
|
||||
```
|
||||
|
||||
#### 节点管理(Node Service)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 节点注册与发现
|
||||
- 节点健康检查
|
||||
- 节点配置下发
|
||||
- 节点状态监控
|
||||
|
||||
节点数据结构:
|
||||
{
|
||||
"node_id": "cn-bj-01",
|
||||
"name": "北京BGP节点01",
|
||||
"region": "china",
|
||||
"city": "beijing",
|
||||
"isp": ["unicom", "telecom", "mobile"],
|
||||
"ip": "103.x.x.1",
|
||||
"port": 8000,
|
||||
"capacity": 10000,
|
||||
"current_load": 3500,
|
||||
"status": "online",
|
||||
"quality_score": 95,
|
||||
"bandwidth_mbps": 10000,
|
||||
"location": {"lat": 39.9042, "lng": 116.4074}
|
||||
}
|
||||
|
||||
健康检查机制:
|
||||
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
|
||||
│ 心跳上报 │───→│ 状态检查 │───→│ 质量探测 │───→│ 告警决策 │
|
||||
│ 每10秒 │ │ CPU/内存 │ │ Ping/丢包│ │ 自动摘除 │
|
||||
│ UDP心跳 │ │ 带宽/连接│ │ 延迟/抖动│ │ 通知运维 │
|
||||
└──────────┘ └──────────┘ └──────────┘ └──────────┘
|
||||
```
|
||||
|
||||
#### 调度中心(Dispatch Service)
|
||||
|
||||
```
|
||||
职责:
|
||||
- 智能选路(为用户选择最优节点)
|
||||
- 负载均衡
|
||||
- 链路质量监控
|
||||
- 路由策略管理
|
||||
|
||||
调度流程:
|
||||
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
|
||||
│ 用户请求 │───→│ 节点筛选 │───→│ 质量评分 │───→│ 最优选择 │
|
||||
│ 加速游戏 │ │ 区域匹配 │ │ 多维权重 │ │ 返回节点 │
|
||||
│ │ │ 负载过滤 │ │ 计算排序 │ │ │
|
||||
└──────────┘ └──────────┘ └──────────┘ └──────────┘
|
||||
|
||||
评分算法:
|
||||
Score(i) = α × (1 / RTT_i) + β × (1 - Loss_i) + γ × (1 / Jitter_i) + δ × (1 - Load_i)
|
||||
|
||||
其中:
|
||||
- α = 0.4(延迟权重)
|
||||
- β = 0.3(丢包权重)
|
||||
- γ = 0.2(抖动权重)
|
||||
- δ = 0.1(负载权重)
|
||||
|
||||
约束条件:
|
||||
- RTT_i < 100ms
|
||||
- Loss_i < 5%
|
||||
- Load_i < 80%
|
||||
- 节点支持该游戏
|
||||
```
|
||||
|
||||
## 2.4 API设计规范
|
||||
|
||||
### 2.4.1 RESTful API规范
|
||||
|
||||
```
|
||||
基础规范:
|
||||
- 基础URL: https://api.accelerator.com/v1
|
||||
- 认证方式: Bearer Token (JWT)
|
||||
- 数据格式: JSON
|
||||
- 编码: UTF-8
|
||||
- 时间格式: ISO 8601 (UTC)
|
||||
|
||||
响应格式:
|
||||
{
|
||||
"code": 0, // 0=成功, 非0=错误码
|
||||
"message": "success", // 错误描述
|
||||
"data": {}, // 业务数据
|
||||
"timestamp": 1717651200, // 时间戳
|
||||
"request_id": "uuid" // 请求追踪ID
|
||||
}
|
||||
|
||||
错误码设计:
|
||||
┌──────────┬────────────────────────────────┐
|
||||
│ 错误码 │ 说明 │
|
||||
├──────────┼────────────────────────────────┤
|
||||
│ 0 │ 成功 │
|
||||
│ 1001 │ 参数错误 │
|
||||
│ 1002 │ 未登录 │
|
||||
│ 1003 │ Token过期 │
|
||||
│ 1004 │ 无权限 │
|
||||
│ 2001 │ 用户不存在 │
|
||||
│ 2002 │ 密码错误 │
|
||||
│ 2003 │ 设备已达上限 │
|
||||
│ 3001 │ 订单不存在 │
|
||||
│ 3002 │ 支付失败 │
|
||||
│ 4001 │ 节点不可用 │
|
||||
│ 4002 │ 无可用节点 │
|
||||
│ 5001 │ 服务器内部错误 │
|
||||
└──────────┴────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 2.4.2 gRPC服务定义
|
||||
|
||||
```protobuf
|
||||
// 用户服务
|
||||
service UserService {
|
||||
rpc Login(LoginRequest) returns (LoginResponse);
|
||||
rpc GetProfile(GetProfileRequest) returns (UserProfile);
|
||||
rpc UpdateProfile(UpdateProfileRequest) returns (UserProfile);
|
||||
rpc BindDevice(BindDeviceRequest) returns (BindDeviceResponse);
|
||||
}
|
||||
|
||||
// 调度服务
|
||||
service DispatchService {
|
||||
rpc GetBestNode(DispatchRequest) returns (NodeInfo);
|
||||
rpc ReportQuality(QualityReport) returns (QualityReportResponse);
|
||||
rpc GetNodeList(NodeListRequest) returns (NodeListResponse);
|
||||
}
|
||||
|
||||
// 节点服务
|
||||
service NodeService {
|
||||
rpc RegisterNode(NodeRegisterRequest) returns (NodeRegisterResponse);
|
||||
rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse);
|
||||
rpc GetNodeStatus(NodeStatusRequest) returns (NodeStatus);
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user