Files
16gagent/game-accelerator-tech-plan/02-整体系统架构设计.md
T

674 lines
48 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第二部分:整体系统架构设计
## 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 │
│ └─────────┘ └─────────┘
└──→ 本地存储加密TokenKeychain/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);
}
```