針對(duì)自動(dòng)工作流系統(tǒng)使用傳統(tǒng)SOA建模工具存在的效率低下等問題,提出了一種基于Petri網(wǎng)思想進(jìn)行SOA架構(gòu)應(yīng)用的方法,并從使用Petri建模進(jìn)行服務(wù)識(shí)別和使用Petri中間件進(jìn)行流程管理這2個(gè)方面詳細(xì)闡述了SOA架構(gòu)應(yīng)用的具體內(nèi)容,為此類工作流系統(tǒng)進(jìn)行SOA架構(gòu)應(yīng)用改造提供了參考。
【關(guān)鍵詞】面向服務(wù)的體系結(jié)構(gòu) 服務(wù)識(shí)別 Petri 工作流 中間件
SOA(Service-Oriented Architecture,面向服務(wù)的體系結(jié)構(gòu))是構(gòu)造分布式計(jì)算的應(yīng)用程序的方法,它將應(yīng)用程序功能作為服務(wù)發(fā)送給最終用戶或者其他服務(wù),通常認(rèn)為 SOA是一種技術(shù)架構(gòu)或者架構(gòu)風(fēng)格。基于這種架構(gòu),業(yè)務(wù)流程或業(yè)務(wù)的變化可以通過服務(wù)編排調(diào)整快速適應(yīng),實(shí)現(xiàn)業(yè)務(wù)的敏捷性。隨著SOA的快速發(fā)展,基于 SOA架構(gòu)的中間件產(chǎn)品也成為網(wǎng)絡(luò)化商業(yè)系統(tǒng)的主要設(shè)計(jì)思路。
由于企業(yè)的業(yè)務(wù)現(xiàn)狀、遠(yuǎn)景需求及IT系統(tǒng)現(xiàn)狀等的差異,SOA架構(gòu)存在不同的構(gòu)建思路,但一般來說,SOA的開發(fā)、維護(hù)和使用的基本原則可以歸納為:
(1)可重復(fù)使用,模組性,可組合性,構(gòu)件化以及具有交互操作性;
(2)服務(wù)的識(shí)別和分類,提供和發(fā)布,監(jiān)控和跟蹤;
(3)符合開放標(biāo)準(zhǔn)(通用的或行業(yè)的)。
從基本原則可以看出,SOA架構(gòu)的重點(diǎn)是要找到可重用的服務(wù),同時(shí)這些服務(wù)滿足離散、自治和無狀態(tài)等基本條件;其次是服務(wù)本身可以組合和編排,以滿足流程整合的需要。
2 SOA服務(wù)識(shí)別的難點(diǎn)
SOA參考架構(gòu)可總結(jié)為業(yè)務(wù)能力組件化及組件能力的服務(wù)化。服務(wù)識(shí)別的過程是通過自頂向下的分析,可以將流程的功能點(diǎn)逐層細(xì)分,直到最后一級(jí)的原子能力,再通過原子能力按照SOA架構(gòu)的思想自底向上逐層組裝,分析出可以重用的能力,重新編排為服務(wù)。
服務(wù)識(shí)別是SOA架構(gòu)實(shí)施的難點(diǎn)之一。因?yàn)楫?dāng)實(shí)施SOA架構(gòu)時(shí),業(yè)務(wù)系統(tǒng)一般已經(jīng)具有一定規(guī)模,業(yè)務(wù)人員以及技術(shù)人員對(duì)業(yè)務(wù)系統(tǒng)的系統(tǒng)劃分、模塊劃分已經(jīng)有一定約定俗成的概念,容易先入為主。無論是往下的逐層細(xì)分,還是向上的逐層組裝,都需要參考SOA架構(gòu)做出思維上的改變。
因此,需要引入一些成型的流程建模工具來引導(dǎo)這個(gè)過程。目前SOA的服務(wù)識(shí)別有很多成型工具和模式,比如BPM(Business Process Management,業(yè)務(wù)流程管理)和BPEL(Business Process Execution Language,業(yè)務(wù)流程執(zhí)行語言),但是這些工具和模式也并非適合所有的系統(tǒng)。一方面,建模工具本質(zhì)上是用于輔助設(shè)計(jì),這些企業(yè)級(jí)別的工具和模式覆蓋面過于大,復(fù)雜程度高,分析的周期也較長,對(duì)于自動(dòng)工作流較多的系統(tǒng),輔助設(shè)計(jì)過程中往往需要較為簡單輕巧的工具;另一方面,純?cè)O(shè)計(jì)層次的建模與有工作流引擎參與的建模實(shí)際是存在不同的,完成服務(wù)識(shí)別后,再轉(zhuǎn)化為可以為工作流引擎使用的服務(wù)也比較困難。
3 Petri網(wǎng)思想在SOA架構(gòu)中的應(yīng)用
SOA架構(gòu)設(shè)計(jì)本身是一種思維改變的過程,已經(jīng)成型的系統(tǒng)會(huì)存在很多固定的模塊劃分和功能劃分,造成SOA實(shí)施困難,需要采用一些建模工具來輔助思維。使用建模工具進(jìn)行建模時(shí),應(yīng)該覆蓋2個(gè)要點(diǎn):首先,建模工具是輔助設(shè)計(jì)的過程,選擇合適的建模工具是必要的;其次,純?cè)O(shè)計(jì)方式流程建模和SOA 的建模方式是有所區(qū)別的。建模工具既要符合SOA的設(shè)計(jì)模式,也要貼近目前的業(yè)務(wù)實(shí)際,更要讓建模的結(jié)果在SOA工作流引擎中能夠無縫銜接。
Petri網(wǎng)是分布式系統(tǒng)的建模和分析工具,可以清晰地描述系統(tǒng)中的進(jìn)程和功能模塊的順序[1]。研究領(lǐng)域趨向認(rèn)為Petri網(wǎng)是所有流程定義語言之母,理論上所有的流程建模工具使用的方法都可以用Petri網(wǎng)的概念來表達(dá)。由于Petri網(wǎng)相對(duì)BPM和BPEL這些工具更為簡單及靈便,因此用于描述流程上相對(duì)簡單的自動(dòng)工作流系統(tǒng),則更具有明顯的優(yōu)勢。
相對(duì)于BPM和BPEL這些工具,Petri建模的優(yōu)勢在于:一方面,建模元素比較簡單,更加注重流程本身;另一方面,代碼邏輯和Petri圖能夠一一對(duì)應(yīng),可以更加有效地利用原有的應(yīng)用實(shí)現(xiàn)而不用擔(dān)心全部推倒重來。
3.1 Petri建模介紹
Petri網(wǎng)是對(duì)離散并行系統(tǒng)的數(shù)學(xué)表示[2],作為一種能夠用來有效地分析系統(tǒng)的并發(fā)、異步和不確定行為[3],并能有效描述系統(tǒng)靜態(tài)和動(dòng)態(tài)的圖形化模型,Petri網(wǎng)被廣泛應(yīng)用于生產(chǎn)制造領(lǐng)域、計(jì)算機(jī)領(lǐng)域、過程控制和專家系統(tǒng)等領(lǐng)域。Petri網(wǎng)既有嚴(yán)格的數(shù)學(xué)表述方式,也有直觀的圖形表達(dá)方式。
Petri網(wǎng)是過程模型,由庫所和變遷兩類節(jié)點(diǎn)、有向弧以及令牌等元素組成。
(1)Petri網(wǎng)的元素定義
◆庫所(Place):圓形節(jié)點(diǎn);
◆變遷(Transition):方形節(jié)點(diǎn);
◆有向弧(Arc):庫所和變遷之間的有向弧;
◆令牌(Token):庫所中的動(dòng)態(tài)對(duì)象,可以從一個(gè)庫所移動(dòng)到另一個(gè)庫所。
(2)Petri網(wǎng)的規(guī)則
◆有向弧是有方向的;
◆兩個(gè)庫所或變遷之間不允許有弧;
◆庫所可以擁有任意數(shù)量的令牌。
如果一個(gè)變遷的每個(gè)輸入庫所(input place)都擁有令牌,該變遷即為被允許(enable)。一個(gè)變遷被允許時(shí),變遷將發(fā)生(fire),輸入庫所(input place)的令牌被消耗,同時(shí)為輸出庫所(output place)產(chǎn)生令牌。
3.2 使用Petri建模進(jìn)行服務(wù)識(shí)別
Petri網(wǎng)模型本身具有子網(wǎng)的概念,可以將變遷逐層下轉(zhuǎn)到最底層的原子變遷,也可以將所有Petri子網(wǎng)模型合成一個(gè)更大的Petri網(wǎng)模型,用來描述整個(gè)系統(tǒng)的動(dòng)態(tài)行為模型[4],這與SOA服務(wù)識(shí)別的過程是高度契合的。
(1)子網(wǎng)逐層向下分解
用Petri建模的思想,可以通過“映射”的思想和方法,按目前的詳細(xì)設(shè)計(jì)或者代碼邏輯將應(yīng)用模塊用Petri圖畫出。Petri網(wǎng)中的庫所元素映射為程序數(shù)據(jù),Petri網(wǎng)中的變遷元素映射為程序函數(shù)和方法,系統(tǒng)模型中的各對(duì)象子網(wǎng)映射為程序中的類[5]。對(duì)主要以數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)工作流的程序,按照程序的狀態(tài),Petri網(wǎng)的建模一般如圖1所示:
圖1 數(shù)據(jù)處理程序狀態(tài)的建模
Petri網(wǎng)的每個(gè)變遷都可以理解成子網(wǎng),特別是針對(duì)圖1的數(shù)據(jù)處理的變遷,也可以按照代碼的實(shí)際邏輯,分解成如圖2所示的子網(wǎng):
圖2 數(shù)據(jù)處理子網(wǎng)的建模
上圖的每個(gè)變遷也可以繼續(xù)理解成子網(wǎng)的概念,按照代碼邏輯繼續(xù)往下建模,直到變遷不可再繼續(xù)細(xì)分,這正符合了SOA逐層細(xì)分的理念。
(2)變遷組裝成服務(wù)
SOA服務(wù)要求具備可重用性,需要將可重用的組件能力開放為服務(wù),這個(gè)可以映射為Petri可重用的子網(wǎng)。將每個(gè)變遷細(xì)化到“原子”級(jí)別的變遷后,首先需要對(duì)變遷進(jìn)行分析,通過對(duì)變遷的輸入輸出令牌進(jìn)行抽象,將能抽象成相同輸入輸出令牌的變遷視為一種服務(wù),則這個(gè)變遷具備了SOA要求的可重用性。
重用度最高的同時(shí)也最容易分析的是系統(tǒng)底層的原子能力,如操作系統(tǒng)資源、數(shù)據(jù)庫操作的服務(wù),這些服務(wù)目前已經(jīng)有成型的模式,此處不再贅述,主要難點(diǎn)在于業(yè)務(wù)級(jí)別的服務(wù)分析。對(duì)于業(yè)務(wù)級(jí)別的服務(wù)分析,重點(diǎn)應(yīng)關(guān)注應(yīng)用處理數(shù)據(jù)的狀態(tài)。
圖1示意了進(jìn)程級(jí)別程序狀態(tài)的建模,如果將數(shù)據(jù)狀態(tài)的部分抽離出來,進(jìn)一步考慮這個(gè)數(shù)據(jù)在整個(gè)應(yīng)用中的狀態(tài),可以形成如圖3所示的處理過程(忽略了異常處理):
圖3 Petri針對(duì)系統(tǒng)中數(shù)據(jù)狀態(tài)的建模
圖4是進(jìn)程級(jí)別數(shù)據(jù)狀態(tài)的建模,結(jié)合前文第一步子網(wǎng)逐層往下分解的結(jié)果,可以將整個(gè)數(shù)據(jù)處理的過程形成一張大的Petri網(wǎng)模型,然后對(duì)這張Petri網(wǎng)模型進(jìn)行分析,就可以進(jìn)行服務(wù)的識(shí)別。
圖4 服務(wù)按照服務(wù)狀態(tài)和數(shù)據(jù)狀態(tài)的建模
服務(wù)識(shí)別的過程可以按照以下步驟進(jìn)行:
◆可重用性分析:橫向與其他數(shù)據(jù)的處理邏輯比較,通過Key-Value的方式對(duì)變遷輸入輸出的抽象,整理出可以重用的變遷,也就是可以轉(zhuǎn)化為服務(wù)的變遷。
◆服務(wù)粒度設(shè)計(jì):服務(wù)是需要通過工作流引擎來進(jìn)行流程控制的,變遷的粒度不應(yīng)該太細(xì)。如果太細(xì),可能會(huì)影響整個(gè)數(shù)據(jù)處理的性能,需要在流程監(jiān)控與性能之間做權(quán)衡的考慮。
◆數(shù)據(jù)流程監(jiān)控分析:有些變遷雖然不可重用,但由于需要對(duì)數(shù)據(jù)的流程進(jìn)行監(jiān)控,需要將它轉(zhuǎn)化為服務(wù)。
◆服務(wù)的校驗(yàn):完成服務(wù)的識(shí)別后,可以通過Petri建模對(duì)服務(wù)進(jìn)行建模。一方面,需要對(duì)模型本身進(jìn)行校驗(yàn),Petri可以提供形式化方法,以數(shù)學(xué)為理論基礎(chǔ),為系統(tǒng)設(shè)計(jì)的正確性、安全性提供了一種有效的驗(yàn)證手段[6];另一方面,需要考慮是否滿足工作流引擎的需要,對(duì)于自動(dòng)工作流的系統(tǒng),服務(wù)的Petri模型一定是同時(shí)關(guān)注服務(wù)狀態(tài)和數(shù)據(jù)狀態(tài)的(見圖4),如果不滿足這個(gè)條件,那么服務(wù)是無法被工作流引擎所調(diào)度的。
使用Petri建模將變遷組裝成服務(wù),可以很好地貫徹SOA組件能力開放為服務(wù)能力的理念,可重用的組件能力映射為可重用的子網(wǎng),服務(wù)接口的抽象可以映射為輸入令牌和輸出令牌的抽象。由于Petri網(wǎng)建模的本質(zhì)就是事件驅(qū)動(dòng)的概念,因此能夠符合工作流中間件的邏輯,也便于工作流中間件對(duì)服務(wù)控制和監(jiān)控。
3.3 使用Petri中間件進(jìn)行流程管理
使用Petri的另外一個(gè)優(yōu)勢就是可以采用引入中間件的概念,構(gòu)建內(nèi)部的流程管理平臺(tái)。Petri的令牌驅(qū)動(dòng)模式能夠很好地抽象自動(dòng)流程較多的系統(tǒng)。對(duì)于流程管理,其核心是判斷流程中的每個(gè)環(huán)節(jié)下一步該做什么,這點(diǎn)可以通過Petri圖令牌的當(dāng)前位置來體現(xiàn),如果某變遷的上游庫所都有令牌,則接收上游庫所的令牌,觸發(fā)變遷點(diǎn)火,再由變遷將下游所有庫所的令牌屬性賦值。
按照上述思路可以構(gòu)建一個(gè)Petri中間件,在界面上進(jìn)行Petri建模,并定義好變遷的輸入輸出。應(yīng)用(HLA)使用中間件提供的API進(jìn)行研發(fā)。實(shí)際運(yùn)行時(shí),應(yīng)用通過中間件的Agent與Master進(jìn)行交互,完成流程控制與流程監(jiān)控的目的,如圖5所示:
圖5 Petriware中間件體系架構(gòu)
(1)Petri中間件的功能架構(gòu)
由于Petri本身就是使用事件驅(qū)動(dòng)的概念來進(jìn)行建模,所以在SOA服務(wù)用Petri完成建模后,直接可以為Petri中間件服務(wù),不需要考慮設(shè)計(jì)層面的服務(wù)與有中間件參與的服務(wù)的轉(zhuǎn)變。Petri的建模圖形也完全可以表達(dá)應(yīng)用邏輯,通過應(yīng)用與中間件的交互,做到對(duì)于流程和應(yīng)用的監(jiān)控。
Petri中間件的功能架構(gòu)如圖6所示:
圖6 Petri中間件的功能架構(gòu)
Petri中間件由Petri網(wǎng)建模、Petri網(wǎng)調(diào)度控制、Petri網(wǎng)接入服務(wù)、監(jiān)控服務(wù)組成,各功能模塊的功能簡述如下:
◆Petri網(wǎng)建模:以Petri網(wǎng)數(shù)據(jù)模型為基礎(chǔ),提供Petri網(wǎng)設(shè)計(jì)與配置的可視化設(shè)計(jì)管理工具;
◆Petri網(wǎng)調(diào)度控制:以Petri網(wǎng)設(shè)計(jì)與配置為依據(jù),驅(qū)動(dòng)令牌在庫所間進(jìn)行流轉(zhuǎn)的同時(shí)實(shí)現(xiàn)業(yè)務(wù)邏輯控制與實(shí)現(xiàn);
◆Petri網(wǎng)接入服務(wù):以標(biāo)準(zhǔn)化的API接口,統(tǒng)一規(guī)范應(yīng)用的接入,降低系統(tǒng)應(yīng)用與控制的耦合性;
◆監(jiān)控服務(wù):以Petri網(wǎng)為基礎(chǔ),對(duì)系統(tǒng)進(jìn)行抽象并分層監(jiān)控與管理,展示系統(tǒng)運(yùn)行態(tài)全境。
(2)Petri中間件調(diào)度控制
在系統(tǒng)流程的開發(fā)中,中間件可將應(yīng)用作為令牌(業(yè)務(wù)數(shù)據(jù))的處理者,應(yīng)用負(fù)責(zé)消耗中間件分配的令牌,完成指定的業(yè)務(wù)邏輯,并生成新的令牌反饋業(yè)務(wù)處理結(jié)果。因此,在流程的處理中,可以認(rèn)為變遷是業(yè)務(wù)能力在Petri圖中的表示元素,其與應(yīng)用之間存在特定的對(duì)應(yīng)關(guān)系。
在流程的設(shè)計(jì)階段,根據(jù)業(yè)務(wù)流程控制的需要,設(shè)計(jì)者需為流程中不同的變遷指定待實(shí)現(xiàn)的功能,并為其指定輸入與輸出的內(nèi)容。即設(shè)計(jì)者需為業(yè)務(wù)能力,也就是變遷指定輸入內(nèi)容(輸入令牌屬性)、輸出內(nèi)容(輸出令牌屬性)。
在流程的運(yùn)行階段,中間件根據(jù)已設(shè)計(jì)流程配置,驅(qū)動(dòng)令牌在不同變遷間的流轉(zhuǎn),以完成業(yè)務(wù)功能。即中間件負(fù)責(zé)指導(dǎo)應(yīng)用接下來的變遷,并將上游變遷輸出的令牌發(fā)送給應(yīng)用程序;應(yīng)用程序接收到中間件發(fā)送的應(yīng)該執(zhí)行的變遷以及發(fā)送的令牌后,從令牌中獲取設(shè)計(jì)時(shí)指定的令牌屬性,進(jìn)行相應(yīng)的業(yè)務(wù)處理。應(yīng)用程序業(yè)務(wù)處理結(jié)束后,中間件負(fù)責(zé)告知應(yīng)用程序,新增令牌并設(shè)置設(shè)計(jì)時(shí)指定的令牌屬性后,將令牌發(fā)送給中間件。
4 結(jié)束語
由于自動(dòng)工作流較多的系統(tǒng)偏向于數(shù)據(jù)的流轉(zhuǎn),在這類系統(tǒng)中使用目前常用的建模工具會(huì)使服務(wù)識(shí)別過程過于復(fù)雜和繁瑣。Petri建模是從子網(wǎng)到原子變遷的逐層分解、再由變遷組裝成服務(wù),其整個(gè)過程符合SOA架構(gòu)設(shè)計(jì)的原則,將Petri建模應(yīng)用于SOA服務(wù)識(shí)別,可簡化分析過程,提高架構(gòu)設(shè)計(jì)的效率;同時(shí),在開發(fā)過程中可以用Petri構(gòu)建中間件,直接用于SOA的流程監(jiān)控和業(yè)務(wù)監(jiān)控。因此,基于Petri建模在自動(dòng)工作流較多的系統(tǒng)中存在優(yōu)勢。如果進(jìn)一步考慮Petri與SOA架構(gòu)中ESB理念結(jié)合,Petri網(wǎng)也可以在ESB模式中有相當(dāng)廣闊的前景。
相關(guān)論文