conductor记忆方法 conductor


conductor记忆方法 conductor

文章插图
本文主要介绍netflix conductor的基本概念和主要运行机制 。
一 简介netflix conductor是基于JAVA语言编写的开源流程引擎 , 用于架构基于微服务的流程 。它具备如下特性:
  • 允许创建复杂的业务流程 , 流程中每个独立的任务都是由一个微服务所实现 。
  • 基于JSON DSL 创建工作流 , 对任务的执行进行编排 。
  • 工作流在执行的过程中可见、可追溯 。
  • 提供暂停、恢复、重启等多种控制模型 。
  • 提供一种简单的方式来最大限度重用微服务 。
  • 拥有扩展到百万流程并发运行的服务能力 。
  • 通过队列服务实现客户端与服务端的分离 。
  • 支持 HTTP 或其他RPC协议进行数据传送
二 基本概念1 Task
Task是最小执行单元 , 承载了一段执行逻辑 , 如发送HTTP请求等 。
  • System Task:被conductor服务执行 , 这些任务的执行与引擎在同一个JVM中 。
  • Worker Task:被worker服务执行 , 执行与引擎隔离开 , worker通过队列获取任务后 , 执行并更新结果状态到引擎 。Worker的实现是跨语言的 , 其使用Http协议与Server通信 。
conductor提供了若干内置SystemTask:
  • 功能性Task:HTTP:发送http请求JSON_JQ_TRANSFORM:jq命令执行 , 一般用户json的转换 , 具体可见jq官方文档KAFKA_PUBLISH: 发布kafka消息
  • 流程控制Task:SWITCH(原Decision):条件判断分支 , 类似于代码中的switch caseFORK:启动并行分支 , 用于调度并行任务JOIN:汇总并行分支 , 用于汇总并行任务DO_WHILE:循环 , 类似于代码中的do whileWAIT:一直在运行中 , 直到外部时间触发更新节点状态 , 可用于等待外部操作SUB_WORKFLOW:子流程 , 执行其他的流程TERMINATE:结束流程 , 以指定输出提前结束流程 , 可以与SWITCH节点配合使用 , 类似代码中的提前return语句
  • 自定义Task:对于System Task , Conductor提供了WorkflowSystemTask 抽象类 , 可以自定义扩展实现 。对于Worker Task , 可以实现conductor的client Worker接口实现执行逻辑 。
2 Workflow
  • Workflow由一系列需要执行的Task组成 , conductor采用json来描述Task的流转关系 。
  • 除基本的顺序流程外 , 借助内置的SWITCH、FORK、JOIN、DO_WIHLE、TERMINATE任务 , 还能实现分支、并行、循环、提前结束等流程控制 。
3 Input&Output
Task的输入是一种映射 , 其作为工作流实例化的一部分或某些其他Task的输出 。允许将来自工作流或其他Task的输入/输出作为随后执行的Task的输入 。
  • Task有自己的输入和输出 , 输入输出都是jsonobject类型 。
  • Task可以引用其他Task的输入输出 , 使用${taskxxx.output}的方式引用 。引用语法为json-path , 除最基础的${taskxxx.output}的值解析方式外 , 还支持其他复杂操作 , 如过滤等 , 具体见json-path语法 。
  • 启动Workflow时可以传入流程的输入数据 , Task可以通过${workflow.input}的方式引用 。
Task实现原子操作的处理以及流程控制操作 , Workflow定义描述Task的流转关系 , Task引用Workflow或者其它Task的输入输出 。通过这些机制 , conductor实现了JSON DSL对流程的描述 。
三 整体架构
conductor记忆方法 conductor

文章插图
主要分为几个部分: