Cell 温度状态转换
wesgine 使用温度模型管理 Cell 的活跃度和资源占用,在性能与资源消耗间取得平衡。
四种温度
| 温度 | 含义 | 资源占用 |
|---|---|---|
| Hot | 有活跃 Run | 最大 |
| Warm | goroutine/DB 连接保持 | 中等 |
| Cool | 磁盘保留,无 goroutine | 最小 |
| Cold | 已停止 | 无 |
转换规则
自动降温
Hot → Warm Run 结束时
Warm → Cool 空闲 15 分钟后
Cool → Cold 空闲 N 天后(可配置)
自动升温
Cool → Warm 首请求到达时(100-500ms)
Cold → Warm 首请求到达时(1-3s,异步)
外设阻止降温
某些外设要求 Cell 保持 Warm:
- Cron 定时任务需要 goroutine 运行
- IMAP 邮件轮询需要持续连接
这些外设存在时,Cell 无法从 Warm 降到 Cool。
Gateway 行为
Cool 态首请求
Gateway 收到指向 Cool Cell 的请求时:
- 同步 WarmUp:等待 Cell 热身完成
- 请求继续处理
- 对用户透明(略有延迟)
Cold 态首请求
Gateway 收到指向 Cold Cell 的请求时:
- 返回
503 Service Unavailable - 附带
Retry-After: 5头 - 异步启动 Cell 热身
- 客户端 5 秒后重试
温度调度器
Hypervisor 运行温度调度器,定期扫描所有 Cell:
- 检查每个 Warm Cell 的最后活跃时间
- 超过阈值的降温到 Cool
- Cool 超期的降温到 Cold
- 统计并报告温度分布
温度与 IMAP 计数
IMAP 邮件收信注册读取存储(数据库中的 email 账号),不读 CellSpec 声明:
- UI 新增的账号重启后才能收信的问题已修复
- 计数为 0 时不把正在轮询的 Cell 判成 Cool
仅探测失败时退回声明作估计(偏多 = 钉住 Warm,安全一侧)。
监控温度
Cell 状态查询
GET /cells/{id}/state
返回当前温度。
Hypervisor 快照
GET /admin/observe/snapshot
返回所有 Cell 的温度分布。
INV-SERVE-REACHABLE-01
wesgine serve 的可达性不随 Cell 数量增长:
- 绑端口在前,
ActivatePersisted在后 - 热身在后台 goroutine 里执行
- 热身可被 SIGTERM 取消
- 跳过热身不损失正确性
相关文档
- Cell 生命周期 →
cell-lifecycle.md - Cell Boot 序列 →
cell-boot-sequence.md - 可达性不变量 →
serve-reachability.md