Appearance
003-智能调度核心服务采用 Go 实现
状态
已接受
背景
一期智能调度已形成新的产品与架构边界:
- 智能调度资格与候选读取归数据与配置服务提供主事实。
- 智能调度最终决策单元是单台机器。
- 调度需要长期周期 tick、互斥锁、基准采集、收益测算、执行编排、冻结、日志流等后台能力。
- Agent 不承载调度决策,设备控制服务不判断收益策略,前端不在浏览器内计算收益并决定切换。
原有 PHP tick 形态可以支撑早期联调,但随着调度状态机、实时日志和长期后台守护能力增加,继续将调度循环放在 PHP API 中会放大门户 API 与调度核心之间的职责耦合。
决策
智能调度核心服务采用 Go 实现,服务目录采用现有路径:
apps/go-services/scheduler
该服务作为云端调度核心服务,不运行在矿机上。
职责
Go scheduler 负责:
- 周期读取已启用的智能调度策略。
- 读取候选项目配置、参与机器范围、分时电价、时间段开关机策略。
- 读取或触发单机项目算力/功耗基准采集。
- 调用收益输入能力完成单机项目净收益测算。
- 按单机生成保持、切换、停挖、关机、基准采集、冻结等决策。
- 调用设备控制服务或 PHP API 的既有执行入口完成动作下发。
- 写入调度 tick、逐机决策、用户可见日志和冻结事件。
Go scheduler 不负责:
- 直接连接矿机 Agent。
- 维护币种、矿池、钱包、启动参数等配置主事实。
- 替代设备控制服务判断能否执行与如何执行。
- 替代收益数据与监控模块持有收益、功耗、电价、基准事实。
- 在前端本地计算收益或决定调度结果。
服务关系
一期允许 Go scheduler 通过 PHP API 或共享数据库读取当前已有配置事实,以降低迁移成本;长期应收敛为:
- Go scheduler 读取数据与配置服务提供的候选配置、分时电价、基准与收益输入。
- Go scheduler 调用设备控制服务或平台 API 发起切币、停挖、关机等动作。
- 平台门户服务只展示策略、状态与日志,并转发用户操作。
影响
- “除 Agent 外,其它后端能力统一以 PHP API 提供”的旧实现约束需要调整为:控制台 HTTP API 仍由 PHP API 承担,调度核心后台服务允许采用 Go。
- T0034 的实现方案需要按 Go scheduler 重新修订。
- 原有 PHP
smart_schedule_tick.php后续应逐步退化为兼容入口、dry-run 工具或下线。
迁移策略
- Go scheduler dry-run:只生成决策和日志,不下发真实执行动作。
- Go scheduler shadow:与 PHP tick 或人工判断并行对照。
- Go scheduler 接管:由 Go scheduler 触发切币、停挖、关机,PHP tick 停用。
风险
- 共享数据库读取若不收敛接口边界,可能造成 Go 与 PHP 双方理解不一致。
- 单机基准采集会产生短期试跑成本,需要用户可见日志解释。
- 真实执行前必须补齐手动操作、Shell 作业、升级、关机与智能调度之间的互斥。