Architecture & Milestone Report
自研工作流引擎架构设计与里程碑汇报
SongJian · 2026
本次汇报沿着一条工作流从设计到运行的完整生命周期展开,串联所有核心技术点。
Firefly Workflow Engine 是一套面向 KYC/KYB 合规场景的可视化工作流引擎,支持从工作流设计、发布、执行到审计的全生命周期管理。
拖拽式画布设计,节点+连线直观构建工作流
同步秒级响应 / 异步长时等待,统一引擎透明切换
覆盖 KYC、KYB、审核、计算等场景,即插即用扩展
服务重启后自动检测并恢复中断的执行,零丢失
多版本管理,分布式锁保障并发安全,秒级回滚
实时 Metrics 监控 + 全链路 Trace 回放,满足合规审计
整体架构分为四层,上层定义"做什么",下层实现"怎么做",通过接口契约解耦。
工作流的旅程从草稿开始。开发者在画布上编排节点和连线,定义业务逻辑。草稿是可编辑的"设计态",与生产环境完全隔离。
每个草稿拥有独立编辑空间,多人可并行设计不同草稿,互不干扰
可从已有生产版本 Fork 创建草稿,继承全部节点、连线和容错策略
节点(业务逻辑)、连线(执行顺序)、容错策略(失败时的行为)
草稿编辑完成后,如何在不影响生产的情况下验证业务逻辑?沙箱机制允许在隔离环境中执行草稿,甚至支持异步回调的完整测试。
执行前冻结草稿状态为快照。执行期间草稿可继续编辑,互不影响
异步回调到达时,优先从快照恢复定义;快照过期则回退到实时草稿
快照设有过期时间,无需人工清理,避免测试数据长期占用资源
沙箱验证通过后,草稿需要被发布为正式版本。发布是高风险操作——它直接影响生产流量。我们通过多重保障确保发布过程的安全性。
检查画布完整性,必须包含唯一的事件触发节点作为入口
首次发布锁定触发事件,后续发布必须一致,防止订阅断裂
获取锁后在事务中切换版本,冲突时自动补偿恢复旧版本
核心原则:同一工作流 始终只有一个生效版本,分布式锁 + 事务 + 补偿三重保障并发安全和数据一致性。
发布不是一锤子买卖。每次发布都生成不可变的版本快照,所有历史版本完整保留。如果新版本出现问题,可以秒级回滚到任意历史版本。
关键设计:执行启动时锁定版本号,后续发布和回滚 不影响任何正在运行的执行,新旧版本平滑过渡。
版本发布后,当外部事件到达时,引擎如何启动一次执行?这一步将"静态定义"转化为"动态运行"——创建执行上下文,构建依赖图,调度第一个节点。
承载执行元信息、节点状态、节点输出、依赖关系图。所有节点通过上下文读写数据、感知全局状态。
上下文不直接存储状态,而是委托给 StateManager。同步执行用内存,异步执行用持久化存储——引擎逻辑完全无感知。
循环子执行场景下,子上下文自动继承父上下文的数据,支持批量处理业务(如批量 KYC 验证)。
上下文创建后,引擎开始按依赖关系图调度节点。每个节点执行前解析输入参数,执行后将输出写入上下文,供下游节点引用。
当前已有 50+ 节点类型,每种类型对应独立的执行器实现,通过统一工厂分发。
节点执行过程中,有些工作流秒级完成,有些需要等待外部回调数天。如何用一套引擎同时支撑两种场景?答案是状态管理的策略模式。
引擎通过 StateManager 接口委托状态读写。切换模式只需替换实现,引擎核心代码零改动。包含回调类节点的工作流自动使用异步模式。
异步模式下,执行状态需要在服务重启后依然完整。我们将执行实例的全部状态结构化地持久化,确保任意时刻都能还原完整执行现场。
事务保障状态更新不会出现中间态,节点状态流转严格有序
执行状态设有生存周期,终态执行自动回收,无需人工清理
任意时刻可查询完整执行快照:哪些节点已完成、哪些在等待
当 KYC 验证、人工审核等节点需要等待外部系统响应时,引擎将执行"挂起"并注册回调。外部系统完成后通过回调接口唤醒执行,自动续接后续节点。
回调到达时,引擎先检查上下文是否在内存中;若服务已重启,则从持久化存储原子地恢复完整上下文后再处理——保证不丢失、不重复。
外部系统可能永远不响应,节点可能执行失败。我们设计了多层防护网,确保系统不会因等待或异常而"卡死"。
异步执行可能持续数小时甚至数天。如果服务在等待回调期间崩溃了,执行会丢失吗?不会。基于持久化状态和租约机制,引擎在重启后自动恢复所有中断的执行。
服务启动后等待所有依赖组件就绪,确保恢复操作有完整的基础设施支撑
多实例部署时,通过短期租约抢占恢复权,防止多个实例重复恢复同一执行
从持久化存储还原完整执行状态和依赖图,调度所有未完成节点继续执行
租约自动过期——即使恢复节点本身崩溃也不会造成死锁。恢复后的执行与正常执行 行为完全一致。
除了故障恢复,系统还需要日常"自我维护"能力。定时清理回收过期资源,停机时确保在途执行安全完成,避免产生新的孤儿。
故障恢复 + 定时清理 + 优雅停机,三者协同构成完整的 自治运维闭环。
系统运行起来后,如何知道它是否健康?我们在引擎核心路径上埋入了多维度指标,实现秒级监控和异常告警。
指标跨异步边界追踪——即使工作流在回调后由另一个线程完成,耗时统计依然准确。
Metrics 告诉你"系统整体是否正常",Trace 告诉你"某一次执行到底发生了什么"。每次工作流执行的全过程都被记录,支持完整回放和合规审计。
追踪数据异步落盘,不影响执行性能
按租户 / 工作流 / 执行实例灵活检索
完整记录每个节点的输入输出和时间戳,满足合规要求
Metrics(实时监控)+ Trace(历史回溯)双线并行,构成完整的 可观测性体系。
当业务需要新的节点类型时,如何扩展引擎?通过 SPI 机制,新增节点只需实现标准接口并注册声明,引擎启动时自动发现和加载——无需改动引擎核心任何一行代码。
扩展新节点无需修改引擎核心,完全增量式开发
启动时扫描注册文件自动加载,无需手动配置
多态序列化自动注册,运行时无类型错误风险
SPI 扩展不仅限于节点。引擎的四个核心模块都通过接口抽象,任何实现都可以被替换——这是面向接口编程的彻底实践。
实现执行器接口即可新增节点类型,当前已有 50+ 种,随业务持续增长
StateManager 接口抽象状态读写,可替换为任意持久化方案
TraceCollector 接口定义追踪契约,可对接不同的可观测平台
Scheduler 接口封装超时管理,可替换底层调度引擎实现
核心引擎 只依赖接口,不依赖任何具体实现。存储、追踪、调度都可以独立演进而不影响执行逻辑。
回顾整个引擎的设计,有几条原则贯穿了从草稿到执行到恢复的每一个环节。
版本发布后冻结、执行启动时锁定版本号、容错策略不可变。不可变性消除了并发竞争和状态不一致。
StateManager、TraceCollector、Scheduler 都是接口。核心引擎只定义契约,不绑定实现。
故障恢复、定时清理、优雅停机——系统能自己处理的问题,不应该留给运维。
沙箱快照、版本锁定——正在运行的执行不会被外部变更干扰。
三级容错策略、超时默认值、非关键节点跳过——系统在异常时仍能给出"最佳可用"结果。
Metrics + Trace 双线覆盖。不可观测的系统等于不可信任的系统。
双模状态 · 故障自动恢复 · 优雅停机 · 原子回调恢复
SPI 零侵入扩展 · 50+ 节点即插即用 · 四维接口解耦
实时 Metrics · 全链路 Trace · 合规审计支撑
多版本不可变 · 秒级回滚 · 事件模型锁定 · 并发保护
沙箱测试 · 草稿 Fork · DAG 可视化编排
分布式锁 · 双层超时 · 三级容错 · 自动清理
What's Next
基于 Trace 数据在画布上动态回放执行过程
开放节点注册,支持团队间共享和复用
AI 辅助工作流设计,推荐最优节点组合
建立压测基线,持续跟踪吞吐和延迟指标
Q & A
Thank You