Hotdry.

Article

Durable Objects 状态持久化:AI Agent 在 Cloudflare Workers 上的有状态架构实践

解析如何使用 Durable Objects 为 AI Agent 维持跨重启与回收周期的状态,涵盖存储层选择、初始化模式与工程实践参数。

2026-05-06systems

在 Cloudflare Workers 平台上构建 AI Agent 时,状态管理是一个核心挑战。与传统无服务器函数不同,AI Agent 需要在多轮对话、任务执行甚至服务升级之间保持上下文连续性。Durable Objects 正是为此场景设计的基础设施 —— 它将计算与存储紧密耦合,为每个 Agent 实例提供了私有、强一致且可持久化的数据空间。

Durable Objects 的存储模型与生命周期

Durable Objects 本质上是一个带有嵌入式存储的轻量级计算单元。每个对象实例拥有独立的 SQLite 数据库或键值存储,数据与计算运行在同一台边缘节点上,实现了极低的访问延迟。值得注意的是,Durable Objects 存在两种状态:内存状态与持久化状态。内存状态在对象被激活期间保持有效,但一旦对象因空闲过久(约 70 至 140 秒)被回收,或因代码部署触发重启,内存中的所有数据将丢失。正因如此,任何需要跨越重启存活的状态都必须写入存储层。

这一特性对 AI Agent 尤为重要。Agent 的对话历史、用户偏好、中间推理结果都必须在持久化存储中保存,以确保用户再次发起请求时能够恢复完整的交互上下文。

存储后端选择:SQLite 与键值存储的适用场景

Cloudflare 当前推荐所有新项目使用 SQLite 作为持久化后端。与传统键值存储相比,SQLite 支持结构化表定义、复杂查询与索引,能够更高效地管理 Agent 的对话日志与状态表。此外,SQLite 版本还提供时间点恢复(Point In Time Recovery)功能,可将数据库回滚至过去 30 天内的任意时刻,这对于误操作后的数据恢复或审计场景非常有价值。

对于简单的键值场景,例如缓存临时变量或单点配置,键值 API 仍然可用且性能优异。实际工程中,常见的做法是将结构化数据(如对话历史)存入 SQLite,将高频访问的轻量状态(如当前对话轮次、用户在线状态)存入键值存储,以平衡性能与灵活性。

状态初始化模式与并发控制

Durable Objects 提供了一个关键的初始化模式:在对象首次被请求时从存储层加载持久化数据,并将其写入实例变量供后续请求复用。这样做的好处是,对象在活跃期间无需每次都访问磁盘,大幅降低延迟。具体实现上,构造方法中通常使用 ctx.blockConcurrencyWhile() 包装异步初始化逻辑,确保在初始化完成前不会向该对象分发任何请求。

以下是一个典型的初始化示例:Agent 在构造时从 SQLite 读取对话历史表,填充内存中的会话缓存;若该 Agent 是首次创建,则自动建表并初始化空会话。这种模式确保了无论对象是被新创建还是从回收状态恢复,都能以一致的状态响应请求。

监控与运维要点

生产环境中管理 Agent 状态需要关注几个关键指标。首先是存储使用量 ——SQLite 存储计费将于 2026 年 1 月正式生效,需监控单实例的数据库大小以控制成本。其次是 eviction 频率:如果 Agent 频繁被回收,可能说明流量分布不均或空闲超时设置过短,此时可考虑增加主动心跳或调整唤醒策略。最后是时间点恢复的可用性 —— 建议定期验证恢复流程是否正常,以备数据异常时的快速回滚。

在实际部署中,建议将 Agent 的核心状态表设计为自包含结构,即每个 Agent 实例拥有独立的表或命名空间,避免跨实例的数据耦合。这样做不仅简化了恢复逻辑,也让按实例计费与资源隔离更加清晰。

小结

Durable Objects 为 Cloudflare Workers 上的 AI Agent 提供了一种自然的状态持久化方案。每个 Agent 实例可视为一个自带数据库的有状态微服务,通过 SQLite 或键值存储保持跨请求、跨重启的上下文。工程实践中,应在初始化阶段完成状态加载,使用并发控制确保一致性,并根据数据复杂度选择合适的存储后派。配合存储计费监控与时间点恢复能力,能够构建出可靠、可扩展的边缘 AI Agent 系统。

资料来源:Cloudflare Durable Objects 官方文档(https://developers.cloudflare.com/durable-objects/best-practices/access-durable-objects-storage/)

systems