Greg Nancarrow:使用DBOS和富士通企业版Postgres构建弹性AI工作流

Greg Nancarrow:使用DBOS和富士通企业版Postgres构建弹性AI工作流

💡 原文英文,约1800词,阅读约需7分钟。
📝

内容提要

DBOS是开源持久化工作流库,将工作流状态存入PostgreSQL兼容数据库,实现故障自动恢复与精确一次执行,适合构建可靠的AI代理。本文演示在Linux上安装DBOS Python示例应用并连接富士通企业版PostgreSQL,利用其透明数据加密(AES-256)保护工作流数据,并通过查询验证DBOS表均位于加密表空间。

🔎

延伸解读

DBOS 如何实现故障恢复

DBOS 将工作流状态、检查点、执行历史和队列信息直接存入 PostgreSQL 兼容数据库,无需独立编排服务器。开发者通过轻量注解标记工作流起止和步骤,执行进度实时记录。若进程崩溃、虚拟机重启或网络调用中途失败,DBOS 可从最近成功检查点自动恢复,避免从头重跑,并提供精确一次语义。这使其适合依赖不稳定外部服务的 AI 代理场景。

富士通企业版 Postgres 的加密集成

DBOS 数据库存储序列化的工作流输入、输出、错误、消息、事件、流和认证上下文,可能包含敏感信息。富士通企业版 Postgres 提供透明数据加密(AES-256),通过定义加密默认表空间,DBOS 创建的表会自动落入该表空间。即使数据库文件或磁盘被盗,数据也无法被直接访问。文章演示了配置加密表空间并验证 DBOS 表均位于其中。

部署验证与注意事项

文章在 Linux 上安装 DBOS Python 示例应用并连接富士通企业版 Postgres,通过查询 pg_tablespace 和 pg_tables 确认 DBOS 表位于加密表空间 tsencrypt。需注意:示例将加密密钥本地存储(受口令和文件权限保护),生产环境可改用远程密钥管理服务器(如 KMIP);数据库集群手动启停仅用于简化演示,生产环境应作为服务运行。

❓

Q&A

DBOS是什么?它如何实现工作流的故障恢复?

DBOS是一个开源持久化工作流库,允许开发者用普通编程语言(如Python、TypeScript等)构建容错应用和AI代理。它将工作流状态、检查点、执行历史等直接存储在PostgreSQL兼容数据库中。当进程崩溃或网络调用失败时,DBOS能自动从最后一个成功的检查点恢复,而不是从头开始,从而实现持久执行和精确一次语义。

为什么DBOS适合构建AI代理?

AI系统常依赖不可靠的外部服务(如LLM API、向量数据库等),这些组件可能失败、超时或返回不一致结果。DBOS提供持久化工作流,能在中断后自动恢复,在PostgreSQL中跟踪状态,确保工作不丢失或重复执行,从而简化错误处理和状态管理,适合构建可靠的AI代理。

如何将DBOS与富士通企业版Postgres集成?

首先在Linux上安装富士通企业版Postgres并创建数据库集群,然后配置透明数据加密(可选),创建加密表空间。接着在Python虚拟环境中安装DBOS库,设置DBOS_SYSTEM_DATABASE_URL环境变量指向富士通企业版Postgres数据库,最后运行DBOS示例应用即可。

富士通企业版Postgres的透明数据加密如何保护DBOS工作流数据?

富士通企业版Postgres的透明数据加密使用AES-256算法对数据库文件进行加密。DBOS将工作流输入、输出、错误、消息等敏感信息存储在数据库中,通过配置默认加密表空间(如tsencrypt),DBOS创建的所有表都位于该加密表空间内,即使数据库文件或磁盘被盗,数据也无法被访问。

如何验证DBOS的表是否已加密?

可以通过查询系统表来验证:执行`SELECT spcname, spcencalgo FROM pg_tablespace ts, pgx_tablespaces tsx WHERE ts.oid = tsx.spctablespace`查看表空间的加密算法;再执行`SELECT schemaname, tablename, tablespace FROM pg_tables WHERE schemaname = 'dbos'`确认DBOS的所有表(如workflow_status、operation_outputs等)都位于tsencrypt表空间,该表空间使用AES256加密。

DBOS Conductor是什么?它是必需的吗?

DBOS Conductor是DBOS的商业可观测性和管理控制台,用于监控和管理DBOS应用。它是可选的但推荐使用。可以作为DBOS托管的服务使用,也可以购买许可证后自托管在虚拟机、Kubernetes等环境中。使用前需要注册DBOS Cloud账户并获取API密钥。

🏷️

标签

➡️

继续阅读