2025年5月,微软公司正式在GitHub上开源了pg_durable项目——一个嵌入PostgreSQL内核的“持久执行”(Durable Execution)框架。这一举措标志着微软在数据库与应用程序逻辑融合方向上的又一重要布局,也为广大开发者提供了一种在数据库内部实现高可靠性工作流编排的新范式。
什么是“持久执行”?为何重要?
传统应用在实现复杂业务逻辑时,常常面临“状态一致性”与“故障恢复”的双重挑战。例如,一个订单处理流程涉及支付扣款、库存更新、通知发送等多个步骤,任何一步失败都可能导致数据不一致。通常,开发者需要引入消息队列、分布式事务协调器或外部工作流引擎来保证“要么全做,要么不做”。但这类方案往往带来架构臃肿、运维复杂和性能损耗。
“持久执行”正是为解决这一痛点而生。它允许开发者将一段业务逻辑(通常是一系列步骤或“活动”)定义为可中断、可恢复的“持久化工作流”。系统会自动记录每一步的执行状态(即“执行快照”),当进程崩溃、网络中断或节点重启后,工作流能从最近的成功检查点继续执行,而非从头开始。这种模式天生适合微服务编排、ETL任务、多步骤API调用等场景。
微软的开源项目pg_durable将这一能力直接“内嵌”到PostgreSQL中。换句话说,开发者无需额外部署任何中间件,仅通过SQL扩展或熟悉的编程语言(如C、Rust)即可在数据库内部定义并运行可靠的工作流。
技术架构:深度集成PostgreSQL
pg_durable并非一个简单的插件,而是一个深度利用PostgreSQL内核能力的开源项目。其核心设计思路包括:
-
基于PostgreSQL WAL(预写式日志)的持久化机制:工作流的状态变更直接写入数据库的WAL日志,保证ACID属性。即使数据库实例突然崩溃,重启后WAL日志回放即可恢复所有未完成的工作流,无需额外配置外部存储。
-
原生“事件驱动”调度:工作流中的每个步骤可以等待外部事件(如HTTP回调、定时器、其他数据库变更)触发,而事件本身也通过PostgreSQL的LISTEN/NOTIFY机制或异步通道实现,避免了轮询开销。
-
多语言支持:早期版本通过C函数扩展提供核心API,同时支持用Rust编写的用户定义工作流,未来计划开放Python、JavaScript等绑定。这意味着开发者可以用自己熟悉的语言编写业务逻辑,而不必局限于SQL。
-
与PostgreSQL生态无缝集成:
pg_durable可利用已有的表、索引、事务机制等。例如,工作流中的中间数据可以存入PostgreSQL的临时表或普通表,直接参与数据库的备份、复制与集群管理。
微软的动机:开源背后的战略考量
微软此次开源pg_durable,并非无的放矢。一方面,PostgreSQL社区近年活跃度持续攀升,已成为许多企业级应用的首选数据库。微软自家云服务Azure Database for PostgreSQL也占据重要市场份额,开源高质量工具既能回馈社区,也能吸引更多开发者使用Azure。
另一方面,pg_durable的技术原型脱胎于微软内部的研究项目“Durable Functions”在数据库领域的延伸。微软在云原生领域已有成熟的Azure Durable Functions服务,而pg_durable相当于将类似理念“下沉”到数据库层面,使那些不想引入额外编排服务的小型团队或对延迟敏感的场景也能享受持久执行的便利。
微软Azure Data团队的首席工程师Mark Russinovich在开源公告中表示:“很多开发者告诉我们,他们希望在数据库内部直接实现可靠的工作流,而不是在应用层和数据库之间架设复杂的桥梁。pg_durable正是对这一诉求的直接回应。”
使用场景与影响
对于后端开发者而言,pg_durable可能带来以下变革:
-
简化架构:一条订单、一笔转账、一次用户注册……这些典型的多步骤业务逻辑,现在可以直接在PostgreSQL的触发器或函数中编写为持久化工作流,无需依赖Kafka、RabbitMQ或Celery等外部队列。
-
降低运维成本:工作流状态的持久化、恢复、重试都由数据库引擎负责,运维团队无需维护额外的状态存储集群。
-
提升性能:相比外部编排工具,数据库内执行避免了网络往返和序列化开销,适合对延迟敏感的场景。
当然,pg_durable并非万能方案。对于需要跨多个异构数据库或微服务大规模编排的场景,独立的编排引擎(如Temporal、Cadence)仍然更有优势。但pg_durable填补了“数据库内轻量级持久执行”的空白,尤其适合单数据库应用、边缘计算环境或资源受限的嵌入式系统。
社区反应与未来展望
自项目在GitHub上开源以来,已获得数千星标。PostgreSQL社区核心贡献者Bruce Momjian评论称:“这是PostgreSQL生态中最有趣的扩展之一,它让数据库不仅仅是一个‘存储引擎’,更成为一个‘状态驱动的运行时’。”
微软计划在下个版本中增加对多语言工作流定义、可视化监控面板以及与Azure Event Grid的原生集成支持。可以预见,随着pg_durable的成熟,数据库作为“应用运行时”的边界将进一步拓宽,而“持久执行”或许将成为未来数据库的标配能力之一。
对于开发者而言,现在正是体验这一新技术的最佳时机:只需克隆仓库、编译安装,即可在PostgreSQL 16及以上版本中开启持久执行之旅。详情可访问 github.com/microsoft/pg_durable。