当前位置: 首页 > news >正文

流程引擎/状态机简介以及选型

状态机

状态机就是一个对象状态流转的规则。包含:对象状态的枚举有哪些、状态相互流转的条件是什么。

对于一些简单状态的流转,我们直接用代码(如枚举+条件判断)实现即可,无需使用服务编排、流程引擎做管理。直接代码实现的适用场景是:适合状态数量少(<10个)、流转逻辑简单的场景。

流程引擎

随着业务的扩展,对象状态的流转可能会变得越来越复杂,传统if-else代码会变成「面条代码」,难以维护。

这时候就需要引入流程引擎来做维护,可以通过可视化的页面或者DSL清晰管理。

DSL是指Domain-Specific Language,领域特定语言,例如使用某个中间件,这个中间件自己定义的语法,就是DSL。这种就需要自己学习一套语法,有学习成本。

使用流程引擎的场景或者好处:

  1. 更清晰的维护复杂状态的流转。
  2. 能够对状态流转做持久化,并进行监控,可以有更方便的监控面板。
  3. 可以进行自动重试、超时处理、补偿操作等等。
  4. 业务规则常调整(如新增「预售审核」节点),用引擎可热更新流程定义,避免硬编码发布。

缺点的话就是:

  1. 学习成本高,需要学习一套中间件的DSL语法,以及运行的原理。
  2. 维护成本高,复杂的中间件需要发布应用,维护一个流程引擎应用,还需要维护对应的库表等等。
  3. 增加了耗时,流程引擎对于规则的解析、服务的编排等等,都是有一定的耗时的。

常用的流程引擎中间件有:

  1. Camunda开源版,官方文档:https://docs.camunda.org/manual/7.17/,中文文档:http://camunda-cn.shaochenfeng.com/introduction/
  2. Flowable,官方文档:https://www.flowable.org/Flowable6.3,中文文档:https://tkjohn.github.io/flowable-userguide/
  3. Temporal https://temporal.io/
  4. Conductor https://docs.conductor-oss.org/index.html Netflix开源的
  5. Snaker,轻量级组件,官网已经没了……项目地址:https://github.com/snakerflow-starter/snakerflow-spring-boot-starter

流程引擎选型对比

使用成本
  1. Camunda:中高,需要管理47张表,数据库管理
  2. Flowable:中,需要管理47张表,数据库管理,但是比Camunda简单
  3. Temporal:高,是分布式架构,需维护Cassandra/MySQL + Elasticsearch,运维复杂。
  4. Conductor:中,需管理数据库/Redis,但比Temporal简单。
  5. Snaker:低,没有依赖。
学习成本
  1. Camunda:中,历经考验,网上能找到很多文档学习。
  2. Flowable:中,历经考验,网上能找到很多文档学习。
  3. Temporal:高,国内使用的少,参考资料少;中文学习不友好,全是视频。
  4. Conductor:中高,国内使用的少,参考资料少。
  5. Snaker:中,简单,但是是社区维护。
分布式支持
  1. Camunda:支持嵌入式、容器内、独立部署。
  2. Flowable:支持嵌入式和独立部署。
  3. Temporal:独立部署。
  4. Conductor:独立部署。
  5. Snaker:嵌入式。

嵌入式说明:
在这里插入图片描述
容器内说明:
在这里插入图片描述

独立部署说明:
在这里插入图片描述

可视化支持
  1. Camunda:Camunda Modeler建模工具
  2. Flowable:类似Camunda,需要单独部署Modeler应用;也有IDE的插件。
  3. Temporal:有UI工具。
  4. Conductor:需要支持node14,然后自行在容器上安装UI。
  5. Snaker:支持图形化流程设计。
运行耗时
  1. Camunda:快,基于BPMN 2.0,解析XML有一定开销,但优化后性能尚可。
  2. Flowable:快,Camunda分支,优化了执行引擎,比Camunda稍快。
  3. Temporal: 慢(事件溯源有延迟),基于Event Sourcing,每次状态变更需持久化,但分布式扩展性强。
  4. Conductor: 快(依赖外部存储),任务调度依赖数据库,高负载时可能变慢。
  5. Snaker:最快,纯Java实现,无复杂BPMN解析,适合简单流程。
并发支持(独立部署情况下)
  1. Camunda:中,依赖DB锁。
  2. Flowable:中高,相比于Camunda,优化了锁机制。
  3. Temporal: 高,基于Cassandra/MySQL,横向扩展能力强,适合超大规模。
  4. Conductor: 高,基于Redis/Elasticsearch,任务分片能力强。
  5. Snaker:单机。
稳定性
  1. Camunda:高,企业级,久经考验。有版本灰度发布机制。
  2. Flowable:高,企业级,久经考验。有版本灰度发布机制。
  3. Temporal:极高,有自动故障恢复机制;有版本灰度发布。
  4. Conductor: 高,有版本灰度发布。
  5. Snaker:低,社区维护。
社区活跃度
  1. Camunda:高,企业维护,有付费版。
  2. Flowable:高,企业维护,有付费版,但是开源版维护不及时,主要维护付费版。
  3. Temporal: 中,企业维护,但是国内用的不多。
  4. Conductor: 中,企业维护,但是国内用的不多。
  5. Snaker:低,开源,无官网。

相关文章:

  • Centos7安装cat美化工具lolcat
  • 使用 flutter_blue_plus 连接蓝牙
  • 3月28号
  • Redis:Hash 类型 内部实现、命令及应用场景
  • 51c嵌入式~MOS~合集1
  • 计算机网络基础:网络流量工程与优化策略
  • Three.js 快速入门教程【二十】3D模型加载优化实战:使用gltf-pipeline与Draco对模型进行压缩,提高加载速度和流畅性
  • Kafka 偏移量
  • python-59-基于python内置库解析html获取标签关键信息
  • python项目整体文件和依赖打包
  • ​Flink/Kafka在python中的用处
  • 局域网共享失败?打印机/文件夹共享工具
  • 机器学习中的数学知识
  • 【 C 语言实现顺序表的基本操作】(数据结构)
  • 使用matlab进行分位数回归
  • 三数之和
  • B494:开关电源领域的PWM控制新星
  • [特殊字符] AI 编程工具推荐与场景指南 ——提升研发效率的智能助
  • 练习题:109
  • 【机密计算顶会解读】12:机密提示——保护云LLM推理服务中的用户提示词
  • 第十二届警博会在京开幕:12个国家和地区835家企业参展
  • 第78届戛纳电影节开幕,罗伯特·德尼罗领取终身成就奖
  • 视频|王弘治:王太后,“先天宫斗圣体”?
  • 违法违规收集使用个人信息,爱奇艺、轻颜等65款App被点名
  • 男子退机票被收90%的手续费,律师:虽然合规,但显失公平
  • 扶桑谈|从石破茂“越菲行”看日本周边外交布局战略新动向