用量计算模型
NIE-SLA 内置一套固定的 Cloudflare 免费额度用量估算模型(usage-model),用于在没有 Cloudflare 官方 API 的情况下,仅凭站点自身数据估算 Workers、D1、R2、Durable Objects 四类资源的日消耗,并在扩容前做容量核算。
- 模型版本:
usage-model-v1.4.0(代码:agent/scripts/usage-model.mjs) - 校准文件:
agent/scripts/usage-model-calibration.json(nie-sla-usage-calibration-v2) - 输入边界:只读站点公开
/api/status,可选只读/api/debug/usage-summary聚合接口;运行时不访问 Cloudflare Dashboard / API
四本账与免费额度
| 账本 | 关键指标 | 免费层限额(日/月) | 模型输出字段 |
|---|---|---|---|
| Workers Functions | 调用次数 | 100,000 / 日 | workers.function_calls |
| Durable Objects | 请求次数 | 100,000 / 日 | do.requests |
| D1 | 行读取 / 行写入 | 5,000,000 / 100,000 每日 | d1.rows_read / d1.rows_written |
| R2 | A 类 / B 类操作 | 1,000,000 / 10,000,000 每月 | r2.class_a / r2.class_b |
注意:D1 的"查询次数"不参与计费口径,行读取(含索引扫描)与行写入才是;R2 的"请求分布"只是面板展示量,不能与 A/B 类相加。
使用方法
# 最近 24 小时(运营区间)
node scripts/usage-model.mjs --hours 24 --json
# 指定 UTC 窗口(与 CF 面板对账)
node scripts/usage-model.mjs --from 2026-09-04T00:00:00Z --to 2026-09-04T08:35:00Z --json
# 压力上界(重连、fallback、缓存失效叠加)
node scripts/usage-model.mjs --hours 24 --range-mode stress带管理员会话(NIE_SLA_ADMIN_SESSION)或只读凭据(NIE_SLA_USAGE_TOKEN,后台"设置 → 安全"生成)时,模型会读取 debug 聚合接口锚定路由计数,置信度从 low 升到 medium。
估算方法
- 事件分解:把每类请求(任务轮询、更新检查、遥测上报、探测调度、公开动态请求等)按周期推导次数;
- 路由锚定:能拿到 debug 摘要就用实际路由计数替换推导值(12% 不确定度);
- 校准乘子:按同拓扑 CF 官方实测窗口拟合的因子修正(Workers 调用 ×0.73、D1 读行 ×1.28 / 写行 ×0.45、DO 请求 ×2.05 等,随版本重拟合);
- 点估计 + 区间:输出运营区间(对账范围)与可选压力上界,不冒充账单精确值。
校准现状与容量结论
- 2026-09-04 首次对账(00:00–08:35 UTC):Workers +10%、R2 B -11% 在区间内;D1 写行模型低估 36%、读行高估 78%——该轮结论随后由 v1.3.4 重拟合覆盖。
- 2026-09-20 v1.4.0 精确校准(两窗口实测对账,运营区间):① 结构修正——agent 驱动事件改按在线 Agent 计数(舰队约 40% 注册节点离线),探针桶写入改为 DO 优先 + D1 回退率模型(
probe_d1_fallback_rate);② 重拟合输出乘子——Workers ×0.73、DO ×1.32、R2 A ×0.86 / B ×1.26、D1 读行 ×0.95 / 写行 ×0.43、D1 查询 ×1.15;③ 验证——2026-09-19 全天与 09-20 00:00–06:00Z 两个窗口的 8 项指标全部落在 ±8% 且位于报告区间内;压力场景请切换--range-mode stress。 - 方案 A(已上线):探测节奏改由 R2 状态承载,D1 的
targets调度镜像降级为粗粒度回写(TARGET_SCHEDULE_FLUSH_SEC)。 - v1.1.93 无感削减(已上线):Agent 状态镜像节流 5→15 分钟;Manager 联系人心跳 10→30 分钟;探测粗回退镜像默认 30 分钟→2 小时;Latency 节点状态行 1→5 分钟(图表仍读 R2 归档);过期探测桶清理每小时→每天。60 台拓扑下 D1 写 99.6%→38.7%、D1 读 83.5%→63.2%。
- 80 台扩容写侧优化(v1.1.62 / v1.1.64,已上线):探测桶仅在缓冲失败时才回退写 D1;Agent 状态回退仅在缓冲态关闭时写入;每分钟两个调度器共享一次目标扫描;全部 Agent 的活动遥测缓冲并入共享 WSS 实例,去掉每台 Agent 每次报告一次的多余 Durable Object 调用。
- 容量结论(v1.1.93 模型):5 TCP Ping + 1 内置 Cloudflare Latency + 2 Agent Latency、节点全部在线、默认频率下,免费额度内上限约 122 台 VPS(约束为 D1 读行,其次 DO 请求),建议部署 ≤106 台保留 10% 余量;60 台时 D1 写 38.7%、D1 读 63.2%、DO 49.6%、Workers 42.4%。准确占比以满 24 小时 CF 官方窗口对账为准,模型输出不能替代账单。
模型变更纪律
Agent 上报间隔、WSS/DO 路径、D1 SQL profile、公开缓存策略任一变化,都必须升级模型版本并重新校准;纯 UI/文案变化不需要。模型输出是对账与扩容决策工具,不能替代 Cloudflare 账单。
v1.3.3 调试日志范围收缩:debug_logs 只保留登录与账号安全、Agent 任务失败详情,Agent 轮询与管理操作不再记录;模型中所有路由的 debugLog 写行降为 0,清理删除随之归零。
v1.4.0 结构修正与重校准:agent 驱动路径按在线 Agent 计数、探测桶按 DO 回退率建模,输出乘子按 2026-09-19/20 两个实测窗口重拟合;模型版本必须随 Agent 上报间隔、WSS/DO 路径或 D1 profile 的变化一起升级。
v1.1.93 节奏常数同步:状态镜像 900s、联系人 1800s、探测粗回退 7200s、Latency 状态行 300s、桶清理按天;模型与内嵌面板模型同步更新(读侧剩余候选:调度扫描缓存、WSS 状态查询改读 DO、公开缓存命中率)。