不死的 alarm:一个永远给自己续期的 Durable Object 闹钟
Bounded 创始人讲述一个无条件自我续期的 Durable Object alarm:行写入量随历史创建过的对象数增长,应用内计量为何没看到,以及最终修复它的规则。
- 适用产品
- Durable Objects
- 来源
- 作者经验Bounded 博客
- 作者
- Amit Ishairzay
要点
- 每个实时对象首次被访问时设置 5 秒 alarm,处理函数无条件续期,于是历史上创建过的每个应用和房间(包括测试应用)每天都要被唤醒 17,280 次。作者指出 setAlarm 本身就是一次计费的行写入。
- 他点出的信号:增长与对象数成正比而非与请求数;不接外部流量的对象却在按节拍写入。他的用量计数只统计应用活动,漏掉了 Cloudflare 实际计费的系统写入。
- 修复:只在确有待处理工作时续期;用精确时间唤醒替代 5 秒轮询;空房间在宽限期后休眠;计量先在内存缓冲;删除僵尸预发 Worker。他报告每 5 分钟写入行数从约 32.8 万降到 141–214。
- 官方 Durable Objects 定价(2026-10-14 复核)确认:SQLite 存储下每次 setAlarm() 计为一次行写入。
原始来源
发布
不死的 alarm:一个永远给自己续期的 Durable Object 闹钟
打开原始来源Bounded 创始人讲述一个无条件自我续期的 Durable Object alarm:行写入量随历史创建过的对象数增长,应用内计量为何没看到,以及最终修复它的规则。
其他推荐阅读
作者经验Durable Objects +3
在 Durable Objects 上设计扑克游戏,让空闲时间不花钱
Philip Atkinson 介绍他在 Cloudflare 开发者平台上的多人扑克游戏架构,以及他遵循的成本原则:结束的对局移出 Durable Object 存储、WebSocket 休眠、用 alarm 唤醒、把日志当作成本决策。
D1
D1 DELETE 缺少索引读取约 4 万亿行,费用 $4,114.97。
社区用户 user11226 称缺少数据库索引使一条 DELETE 操作反复扫描全表,账期内产生约 4.03 万亿次 D1 行读取,在其以为每月 $5 的订阅上出现 $4,114.97 意外账单。后续回复中作者承认本应配置账单告警,并称 Cloudflare 成功驳回了其拒付,而紧急账单工单超过三周才获回应,请求有人审查具体情况。
作者经验Workers +7
岚叔:用 AI 检查 Cloudflare 计费风险的提示词
岚叔(@LufzzLiz)分享六步检查提示词,覆盖账号归属、用量、异常消耗与预算告警;回复补充 alarm 日志、邮件送达检查与独立通知。