工作流與PetriNet兩種節點的新詮釋

  作者:胡長城

     前兩天在給一個同事講解一個基於Petri Net工作流引擎的時候,如何理解place和transition,着實費了點勁。如果單純是PN的概念,到也容易,問題是基於PN的工作流引擎,其引申了兩種節點:一種是State,一種是Activity:其中state是演化自place,activity則演化自transition。

 
       在往下講解之前,讓我們現在回顧回顧PN的基本知識:Petri Net是對離散並行系統的數學表示,其是1960年代由C.A.佩特里發明的,適合於描述異步的、併發的計算機系統模型。Petri網既有嚴格的數學表述方式,也有直觀的圖形表達方式。
       在國外很多著名流程相關的文檔中,PN的數學表述用的很多,但可惜這些估計只有那些相關專業的研究生、博士生才能看得懂的,俺們一般開發人員,能夠領悟圖形Notation即可。
       經典的PN是簡單的過程模型,由兩種節點(庫所和變遷),及有向弧,以及令牌(Token)組成的。
       PN不光抽象了經典的過程模型,並描述了完備的支撐過程調度的算法:如果一個變遷的每個輸入庫所(input place)都擁有令牌,該變遷即爲被允許(enable)。一個變遷被允許時,變遷將發生(fire),輸入庫所(input place)的令牌被消耗,同時爲輸出庫所(output place)產生令牌
 
       不過今天不是來講PN的,只講過程模型的抽象的兩種基本節點:state和activity:一種節點是表述“前置狀態”,一種是“過程活動的抽象”。它們分別演化自PN的庫所(place)和變遷(transition)。在任何工作流系統中的節點,都是由這兩種節點擴展和演化而來的,不同的就是可能有些工作流定義模型中沒有state的抽象。
 
       這兩種節點在很多工作流定義模型中找到影子:最明顯的要數YAWL的Condition和Task節點。在XPDL中,Route節點有些類place的含義,不過不是很明顯。
 
       但注意,不要拿這個state與jbpm的state節點,或osworkflow的state概念相匹配。Jbpm的state實際上一種activity節點;而osworkfow的state則是其step+status的聯合表述。並且本文的所說的activity也不要僅僅聯繫到XPDL規範中的activity節點。—— 這裏所說的state和activity都是一種最基本節點的抽象描述,分別代表兩種Base類型節點。
 
       工作流中有兩個很重要的概念:狀態與生命週期。對於這兩種節點,他們也有各自的生命週期,以及不同生命週期階段的所反映的狀態。
       State節點的生命週期狀態是:initializtionrunningcompleted
       Activity節點的生命週期狀態是:initializtionactivedrunningcompleted(有的可能沒有running狀態)
 
       但是這兩種節點之間是有一些相互約束的,對於State節點來說,其能否從running狀態轉變爲completed,需要依賴於其後續的Activity節點是否能夠active;其實,這也就是上面所說的PN的調度算法。
 
       當然,對於很多工作流引擎所依賴的流程定義模型來說,其根本就沒有state節點一說。即使我們前面所提到的XPDL的route節點,你說他是activity也可以,很多工作流引擎本身就是作爲activity一種處理的。
 
       說道這,可能很多人會疑問了:有的流程定義模型還有forck、join等之類的於處理分支等等情況的節點。實際上,這些節點也依然是activity節點。其不僅是過程活動的抽象,而且其生命週期及約束也是與activity相同的。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章