Durable Actors:Cloudflare Durable Objects 的开源替代方案
Durable Actors 为实时应用提供有状态的无服务器函数
Durable Actors 是 Cloudflare Durable Objects 的开源替代方案,旨在消除供应商锁定和内存限制,同时提供内置可观测性。它使开发者能够构建实时应用——例如 AI 代理群、协作编辑器(如 Notion)和聊天系统(如 ChatGPT)——通过提供一个基础构建块,抽象掉分布式系统中持久性、协调和基础设施的复杂性。
核心架构:持久状态与序列化执行
该框架的核心是「actor」,一个结合了两个主要保证的类:
- 持久状态:数据在中断、错误和服务器重启后仍能持久保存。使用
@Persisted装饰器标记的字段会由运行时自动保存。 - 序列化执行:对 actor 的并发调用会按顺序执行。这确保了多个调用者可以安全地更新 actor 状态,而不会出现竞态条件或复杂的锁机制。
为了在不阻塞整个 actor 的情况下处理长时间运行的操作,该框架提供了 @Interleave 装饰器。这允许在 actor 等待 Promise 时,其他调用继续运行,这对于流式响应(例如 LLM 输出)至关重要,因为必须在回复生成过程中接受新连接。
开发工作流与集成
本地开发与部署
开发者可以使用 npx durable-actors init 初始化项目,并通过 npx durable-actors dev 运行本地服务器。运行时按需加载 actor 并自动持久化状态。在生产环境中,该框架支持在 Google Cloud Platform (GCP) 上自托管运行时。
类型安全的客户端生成
为了将 actor 集成到现有后端,SDK 使用 npx durable-actors generate 生成类型安全的客户端。这使得后端(例如 Express.js)可以使用唯一的 actorId 预先建立与特定 actor 的 WebSocket 连接。
语言支持
Durable Actors SDK 目前支持 TypeScript 和 Python,为两种语言提供文档和指南,以确保 actor 逻辑与客户端应用之间保持一致的契约。
社区观点与技术权衡
尽管该项目被欢迎为 Cloudflare 的替代方案,但 Hacker News 上的社区讨论突显了开发者在实现虚拟 actor 模型时需考虑的几个技术问题:
状态可查询性
actor 模型的一个常见挑战是难以跨多个 actor 查询状态。由于状态被封装在单个 actor 内部,执行全局查询通常需要将状态复制到另一个可查询数据库,或在状态变更时事务性地发出版本化领域事件。
性能与延迟
一些用户对写入延迟表示担忧。一位评论者指出,100ms 的写入时间可能对高性能应用构成限制,将其与 celld 进行比较,后者声称写入延迟显著更低(约 1ms)。
生态系统对比
社区成员质疑 Durable Actors 与其他持久执行和 actor 框架的比较,包括:
- 云原生服务:Azure Durable Functions、AWS Lambda Durable Functions 和 Durable Entities。
- 开源替代方案:
celld和 Rivet。
"看起来很棒,但虚拟 actor 模型的一个常见问题是状态查询。虽然有很好的状态数据库隔离,但对于大多数用例来说,这意味着需要再次在另一个可查询数据库中存储状态。"
功能概览
| 功能 | 实现方式 |
|---|---|
| 状态持久化 | @Persisted 装饰器用于自动保存字段 |
| 并发控制 | 默认序列化执行;@Interleave 用于异步并发 |
| 客户端访问 | 为 Python 和 TypeScript 自动生成类型安全的客户端 |
| 部署 | 本地开发和在 GCP 上自托管 |
| 可观测性 | 内置监控和调试工具 |
Sources
相关
- 项目
- Dispatch
- 项目
- Dispatch
- Dispatch