https://netflix.github.io/conductor/

https://github.com/Netflix/conductor

编译版: https://jcenter.bintray.com/com/netflix/conductor/

-----------------------------------------------------

Motivation

我们建立了Conductor,以帮助我们在Netflix上编制基于微服务的流程,具有以下特点:

  • 允许创建复杂的流程/业务流程,其中单个任务由微服务器实现。
  • 基于JSON DSL的蓝图(blueprint)定义了执行流程。
  • 为这些流程提供可见性和可追溯性。
  • 围绕暂停,恢复,重新启动等方式展现控制语义,从而实现更好的体验。
  • 允许更多地重用现有的微服务器,为onboarding提供更简单的路径。
  • 用户界面可视化流程。
  • 能够在需要时同步处理所有任务。
  • 能够扩展数以百万计的同时运行的流程。
  • 由客户抽象的排队服务支持。
  • 能够在HTTP或其他传输(如gRPC)上运行。

Why not peer to peer choreography?

通过对等任务编排,我们发现随着业务需求和复杂性的增长难以扩展。 Pub / sub模式为最简单的流程工作,但很快突出了与该方法相关的一些问题:

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

API和存储层可插拔,并提供与不同后台和队列服务提供者合作的能力。

-----------------------------------------------------------------------------------------------

git clone git@github.com:Netflix/conductor.git

启动server

方法1:进入server目录
执行../gradlew server
此命令会自动下载gradle
此脚本最终执行的是如下命令

(java -Dorg.gradle.appname=gradlew -classpath /root/conductor/gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain server)

方法2: 手动下载gradle工具,进入server目录

gradle build

进入/root/conductor/server/build/libs 目录下

java -jar conductor-server-VERSION-all.jar

实现此接口

https://github.com/Netflix/conductor/blob/dev/client/src/main/java/com/netflix/conductor/client/worker/Worker.java

例子:

https://github.com/Netflix/conductor/blob/dev/client/src/main/java/com/netflix/conductor/client/task/WorkflowTaskCoordinator.java

https://github.com/Netflix/conductor/blob/dev/client/src/test/java/com/netflix/conductor/client/sample/SampleWorker.java

启动ui:

cd ui
gulp watch
访问 http://localhost:3000/运行模式:
conductor遵循基于RPC的通信模式,其中worker与server在单独的机器上运行。 worker通过基于HTTP的端点与服务器通信,并使用轮询模型来管理工作队列。

worker是远程系统,并通过HTTP(或任何支持的RPC机制)与conductor server进行通信。
     任务队列用于为worker安排任务。 我们在内部使用了dyno-queue,但是它可以很容易地与SQS或类似的pub-sub机制进行交换。
     conductor重新持久化模块使用Dynomite存储状态和元数据以及Elasticsearch用于索引后端。
     请参阅扩展后端部分,以实现对不同数据库的支持以进行存储和索引。

要注册并执行新工作流所需的步骤:

1. 定义工作流的任务定义。
2. 创建工作流定义
3. 创建定期轮询调度任务的任务worker.

触发工作流执行

POST /workflow/{name}
{
... //json payload as workflow input
}
轮询任务
GET /tasks/poll/batch/{taskType}

更新任务状态
POST /tasks
{
"outputData": {
"encodeResult":"success",
"location": "http://cdn.example.com/file/location.png"
//any task specific output
},
"status": "COMPLETED"
}

工作流定义:

工作流使用以DSL为基础的JSON定义的,包括一组要执行的任务,这些任务组成了工作流,任务是远程机器上的控制任务(fork, conditional等等),

或应用程序任务(e.g. encode a file)

任务定义:

所有的任务必须在活动的工作流使用之前注册.

一个任务可以被多个工作流重复使用,任务分成两类:

  • System Task
  • Worker Task

System Tasks:

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

DYNAMIC : 基于对任务的输入表达式导出的工作任务,而不是静态定义为blueprint的一部分

DECIDE:决策任务 - 实现案例...开关式fork

FORK:fork一组并行的任务。 每组计划并行执行

FORK_JOIN_DYNAMIC:FORK_JOIN_DYNAMIC与FORK类似,但不是并行执行blueprint中定义的任务集,基于此任务的输入表达式生成并行任务

JOIN:完成FORK和FORK_JOIN_DYNAMIC。 用于合并更多的并行分支*

SUB_WORKFLOW: 将另一个工作流作为子工作流任务。 执行后,实例化子工作流程,等待完成

EVENT:在支持的事件系统(例如conductor,SQS)中产生事件

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

Worker Tasks

worker tasks由应用程序实现,并在独立于Conductor的环境中运行。 worker tasks可以用任何语言实现。 这些任务通过REST API端点与Conductor服务器进行通信,以轮询任务并在执行后更新其状态。

worker tasks由blueprint中的任务类型SIMPLE标识。

Lifecycle of a Workflow Task

												

conductor介绍的更多相关文章

  1. 五、OpenStack—nova组件介绍与安装

    一.nova介绍 Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的. ...

  2. OpenStack 图形化服务 Horizon介绍和部署(十二)

    Horizon介绍 Horizon是一个web接口,使得云平台管理员以及用户可以管理不同的OpenStack资源以及服务. 提供一个Web界面操作OpenStack系统 使用Django框架基于Ope ...

  3. OpenStack 计算服务 Nova介绍和控制节点部署(七)

    介绍 Nova是openstack最早的两块模块之一,另一个是对象存储swift.在openstack体系中一个叫做计算节点,一个叫做控制节点.这个主要和nova相关,我们把安装为计算节点nova-c ...

  4. 【ironic】ironic介绍与原理

    [ironic]ironic介绍与原理 零,配置文件 0.1 配置驱动 文件ironic.conf, ipmi硬件类型,默认值也是ipmi, pxe_ipmitool驱动也是默认值,配置驱动 [DEF ...

  5. 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(3) - 使用Conductor切换页面

    前两章中, 我们已经实现了这个图书管理系统的登录窗口, 并实施了完善的单元测试. 该是时候回过头来关注我们的主窗口了. 一个功能丰富的系统一般会有多个页面, 我们图书管理系统虽然是"简易&q ...

  6. netflix conductor 2.x 版本新功能简单说明

    netflix conductor 2.x 已经发布很长时间了,同时官方也发布了关于2.x 新特性的说明,当前github 行的release 版本为2.14.4 新特性 grpc 框架支持 一个可选 ...

  7. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  8. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  9. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

随机推荐

  1. nginx负载

    一. Nginx反向代理与负载均衡概念简介 • 严格地说,Nginx仅仅是作为Nginx Proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果,所以本文称之为Nginx负载均衡 ...

  2. POSIX 消息队列 之 参数说明

    消息队列 一.函数 mq_open 头文件 mqueue.h: 原型 mqd_t mq_open(const char *name, int oflag, .../*mode_t mode,struc ...

  3. bzoj 1390: [Ceoi2008]Fence

    Description 在一个大小为1000*1000的区域中,有n个固定点,m棵tree . 现在你要建一个围栏来保护tree,建它的费用为你选用的固定点的个数 *20和 你没有圈进围栏的tree* ...

  4. 解决nginx启动时域名解析失败而导致服务启动失败的问题

    问题: nginx启动或者reload的时候,会对proxy_pass后面的域名进行DNS解析,如果解析失败,启动就会失败或者reload失败. 我们是to B的产品,客户的环境可能是不通公网的,因此 ...

  5. 廖雪峰Java1-2程序基础-8字符和字符串

    1.字符类型char char是基本的数据类型 char:保存一个字符,如英文字符.中文字符. Java使用unicode表示字符,可以将char赋值给int类型,查看字符对应的unicode编码. ...

  6. php文件下载(解决文件下载后多几个字节的问题) 与封装成类的例子

    php文件下载比较常见,网上的资料比较多,在此不再强调怎么去实现(因为也是网上看的).下面主要说明的是下载代码的注意点. php下载文件主要是把文件以字节流直接输出,也就是echo fread($fi ...

  7. PHP PDO 预处理语句与存储过程

    很多更成熟的数据库都支持预处理语句的概念. 什么是预处理语句?可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制.预处理语句可以带来两大好处: 查询仅需解析(或预处理)一 ...

  8. javascript节点操作移出节点removeChild()

    removeChild(a)是用来删除文档中的已有元素 参数a:要移出的节点 <div id="guoDiv"> <span>1</span> ...

  9. jQuery屏蔽浏览器的滚动事件,定义自己的滚轮事件

    1.首先应用jQuery库 ,不做详细介绍 2引用jQuery的mousewheel库,这里面是这个库的源码,使用时直接拷贝过去就可以了: (function(a){function d(b){var ...

  10. SQL查询日期:

    SQL查询日期: 今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:select * from ...