Conductor是一个基于过程流的微服务编排引擎,有以下的特点(官网介绍https://netflix.github.io/conductor/

  • 允许将已微服务形式实现的独立任务构建为复杂的过程或者业务流程。
  • 通过JSON格式的DSL定义执行流。
  • 在这些过程流中支持可视化和可追踪性。
  • 对外暴露控制接口,比如:暂停,重试,重启等等。
  • 提供一个更简单的方法来重用已经存在的微服务。
  • 用户接口对过程流程可见。
  • 当需要的同步任务的时候,有同步执行过程中所有任务的能力。
  • 有数以百万计的同时运行流程的能力。
  • 支持从客户端生成的抽象队列服务
  • 能够执行通过HTTP请求或者其他的gRPC协议的请求

架构图

调用流程

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