Airbnb 开源嵌入式工作流引擎 Skipper,支持故障恢复与持久化
Airbnb 把自家处理崩溃恢复的工作流引擎开源了,嵌在服务里跑,不用像 Temporal 那样单独搭一套集群。做 Java 或 Kotlin 后端的可以看看,尤其是有多步业务流程的。文中对'可恢复不等于不重复'的边界讲得很实在,值得细读源码前的设计说明。
Airbnb 开源了内部使用的工作流引擎 Skipper,基于 Apache 2.0 协议发布在 GitHub,面向 Java 和 Kotlin 服务。它作为库嵌入现有服务,不需要独立的编排集群,多个服务副本通过共享数据库租约协调任务,某个副本失败后由其他副本接管。
核心机制是恢复时从头重放工作流方法,但已持久化的动作直接返回保存结果,不必重新执行,流程还能暂停等待信号或定时器而不占用线程。开源版目前提供 MySQL 和 SQLite 适配器,多实例生产部署建议用 MySQL,Postgres 和 DynamoDB 仍在规划中。
需要特别注意的是,Skipper 不能保证下游操作只发生一次:部分检查点批量写入,落盘前崩溃可能重复执行动作,下游调用与检查点也不是原子事务,因此支付、发券等场景仍需开发者自行保证幂等。Airbnb 自报内部已覆盖 15 个以上用例,峰值每秒 1 万个工作流,但该峰值基于 DynamoDB,不能视为开源版的性能指标。
Airbnb 开源内部使用的工作流引擎 Skipper:把可恢复的工作流嵌进服务,不必另建编排集群;面向 Java、Kotlin 服务,解决多步业务中常见的问题:执行到一半进程崩溃、下游暂时失败,流程怎样继续,而不是从头盲目重做。 开源地址: github.com/airbnb/skipper 核心机制:执行在服务里,进度存进数据库 Skipper 作为库嵌入现有服务,运行时和调度器随服务一起部署,不需要独立的工作流编排集群。多个服务副本共享数据库,用租约协调任务;某个副本失败后,其他副本可以接管。 恢复时,它会从头重放工作流方法,但已持久化的动作直接返回保存结果,不必重新执行。流程也能暂停等待信号或定时器,不持续占用线程。因此,它不只是串联函数的工具,而是具备持久化与故障恢复能力的执行引擎。 最重要的边界:可恢复,不等于绝不重复 Skipper 不能保证下游操作只发生一次。 默认情况下,部分检查点会批量写入;落盘前崩溃,已经完成的动作可能再次执行。即使立即保存,下游调用与检查点也不是一个原子事务。因此,支付、发券等操作仍需开发者保证幂等,避免重复调用产生重复结果。 开源版目前提供 MySQL、SQLite 适配器,多实例生产部署建议用 MySQL;Postgres、DynamoDB 仍在规划。Airbnb 此前自报,内部已覆盖 15 个以上用例,峰值达到每秒 1 万个工作流,但该峰值使用 DynamoDB,不能直接视为当前开源版的性能指标。 Airbnb Engineering @AirbnbEng Skipper is now open source! 🎉 Explore Airbnb’s embedded workflow engine, now available to developers under the Apache 2.0 license on GitHub. medium.com/airbnb-enginee… g 🔗 View Quoted Tweet📊 4 ⚡
This report is categorized under AITOP's "Products" desk, focusing on US frontier AI labs and Silicon Valley technology leaders. Within our cross-regional analytical framework, it directly maps to AI developer toolchains, coding agents, and engineering workflows and US-China foundation model benchmarks and commercialization comparison. Key entities and technical topics under continuous tracking include Skipper, Airbnb, 工作流引擎, 开源模型.
Source attribution: curated from shao__meng (@shao__meng).