refer
1-Intro
比较合适的语言, Python . 大名鼎鼎的 Apache AirFlow
其实仅仅从功能的角度来看,所有语言都是可以的,大多数的输入都是简单的 Yaml 这种 Schema.
例如: Kestra
国内的话有:
简单的库有 easy-flows 和 taskflow
2-Design
1)-Async Workflow is confused
目前希望的是把 Workflow 用到交互上去, 和客户端|前端交互, 和其他 XXX 交互,异步的一个个点连接起来, 下面举个例子:
- 请求1: 发送给 A, 等待 A 回调
- 请求2: 发送给 B, 等待 B 回调
如果是严格的状态机. 发给2个有 2^2 = 4 种状态.
- A 回调 && !B回调
- !A 回调 && B回调
- !A 回调 && !B回调 : 超时
- A 回调 && B 回调
如果是多事件等待触发: 就是要同时等待2个回调走一个逻辑
- A 回调 && B 回调
- !A 回调 && !B回调 : 超时
上面的设计会比较复杂,仅仅支持下面的设计则会比较简单.
2)-Domain Concepts
目前的场景需要支持 非 DAG 的场景也就是环.
IWorkAction: 图中的点,代表了 一个Action逻辑IEdge: 图中的边,代表了 2个Action之间的调度关系NextEdgeWaitEventEdgeCallbackEdgeChosenEdge: 组合逻辑,根据某一个Function, 来决定NextEdge的逻辑
IWorkflow: 一个图接口,由点和边构成,- 符合图算法中的场景需求, 例如 子图 等等
SequentialFlow: 一直串联下去的Workflow, 可以被继承,实现各种 自定义逻辑
IWorkflowEngine: 执行引擎, 用接口解耦, 支持:- 老系统的适配
- 支持新的单体版本
- 支持分布式版本
IWorkflowFilterChain: 用来执行 非核心业务.- 日志功能
- 上下文的持久化
WorkflowContext<T>: 执行Workflow的上下文,支持 自定义上下文的结构体IWorkflowContextRepo: 负责Workflow上下文的存储逻辑
3)-Coding Implement
// TODO 打算用 rustup 玩下.