-
Notifications
You must be signed in to change notification settings - Fork 202
Home
Turbo是一款Java实现的轻量级流程引擎,提供了“定义流程,执行流程”的核心能力。基于Turbo,可以快速搭建面向各种场景的流程编排类系统或产品,接入简单,支持灵活扩展。
客服场景有一个特点,那就是面对各种业务各种场景解决用户的各类问题。在过去,客服解决用户的问题需要根据相关的培训和自身经验,在众多系统查询各个信息然后决策解决,解决用户问题的质量难以保证和统一,影响解决能力和用户体验,而且难以管理和运维。
因此,面对多样化的场景需求以及业务的不断发展迭代,并且为了保证客服对外服务的标准统一和质量达标,提升用户体验和管理效率,我们需要建设一套流程管理平台来配置标准的动态解决方案。在这类平台的底层,需要依赖流程引擎提供流程定义与流程执行的能力。
目前市面上的流程引擎,Activiti功能强大且有比较完整的生态,尤其是面向OA场景提供比较成熟的能力。但在一些场景中activiti优势并不明显,主要体现在以下几方面:
定位上:Activiti主要面向OA场景设计,提供的是平台产品能力。以客服的应用场景为例,使用方期望基于流程引擎搭建面向自己业务场景的业务及系统流程管理产品,对流程引擎只依赖流程执行和流程驱动的核心能力。因此,在Activiti的基础上进行封装业务产品的需求并不完全匹配,需要理解和适配其平台能力的实施成本也比较高。
功能上:(1) Activiti不支持回滚操作,需要上层产品自行设计和实现回滚能力;(2)网关节点不支持与上层产品进行数据交互,需要在网关节点判断分支之前刷新数据只能增加一个用户节点显式地提交数据;(3)Activiti数据不支持与上次提交数据合并,意味着上层调用时每次需要提交全量数据,上层需要额外存储和处理相关数据;
设计上:Activiti设计较为复杂,尤其在流程执行过程中需要频繁地进行存储层操作,导致其性能表现不佳,无法满足C端场景对性能的需求。
综上,我们设计并实现了一款支持回滚、轻量级库表操作且专注于流程驱动执行核心能力的流程引擎。
我们做了更加高内聚更为简洁的设计:
(1)轻量级的流程引擎(而非平台),负责提供稳定而高效的核心能力:支持流程定义,驱动流程执行,不耦合业务逻辑。
(2)由流程引擎支持流程回滚能力,无需上层产品实现。
(3)网关节点支持主动与上层使用方进行数据交互。
(4)流程执行过程中的记录统一处理,通过内存型上下文和执行后批量更新等设计,大幅降低库表操作,提升引擎性能。例如流程提交操作,与Activiti相比降低了70%的数据库操作。
整个Turbo的设计上分为以下几层:
(1)接口层
以接口方式对外提供流程引擎的核心能力,主要包括流程定义类能力(如流程定义、流程部署、流程模型及详情的查看等)和流程执行类能力(开始执行、提交任务、回滚任务、强制结束、查询流程执行的各种信息等)。
(2)核心处理层
负责整个流程引擎的核心逻辑,设计上分为流程定义和流程执行两类核心能力,分别通过流程定义处理器,流程执行处理器来实现。
(3)数据模型层
主要包括流程模型和执行实例。流程模型用于描述定义流程模型时的数据模型,主要包括流程定义记录和流程部署记录。执行实例用于描述执行时产生的实例数据,主要包括流程实例、节点实例、运行时数据。
(4)存储层
存储使用关系型数据库,默认为mysql数据库。
具体的使用方式可参见README中的快速开始
目前Turbo已经提供了流程定义与流程执行的核心能力,后续会针对特殊场景诸如并行网关以及子流程等相关功能的支持和完善。同时,也欢迎对Turbo感兴趣的同学参与进来,一起完善和改进。也希望Turbo早日发展成和Activiti比肩的顶级开源项目。