refer

1-Intro

github workflow topic

比较合适的语言, Python . 大名鼎鼎的 Apache AirFlow

其实仅仅从功能的角度来看,所有语言都是可以的,大多数的输入都是简单的 Yaml 这种 Schema.

例如: Kestra

国内的话有:

简单的库有 easy-flowstaskflow

2-Design

1)-Async Workflow is confused

目前希望的是把 Workflow 用到交互上去, 和客户端|前端交互, 和其他 XXX 交互,异步的一个个点连接起来, 下面举个例子:

  1. 请求1: 发送给 A, 等待 A 回调
  2. 请求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 之间的调度关系
    • NextEdge
    • WaitEventEdge
    • CallbackEdge
    • ChosenEdge: 组合逻辑,根据某一个 Function , 来决定 NextEdge 的逻辑
  • IWorkflow: 一个图接口,由点和边构成,
    • 符合图算法中的场景需求, 例如 子图 等等
    • SequentialFlow : 一直串联下去的 Workflow, 可以被继承,实现各种 自定义逻辑
  • IWorkflowEngine : 执行引擎, 用接口解耦, 支持:
    • 老系统的适配
    • 支持新的单体版本
    • 支持分布式版本
  • IWorkflowFilterChain : 用来执行 非核心业务.
    • 日志功能
    • 上下文的持久化
  • WorkflowContext<T> : 执行 Workflow 的上下文,支持 自定义上下文的结构体
  • IWorkflowContextRepo : 负责 Workflow 上下文的存储逻辑

3)-Coding Implement

// TODO 打算用 rustup 玩下.