文章插图
本文主要介绍netflix conductor的基本概念和主要运行机制 。
一 简介netflix conductor是基于JAVA语言编写的开源流程引擎 , 用于架构基于微服务的流程 。它具备如下特性:
- 允许创建复杂的业务流程 , 流程中每个独立的任务都是由一个微服务所实现 。
- 基于JSON DSL 创建工作流 , 对任务的执行进行编排 。
- 工作流在执行的过程中可见、可追溯 。
- 提供暂停、恢复、重启等多种控制模型 。
- 提供一种简单的方式来最大限度重用微服务 。
- 拥有扩展到百万流程并发运行的服务能力 。
- 通过队列服务实现客户端与服务端的分离 。
- 支持 HTTP 或其他RPC协议进行数据传送
Task是最小执行单元 , 承载了一段执行逻辑 , 如发送HTTP请求等 。
- System Task:被conductor服务执行 , 这些任务的执行与引擎在同一个JVM中 。
- Worker Task:被worker服务执行 , 执行与引擎隔离开 , worker通过队列获取任务后 , 执行并更新结果状态到引擎 。Worker的实现是跨语言的 , 其使用Http协议与Server通信 。
- 功能性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接口实现执行逻辑 。
- Workflow由一系列需要执行的Task组成 , conductor采用json来描述Task的流转关系 。
- 除基本的顺序流程外 , 借助内置的SWITCH、FORK、JOIN、DO_WIHLE、TERMINATE任务 , 还能实现分支、并行、循环、提前结束等流程控制 。
Task的输入是一种映射 , 其作为工作流实例化的一部分或某些其他Task的输出 。允许将来自工作流或其他Task的输入/输出作为随后执行的Task的输入 。
- Task有自己的输入和输出 , 输入输出都是jsonobject类型 。
- Task可以引用其他Task的输入输出 , 使用${taskxxx.output}的方式引用 。引用语法为json-path , 除最基础的${taskxxx.output}的值解析方式外 , 还支持其他复杂操作 , 如过滤等 , 具体见json-path语法 。
- 启动Workflow时可以传入流程的输入数据 , Task可以通过${workflow.input}的方式引用 。
三 整体架构
文章插图
主要分为几个部分:
- Orchestrator: 负责流程的流转调度工作;
- Management/Execution Service: 提供流程、任务的管理更新等操作;
- TaskQueues: 任务队列 , Orchestrator解析出来的待执行Task会放到队列中;
- Worker: 任务执行worker , 从TaskQueues中获取任务 , 通过Execution Service更新任务状态与结果数据;
- Database: 元数据&运行时数据库 , 用于保存运行时的Workflow、Task等状态信息 , 以及流程任务定义的等原信息;
秒懂生活扩展阅读
- 怎么关iebrowser
- 新鲜野菜怎样长期储存 新鲜野菜如何长期储存的方法
- 如何将qq录音转发给另外一个人
- 淘宝直通车关键词质量分怎么提升?提升方法介绍
- 民国大洋怎么看真假
- 维生素c的作用及养颜方法
- 怎么找出租房
- 冷熟饺子怎么吃
- 绿萝的叶子向四面塌下怎么办
- 用草钓草鱼的挂钩方法是什么