SheepNav
新上线10天前51 投票

Durable Actors:开源版 Cloudflare Durable Objects,计算资源可配置

开源新选择:Durable Actors 挑战 Cloudflare Durable Objects

在构建实时应用时,状态管理和协调往往是最大的痛点。Cloudflare 的 Durable Objects 提供了一种优雅的解决方案,但供应商锁定和内存限制让不少开发者望而却步。今天,来自 Terse 团队的 Thomas 和 Olivier 在 Hacker News 上发布了 Durable Actors,一个开源的替代方案,旨在提供无供应商锁定、内存限制可配置且内置可观测性的持久化计算原语。

什么是 Durable Actors?

简单来说,一个 Durable Actor 就是一个微型服务器,它一次处理一个请求,并拥有自己的 SQLite 数据库。这听起来简单,但它解决了分布式系统中的核心难题:持久化、协调和基础设施管理。开发者可以像编写普通类一样定义 Actor,通过装饰器标记需要持久化的状态,框架会自动处理数据在中断、错误和重启后的存活问题。

官方文档中举了一个直观的例子:构建 ChatGPT 时,聊天 Actor 可以存储对话历史,即使 LLM 响应不稳定或服务器崩溃,数据也不会丢失;构建 Notion 时,文档 Actor 可以协调多人和 AI 代理的并发编辑,确保更新安全有序。

核心特性与工作方式

  • 持久状态:通过 @Persisted 装饰器标记的字段会自动持久化,数据在重启后依然存在。
  • 串行执行:Actor 一次只处理一个请求,避免了并发冲突。但通过 @Interleave 装饰器,可以在等待 I/O 时让其他调用(如新连接)执行,提高吞吐量。
  • 类型安全客户端:SDK 自动生成类型安全的客户端代码,目前支持 Python 和 TypeScript。
  • 本地开发与自托管:一条命令即可在本地启动开发环境,未来可自行部署运行时到 GCP,完全掌控基础设施。

快速上手:多人 AI 聊天示例

官方提供了一个快速入门示例,展示如何构建一个多人 AI 聊天应用:

  1. 初始化项目:使用 npx durable-actors init my-actors 创建项目,然后安装依赖并启动本地开发服务器。
  2. 定义 Actor:在 src/actors.ts 中导出 Actor 类。例如,一个聊天历史 Actor 可以这样写:
import { openai } from "@ai-sdk/openai"
import { streamText } from "ai"
import { Actor, type ActorSocket, Interleave, Persisted } from "durable-actors"

type Message = { role: "user" | "assistant"; content: string }

export class ChatHistory extends Actor<null, string, Message[]> {
  @Persisted messages: Message[] = []

  async onConnect(socket: ActorSocket<null, Message[]>) {
    socket.send(this.messages)
  }

  @Interleave
  async onMessage(_socket: ActorSocket<null, Message[]>, text: string) {
    this.messages.push({ role: "user", content: text })
    const result = streamText({
      model: openai("gpt-5-mini"),
      messages: [...this.messages]
    })
    // ... 流式回复并持久化
  }
}

这个例子展示了如何利用 Actor 管理对话状态,并集成 OpenAI 的流式响应。

为什么值得关注?

Durable Actors 的出现为开发者提供了更多选择,尤其适合需要实时协作、AI 代理集群等场景。与 Cloudflare Durable Objects 相比,它的开源特性意味着你可以自托管,避免供应商锁定,并且可以自定义计算资源配置。此外,内置的可观测性让调试和监控更加方便。

目前,Durable Actors 仍处于早期阶段,但已经提供了完整的 TypeScript 和 Python 文档,以及一个在线演示。对于正在构建实时应用的团队来说,这无疑是一个值得尝试的新工具。

了解更多:访问 Terse 官网 或查看 GitHub 仓库(文档中有链接)。

延伸阅读

  1. Anthropic无法可靠控制AI智能体,切断内部评估的实时互联网访问
  2. Prime Agent 用 Rust 重写:2000 个 AI 智能体协作完成自我重写
  3. 乌克兰无人机袭击俄罗斯AI数据中心,Yandex超级计算机受损
查看原文