Netflix|开源微服务编排框架:Netflix Conductor

Netflix|开源微服务编排框架:Netflix Conductor

文章图片

Netflix|开源微服务编排框架:Netflix Conductor

文章图片

Netflix|开源微服务编排框架:Netflix 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 InputOutput
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对流程的描述 。
三 整体架构
主要分为几个部分:
Orchestrator: 负责流程的流转调度工作; Management/Execution Service: 提供流程、任务的管理更新等操作; TaskQueues: 任务队列 , Orchestrator解析出来的待执行Task会放到队列中; Worker: 任务执行worker , 从TaskQueues中获取任务 , 通过Execution Service更新任务状态与结果数据; Database: 元数据运行时数据库 , 用于保存运行时的Workflow、Task等状态信息 , 以及流程任务定义的等原信息; Index: 索引数据库 , 用于存储执行历史; 四 运行模型 1 Task状态转移