廖國(guó)棟,肖玉容
(1.亞信科技(南京)有限公司,江蘇 南京 210016;2.江蘇省電信公司,江蘇 南京 320100)
一個(gè)Petri 網(wǎng)是特殊的一種定向圖,最初的狀態(tài)叫做最初記號(hào)M0。
由2 種節(jié)點(diǎn)組成,叫庫(kù)所和變遷。庫(kù)所是由圓圈來(lái)表示(S-圓圈),而變遷用條狀或者方塊表示(t-方框)。
從庫(kù)所到變遷,或則從變遷到庫(kù)所的弧形(F-有向?。?,稱之為流關(guān)系。弧上標(biāo)注它的權(quán)值(正整數(shù)),如一個(gè)弧標(biāo)注的是K,可以解釋為K 條平行線的集合(token 的消耗值)。統(tǒng)一權(quán)值的標(biāo)記通??梢允÷?。
如果一個(gè)標(biāo)記(狀態(tài))分配一個(gè)庫(kù)所P 一個(gè)非負(fù)的整數(shù)K,我們說P 被標(biāo)記為K 托肯,將K 個(gè)黑點(diǎn)(托肯)在庫(kù)所P 中。一個(gè)標(biāo)記用M 表示,一個(gè)m 向量,m 表示庫(kù)所的總數(shù)。
M 的第P 個(gè)成分,表示為M(p),是在庫(kù)所P 中托肯的總數(shù)。
一個(gè)Petri 網(wǎng)是一個(gè)五元組,PN=(P,T,F(xiàn),W,M0)其中:P={P1,P2,……,Pm}是定義一個(gè)庫(kù)所集合,T={T1,T2,……,Tn}是定義一個(gè)變遷的集合,F(xiàn)∈(P×T)∪(T×P)是定義弧(流動(dòng)關(guān)系)的集合,W:F→{1,2,3,…}是權(quán)值函數(shù),M0:P→{0,1,2,3,…}是初始標(biāo)記,P∩T=Ф 并且P∪T≠Ф。
一個(gè)Petri 網(wǎng)結(jié)構(gòu)N=(P,T,F(xiàn),W)沒有任何特殊的最初的標(biāo)記用N 表示。
一個(gè)Petri 網(wǎng)有最初的標(biāo)記是(N,M0)。具體如圖1 所示。
petriware 中間件體系架構(gòu)圖如圖2 所示。
對(duì)中間件來(lái)說,待處理的任務(wù)是一種資源,處理能力(例如部署的業(yè)務(wù)進(jìn)程)也是一種資源,處理任務(wù)所需的CPU,內(nèi)存也是資源,所以面向業(yè)務(wù)層的代理Agent 須向中間件的masterserver 上報(bào)可用的資源(例如啟動(dòng)業(yè)務(wù)進(jìn)程,或者某個(gè)節(jié)點(diǎn)空閑的內(nèi)存數(shù)都可以作為資源)上報(bào)后,資源作為特殊類型的令牌存在中間件中,根據(jù)petri 圖來(lái)消耗資源(例如進(jìn)程被用于處理業(yè)務(wù)數(shù)據(jù),或者內(nèi)存被使用存放零時(shí)數(shù)據(jù))與回收釋放資源(例如進(jìn)程處理完成,內(nèi)存被釋放)。HLA(High level Application)代表具體業(yè)務(wù)實(shí)現(xiàn)的應(yīng)用,HLA 和中間件master之間通過Agent 來(lái)交互,HLA 通過調(diào)用中間件的API,從而屏蔽了Agent 和中間件在網(wǎng)絡(luò)上的數(shù)據(jù)的數(shù)據(jù)交互,使得中間件可以和應(yīng)用程序解耦和。
petriware 中間件功能架構(gòu)圖如圖3 所示。
Petri 中間件由Petri 網(wǎng)建模、Petri 網(wǎng)調(diào)度控制、Petri 網(wǎng)接入服務(wù)、監(jiān)控服務(wù)組成,其各功能模塊的功能簡(jiǎn)述如下。
2.2.1 Petri 網(wǎng)建模
Petri 網(wǎng)建模以Petri 網(wǎng)數(shù)據(jù)模型為基礎(chǔ),提供Petri 網(wǎng)設(shè)計(jì)與配置的可視化設(shè)計(jì)管理工具。
圖1 Petri 網(wǎng)
圖2 中間件體系架構(gòu)
圖3 中間件功能架構(gòu)
(1)Petri 網(wǎng)設(shè)計(jì)。
Petri 網(wǎng)為petir 控制圖的建模提供可視化的操作工具,即實(shí)現(xiàn)Petri 網(wǎng)可見即可得的設(shè)計(jì)工具。
?支持Petri 網(wǎng)數(shù)學(xué)模型的控制圖設(shè)計(jì),即設(shè)計(jì)基本元素需包括:變遷、有向弧、抑制狐、庫(kù)所、令牌。
?支持基本模型元素的拖拽功能;可根據(jù)petri 網(wǎng)設(shè)計(jì)的需要,直接拖拽基本模型元素到編輯頁(yè)面上,進(jìn)行相關(guān)數(shù)據(jù)配置。
?支持模型元素的布局拖拽功能。即通過拖拽,調(diào)整模型元素的布局。
?支持能過界面選擇模型元素,進(jìn)行屬性設(shè)置;如雙擊或右鍵菜單,進(jìn)行模型元素屬性的設(shè)置界面。
?支持petri 網(wǎng)復(fù)制功能。即從選擇現(xiàn)有的petri 網(wǎng)模型進(jìn)行復(fù)制,形成的petri 網(wǎng)。
?支持子網(wǎng)的設(shè)計(jì)。子網(wǎng)在父網(wǎng)上體現(xiàn)為變遷,且子網(wǎng)必須有一個(gè)有輸入變遷與一個(gè)輸出變遷。
?支持子網(wǎng)的逐層查看功能,從總圖層層深入,進(jìn)入相關(guān)的子圖查看。即從界面上點(diǎn)擊變遷,進(jìn)行子網(wǎng)進(jìn)行模型瀏覽。鉆取支持逐層查看功能。
(2)Petri 網(wǎng)配置。
Petri 網(wǎng)配置提供petri 網(wǎng)模型各類模型元素配置功能與操作界面。對(duì)petri 網(wǎng)各類元素的配置功能,可根據(jù)其運(yùn)行相關(guān)性,分為展示配置與運(yùn)行配置。展示配置定義模型元素的靜態(tài)信息以及運(yùn)行信息展示的方式與格式。運(yùn)行配置定義模型元素運(yùn)行相關(guān)的屬性與規(guī)則。
(3)導(dǎo)入導(dǎo)出。
Petri 網(wǎng)建模后,可根據(jù)需要將其模型導(dǎo)出保存特定格式的XML 文件,其中導(dǎo)出文件包含Petri 網(wǎng)模型元素的元數(shù)據(jù)與布局?jǐn)?shù)據(jù)。如導(dǎo)出的變遷,在文件里包含變遷的名稱、變遷相關(guān)聯(lián)的庫(kù)所等。同時(shí)Petri 中間支持將符合格式Petri 網(wǎng)模型XML文件,導(dǎo)入建模工具中,其中導(dǎo)入的Petri 網(wǎng)能正確顯示各類Petri 網(wǎng)模型元素以及元素間的布局。
2.2.2 Petri 網(wǎng)調(diào)度控制
Petri 網(wǎng)調(diào)度控制以Petri 網(wǎng)設(shè)計(jì)與配置為依據(jù),驅(qū)動(dòng)令牌在庫(kù)所間進(jìn)行流轉(zhuǎn)的同時(shí),實(shí)現(xiàn)業(yè)務(wù)邏輯控制與實(shí)現(xiàn)。
(1)Petri 網(wǎng)調(diào)度。
Petri 網(wǎng)調(diào)度是根據(jù)Petri 網(wǎng)的設(shè)計(jì)與配置,輸入相關(guān)初始化令牌數(shù)據(jù),創(chuàng)建控制實(shí)例,并委托Petri 網(wǎng)控制模塊根據(jù)Petri網(wǎng)的設(shè)計(jì),驅(qū)動(dòng)令牌在變遷與庫(kù)所之間進(jìn)行流轉(zhuǎn)。
(2)Petri 網(wǎng)控制。
Petri 網(wǎng)控制負(fù)責(zé)接收Peri 網(wǎng)調(diào)度模塊的委托,根據(jù)Petri網(wǎng)的設(shè)計(jì),驅(qū)動(dòng)令牌在庫(kù)所與變遷之間進(jìn)行流轉(zhuǎn)。其主要的功能為輸入令牌分配與輸出令牌分配:
輸入令牌分配:Petri 網(wǎng)控制負(fù)責(zé)檢測(cè)Petri 網(wǎng)內(nèi)各庫(kù)所內(nèi)令牌的狀況,根據(jù)Petri 控制論相關(guān)的算法,點(diǎn)火變遷并轉(zhuǎn)相應(yīng)的數(shù)據(jù)量的令牌傳遞至變遷。
輸出令牌分配:Petri 網(wǎng)控制根據(jù)變遷輸出的令牌,根據(jù)Petri 控制論相關(guān)的算法,將令牌分配至相應(yīng)的庫(kù)所。
2.2.3 Petri 網(wǎng)接入服務(wù)
Petri 網(wǎng)接入服務(wù)以標(biāo)準(zhǔn)化的接口,統(tǒng)一規(guī)范應(yīng)用的接入,降低系統(tǒng)應(yīng)用與控制的耦合性。Petriware 中間件對(duì)接入Petri網(wǎng)的應(yīng)用的接入功能范圍進(jìn)行定義,并通過定義標(biāo)準(zhǔn)化的功能接口,規(guī)范應(yīng)用的接入,借此解耦Petriware 中間件與應(yīng)用關(guān)聯(lián)度,提升兩者的獨(dú)立性。
Petri 網(wǎng)接入服務(wù)負(fù)責(zé)提供相應(yīng)的操作接口,完成應(yīng)用接入過程的交互,其功能為:應(yīng)用注冊(cè)、應(yīng)用清銷、令牌消耗、令牌創(chuàng)建、狀態(tài)檢測(cè)。
(1)應(yīng)用注冊(cè)。
接入Petriware 中間件的應(yīng)用,需根據(jù)中間件預(yù)先分配的應(yīng)用注冊(cè)信息,調(diào)用Petriware 中間件的應(yīng)用注冊(cè)接口,完成應(yīng)用的注冊(cè)。通過應(yīng)用注冊(cè)的應(yīng)用,才通接收到中間件發(fā)送的令牌,或生成令牌發(fā)送至中間件。
(2)應(yīng)用注銷。
應(yīng)用退出前,需根據(jù)中間件預(yù)先分配的應(yīng)用注冊(cè)信息,調(diào)用Petriware 中間件的應(yīng)用的注銷接口,完成應(yīng)用的正常退出。
(3)令牌消耗。
應(yīng)用注冊(cè)成功后,應(yīng)用調(diào)用中間件提供的令牌消息通知接口,獲取應(yīng)用需處理的令牌信息。
(4)狀態(tài)檢測(cè)。
應(yīng)用與中間件,需相互進(jìn)行狀態(tài)檢測(cè),以感知相互的存在,整體提升系統(tǒng)的容錯(cuò)性。即應(yīng)用與中間件,均需提供狀態(tài)檢測(cè)接口,以返回各自的運(yùn)行狀態(tài)。
2.2.4 監(jiān)控服務(wù)
以Petri 網(wǎng)為基礎(chǔ),對(duì)系統(tǒng)進(jìn)行抽象并分層監(jiān)控與管理,展示系統(tǒng)運(yùn)行態(tài)全境,即為系統(tǒng)監(jiān)控、流程監(jiān)控、應(yīng)用監(jiān)控、進(jìn)程監(jiān)控等。
2.3.1 Petri 網(wǎng)建模流程
基于Petriware 中間件的Petri 網(wǎng)建模過程,可簡(jiǎn)化抽象為以下流程。
(1)業(yè)務(wù)分析人員根據(jù)業(yè)務(wù)需求進(jìn)行業(yè)務(wù)分析。
(2)業(yè)務(wù)分析人員根據(jù)業(yè)務(wù)分析結(jié)果,進(jìn)行業(yè)務(wù)控制設(shè)計(jì)。
圖4 Petri 網(wǎng)建模流程
(3)業(yè)務(wù)分析人員可將業(yè)務(wù)控制設(shè)計(jì)結(jié)果,使用中間件提供的建模工具,進(jìn)Petri 網(wǎng)建模,進(jìn)行設(shè)計(jì)結(jié)果表達(dá)。
(4)業(yè)務(wù)分析人員根據(jù)業(yè)務(wù)控制設(shè)計(jì)結(jié)果,對(duì)應(yīng)用需求分析。
(5)業(yè)務(wù)分析人員根據(jù)應(yīng)用需求分析結(jié)果,向應(yīng)用開發(fā)廠商提交應(yīng)用需求。
(6)應(yīng)用開發(fā)廠商經(jīng)需求分析、需求設(shè)計(jì)、應(yīng)用開發(fā)與部署。
(7)應(yīng)用開發(fā)與部署結(jié)束后,應(yīng)用開發(fā)廠商根據(jù)業(yè)務(wù)設(shè)計(jì),使用中間件平臺(tái)的提供Petri 網(wǎng)配置功能,對(duì)Petri 網(wǎng)進(jìn)行相應(yīng)的配置。
(8)業(yè)務(wù)分析人員,使用中間件平臺(tái)的Petri 網(wǎng)調(diào)度與控制功能,驅(qū)動(dòng)業(yè)務(wù)邏輯,進(jìn)行業(yè)務(wù)驗(yàn)證。
2.3.2 應(yīng)用接入與處理流程
應(yīng)用接入與處理流程,展示典型應(yīng)用接入Petriware 中間件進(jìn)行處理的流程。以下對(duì)此流程進(jìn)行簡(jiǎn)要的說明:
(1)應(yīng)用啟動(dòng)后,根據(jù)應(yīng)用分配的注冊(cè)信息,調(diào)用中間件的注冊(cè)接口,進(jìn)行應(yīng)用的注冊(cè)。
(2)應(yīng)用注冊(cè)成功后,應(yīng)用調(diào)用中間件等令牌數(shù)據(jù)接口,等待應(yīng)用處理的令牌。
(3)應(yīng)用接收到令牌通知消息后,調(diào)用中間件的開始處理令牌接口,通知中間件平臺(tái)應(yīng)用令牌操作事務(wù)開始。
(4)應(yīng)用進(jìn)行業(yè)務(wù)操作結(jié)束后,調(diào)用中間件的結(jié)束處理令牌接口,通知中間件平臺(tái),用令牌操作事務(wù)結(jié)束。
(5)應(yīng)用在業(yè)務(wù)處理空閑時(shí),調(diào)用中間件平臺(tái)的檢測(cè)接口,檢測(cè)中間件平臺(tái)的狀態(tài)。
(6)應(yīng)用收到外部指令,退出應(yīng)用前,調(diào)用中間件平臺(tái)的應(yīng)用注銷接口后,應(yīng)用退出。
圖5 應(yīng)用接入與處理流程
目前由于缺乏流程中間件,流程設(shè)計(jì)與流程實(shí)現(xiàn)基本上是分離的,在業(yè)務(wù)流程建模之后,通過手工編碼實(shí)現(xiàn)建模后的業(yè)務(wù)流程。這樣應(yīng)用軟件在流程變更的成本很高,不僅要修改程序代碼,還要做大量的測(cè)試工作來(lái)保證系統(tǒng)的穩(wěn)定、可靠。系統(tǒng)的運(yùn)營(yíng)維護(hù)也較困難,流程變更后要升級(jí)系統(tǒng)才可以使新的流程生效。
業(yè)務(wù)應(yīng)用流程使用本文設(shè)計(jì)的Petriware 中間件來(lái)設(shè)計(jì)開發(fā),保證業(yè)務(wù)流程的靈活編排。
?使用Petrwarei 中間件,也就強(qiáng)制使用petri 的方法論實(shí)現(xiàn)程序流程,一定程度上防止了程序流程設(shè)計(jì)缺陷。
?Petriware 中間件平臺(tái)能合理分配資源,提高系統(tǒng)并發(fā)度,避免系統(tǒng)并發(fā)過程中不必要的競(jìng)爭(zhēng)和沖突,避免死鎖的出現(xiàn)。
?Petriware 中間件平臺(tái)運(yùn)用到整個(gè)系統(tǒng)的運(yùn)行控制,不僅僅能實(shí)現(xiàn)自動(dòng)調(diào)度,還可減少人力操作。
?簡(jiǎn)化開發(fā)和維護(hù)流程,使流程的變更操作更簡(jiǎn)單,只需要在頁(yè)面中執(zhí)行簡(jiǎn)單的拖拽編輯,就可以使新的流程生效,簡(jiǎn)化開發(fā)工作。
[1]侯煜,孫梯全,施琴,等.Petri 網(wǎng)在計(jì)費(fèi)系統(tǒng)中的應(yīng)用研究[J].網(wǎng)絡(luò)與通信,2012(3).
[2]林闖.隨機(jī)Petri 網(wǎng)和系統(tǒng)性能評(píng)價(jià)[C].2 版.北京:清華大學(xué)出版社,2001.