game_engine/implementation_plan.md

425 lines
15 KiB
Markdown
Raw Permalink 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.

# 游戏引擎实施计划(基于审查报告的落地版)
> 本计划以“通用高性能 Rust 游戏引擎(不内置业务逻辑)”为目标,整合当前仓库中已有的 DDD / 事件系统文档结论并补齐审查中暴露的工程化阻塞项workspace 构建基线、测试失败、安全与 unsafe 风险、async 边界混乱、基准与剖析缺口等)。
## 文档信息
- 版本2.0
- 创建/更新日期2025-12-17
- 适用范围:本仓库 workspace + game_engine 主 crate + 相关子 crategame_engine_simd / game_engine_hardware / game_engine_performance
## 输入与证据来源(必须全部覆盖)
本实施计划覆盖以下已存在文档/结论(不替代其细节,但将其转化为可执行任务与验收标准):
1. 执行摘要executive_summary.md
2. 既有 DDD 改进计划与 TODOimplementation_plan.md本文件旧版内容与 detailed_todo_list.md
3. 领域事件系统domain_events_system_design.md 与 event_system_implementation_plan.md
4. 事件溯源event_sourcing_architecture.md、event_sourcing_improvement_plan.md、event_sourcing_implementation_summary.md
5. 进度/状态摘要current_progress_summary.md其中“已完成/待完成”需要与代码现实核对)
6. 审查中发现的工程阻塞与风险(来自代码与构建结果):
- workspace 未包含 game_engine crate导致无法统一测试/基准与依赖继承不一致
- game_engine manifest 使用 tracing.workspace=true但 workspace.dependencies 未定义 tracing
- game_engine 依赖的 pathgame_engine_simd / hardware / performance在当前目录结构下无效
- game_engine_performance crate 测试编译失败(类型不匹配、错误调用 unwrap 等)
- game_engine_simd 存在 unreachable/unused 等 warning
- core/engine/initialization.rs 使用 unsafe transmute 延长窗口引用生命周期
- network/key_exchange.rs 使用 SHA256 模拟 ECDH不具备密码学安全性
- 多处 Handle::current().block_on / block_on 混用,存在运行时嵌套与阻塞风险
- monitoring_legacy 等“legacy/重复实现”与备份文件engine.rs.backup清理需求
## 总体目标与非目标
### 总体目标
1. **可验证基线**workspace 可构建、可测试、可基准、可剖析。
2. **安全与健壮性**:消除高风险 unsafe 与伪加密,建立可审计边界。
3. **性能工程化**:有代表性的 benchmark/负载、可观测性tracing/metrics/profiling与回归闸门。
4. **架构收敛**DDD/事件溯源/领域事件系统按既有设计落地,并避免“引擎域”被计划/业务域污染。
### 非目标(本阶段不做)
- 不引入新的 UI/Editor 产品功能;仅修正架构与工程基线。
- 不做大规模“推倒重写”;优先渐进式、可回滚的改动。
## 路线图P0/P1/P2
### P0打通构建/测试基线 + 清除阻塞风险(必须先做)
**里程碑 P0 完成定义**
- `cargo test --workspace` 通过
- `cargo test -p game_engine` 通过game_engine 纳入 workspace 后)
- `cargo test -p game_engine_performance` 通过
- `cargo clippy --workspace --all-targets` 通过(允许有少量 deny/allow 过渡,但需列出清单)
- 删除/隔离高风险 unsafe transmute网络密钥交换不再是伪实现
#### P0-1Workspace 拓扑修复(阻塞项)
**目标**:让 game_engine 成为 workspace 一等成员,统一依赖继承与测试执行入口。
实施步骤:
1. 更新根 Cargo.toml 的 `[workspace].members`:加入 `game_engine`,并移除无意义的 `"."`(若根目录无 `[package]`)。
2.`[workspace.dependencies]` 增补被继承但缺失的依赖:至少 `tracing`,并明确版本策略。
3. 统一版本来源:
- 尽可能使用 `*.workspace = true` 继承wgpu/winit/tokio/serde 等),避免同名依赖多版本。
4. 修复 game_engine 中对 sibling crate 的 path
- `game_engine_simd``../game_engine_simd`
- `game_engine_hardware``../game_engine_hardware`
- `game_engine_performance``../game_engine_performance`
验收标准:
- `cargo metadata` 能看到 `game_engine` 在 packages 中
- `cargo check -p game_engine` 通过
#### P0-2修复 game_engine_performance 的测试编译失败
**目标**:恢复 workspace 测试全绿,作为后续性能与回归的闸门。
实施步骤(按审查已知错误类型):
1. 统一 metrics 数值类型f32/f64策略
- 要么所有统计/百分位统一用 f64更通用要么统一用 f32更贴近 GPU/实时)。
2. 修复 frame analyzer 测试中的 API 误用:
-`start_frame()` 返回 `()`,测试不得调用 `.unwrap()`
- 若希望返回 `Result`,则修改 API 并补齐调用方。
3. 补齐必要的回归测试:覆盖本次修复点。
验收标准:
- `cargo test -p game_engine_performance` 通过
#### P0-3收敛 async 边界与阻塞调用(先止血)
**目标**:避免运行时嵌套、死锁、以及在异步上下文中阻塞导致的帧抖动。
实施步骤:
1. 盘点所有 `Handle::current().block_on` / `block_on` 调用点editor/settings、profiling/storage、platform/fs、scene serialization 等)。
2. 定义“同步 API 与异步 API 的边界规范”并落地:
- 同步 API 只允许在“引擎启动前/非 runtime 线程”阻塞;
- 运行中一律走 async 路径或 spawn_blocking。
3. 对外暴露:
- `*_async()` 为主路径;
- `*_sync()` 只作为薄包装,并检测 runtime 环境(如:在 runtime 内改为 `block_in_place` 或直接返回错误)。
验收标准:
- 关键路径(资源加载/渲染/编辑器保存)不再在 runtime 内直接 `block_on`
- 至少提供一条文档化准则 + lint/grep 规则(脚本)
#### P0-4高风险 unsafe / 安全缺陷修复
**P0-4a移除 unsafe transmute窗口生命周期**
目标:替换 core/engine/initialization.rs 中通过 transmute 强行获取 `'static` window 引用的做法。
推荐改法(择一):
1. 让 WgpuRenderer 持有 `Arc<Window>`(或 Window 所需的句柄),避免引用生命周期扩张。
2. 或者让初始化函数把 renderer 生命周期约束在 window 生命周期内(不要求 `'static`)。
验收标准:
- initialization.rs 不再出现 `std::mem::transmute`
- wgpu 初始化与窗口事件循环保持正确所有权/生命周期
**P0-4b替换伪 ECDH 密钥交换**
目标network/key_exchange.rs 不再使用 SHA256 模拟 ECDH。
推荐改法:
- 使用成熟实现(例如 X25519 + HKDF + transcript/hmac并提供 feature flag
- `secure_key_exchange`(默认开启)
- `insecure_key_exchange`(仅用于 demo/本地,必须显式开启,且运行时打印警告)
验收标准:
- 密钥交换具备前向安全性基础X25519
- 单测覆盖:双方协商一致、消息格式稳定、重放/篡改失败
**P0-4cNonce/Token 设计审计AES-GCM/HMAC**
目标:确保 AES-GCM nonce 在同 key 下不复用token 签名有明确版本与过期策略。
验收标准:
- nonce 生成策略明确且可测试(计数器溢出/重启场景)
- 文档化协议字段与兼容策略
#### P0-5技术债清理可维护性止血
1. 清理备份文件engine.rs.backup若仍需要迁移到 docs/ 或 git 历史)。
2. legacy/重复实现:
- 明确 monitoring_legacy 的去留策略(保留兼容层 or 迁移并删除)。
3. 领域污染治理:
- 将 “implementation_plan” 这类非引擎域内容迁出 runtime domain 代码;保留为 docs 即可。
4. 文档与现实对齐:
- 核对 current_progress_summary.md 中“已完成”的条目是否在代码中真实落地;不一致则修正文档或补做实现。
验收标准:
- 仓库内无 `.backup` 残留
- legacy 模块要么标注弃用与迁移期限,要么已删除
- 进度文档与代码状态一致(可通过对应 PR/commit 或测试结果佐证)
---
### P1性能与可观测性工程化剖析/基准可落地)
**里程碑 P1 完成定义**
- 有可运行的代表性基准:渲染/资源加载/物理/网络(至少 3 类)
- 可观测性落地tracing spans + 关键指标帧耗时、资源队列延迟、shader 编译时间、网络 RTT 等)
- 能在本机稳定复现并对比性能(同一提交前后)
#### P1-1统一 profiling / tracing / metrics 入口
1. 明确使用 tracing 作为统一事件管道log 仅做兼容)。
2. 引擎关键路径添加 span
- frame loop
- render submit
- asset load queue
- shader compile
- network tick
3. 让 game_engine_performance 提供对接层,而不是重复实现。
#### P1-2基准体系补齐与持续回归
1. 确认 benches 归属:
- 引擎主 crate benches已有目录确保可运行且覆盖关键路径
- game_engine_simd补齐 benches 或移除“bench 但无用例”的错觉
2. 建立 baseline 命令集合(脚本):
- `cargo bench -p game_engine`
- `cargo bench -p game_engine_simd`
3. 性能门禁建议:
- P0 先“可跑”P1 再加阈值(回归 <5%
#### P1-3异步资源/着色器队列性能优化(在可观测性之后)
1. coroutine_loader / shader_async
- 记录队列长度平均等待最大等待
- 降低 sleep/poll 造成的抖动优先用 notify/channel
2. spawn_blocking 限额
- 配置化并与 CPU 核数/任务类型绑定
---
### P2DDD/事件系统/事件溯源按既有设计落地(在 P0/P1 稳定后推进)
**里程碑 P2 完成定义**
- 聚合根边界一致性与版本控制落地
- 领域事件系统类型安全 downcast_ref 依赖
- 事件溯源命令/存储/重放/快照/版本控制按文档落地
- 测试覆盖与回归闸门具备可执行指标
#### P2-1聚合根边界与不变式保留既有计划但补齐验收
范围SceneGameEntityRenderScenePhysicsWorldAudioSource
验收标准
- 聚合内部状态不允许绕过方法直接写入
- 不变式检查存在且有单测
#### P2-2错误处理与锁安全safe_lock 替换)
1. 替换所有 `.lock().unwrap()` 与同类 panic 路径
2. 为锁污染提供恢复策略或可诊断错误
验收标准
- 对应 grep 清零或只剩允许列表
#### P2-3领域事件系统按设计文档与实施计划
来源domain_events_system_design.md event_system_implementation_plan.md
1. 类型安全事件注册EventTypeRegistry + factory/macro
2. SafeEventBus最小持锁批量处理并行分发
3. 聚合根事件集成AggregateRoot trait + 未提交事件队列
验收标准
- downcast_ref 事件分发
- 单测覆盖核心路径 + 并发安全测试
#### P2-4事件溯源系统按 improvement_plan 分阶段推进)
来源event_sourcing_improvement_plan.md内容较长本计划以阶段化任务+验收落地不复制全文)。
阶段建议
1. 命令完善Create/Delete/Update
2. 事件存储增强批量分页版本控制
3. 查询与重放注册表集成从快照恢复
4. 性能监控与测试套件
---
## 时间与里程碑建议(相对时间)
- T+1~2 完成 P0基线全绿 + 关键安全风险清零
- T+3~6 完成 P1可观测性 + 可跑基准 + 负载/剖析落地
- T+7~12 推进 P2事件/溯源/DDD 收敛
## 交付物清单
1. 可运行的 workspace统一构建/测试/bench 入口
2. 安全修复 transmute 生命周期扩张无伪 ECDH
3. 性能与可观测性tracing + 指标 + benches + 回归脚本
4. 架构能力领域事件系统与事件溯源系统按设计文档落地
## 变更策略(避免大爆炸)
- feature flag 分层切换安全协议事件系统性能优化
- 每个阶段都必须有可回滚点”(最小 PR/最小变更)。
1. 扩展性能指标收集范围
2. 实现实时性能分析
3. 添加性能趋势预测
4. 创建性能告警机制
5. 实现性能优化建议
6. 添加性能报告生成
**预期收益**:
- 及时发现性能瓶颈
- 支持性能优化决策
- 提高系统运行效率
- 增强用户体验
**负责人**: 性能工程师
**预估工期**: 2.5周
---
### 9. 改进资源管理系统
**改进名称**: 异步资源加载优化
**实施步骤**:
1. 优化资源加载队列
2. 实现智能预加载机制
3. 添加资源优先级管理
4. 实现资源缓存策略
5. 优化内存使用
6. 添加资源加载监控
**预期收益**:
- 提高资源加载效率
- 减少加载等待时间
- 优化内存使用
- 改善用户体验
**负责人**: 资源管理工程师
**预估工期**: 2周
---
### 10. 完善测试覆盖率
**改进名称**: 领域层和核心系统测试
**实施步骤**:
1. 分析当前测试覆盖率
2. 识别测试盲点
3. 为聚合根添加单元测试
4. 实现集成测试套件
5. 添加性能基准测试
6. 实现自动化测试流程
**预期收益**:
- 提高代码质量
- 减少生产环境bug
- 支持重构和演进
- 增强系统可靠性
**负责人**: 测试工程师
**预估工期**: 3周
---
## 实施时间表
```mermaid
gantt
title 游戏引擎架构改进实施时间表
dateFormat YYYY-MM-DD
section 高优先级
完善聚合根实现 :p1-1, 2024-01-01, 14d
优化错误处理机制 :p1-2, after p1-1, 11d
实现领域事件系统 :p1-3, after p1-2, 21d
section 中优先级
完善事件溯源系统 :p2-1, after p1-3, 18d
实现聚合快照机制 :p2-2, after p2-1, 14d
优化性能监控系统 :p2-3, after p2-2, 18d
section 低优先级
添加聚合版本控制 :p3-1, after p2-3, 14d
实现审计日志系统 :p3-2, after p3-1, 14d
改进资源管理系统 :p3-3, after p3-2, 14d
完善测试覆盖率 :p3-4, after p3-3, 21d
```
## 风险评估与缓解策略
### 高风险项
1. **聚合根实现改动** - 可能影响现有功能
- 缓解策略渐进式重构保持向后兼容
2. **事件系统引入** - 可能影响系统性能
- 缓解策略性能基准测试优化事件处理
### 中风险项
1. **错误处理机制改动** - 可能引入新的错误
- 缓解策略全面测试错误场景模拟
2. **事件溯源系统** - 增加系统复杂度
- 缓解策略详细文档团队培训
## 成功指标
### 技术指标
- 聚合根边界一致性: 100%
- 错误处理安全性: 100%
- 测试覆盖率: >90%
- 性能回归: <5%
### 业务指标
- 系统稳定性: 提升30%
- 开发效率: 提升25%
- 问题诊断时间: 减少50%
- 用户体验评分: 提升20%
## 资源需求
### 人力资源
- 领域架构师: 1人
- 系统工程师: 3人
- 测试工程师: 2人
- 性能工程师: 1人
### 技术资源
- 开发环境: 增强版测试环境
- 监控工具: 性能分析工具
- 测试工具: 自动化测试框架
## 总结
本实施计划提供了一个系统性的方法来改进游戏引擎的架构设计通过优先处理聚合根实现错误处理和领域事件系统等关键领域我们将建立一个更加健壮可维护和可扩展的系统架构实施过程中将采用渐进式方法确保系统稳定性和业务连续性
预期在完成所有改进后游戏引擎将具备
- 更清晰的领域模型边界
- 更强的错误处理和恢复能力
- 更好的系统可观测性和可维护性
- 更高的性能和用户体验
这些改进将为游戏的长期发展奠定坚实的技术基础