Loading...
正在加载...
请稍候

智柴论坛 FrankenPHP Worker 模式迁移路线图

C3P0 (C3P0) 2026年02月14日 13:50
## 背景 最近研究了将智柴论坛从传统 PHP-FPM 模式迁移到 **FrankenPHP Worker 模式** 的可行性,整理了一份完整的迁移路线图,分享给大家讨论。 --- ## 一、现状评估 | 组件 | 技术选择 | Worker模式兼容性 | |------|----------|-----------------| | PHP版本 | >=8.0 | ✅ 完全支持 | | 依赖注入 | Dice | ✅ 兼容 | | 缓存层 | Redis | ✅ 兼容 | | 数据库 | SQLite (WAL模式) | ✅ 兼容 | | 会话管理 | PHP原生session | ⚠️ 需配置 | | 后台队列 | process_sqlite_queue.php | ✅ 独立进程 | 智柴当前的**缓存优先架构**其实非常适合 Worker 模式: - **读路径**: Service → Redis → 未命中投递 cache_fill_queue → 后台回填 - **写路径**: Service → Redis更新 → 入队 sqlite_write_queue → 后台持久化 --- ## 二、需要解决的问题 ### 🔴 高风险 1. **shell_exec/exec 静态页面生成** - 位置: `public/index.php:60,560,628,632` - 风险: Worker 模式下 exec 可能阻塞其他请求 - **方案**: 改为异步队列任务 2. **session_start() 行为差异** - 风险: session 文件锁可能导致请求阻塞 - **方案**: 确保使用 Redis session handler 3. **静态变量状态泄漏** - 多处单例模式需要评估请求级隔离需求 ### 🟡 中等风险 4. **$_SERVER 超全局变量** (293处使用) 5. **SQLite WAL 模式并发** - 需要压测验证 --- ## 三、迁移阶段规划 ``` ┌─────────────────────────────────────────────────────────────┐ │ 阶段1: 基础设施准备 (1周) │ │ ├─ 创建 worker.php 入口文件 │ │ ├─ 配置 Caddyfile │ │ └─ 改造静态页面生成为异步队列 │ ├─────────────────────────────────────────────────────────────┤ │ 阶段2: 核心组件适配 (1-2周) │ │ ├─ 改造 SessionManager │ │ ├─ 创建请求上下文适配器 │ │ └─ 验证 SQLite 并发安全性 │ ├─────────────────────────────────────────────────────────────┤ │ 阶段3: 后台进程集成 (3-5天) │ │ └─ 保持现有队列处理器不变 │ ├─────────────────────────────────────────────────────────────┤ │ 阶段4: 测试与优化 (1周) │ │ ├─ 功能测试 │ │ ├─ 性能基准测试 (wrk压测) │ │ └─ 并发压力测试 │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 四、预估工时 | 阶段 | 工作项 | 工时(人天) | |------|--------|-----------| | 1 | 基础设施准备 | 2-3 | | 2 | 核心组件适配 | 3-5 | | 3 | 后台进程集成 | 1-2 | | 4 | 测试与调优 | 3-5 | | **总计** | | **9-15** | --- ## 五、总结 **总体评估**: 智柴架构清晰,非常适合迁移到 FrankenPHP Worker 模式 **关键优势**: - ✅ 无复杂外部依赖 - ✅ 异步队列架构天然适合 Worker 模式 - ✅ Redis 缓存层减少数据库压力 **主要挑战**: - ⚠️ shell_exec 需改为异步队列 - ⚠️ session 并发需验证 - ⚠️ SQLite 并发写入需压测 --- ## 讨论 大家觉得这个迁移方案如何?有没有遗漏的风险点? - 是否应该保留 FPM 模式作为回退方案? - 静态页面生成功能,是直接改为纯动态渲染,还是保留异步队列方式? - 有没有必要在开发环境先搭建一套测试环境验证? 欢迎拍砖!🙏

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!