认识 Conductor

Conductor是一个基于Java的流程引擎,用于组织复杂的微服务流程。它支持JSONDSL、任务控制和多种并发模式。文章详细介绍了Conductor的架构、任务状态、执行流程以及其在服务编排中的代码结构,包括grpc通信模块和与WMS集成的潜力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

Conductor

netflix conductor 是基于Java开发的开源流程引擎,用于编排微服务的流程。有如下特性:

  • 允许创建复杂的业务流程,流程中每个独立的任务都是由一个微服务所实现。
  • 基于JSON DSL创建工作流,对于任务的执行进行编排。
  • 工作流在执行过程中可观测、可追溯
  • 提供暂停、回复、重启等多种控制
  • 提供一种简单的方式来最大限度的重用微服务
  • 拥有扩展到百万罗成并发运行的服务能力
  • 通过队列服务实现客户端与服务端的分离
  • 支持http或其他RPC协议进行通信

基本概念

聊概念要基于conductor整体架构进行描述。整体架构图如下:
在这里插入图片描述
涉及到的概念如下:

  • Orchestrator: 负责流程的流转调度工作;
  • Management/Execution Service: 提供流程、任务的管理更新等操作;
  • TaskQueues: 任务队列,Orchestrator解析出来的待执行Task会放到队列中;
  • Worker: 任务执行worker,从TaskQueues中获取任务,通过Execution Service更新任务状态与结果数据;
  • Database: 元数据&运行时数据库,用于保存运行时的WorkflowTask等状态信息,以及流程任务定义的等原信息;
  • Index: 索引数据库,用于存储执行历史;

还有相关的执行状态概念,如图:
在这里插入图片描述

  • Task: Task是最小执行单元,承载了一段执行逻辑,如发送HTTP请求等
  • workflow: 由一系列需要执行的Task组成,conductor采用json来描述Task的流转关系。除基本的顺序流程外,借助内置的SWITCHFORKJOINDO_WIHLETERMINATE任务,还能实现分支、并行、循环、提前结束等流程控制
  • Task的输入是一种映射,其作为工作流实例化的一部分或某些其他Task的输出。允许将来自工作流或其他Task的输入/输出作为随后执行的Task的输入

Task 状态

task作为最小执行单元,必然有状态的转移,Task的状态机如图:
在这里插入图片描述

  • SCHEDULED:待调度,task放到队列中还没有被poll出来执行时的状态
  • IN_PROGRESS:执行中,被poll出来执行但还没有完成时的状态
  • COMPLETED:执行完成
  • FAILED:执行失败
  • CANCELLED:被中止时为此状态,一般出现在两种情况:
    • 手动中止流程时,正在运行中的task会被置为此状态;
    • 多个fork分支,当某个分支的task失败时,其它分支中正在运行的task会被置为此状态;

执行流程

整体执行流程如图:
在这里插入图片描述

  • 首先在conductor server上定义task和workflow
  • 通过接口启动workflow
  • 编排服务会从存储中取得workflow和其中task的metadata,通过状态机服务判断当前要执行的task放入task queues,并置此task状态为SCHEDULED,等待worker认领
  • 启动各微服务worker,在worker中声明当前worker对应的task定义的名字
  • worker会轮询conductor server,如果发现有同名的任务被放入task queues里,认领此任务,并更新任务状态为IN_PROGRESS,然后开始执行worker内业务逻辑
  • worker中业务逻辑执行完后,根据至执行结果,更新任务状态为COMPLETE或FAIL
  • conductor server监听此任务如果变为COMPLETE或FAIL执行下一个节点或重试等逻辑操作,如此往复。

代码主结构

在这里插入图片描述
代码结构说明:

  • client层:Conductor的使用场景是服务编排,必然会涉及client和server端也就是说在我们的微服务中的服务中可以使用client端来和conductor的server端进行通信,根据不同状态来执行相应任务。
  • server层:负责conductor server端的启动、工作流任务的启动,由server层调用core层实现分布式状态机控制和任务的调度。
  • common层:这一层主要涉及的是Task任务和Workflow工作流的元数据和请求参数定义,还有一些工具类。
  • core层【核心模块】:这一层主要包括的是核心类,包括:事件、队列功能类,还包括任务类型定义、每种类型任务的具体实现逻辑和映射关系,比如分支条件如何进行判断,逻辑表达式如何解析,并行任务如何执行等等。
  • jersey层:这个主要提供的是Swagger接口展示层,通过启动这个模块可以看到一个接口列表页面,用户可以在界面上操作接口实现任务和工作流元数据的编写和上传,还可以在界面上启动工作流引擎等。
  • contribs层:亚马逊消息SQS
  • es-persistence:这一层主要是持久层,根据请求版本不同包括es5和es6二个模块,作用主要包括将任务和工作流元数据保存到es中,还有就是将任务运行时数据进行保存,比如任务执行的状态,执行时间等等。
  • mysql-persistence:mysql持久层,存储任务和工作流定义的元数据。
  • redis-persistence:redis持久层,存储任务和工作流定义的元数据。
  • conductor-cassandra-persistence:cassandra持久层,存储任务和工作流定义的元数据。

grpc、grpc-client、grpc-server是用于支持rpc通信相关的模块

基础概念做基本了解,后续会将业务流编排能力,应用与wms,实现通用wms的升级。

相关文章
概念科普
使用Conductor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五之

真实案例以及商业项目技术

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值