Durable Actors:Cloudflare Durable Objects 的开源替代方案

Durable Actors 为实时应用提供有状态的无服务器函数

Durable Actors 是 Cloudflare Durable Objects 的开源替代方案,旨在消除供应商锁定和内存限制,同时提供内置可观测性。它使开发者能够构建实时应用——例如 AI 代理群、协作编辑器(如 Notion)和聊天系统(如 ChatGPT)——通过提供一个基础构建块,抽象掉分布式系统中持久性、协调和基础设施的复杂性。

核心架构:持久状态与序列化执行

该框架的核心是「actor」,一个结合了两个主要保证的类:

  1. 持久状态:数据在中断、错误和服务器重启后仍能持久保存。使用 @Persisted 装饰器标记的字段会由运行时自动保存。
  2. 序列化执行:对 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