SqlFlow Vibe 项目
用 PostgreSQL 与 SQL Server 驱动的持久化工作流系统
项目简介
SqlFlow 是一套基于 PostgreSQL 与 SQL Server 的轻量级持久化执行工作流系统,目标是用数据库本身替代 Temporal、Cadence 这类重型外部工作流引擎。它负责任务调度、状态检查点与失败重试,让开发者用普通的顺序写法表达可以被中断、可以被恢复、可以等待外部输入的业务流程,而不必自己维护一套状态机或死循环轮询队列。
核心功能
- 步骤级持久化:把易失败的操作(例如调用第三方支付接口)包进 Step,执行结果立刻写入数据库;进程崩溃后重启,同一个 Step 不会重复执行,直接读取已保存的结果继续往下走。
- 事件等待与挂起:流程需要人工审批时用 AwaitEvent 挂起,状态永久落库、流程从内存卸载、工作线程立即释放,直到外部系统触发预期事件再恢复。
- 信号层唤醒:PostgreSQL 使用内置的 LISTEN/NOTIFY,SQL Server 使用 Service Broker,超大规模场景可把信号监听切换到 NATS JetStream,消除轮询瓶颈并支持水平扩展。
- 多语言原生 SDK:提供 .NET、Java、Python、Go 四种 SDK,业务代码保持顺序写法,不引入复杂编排框架。
- 管理接口与控制面板:内置 Management API 与 Control Panel,可查看系统健康状况、监控任务处理、调试慢任务、检视事件阻塞并搜索指定执行记录。
- 时间与重试内置:任务可以指定未来某个时刻执行,失败后按指数退避推迟,next_execution_time 到期之前 worker 不会触碰这些行,到期后由智能轮询兜底唤醒。
技术实现
SqlFlow 把"存储"与"信号"彻底分开。应用触发一个任务时先做数据库提交,把任务参数与初始状态持久化,这是唯一事实来源;随后发出一个即发即忘的唤醒信号,即使信号因网络问题丢失,工作本身也已经安全落库。被唤醒的 worker 不会盲目执行全部任务,而是开一个事务从数据库批量认领任务,从而天然形成高效限流:并发设为五就最多认领五条,一千个任务同时涌入时其余的安静排队,处理完一条自动取下一条;队列为空时 worker 回到挂起状态,只在收到信号或兜底轮询超时时才查询数据库。与传统数据库队列依赖死循环轮询、把数据库 CPU 拖垮的做法不同,SqlFlow 让空闲线程在内存中挂起,把查询压力留给真正的业务数据。任务调度与退避重试同样落在数据库里,配合智能轮询兜底,既不空转也不漏执行。作者说明该项目在思路上大量借鉴 Absurd,但重新设计了更简单、面向高吞吐的库表模型,并把对两种数据库的一等支持、信号层与多语言生态补成了完整方案。
快速上手
- 建库:PostgreSQL 执行 sql/ssf-postgres-minimal.sql(需要信号唤醒则用 ssf-postgres-signaling.sql),SQL Server 对应执行 ssf-sqlserver-minimal.sql 或 Service Broker 版本。
- 安装 SDK:在 sdks 目录下按 dotnet、go、java、python 选择对应客户端,集成进自己的项目。
- 编写工作流:用顺序代码表达业务逻辑,把易失败操作包进 ctx.Step,把等待外部输入改写成 ctx.AwaitEvent。
- 触发并运行:应用发起任务生成 Task 记录并发出唤醒信号,随后启动 worker 接管执行,按配置的并发度认领任务。
- 观察与排障:打开 Management API 与控制面板,查看系统健康状态、处理中的任务、慢任务与事件阻塞情况,必要时搜索特定执行记录。
适用人群
不想引入 Temporal、Cadence 等独立工作流集群、希望把流程状态直接放进已有数据库的后端开发者;已经在使用 PostgreSQL 或 SQL Server 的中小团队;以及需要为长耗时、易失败、需要人工介入的业务流程加入可靠重试与断点恢复能力的工程团队。
团队信息
AI产品库
官方
由 AI 猎手自动发现
评论与建议
登录 后参与评论或提建议