认识项目接口最好从官方文档开始,官方的GitHub仓库 现在官方已经停止更新维护了,看到在官方仓库中的文档,个人觉的比较简陋。
官方的仓库为:https://github.com/Netflix/conductor
个人Fork仓库:https://github.com/0x00-Li/conductor
项目是通过Gradle进行管理,并且依赖的多个中间件。对项目结构优化的目标是达到便于维护、迭代、应用的目标。
技术架构
本节会对Conductor 的技术架构进行分析,从技术概念和物理概念进行分析,便于对整个项目的运行以及内部运行的理解。
功能列表
流程
流程引擎默认是用DSL来编写流程定义文件,这是一种JSON格式的文件,我们的工作流案例就是以这个定义文件为驱动的,但是很可惜目前Conductor只支持手写定义,无法通过界面生成,这块就需要后面通过改造Conductor来增加相应功能。
任务
这里面包括的主要是和任务相关的功能,通过这个功能可以进行简单工作流的实现,还可以进行并行计算。
记录
如果想要查看之前进行过的(完成,失败等终态)历史任务,通过这个功能就可以实现。
监控
当工作流任务流程非常冗长的时候,我们对每个节点的任务运行情况并不了解,这时候就需要有一个任务监控功能及时知道流程的状态方便我们做出相应决策。同时还有一个重要功能是任务调度,通过这个功能可以实现类似xxl-job的功能,满足分布式定时调度的需求。
客户端和通信
这二个功能本是一体的,既然Conductor是分布式的任务流程那么核心原理就是通过Server+Worker的方式,利用核心状态机发消息的方式来驱动客户端的任务执行,而Worker的实现是跨语言的,可以用JAVA、Python、go等语言实现,而Worker需要长轮询Server端的状态来判断当然是否有自己的任务来执行。
管理后台
通过管理后台可以查看任务和工作流的元数据定义,工作流的执行状态等。
技术架构
涉及到的能力组件,相对比较复杂繁多。
开源项目结构分析
在前面做了项目简单的解释分析,这里会进行重点分类。
模块名 | 说明 |
---|---|
conductor-annotations | 保留原来的Conductor的注解 |
conductor-client | 和开源中的通能能力地位,在整体结构中就是执行具体工作的 |
conductor-client-spring | client基于spring的的starter的封装 |
conductor-common | 通用的工具包 |
conductor-core | 核心包 |
conductor-java-sdk | 对外提供的sdk |
conductor-rest | 对外提供的api接口 |
conductor-server | 服务端,包含编排等 |
conductor-persistence | 存储层,会包含mysql,es |
conductor-task | 任务层,主要包含系统任务和自定义任务 |
项目结构规范后,后续,将进行迭代开发