工作流引擎四重罪
開源工作流引擎很多,主要以Activiti為主,後來有Camunda等等,但是這些工作流引擎有其基因問題,因為是基因問題,屬於原罪,也稱為四重罪:
1. 對於使用者來說,如果需要精通工作流引擎,必須同時掌握Java語言 BPMN XML語法和圖形符號,需要在這三者之間做到一一對應。 對參與人員的邏輯能力要求非常高,因為這些都是語言符號,只是表達邏輯的形式而已,不如直接用Java開發更簡單方便。
2. 工作流引擎耦合了業務和技術架構,將可靠性(事務)、高效能(Job執行)和業務流程捆綁在一起,比如Job執行的方式就很難擴充到分散式彈性Job方式就比較難。流程事務和技術事務混淆在一起。 隨著serverless和FaaS的興起,K8s + Istio + Knative等將雲架構技術將技術架構變成雲平臺的一部分,在此基礎上使用Knative實現事件驅動的flow流程就更具有擴充套件性和可伸縮性。
3. 工作流引擎違背六角形架構,按照六角形架構,業務核心不應該依賴REST或JMS或資料庫或介面等外圍,一些工作流引擎無法透過Spring那樣對許可權等多切面進行解耦,比如如今流行的OAuth和JWT其實已經剝離了許可權,但是很難結合到現有工作流引擎中,同理,有些工作流引擎依賴於分層架構,比如表單物件其實表單物件應該是一個領域模型物件,但是因為名稱Form原因在實際中要麼會依賴UI層,要麼依賴JPA層,有的人會將其耦合到SpringMVC的Controller或Struts的Action,這導致整個系統的擴充套件性完全喪失,幾乎很難過度到Spring Boot的微服務架構。
4. 將領域模型變成Map裡面的資料,是先有領域邊界?有界上下文?還是先有在這些上下文之間流動的流程呢?流程引擎預設是堅持後者,否定了有界上下文邊界,將領域邊界內的領域模型任意肢解成資料庫的資料,透過Java的Map攜帶,這種不尊重領域模型的極端做法未來必然行不通,只要動態流程,不要靜態結構了,沒有結構,就沒有不變,整個系統好像都可以變,其實是義大利麵條混亂不堪。思路應該是:以聚合根為主,在不同聚合根之間採取非同步的事件通訊,將這種事件通訊和流程管理器整合在一起,如Saga模式。
總結:
工作流引擎其實都是某個階段技術和業務的組裝者,但是由於技術不斷髮展,工作流引擎如果沒有實現模組化或分層化,那麼很難避免隨著技術發展不斷淘汰,使用者也是先嚐甜頭後再嘗苦頭,掉進坑裡,這也是工作流引擎不斷更新迭代,但是鮮有恆強者的原因,但是由於美妙市場的存在,使用者渴求不需要開發人員,以為自己動動滑鼠就能搞定政務系統或辦公系統。
在一個分散式服務環境下,如何整合排程服務走向,Spring cloud代表的微服務路由閘道器給出了一點答案,但是目前閘道器的路由還無法類似BPMN那樣透過XML進行各種流程邏輯組合,未來應該會有,K8s + Istio + Knative代表無伺服器架構就是一個方向。不過,BPMN本身思路方向可能有問題,希望拋棄程式碼和配置,用一套全新的語言表達整個業務流程概念,這種方式必然導致業務和技術的深度耦合。
以上只代表個人觀點。
1. 對於使用者來說,如果需要精通工作流引擎,必須同時掌握Java語言 BPMN XML語法和圖形符號,需要在這三者之間做到一一對應。 對參與人員的邏輯能力要求非常高,因為這些都是語言符號,只是表達邏輯的形式而已,不如直接用Java開發更簡單方便。
2. 工作流引擎耦合了業務和技術架構,將可靠性(事務)、高效能(Job執行)和業務流程捆綁在一起,比如Job執行的方式就很難擴充到分散式彈性Job方式就比較難。流程事務和技術事務混淆在一起。 隨著serverless和FaaS的興起,K8s + Istio + Knative等將雲架構技術將技術架構變成雲平臺的一部分,在此基礎上使用Knative實現事件驅動的flow流程就更具有擴充套件性和可伸縮性。
3. 工作流引擎違背六角形架構,按照六角形架構,業務核心不應該依賴REST或JMS或資料庫或介面等外圍,一些工作流引擎無法透過Spring那樣對許可權等多切面進行解耦,比如如今流行的OAuth和JWT其實已經剝離了許可權,但是很難結合到現有工作流引擎中,同理,有些工作流引擎依賴於分層架構,比如表單物件其實表單物件應該是一個領域模型物件,但是因為名稱Form原因在實際中要麼會依賴UI層,要麼依賴JPA層,有的人會將其耦合到SpringMVC的Controller或Struts的Action,這導致整個系統的擴充套件性完全喪失,幾乎很難過度到Spring Boot的微服務架構。
4. 將領域模型變成Map裡面的資料,是先有領域邊界?有界上下文?還是先有在這些上下文之間流動的流程呢?流程引擎預設是堅持後者,否定了有界上下文邊界,將領域邊界內的領域模型任意肢解成資料庫的資料,透過Java的Map攜帶,這種不尊重領域模型的極端做法未來必然行不通,只要動態流程,不要靜態結構了,沒有結構,就沒有不變,整個系統好像都可以變,其實是義大利麵條混亂不堪。思路應該是:以聚合根為主,在不同聚合根之間採取非同步的事件通訊,將這種事件通訊和流程管理器整合在一起,如Saga模式。
總結:
工作流引擎其實都是某個階段技術和業務的組裝者,但是由於技術不斷髮展,工作流引擎如果沒有實現模組化或分層化,那麼很難避免隨著技術發展不斷淘汰,使用者也是先嚐甜頭後再嘗苦頭,掉進坑裡,這也是工作流引擎不斷更新迭代,但是鮮有恆強者的原因,但是由於美妙市場的存在,使用者渴求不需要開發人員,以為自己動動滑鼠就能搞定政務系統或辦公系統。
在一個分散式服務環境下,如何整合排程服務走向,Spring cloud代表的微服務路由閘道器給出了一點答案,但是目前閘道器的路由還無法類似BPMN那樣透過XML進行各種流程邏輯組合,未來應該會有,K8s + Istio + Knative代表無伺服器架構就是一個方向。不過,BPMN本身思路方向可能有問題,希望拋棄程式碼和配置,用一套全新的語言表達整個業務流程概念,這種方式必然導致業務和技術的深度耦合。
以上只代表個人觀點。
[該貼被banq於2018-08-16 17:42修改過]
相關文章
- activiti工作流引擎元件元件
- 工作流引擎Oozie(二):coordinator
- Activiti工作流學習筆記(四)——工作流引擎中責任鏈模式的建立與應用原理筆記模式
- 工作流引擎架構設計架構
- 淺析LR.Net工作流引擎
- 工作流引擎的工作原理與功能
- 幾大主流工作流引擎對比
- OA軟體的核心:工作流引擎
- 瀏覽器核心渲染引擎工作流程瀏覽器
- 高效能工作流引擎:DataBuilder與polarisUI
- 開源表單工作流引擎好用嗎?
- Flowable - 6.6.0 更新說明 (主流工作流引擎)
- incident如何使用Golang構建工作流程引擎?IDEGolang
- 專案實踐之工作流引擎基本文件!Activiti工作流框架中流程引擎API和服務詳解框架API
- 基於 .NET 的開源工作流引擎框架框架
- Cadence:馴服複雜流程的工作流引擎
- 主流工作流引擎 flowable 三種方式部署流程
- Spring Boot 整合 Activiti 工作流引擎 極簡教程Spring Boot
- Learun FrameWork 強大工作流引擎,讓OA更智慧Framework
- 談談BPM、工作流引擎與OA的關係
- 馳騁工作流引擎-父子流程設計說明
- MySQL之四 儲存引擎MySql儲存引擎
- BPM系統,工作流引擎,表單引擎常用30個功能與常見問題
- 工作流引擎Activiti使用進階!詳細解析工作流框架中高階功能的使用示例框架
- 十分鐘認識Activiti6.0工作流引擎
- 輕量級工作流引擎的設計與實現
- LaravelFlow工作流引擎1.0正式版釋出[附教程]Laravel
- java Activiti 工作流引擎 SSM 框架模組設計方案JavaSSM框架
- 企業執行助推器——力軟工作流引擎軟工
- LeaRun.Java工作流引擎 快速開發業務流程Java
- Spring Boot (四)模板引擎Thymeleaf整合Spring Boot
- 工作流引擎在vivo營銷自動化中的應用實踐 | 引擎篇03
- 工作流引擎詳解!工作流開源框架ACtiviti的詳細配置以及安裝和使用框架
- 開源的.Net 工作流引擎Elsa初試——建立工作流伺服器和圖形化工作流配置管理應用伺服器
- .NETCore3.1+Vue.js打造的低程式碼工作流引擎NetCoreVue.js
- 今天講解下工作流引擎,希望對大家有幫助
- 馳騁CCFlow開源工作流程引擎如何設定PDF列印
- asp.net強大工作流引擎,learun助力開發升級ASP.NET