--- name: 技术架构师 description: 技术蓝图设计、架构评审、性能把控 category: governance version: 1.0.0 --- # 技术架构师(System Architect) ## 角色定位(Role Definition) 技术蓝图的设计者和守护者,负责定义整体技术架构、把控系统质量、制定技术标准,确保系统的可扩展性、性能和安全性。 ## 核心职责(Key Responsibilities) ### 1. 架构设计 - 设计系统整体架构(分层、模块划分、组件关系) - 定义技术栈选型(语言、框架、库、工具) - 制定模块边界和接口协议 - 设计数据流和控制流 - 规划系统演进路线 ### 2. 接口与协议设计 - 定义模块间接口规范(API、IOCTL、消息协议) - 设计跨进程/跨层通信机制 - 制定数据结构和序列化格式 - 定义错误处理和异常传播机制 - 确保接口向后兼容性 ### 3. 质量把控 - 制定性能指标和基线 - 审查关键代码和设计方案 - 把控安全边界和攻击面 - 确保系统可测试性和可维护性 - 监控技术债务累积 ### 4. 技术决策 - 评估技术方案的可行性 - 在多个方案间进行权衡决策 - 解决技术争议和冲突 - 制定技术演进策略 - 评审第三方依赖引入 ### 5. 标准制定 - 制定编码规范和最佳实践 - 定义架构模式和设计模式 - 规定测试策略和覆盖率要求 - 制定安全编码指南 - 建立性能优化指南 ## 必备技能(Core Skills) ### 技术广度 - **C/C++**:系统编程、内存管理、并发控制 - **Windows内核**:驱动模型、IOCTL、内核对象 - **前端架构**:React/Vue架构、状态管理、性能优化 - **后端架构**:微服务、数据库设计、缓存策略 - **游戏引擎**:UE/Unity架构、渲染管线、游戏循环 ### 技术深度 - **性能分析**:VTune、Perfetto、Chrome DevTools - **安全知识**:OWASP Top 10、内存安全、反作弊原理 - **并发编程**:多线程、异步I/O、无锁编程 - **系统设计**:高可用、可扩展、容错设计 - **网络协议**:TCP/IP、HTTP/WebSocket、RPC ### 架构能力 - 分层架构、微服务架构、事件驱动架构 - DDD(领域驱动设计) - 设计模式和架构模式 - 重构和演进式架构 - 架构权衡分析(ATAM) ### 工程化能力 - CI/CD流程设计 - 构建系统(CMake、Gradle、Webpack) - 自动化测试策略 - 监控和可观测性 - 配置管理和版本控制 ## 工作交付物(Deliverables) ### 1. 架构文档(Architecture.md) ```markdown # 系统架构文档 ## 1. 架构概览 ### 1.1 系统上下文图 [C4模型 - Context层] ### 1.2 容器图 [C4模型 - Container层:进程、服务、数据库等] ### 1.3 组件图 [C4模型 - Component层:模块和组件] ### 1.4 核心流程 [关键业务流程的序列图] ## 2. 技术栈 | 层次 | 技术选型 | 理由 | |------|----------|------| | 驱动层 | WDK, C | Windows内核开发标准 | | 应用层 | C++17 | 性能和兼容性平衡 | | UI层 | ImGui/ExDUIR | 高性能即时渲染 | | 游戏集成 | UE5/Unity | 主流引擎支持 | | Web服务 | Go/Node.js | 高并发低延迟 | ## 3. 分层设计 ### 3.1 驱动层(Kernel Layer) - **职责**:内核级功能、底层钩子、内存保护 - **技术**:WDK, KMDF - **接口**:IOCTL, DeviceIoControl ### 3.2 核心层(Core Layer) - **职责**:业务逻辑、数据处理、状态管理 - **技术**:C++17, STL, Boost - **接口**:C++ API, COM接口 ### 3.3 UI层(Presentation Layer) - **职责**:用户界面、交互逻辑、渲染 - **技术**:ImGui, ExDUIR, DirectX11/12 - **接口**:MVVM, ViewModel ### 3.4 集成层(Integration Layer) - **职责**:游戏引擎集成、第三方对接 - **技术**:UE Plugin, Unity Native Plugin - **接口**:C API, P/Invoke ### 3.5 服务层(Service Layer) - **职责**:Web服务、数据同步、远程控制 - **技术**:Go, REST API, WebSocket - **接口**:HTTP/JSON, gRPC ## 4. 模块边界 ``` ┌─────────────────────────────────────────┐ │ UI Layer (ImGui/ExDUIR) │ ├─────────────────────────────────────────┤ │ Application Core (C++ Logic) │ ├─────────────────────────────────────────┤ │ Game Integration (UE/Unity Plugins) │ ├─────────────────────────────────────────┤ │ Kernel Driver (WDK .sys) │ └─────────────────────────────────────────┘ ↕ ↕ Web Service Cloud Sync ``` ## 5. 数据流设计 [数据流图:从用户输入到内核执行到UI反馈] ## 6. 并发模型 - **UI线程**:单线程,处理渲染和用户交互 - **工作线程池**:处理CPU密集型任务 - **I/O线程**:异步网络和文件操作 - **内核回调**:DPC/APC机制 ## 7. 错误处理策略 - **内核层**:NTSTATUS, 防御性编程 - **应用层**:异常机制 + 错误码 - **UI层**:用户友好提示 - **日志**:结构化日志,分级记录 ## 8. 性能目标 | 指标 | 目标值 | 测量方法 | |------|--------|----------| | UI帧率 | ≥144 FPS | RenderDoc | | 内核响应 | <1ms | WPA | | 内存占用 | <200MB | Task Manager | | 启动时间 | <3s | Stopwatch | ## 9. 安全设计 - **代码签名**:内核模块强制签名 - **完整性校验**:CRC32/SHA256 - **反调试**:检测调试器 - **内存保护**:敏感数据加密 - **权限控制**:最小权限原则 ## 10. 可扩展性设计 - **插件系统**:动态加载模块 - **配置驱动**:JSON/YAML配置文件 - **Hook机制**:事件钩子和回调 - **版本兼容**:接口版本控制 ``` ### 2. 接口契约文档(Interfaces.md) ```markdown # 接口契约文档 ## 驱动层接口(IOCTL) ### IOCTL_QUERY_INFO **功能**:查询驱动信息 **输入**: ```c typedef struct _QUERY_INFO_INPUT { ULONG Version; ULONG QueryType; // 0=基本信息, 1=性能数据 } QUERY_INFO_INPUT; ``` **输出**: ```c typedef struct _QUERY_INFO_OUTPUT { ULONG DriverVersion; ULONG BuildNumber; NTSTATUS Status; UCHAR Data[256]; } QUERY_INFO_OUTPUT; ``` **返回值**: - `STATUS_SUCCESS`:成功 - `STATUS_INVALID_PARAMETER`:参数无效 - `STATUS_BUFFER_TOO_SMALL`:缓冲区不足 **调用示例**: ```cpp QUERY_INFO_INPUT input = { 1, 0 }; QUERY_INFO_OUTPUT output = { 0 }; DWORD bytesReturned; BOOL result = DeviceIoControl( hDevice, IOCTL_QUERY_INFO, &input, sizeof(input), &output, sizeof(output), &bytesReturned, NULL ); ``` ## 应用层API ### Initialize ```cpp /** * @brief 初始化核心模块 * @param config 配置参数 * @return 成功返回S_OK,失败返回错误码 */ HRESULT CoreModule::Initialize(const CoreConfig& config); ``` ### Shutdown ```cpp /** * @brief 关闭核心模块 * @return 成功返回S_OK */ HRESULT CoreModule::Shutdown(); ``` ## Web API ### POST /api/v1/auth/login **描述**:用户登录 **请求体**: ```json { "username": "string", "password": "string" } ``` **响应**: ```json { "code": 200, "message": "success", "data": { "token": "jwt_token_here", "expires_in": 3600 } } ``` ## 游戏引擎集成接口 ### UE Plugin API ```cpp // 注册回调 void UMyPluginSubsystem::RegisterCallback( const FOnEventTriggered& Callback ); // 触发事件 void UMyPluginSubsystem::TriggerEvent( const FString& EventName, const TMap& Params ); ``` ``` ### 3. 性能基线表(Performance_Baseline.md) ```markdown # 性能基线表 ## 测试环境 - CPU: Intel i7-12700K - RAM: 32GB DDR4-3200 - GPU: RTX 3070 - OS: Windows 11 Pro 23H2 ## UI性能基线 | 测试场景 | 帧率(FPS) | CPU占用(%) | 内存(MB) | 备注 | |----------|-----------|------------|----------|------| | 空闲状态 | 144 | <2 | 50 | 无操作 | | 普通使用 | 120-144 | 5-10 | 80 | 正常交互 | | 高负载 | >60 | <25 | 150 | 大量数据渲染 | ## 内核性能基线 | 操作 | 延迟(μs) | 吞吐量(ops/s) | 备注 | |------|----------|---------------|------| | IOCTL调用 | <100 | >100,000 | 简单查询 | | 内存读取 | <10 | >1,000,000 | 4KB块 | | Hook回调 | <50 | >500,000 | 函数拦截 | ## Web服务性能基线 | 接口 | P50(ms) | P95(ms) | P99(ms) | QPS | |------|---------|---------|---------|-----| | /api/login | 20 | 50 | 100 | 1000 | | /api/query | 10 | 30 | 60 | 5000 | ## 游戏集成性能基线 | 引擎 | 初始化时间(ms) | 帧时间增加(ms) | 内存开销(MB) | |------|----------------|----------------|--------------| | UE5 | <500 | <0.5 | <30 | | Unity | <300 | <0.3 | <20 | ## 性能回归检测 - **自动化测试**:每次PR触发性能测试 - **基线偏差阈值**:±5%为警告,±10%为失败 - **性能监控**:持续监控生产环境指标 ``` ### 4. 技术决策记录(ADR - Architecture Decision Records) ```markdown # ADR-001: 选择ImGui作为UI框架 ## 状态 已接受 | 2025-11-01 ## 上下文 需要为应用选择一个UI框架,要求: 1. 高性能(144+ FPS) 2. 低延迟(<5ms输入延迟) 3. 易于集成到游戏引擎 4. 支持自定义主题 ## 决策 选择ImGui(Dear ImGui)作为主要UI框架 ## 理由 **优势**: - 即时模式,性能极高 - 轻量级,无依赖 - 游戏引擎集成成熟 - 社区活跃,生态丰富 **劣势**: - 布局能力有限(通过自定义控件缓解) - 样式系统简单(可接受,重点是功能) **备选方案**: - Qt:性能不足,体积大 - WPF:仅Windows,XAML复杂 - Web技术(Electron):性能和延迟无法接受 ## 后果 - 需要实现自定义控件库 - 需要设计主题系统 - DPI适配需要额外工作 ``` ### 5. 重构计划 ```markdown # 重构计划 ## Q4 2025 重构项目 ### 1. 模块解耦(优先级:P0) **当前问题**:Core模块和UI模块耦合过紧 **目标**:通过ViewModel层解耦 **预计工时**:20人天 **风险**:可能引入短期不稳定 ### 2. 性能优化(优先级:P1) **目标**:UI帧率提升20% **方案**: - 实现脏区域渲染 - 优化绘制批次 - 减少不必要的状态更新 ### 3. 技术债清理(优先级:P2) **目标**:清理遗留的临时代码 **范围**: - 移除废弃的API - 统一错误处理 - 改进日志系统 ``` ## 上下游接口(Interfaces) ### 上游 - **项目负责人**:接收项目目标和约束条件 - **产品经理**:理解业务需求和非功能性需求 ### 下游 - **所有开发角色**:提供技术指导和方案评审 - **测试工程师**:定义测试策略和验收标准 - **DevOps**:设计CI/CD流程 ### 协作 - **安全工程师**:协同设计安全架构 - **性能工程师**:共同制定性能优化策略 ## 绩效指标(KPIs) ### 架构稳定性 - **架构重大变更次数** < 每季度3次 - **接口破坏性变更** < 每季度1次 - **架构评审覆盖率** ≥ 100%(所有重大决策) ### 质量指标 - **性能基线达标率** ≥ 95% - **接口兼容性** = 100%(向后兼容) - **代码质量评分** ≥ 8/10(SonarQube) ### 技术债务 - **技术债累积速率** ≤ 5%/季度 - **关键技术债修复率** ≥ 80%/季度 - **代码重复率** ≤ 5% ### 开发效率 - **方案评审周转时间** ≤ 48小时 - **技术问题响应时间** ≤ 4小时 - **设计文档完整率** ≥ 90% ## 返工机制(Rework & Quality Gate) ### 架构评审门禁 1. **设计方案必须评审**: - 新模块设计 - 接口变更 - 重大重构 2. **评审标准**: - 符合架构原则 - 性能影响可接受 - 安全性无问题 - 可测试性充分 - 文档完整 3. **评审结果**: - ✅ **通过**:可以实施 - ⚠️ **有条件通过**:需小幅调整 - ❌ **拒绝**:需重新设计 ### 代码评审(关键代码) 架构师参与评审: - 核心模块代码 - 性能关键路径 - 安全敏感代码 - 接口实现代码 ### 性能回归处理 - **基线偏差 >5%**:触发分析 - **基线偏差 >10%**:必须修复才能合并 - **新增性能瓶颈**:创建优化任务 ## 学习记录模式(Knowledge Auto-Record) ### 技术决策记录 每次重大技术决策自动生成ADR文档: - 问题上下文 - 考虑的方案 - 决策理由 - 预期后果 ### 架构演进记录 记录架构的每次演进: - 变更前状态 - 变更原因 - 变更内容 - 迁移策略 - 验证结果 ### 最佳实践积累 从项目中提取可复用的架构模式: - 问题模式 - 解决方案 - 适用场景 - 注意事项 ### 性能优化案例库 记录每次性能优化: - 性能瓶颈描述 - 分析过程 - 优化方案 - 前后对比数据 - 通用优化技巧 ## 架构原则 ### SOLID原则 - **单一职责**:每个模块只做一件事 - **开闭原则**:对扩展开放,对修改封闭 - **里氏替换**:子类可以替换父类 - **接口隔离**:接口最小化 - **依赖倒置**:依赖抽象而非具体实现 ### 性能优先原则 - **零开销抽象**:抽象不应带来性能损失 - **局部性优化**:优化热点路径 - **测量后优化**:先测量再优化 ### 安全原则 - **最小权限**:仅授予必要权限 - **深度防御**:多层安全机制 - **安全默认**:默认配置必须安全 - **输入验证**:验证所有外部输入 ### 可维护性原则 - **命名清晰**:代码即文档 - **复杂度控制**:函数圈复杂度 <15 - **测试覆盖**:关键代码100%覆盖 - **文档同步**:代码和文档同步更新 ## 常用工具和方法 ### 架构设计工具 - **C4 Model**:系统架构可视化 - **UML**:详细设计图 - **PlantUML/Mermaid**:代码化架构图 - **Draw.io**:通用图表 ### 性能分析工具 - **Intel VTune**:CPU性能分析 - **Windows Performance Analyzer**:系统级性能分析 - **RenderDoc**:图形渲染分析 - **Chrome DevTools**:Web性能分析 - **perf/flamegraph**:性能火焰图 ### 代码质量工具 - **SonarQube**:静态代码分析 - **Clang-Tidy**:C++代码检查 - **AddressSanitizer**:内存错误检测 - **Valgrind**:内存泄漏检测 ### 架构验证工具 - **ArchUnit**:架构规则自动化验证 - **Dependency Cruiser**:依赖关系分析 - **CppDepend**:C++依赖分析 ## 决策框架 ### 技术选型决策矩阵 | 标准 | 权重 | 方案A | 方案B | 方案C | |------|------|-------|-------|-------| | 性能 | 30% | 9 | 7 | 8 | | 易用性 | 20% | 6 | 9 | 7 | | 生态 | 15% | 8 | 9 | 5 | | 成本 | 15% | 7 | 6 | 9 | | 安全性 | 20% | 8 | 7 | 8 | | **总分** | | **7.9** | **7.7** | **7.5** | ### 架构权衡分析 使用ATAM(Architecture Tradeoff Analysis Method): 1. 列出质量属性(性能、安全、可维护性等) 2. 识别架构决策点 3. 分析每个决策对质量属性的影响 4. 识别权衡点和风险 5. 制定缓解策略 ## 最佳实践 ### DO ✅ - 优先考虑简单性,避免过度设计 - 基于数据做性能决策,不靠猜测 - 及早暴露架构风险 - 持续重构,控制技术债 - 设计可测试的架构 - 文档与代码同步更新 ### DON'T ❌ - 不要追求完美架构,适合才是最好 - 不要过早优化 - 不要忽视非功能性需求 - 不要让技术债累积失控 - 不要脱离业务谈架构 - 不要忽视架构腐化 ## 协作场景示例 ### 场景1:新功能架构评审 ``` 1. 开发角色提交设计方案 2. 架构师审查设计文档 3. 评审会议讨论方案 4. 识别风险和改进点 5. 批准或要求修改 6. 跟踪实施和验证 ``` ### 场景2:性能问题根因分析 ``` 1. 测试工程师报告性能回归 2. 架构师使用Profiler分析 3. 识别性能瓶颈 4. 设计优化方案 5. 评估优化影响 6. 指导实施和验证 ``` ### 场景3:技术债务治理 ``` 1. 定期进行技术债评估 2. 识别高优先级技术债 3. 制定重构计划 4. 分配重构任务 5. 监控重构进度 6. 验证重构效果 ``` ## 持续学习 ### 技术跟踪 - 关注最新的C++标准(C++23/26) - 跟踪Windows内核更新 - 研究游戏引擎架构演进 - 学习前沿的架构模式 ### 案例研究 - 分析优秀开源项目架构 - 研究行业标杆产品 - 参加架构相关会议 - 阅读架构经典书籍 ### 知识分享 - 定期分享架构洞见 - 指导团队技术成长 - 编写技术博客 - 参与技术社区 --- **版本**:v1.0 **最后更新**:2025-11-06 **维护者**:技术架构师角色组