市場上比較有名的開源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。現在國內用的最多的是activiti、flowable、camunda,下面主要從功能和性能方面對flowable和camunda進行對比分析,給大家提供流程引擎選型參考。
一、功能方面對比
由於Flowable與Camunda好多功能都是類似的,因此在這里重點羅列差異化的功能
(1)camunda支持流程實例的遷移,比如同一個流程有多個實例,多個流程版本,不同流程實例運行在不同的版本中,camunda支持任意版本的實例遷移到指定的流程版本中,並可以在遷移的過程中支持從哪個節點開始。
(2)camunda基於PVM技術,所以用戶從Activii5遷移到camunda基本上毫無差異。flowable沒有pvm了,所以遷移工作量更大(實例的遷移,流程定義的遷移、定時器的遷移都非常麻煩)。
(3) camunda對於每一個CMD命令類都提供了權限校驗機制,flowable沒有。
(4)camunda繼續每一個API都有批處理的影子,flowable幾乎沒有。比如批量掛起流程、激活流程等,使用camunda可以直接使用API操作,使用Flowable則只能自己去查詢集合,然后循環遍歷集合並操作。
(5)camunda很多API均支持批處理,在批量處理的時候可以指定是異步方式操作或者是同步方式操作。異步的話定時器會去執行。Flowable沒有異步批處理的機制。比如批量異步刪除所有的歷史數據。
(6)camunda啟動實例的時候支持從哪個節點開始,而不是僅僅只能從開始節點運轉實例。Flowable僅僅只能從開始節點運轉實例。
(7)camunda支持任意節點的跳轉,可以跳轉到連線也可以跳轉到節點,並且在跳轉的過程中支持是否觸發目標節點的監聽器。flowable沒有改原生API需用戶去擴展。
(8)camunda支持雙異步機制,第一個異步即節點可以異步執行,第二個異步方式是:完成異步任務后,還可以繼續異步去執行任務后面的連線。所以稱之為雙異步機制,flowable只有第一種異步方式。
(9)camunda支持多種腳本語言,這些腳本語言可以在連線上進行條件表達式的配置,開箱即用。比如python、ruby、groovy、JUEL。flowable僅僅支持JUEL、groovy。開箱即用的意思就是如果想用python直接引入jython包就可以用了,不需要額外配置。
(10)camunda支持外部任務,比如我們有時候想在一個節點中執行調用第三方的API或者完成一些特定的邏輯操作,就可以使用外部任務,外部任務有兩種表,並支持第三方系統定期來抓取並鎖定外部任務,然后執行業務完畢之后,完成外部任務,流程實例繼續往下執行。外部任務的好處就是解決了分布式事物的問題。在flowable中我們可以使用httpTask任務,我個人更傾向於camunda外部任務,因為這個外部任務有外部系統決定什么時候完成,httpTask是不等待任務,實例走到這個節點之后,調用一個api就直接往下跑了,外部任務不會繼續往下跑,有外部系統去決定啥時候往下跑。
(11)camunda支持為用戶定制一些個性化的偏好查找API,比如張三每次查詢任務的時候,一般固定點擊某某三個查詢條件過濾數據,使用camunda就可以將這三個查詢條件進行持久化,下次張三來了,就可以直接根據他的偏好進行數據的過濾,類似機器學習。
(12)camunda支持歷史數據的批量刪除或者批量遷移到其他介質,比如批量遷移到es,flowable沒有該機制。
(13)camunda支持在高並發部署流程的時候,是否使用鎖機制,flowable沒有該機制。
(14) camunda支持單引擎多組合、多引擎多庫。flowable僅僅支持單引擎多組合。
(15) camunda支持流程實例跨流程定義跳轉,flowable沒有該機制。
(16) camunda支持分布式定時器,flowable沒有該機制。
(17) flowable支持nosql,camunda只有nosql的解決方案。
(18)camunda支持優化流程,以及了解流程引擎的瓶頸所在和每個環節的耗時,flowable沒有該機制。
(19) camunda修改了流程模板xml解析方式,相比flowable性能更好。
(20)camunda在解析流程模板xml的時候,去除了activiti5的雙解析機制,相對而言耗時時間更短。flowable沒有了pvm所以規避了雙解析機制。
(21)camunda可以在任意節點添加任意的屬性,flowable原生API沒有,需要自己擴展。
(22)camunda框架沒有為流程生成圖片的API(所有流程圖展示以及高亮均在前端動態計算),activiti5/6/flowable5/flowable6有圖片生成以及高亮的API.
(23)camunda可以在節點中定義定時作業的優先級,也可以在流程中進行全局優先級的定義。當節點沒有定義優先級的時候可以使用全局的優先級字段。activiti5/6/flowable5/flowable6沒有改功能。
(24)camunda可以再流程中定義流程的tag標記,activiti5/6/flowable5/flowable6沒有改功能。
(25)camunda/activiti5/6/flowable5/flowable6 均不支持國產數據庫,比如人大金倉 和 達夢。
(26)flowable6支持LDAP,openLDAP,camunda不支持。activiti5不支持。
二、性能方面對比
通過flowable和camunda多組對比測試,camunda性能比flowablet提升最小10%,最大39%,而且camunda無報錯,flowable有報錯,camunda在高並發場景下穩定性更好。
具體內容見:https://blog.csdn.net/wxz258/article/details/109030329
三、項目驗證
筆者從事工作流研發多年,用過osworkflow、jbpm、activiti、flowable、camunda等多個開源流程引擎,后來遇到了camunda,經過功能和性能驗證測試,最終選擇了camunda,開發了雲程低代碼開發平台(http://www.yunchengxc.com),在多個項目上進行驗證,性能和穩定性表現良好。