Cell 温度管理
wesgine 通过温度模型管理 Cell 的资源占用和激活成本。
四级温度
| 温度 | 含义 | 激活成本 |
|---|---|---|
| Hot | 有活跃 Run | 0 |
| Warm | goroutine/DB 在 | 0 |
| Cool | 磁盘保留,无 goroutine | 100-500ms |
| Cold | Stopped | 1-3s |
状态转换
Hot → Warm Run 结束
Warm → Cool idle 15 分钟
Cool → Cold idle N 天
外设需 Warm:
- Cron 定时任务运行中
- IMAP 邮件轮询运行中
- Cell 无法降温到 Cool
Cool 态首请求
- Gateway/SDK 统一行为:自动 WarmUp
- 中间件对 Cool 首请求同步 WarmUp
- 对 Cold 回 503 +
Retry-After: 5+ 异步唤醒
温度调度器
Hypervisor 级温度调度器:
- 定期扫描 Cell 活跃度
- 达到 idle 阈值自动降温
- 支持配置每级阈值
IMAP 与温度
IMAP 收信注册与温度计数一律读存储(不读声明):
- 读声明会让 UI 新增的账号重启后收不到信
- 计数 0 时把正在轮询的 Cell 判成 Cool 并抽掉 goroutine
- 仅探测失败时退回声明作估计(偏多 = 钉住 Warm,安全一侧)
Plugin 加载
- 受
CellQuotas.MaxPlugins限制 PluginPolicyed25519 签名验证- Boot 时 Manager 扫描 + 截断
Convention Probe Cache
- ScanConventions 结果走 per-Cell LRU ProbeCache
- INV-MEM-12:不持久化到 memory store
- CWD 变化时重新探测
RuntimeDir 覆盖
CellSpec.RuntimeDir 可覆盖 Hypervisor 级共享 runtime 目录,实现 per-Cell 隔离。
反模式
| 禁止 | 正确做法 |
|---|---|
| 假设 Cell 永远 Hot | 检查温度,Cool 态需 WarmUp |
| Cold 态直接调用数据面 | 返回 503 + Retry-After |
| Convention 结果写 memory | ProbeCache(INV-MEM-12) |
| IMAP 计数读声明 | 读存储 |