【音视频】服务编排--Conductor 文档翻译

介绍

Conductor是一个微服务的编排引擎

Conductor优点

Conductor,帮助我们协调基于微服务的流程,具有以下功能:

  • 允许创建复杂的流程/业务流,其中由微服务实现单个任务。
  • 基于JSON DSL的定义执行流程。
  • 为这些流程提供可见性和可追溯性。
  • 在暂停,恢复,重启等周围公开控制语义,以获得更好的devops体验。
  • 允许更多地重用现有的微服务,为管理提供更容易的途径。
  • 用户界面可视化流程。
  • 能够在需要时同步处理所有任务。
  • 能够扩展数百万个并发运行的流程。
  • 由客户端提取的排队服务支持。
  • 能够在HTTP或其他传输上运行,例如gRPC。

为什么不进行点对点编排?

通过点对点任务编排,我们发现随着业务需求和复杂性的增长难以扩展。发布/订阅模型适用于最简单的流程,
但很快就突出了与该方法相关的一些问题:

  • 流程“嵌入”在多个应用程序的代码中。
  • 通常,围绕输入/输出,SLA等存在紧密耦合和假设,使得更难以适应不断变化的需求。
  • 几乎没有办法系统地回答“我们用过程X做了多少”?

基本概念

工作流定义

工作流是使用基于JSON的DSL定义的,包括一组作为工作流的一部分执行的任务。任务是在远程机器上执行的控制任务(fork,条件等)或应用程序任务(例如编码文件)。

任务定义

  • 所有任务都需要在活动工作流程使用之前进行注册。
  • 任务可以在多个工作流程中重复使用。工人任务分为两类:
  • 系统任务
  • 工人任务

系统任务

系统任务在Conductor服务器的JVM内执行,并由Conductor管理,以实现其可执行性和可扩展性。

名称 目的
DYNAMIC 基于任务的输入表达式派生的工作任务,而不是静态定义为计划的一部分
DECIDE 决策任务 - 实现案例……开关样式分叉
FORK 分叉一组并行的任务。计划每个集合并行执行
FORK_JOIN_DYNAMIC 与FORK类似,但FORK_JOIN_DYNAMIC不是在并行执行计划中定义的任务集,而是根据此任务的输入表达式生成并行任务
JOIN 补充FORK和FORK_JOIN_DYNAMIC。用于合并一个或多个并行分支*
SUB_WORKFLOW 将另一个工作流嵌套为子工作流任务。在执行时,它实例化子工作流并等待它完成
EVENT 在支持的事件系统中生成事件(例如,Conductor,SQS)

Conductor提供了一个API来创建在与引擎相同的JVM中执行的用户定义任务。有关详细信息,请参阅WorkflowSystemTask接口。

工人任务

工作人员任务由应用程序实现,并在与Conductor不同的环境中运行。工作人员任务可以用任何语言实现。这些任务通过REST API端点与Conductor服务器通信,以轮询任务发现并执行,并在执行后更新其状态。

工作人员任务由计划中的任务类型SIMPLE标识。

工作流任务的生命周期

【音视频】服务编排--Conductor 文档翻译_第1张图片

元数据定义

任务定义

Conductor维护着一个工作人员任务类型的注册表。在工作流程中使用之前必须注册任务类型。

{
     
  "name": "encode_task",
  "retryCount": 3,
  "timeoutSeconds": 1200,
  "inputKeys": [
    "sourceRequestId",
    "qcElementType"
  ],
  "outputKeys": [
    "state",
    "skipped",
    "result"
  ],
  "timeoutPolicy": "TIME_OUT_WF",
  "retryLogic": "FIXED",
  "retryDelaySeconds": 600,
  "responseTimeoutSeconds": 3600
}
领域 描述
name 任务类型
retryCount 任务标记为失败时尝试重试的次数
retryLogic 重试机制
timeoutSeconds 以毫秒为单位的时间,在此之后,如果在转换到IN_PROGRESS状态后未完成任务,则将任务标记为TIMED_OUT
timeoutPolicy 任务的超时策略
responseTimeoutSeconds 如果大于0,则在此时间之后未更新状态时,将重新安排任务。当工作人员轮询任务但由于错误/网络故障而无法完成时很有用。
outputKeys 任务输出的键集。用于记录任务的输出

你可能感兴趣的:(JAVA)