可擴充套件的工作流引擎設計

2021-07-09 02:06:35 字數 2552 閱讀 9061

一提到「流程」,各位看官就山呼海嘯——神啊救救我吧:報銷流程太慢了、流程五花八門、流程太不智慧型了等等。「工作流引擎」就是來解決這些問題的!

小生近日應聘,集體面試環節考察設計方面,針對熟悉領域做個方案答辯演講,於是嘔心瀝血倒騰出工作流的設計。在這裡把思路總結下來,僅僅是個思路,而且重點表達可擴充套件性。也曾經實現過輕型流程引擎,滿足常規需求沒這麼豐富。小生不才,拋磚引雞蛋,歡迎猛拍 ^d^

啥樣的工作流引擎,才叫牛叉?請看齊業界大名鼎鼎的jbpm、activiti、wwf等。我們想象中流程是逐條處理,那只能說想得太美了;現實業務往往要求更高,比如乙個主管帶2、30號兄弟,一周審批一次工時,就要求單使用者一次性批處理上百條流程,還要考慮多使用者併發。所以本文更強調高效能、可動態擴充套件。

對於身邊那些剪不斷、理還亂的各種流程,比如常見的「招聘流程」,如何讓計算機來管理?那就是流程建模!用機器語言表達業務流程。

為了全球範圍內規範流程管理,已有多個世界級組織,推行了很多任務作流標準。我了解過幾個,最熟悉的是bpmn,以下基於bpmn來看如何建立流程模型。建模標準可參考bpmn規範:

1.omg(object management group)定義的流程標準:bpmn(business process modeling notation)

2.wfmc(workflow management coalition)定義的流程標準:xpdl(xml - process definition language)

3.oasis(organization for the advancement of structured information standards)定義的流程標準:bpel(business process execution language)

要滿足上述建模要求,需要哪些功能來支撐?特別是bpmn的要素可謂廣而全,囊括了各種千奇百怪的流程,比如活動又分為迴圈、會簽、訊息、手工、指令碼、規則等等,閘道器又分為排他、多路、併發、事件、條件等等。

用什麼技術來實現上述需求?下圖主要表達「核心執行引擎」的實現:

1.工作流中介軟體主要模組:

流程上下文:好比足球運動中的球,貫徹整個任務過程,負責封裝業務資料、流程請求、響應、狀態資料;

流程應用程式:好比排兵布陣的教練員,負責排程流程過濾模組和活動處理器;

流程過濾模組:好比傳球隊員,每次任務由多個模組完成,負責處理事件、閘道器、連線的邏輯,決定流程走向;

活動處理器等:好比射門隊員,每次任務由乙個處理器完成,實現任務流轉。

2.每個模組均有介面層、應用服務層,基於ddd領域驅動設計思想。

3.為了滿足高效能,資料持久層使用記憶體快取,底層採用分布式雲平台架構。

重點來了!如何體現可擴充套件性?

譬如在前文的招聘流程中,用(上)戶(帝)要加兩條有點**的需求,一般系統無法滿足,只能擴充套件定製。

1.要求在終面環節,加權會簽評審,邏輯如下:

多人參與會簽評審,主管位高權重,一票抵三票;

各個評審者對應聘者打分1到100;

最終得分是所有評審者的加權平均分,80以及上視為面試通過。

2.在通知入職環節,原來有給應聘者發郵件,現在要求同時簡訊通知。

管道模型是神馬,怎麼擴充套件以上特殊需求?

談到擴充套件性,我們能想到的擴充套件性很好的框架是啥?沒錯,就是asp.net框架,經典的管道模型相容各種服務,神馬html、asp、webform、mvc,甚至、pdf、gis資訊等,無所不能!而且可以使用osgi的思想實現熱拔插動態擴充套件。

在管道模型中,足球(下圖圓點)從開球、傳球、射門各個環節,都可以被人為干預(擴充套件定製);甚至可以拆換動作細節,比如訓練時的標準(標準框架)射門動作是停球、抬腿、擊球,某場粉絲特別多的比賽中(具體專案),允許略裝逼,表演倒掛金鉤騰空射門。

1.擴充套件實現加權會簽需求:原來的射手表現一般,只需教練員(流程應用程式)強制將其換下,換上射手王(超強活動處理器)梅西!立即扭轉乾坤。

2.擴充套件實現簡訊通知需求:在足球傳到射手之前,再插個傳球隊員(簡訊事件模組),補傳一腳把足球更精準地送到射手腳下,必定輕鬆破門。

流程系統如何儲存資料?大概列了一下物件關係,具體實現還要細化。

本文構思參考了bpmn、jbpm、activiti、微軟wwf、asp.net框架。要努力爬上巨人的肩膀嘛,哈哈。

樂於分享,交流進步。

工作流引擎設計

工作流引擎設計 entworkflow 工作流主表 name code type isnull 主鍵entworkflowid intnot null 工作流名稱 workflowname varchar 50 not null 說明entworkflowobjectname varchar 255...

工作流引擎設計思路

http www.cyanine.cn 編輯 收藏引用 網摘 所屬分類 工作流技術 net開發心得 專案管理 系統設計 自開博以來不斷有朋友來 工作流引擎該如何設計 工作流的資料庫如何設計 應用筐架如何搭建等,這些問題其實都是很難有答案的。開發設計乙個工作流引擎是要能夠幫助客戶營造價值,而不是為了一...

工作流引擎設計思路

開發設計乙個工作流引擎是要能夠幫助客戶營造價值,而不是為了一時興趣實現某些技術特性。工作流管理聯盟 workflow management coalition,wfmc 早已定義了工作流技術的標準體系,但並未指明具體實現的方法。工作流引擎在實現方法上可以基於不同的軟體技術架構,引擎本身應該是與具體業...