测试环境
代码
单个性能测试
- 流程包括10个Service Task,每个Service Task只打印一行文字
- 只执行流程1次
- 采用默认的H2数据库
结果:
- activiti6.0.0每个任务耗时不到0.5毫秒,flowable也差不多
- 启动流程与结束流程耗时较多,大概在0.5秒这个数量级
activiti6日志: 16:04:46.544 开始测试. 16:04:46.819 start.-----打印任务正在执行-----1-----16:04:46.819 end. 16:04:46.819 start.-----打印任务正在执行-----2-----16:04:46.819 end. 16:04:46.820 start.-----打印任务正在执行-----3-----16:04:46.820 end. 16:04:46.820 start.-----打印任务正在执行-----4-----16:04:46.820 end. 16:04:46.820 start.-----打印任务正在执行-----5-----16:04:46.820 end. 16:04:46.820 start.-----打印任务正在执行-----6-----16:04:46.820 end. 16:04:46.820 start.-----打印任务正在执行-----7-----16:04:46.820 end. 16:04:46.821 start.-----打印任务正在执行-----8-----16:04:46.821 end. 16:04:46.821 start.-----打印任务正在执行-----9-----16:04:46.821 end. 16:04:46.821 start.-----打印任务正在执行-----10-----16:04:46.821 end. 16:04:47.222 测试结束。
并发性能测试
- 流程包括10个Service Task,每个Service Task只打印一行文字
- 并发执行流程100次
- 采用默认的H2数据库
- flowable6.4.1与activiti6.0.0使用相同的代码和相同的流程
结果: flowable执行流程100次,也就是1000个任务,共耗时1.12秒 activiti6执行流程100次,也就是1000个任务,共耗时1.07秒
flowable日志: 15:31:19.390 start.-----打印任务正在执行-----1-----15:31:19.390 end. 15:31:20.510 start.-----打印任务正在执行-----998-----15:31:20.511 end.
activiti日志: 15:53:05.398 start.-----打印任务正在执行-----1-----15:53:05.398 end. 15:53:06.462 start.-----打印任务正在执行-----988-----15:53:06.462 end. (可能我的并发代码不好,所以是998,不用关注)
并发性能测试(Mysql)
- 把H2改为MySQL,测试flowable
结果: flowable耗时1.24秒,和H2相对差不多,没有慢太多。
flowable日志: 16:36:55.773 start.-----打印任务正在执行-----1-----16:36:55.773 end. 16:36:57.017 start.-----打印任务正在执行-----991-----16:36:57.017 end.
高并发性能测试
- 把并发100提高到500和1000
- 只能使用mysql测试,H2会报错(估计是这个数据库有些限制啥的)
- flowable/activiti默认的数据库连接不够,要修改代码(设置为100个数据库连接)
结果:
- 500并发flowable耗时5.5秒,平摊到5k个任务,每个任务约1.1毫秒
- 1000并发flowable耗时11.5秒,平摊到1w个任务,每个任务约1.1毫秒
flowable日志: 16:41:02.198 start.-----打印任务正在执行-----1-----16:41:02.198 end. 16:41:07.701 start.-----打印任务正在执行-----4882-----16:41:07.701 end.
16:47:00.679 start.-----打印任务正在执行-----1-----16:47:00.679 end. 16:47:12.188 start.-----打印任务正在执行-----9820-----16:47:12.188 end.
结论
- flowable6和activiti6我简单测试的性能差不多,activiti6反而微小的领先,但其实基本一样
- 无论怎么测试,一个任务的耗时在0.5~1毫秒左右
- 高并发下对性能并没有什么影响
- 内存数据库与跨网络数据库的不同对性能没有什么影响
- 附录是冀正对flowable和activiti的性能测试,里面说flowable能优胜一倍,虽然和我的测试结果不同,但也有一定参考意义,也许是测试的场景不同差异会比较大 (明天继续对比一下两者的功能差异)
附录
flowable6.3功能以及性能基准测试报告 flowable异步历史性能基准测试