0 引言
從工作流技術(shù)所要解決的問題來看,工作流技術(shù)的發(fā)展必然以分布的形式出現(xiàn)。而且,現(xiàn)代企業(yè)的信息資源越來越表現(xiàn)出一種異構(gòu)、分布、松散耦合的特點(diǎn)。因此,工作流管理系統(tǒng)必然要具有分布式的特點(diǎn)。
1 分布式工作流的相關(guān)概念
根據(jù)工作流管理聯(lián)盟(WFMC)的定義,工作流就是一類能夠完全或者部分由計(jì)算機(jī)自動(dòng)執(zhí)行的業(yè)務(wù)過程,在此過程中,文檔、信息或任務(wù)按照預(yù)定的規(guī)則傳遞,企業(yè)人員、應(yīng)用軟件互相之間協(xié)調(diào)工作,以實(shí)現(xiàn)企業(yè)業(yè)務(wù)流程所要達(dá)到的整體目標(biāo)。工作流管理系統(tǒng)是指運(yùn)行在一個(gè)或多個(gè)稱為工作流引擎的軟件上的用于定義、實(shí)現(xiàn)和管理工作流運(yùn)行的一套軟件系統(tǒng),它和工作流執(zhí)行者(人、應(yīng)用) 交互,推進(jìn)工作流實(shí)例的執(zhí)行,并監(jiān)控工作流的運(yùn)行狀態(tài)[1]。
傳統(tǒng)的工作流產(chǎn)品多采用集中式的方式,雖然易于實(shí)現(xiàn)、維護(hù)和管理,卻存在著系統(tǒng)可擴(kuò)展性差、產(chǎn)品可靠性和可用性不高,與應(yīng)用系統(tǒng)的集成性差,安全性能差等顯著缺陷。基于這種現(xiàn)狀,工作流學(xué)者提出了分布式工作流的概念。分布式工作流管理系統(tǒng)采用分布式策略將工作流管理系統(tǒng)功能離散化或模塊化,這些模塊既可以在同一機(jī)器上運(yùn)行,也可以在通過網(wǎng)絡(luò)連接的幾臺(tái)不同機(jī)器上運(yùn)行,通過各個(gè)模塊間的相互協(xié)調(diào)工作,實(shí)現(xiàn)預(yù)定的功能。根據(jù)技術(shù)復(fù)雜性和實(shí)現(xiàn)的先后順序,工作流管理系統(tǒng)的分布可以分為3 個(gè)層次[2]:工作流管理系統(tǒng)體系結(jié)構(gòu)的分布、工作流引擎的分布、工作流模型的分布。本文主要研究工作流引擎的分布。
2 分布式工作流的設(shè)計(jì)
工作流管理系統(tǒng)的核心部分是工作流執(zhí)行系統(tǒng)和工作流引擎。工作流管理系統(tǒng)的核心組成部分稱為工作流執(zhí)行系統(tǒng),它為創(chuàng)建、初始化和執(zhí)行過程實(shí)例提供了一個(gè)運(yùn)行環(huán)境。在一個(gè)工作流執(zhí)行系統(tǒng)中可以包括一個(gè)或多個(gè)工作流引擎。工作流引擎的主要功能有:解釋過程定義,控制過程實(shí)例(創(chuàng)建、激活、掛起、終止等),按照過程定義已確定的業(yè)務(wù)邏輯調(diào)用各項(xiàng)活動(dòng),為用戶工作表添加工作項(xiàng),維護(hù)工作流控制數(shù)據(jù)和工作流相關(guān)數(shù)據(jù),調(diào)用應(yīng)用程序,提供監(jiān)督,管理和審計(jì)功能。根據(jù)對(duì)工作流管理系統(tǒng)的了解與分析,設(shè)計(jì)了一種分布式工作流執(zhí)行系統(tǒng)的體系結(jié)構(gòu)。
2.1 分布式工作流執(zhí)行系統(tǒng)的體系結(jié)構(gòu)
工作流執(zhí)行系統(tǒng)包括5 個(gè)部件:工作流元模型、分片管理器、工作流引擎、過程實(shí)例庫(kù)和事件處理庫(kù)。
工作流元模型:是引擎運(yùn)作的基礎(chǔ),引擎解析通過XPDL(流程定義語(yǔ)言) 定義的XML 文件,生成工作流元模型。元模型中定義了基本的對(duì)象類型集,包括流程、活動(dòng)、轉(zhuǎn)換、參與者和相關(guān)數(shù)據(jù)。一個(gè)XPDL 文件可能包含有若干個(gè)業(yè)務(wù)流程的定義,流程用流程對(duì)象表示,流程對(duì)象中包含了該流程定義的所有活動(dòng)、轉(zhuǎn)換等的引用。通過過程的一些方法可以獲得對(duì)相關(guān)數(shù)據(jù)、參與者、活動(dòng)和轉(zhuǎn)換的引用。工作流在執(zhí)行過程中,活動(dòng)之間需要傳遞數(shù)據(jù),或者與外部應(yīng)用程序之間交換數(shù)據(jù),這些數(shù)據(jù)以變量的形式記錄在流程定義中,稱為工作流相關(guān)數(shù)據(jù)。
分片管理器:向工作流引擎發(fā)送的消息申請(qǐng)有很多,使用分片管理器,給每個(gè)工作流引擎分配任務(wù),把過程定義XPDL文件按活動(dòng)進(jìn)行分片,每個(gè)分片包含完整的活動(dòng)定義,相關(guān)數(shù)據(jù)是每個(gè)分片必須包含的轉(zhuǎn)移信息按活動(dòng)順序分給相關(guān)分片的工作流引擎。
工作流引擎:是工作流執(zhí)行系統(tǒng)的核心部分,是工作流執(zhí)行過程的中心。工作流經(jīng)過分片管理器的處理,活動(dòng)可以同步執(zhí)行,增加效率。
過程實(shí)例庫(kù):在工作流引擎運(yùn)行期間,可能會(huì)啟動(dòng)多個(gè)過程實(shí)例,這些處于運(yùn)行狀態(tài)的過程實(shí)例保存在過程實(shí)例庫(kù)中,這樣做的好處是提高了工作流引擎的執(zhí)行效率。過程實(shí)例庫(kù)將過程實(shí)例傳送給過程控制管理器,進(jìn)行活動(dòng)執(zhí)行;也將活動(dòng)執(zhí)行的結(jié)果保存在過程實(shí)例庫(kù)中,以方便以后相同的過程實(shí)例執(zhí)行時(shí)進(jìn)行調(diào)用,節(jié)約時(shí)間。
事件處理庫(kù):負(fù)責(zé)存放工作流實(shí)例進(jìn)行事件處理的方法。主要的工作有:接收所有工作流引擎發(fā)送來的事件信息;將事件傳送給過程控制管理器執(zhí)行活動(dòng)并接收過程控制管理器所產(chǎn)生的事件;在活動(dòng)或過程發(fā)生狀態(tài)變化時(shí)將發(fā)生的新的事件傳送給其它的工作流引擎。
執(zhí)行過程:分布式工作流執(zhí)行系統(tǒng)的執(zhí)行過程是:通過XPDL定義的XML文件,生成工作流元模型,采用分片管理器對(duì)這些過程進(jìn)行管理,將過程按照活動(dòng)進(jìn)行分片,采用分布式工作流引擎,可以多個(gè)活動(dòng)同時(shí)進(jìn)行,縮短執(zhí)行時(shí)間,提高效率;然后每個(gè)活動(dòng)分別調(diào)用自己的工作流引擎執(zhí)行活動(dòng),輸出結(jié)果;引擎之間通過過程實(shí)例庫(kù)和事件處理庫(kù)進(jìn)行連接。
2.2 分布式工作流引擎的體系結(jié)構(gòu)
工作流引擎是工作流執(zhí)行系統(tǒng)的核心,工作流執(zhí)行過程主要集中在工作流引擎部分[4]。工作流引擎包括5 個(gè)部分:活動(dòng)執(zhí)行器、條件判定器、過程控制管理器、資源存儲(chǔ)器和客戶端應(yīng)用接口。
活動(dòng)執(zhí)行器:過程控制管理器根據(jù)當(dāng)前的過程實(shí)例的工作項(xiàng)的活動(dòng)類型啟動(dòng)一個(gè)活動(dòng)執(zhí)行器執(zhí)行相應(yīng)的活動(dòng)?;顒?dòng)執(zhí)行器是一個(gè)接口,工作流元模型中定義的每種活動(dòng),都有一個(gè)活動(dòng)執(zhí)行器與之對(duì)應(yīng)。
條件判定器:根據(jù)工作流元模型中描述的條件表達(dá)式和過程實(shí)例的上下文進(jìn)行匹配,使用條件判定器進(jìn)行判定,確定表達(dá)式的邏輯值。邏輯值與過程控制管理器進(jìn)行交互。
過程控制管理器:是工作流引擎的中樞。它負(fù)責(zé)以下工作:初始化工作流引擎,解析XPDL文件并生成工作流元模型;啟動(dòng)工作流引擎,從過程實(shí)例庫(kù)中讀取處于運(yùn)行狀態(tài)的過程實(shí)例,與條件判定器交互獲取條件判定結(jié)果,并且生成過程實(shí)例,存儲(chǔ)在過程實(shí)例庫(kù)中;從事件處理庫(kù)中讀取事件處理方法,與條件判定器交互獲取條件判定結(jié)果,并且生成事件處理程序,存儲(chǔ)在事件處理庫(kù)中等。
資源存儲(chǔ)器:當(dāng)工作流引擎、過程實(shí)例庫(kù)或事件處理庫(kù)的狀態(tài)改變時(shí),就會(huì)激活資源存儲(chǔ)器往應(yīng)用程序數(shù)據(jù)庫(kù)寫入數(shù)據(jù),并且將日志文件寫入日志表中。資源存儲(chǔ)器不僅負(fù)責(zé)向應(yīng)用程序數(shù)據(jù)庫(kù)寫入數(shù)據(jù)、向日志表中寫入日志,而且負(fù)責(zé)從數(shù)據(jù)庫(kù)中讀出數(shù)據(jù)。
客戶端應(yīng)用接口:是面向應(yīng)用開發(fā),隱藏工作流引擎的細(xì)節(jié),對(duì)外提供統(tǒng)一的編程接口,是面向用戶的??蛻舳藨?yīng)用接口是工作流引擎與客戶端應(yīng)用之間聯(lián)系的橋梁,也是工作流引擎核心調(diào)用的入口。開發(fā)人員通過客戶端應(yīng)用接口實(shí)現(xiàn)對(duì)工作流引擎的控制。客戶端的操作主要有啟動(dòng)工作流引擎、啟動(dòng)一個(gè)流程、獲取任務(wù)列表和執(zhí)行一個(gè)活動(dòng)等幾項(xiàng)操作。
執(zhí)行過程:由于每個(gè)分片的工作流引擎的功能相同,這里只對(duì)分片1 的功能進(jìn)行描述。分片1 工作流引擎的執(zhí)行過程是:當(dāng)分片管理器將訪問引擎的工作流按照活動(dòng)進(jìn)行分片后,每個(gè)活動(dòng)按照順序執(zhí)行;該活動(dòng)先訪問活動(dòng)執(zhí)行器,如果活動(dòng)執(zhí)行器空閑,該活動(dòng)就開始執(zhí)行,如果活動(dòng)執(zhí)行器處在運(yùn)行狀態(tài),該活動(dòng)就等待;活動(dòng)執(zhí)行器開始運(yùn)行,之后該活動(dòng)訪問條件判定器,對(duì)此活動(dòng)進(jìn)行分析,與此同時(shí),引擎管理器通過過程控制管理器從過程實(shí)例庫(kù)中調(diào)用符合該活動(dòng)的過程實(shí)例,如果沒有符合前提條件的過程實(shí)例,過程控制管理器就自動(dòng)生成過程實(shí)例,并且將新生成的過程實(shí)例保存在過程實(shí)例庫(kù)中;活動(dòng)繼續(xù)執(zhí)行,過程控制管理器從事件處理庫(kù)中調(diào)用符合過程實(shí)例執(zhí)行的事件處理方法,如果處理方法不存在,過程控制管理器就自動(dòng)生成事件處理方法,并保存在事件處理庫(kù)中;活動(dòng)執(zhí)行了事件處理方法,就可以將該活動(dòng)的執(zhí)行過程中的數(shù)據(jù)和日志保存到資源存儲(chǔ)器中,方便應(yīng)用程序數(shù)據(jù)庫(kù)和日__志文件調(diào)用;并且將活動(dòng)執(zhí)行結(jié)果發(fā)送到客戶端應(yīng)用接口處,為工作流客戶端提供輸出結(jié)果。
3 實(shí)例分析
“網(wǎng)上購(gòu)書”實(shí)例就是采用以上所提出的分布式工作流執(zhí)行系統(tǒng)和分片的工作流引擎的設(shè)計(jì)方式。網(wǎng)上購(gòu)書的過程如下:首先,用戶發(fā)送購(gòu)書申請(qǐng),可以輸入所要購(gòu)買的書名;活動(dòng)執(zhí)行器開始執(zhí)行系統(tǒng)接受后,核查是否有該書,如果沒有,就返回給用戶“查無此書”的信息,如果有此書,就從訂單數(shù)據(jù)庫(kù)中調(diào)用訂單,訂單中包含用戶所要查詢的書的信息,將訂單填寫的頁(yè)面發(fā)送給用戶;用戶填寫完訂單,將訂單發(fā)送給系統(tǒng);系統(tǒng)接收訂單,確認(rèn)后,保存訂單的信息到發(fā)貨單數(shù)據(jù)庫(kù)中,將信息添加到發(fā)貨單上,并且調(diào)用發(fā)貨單給用戶;用戶核查無誤后,發(fā)送確認(rèn)信息給系統(tǒng);網(wǎng)上購(gòu)書的過程就完成了,用戶可以采用很多方式付費(fèi),系統(tǒng)收到錢后,可以發(fā)書。
使用UML 的活動(dòng)圖描述網(wǎng)上購(gòu)書,可以使購(gòu)書的過程更加清晰,而且易于理解。
4 結(jié)束語(yǔ)
本文只是設(shè)計(jì)了一種分布式工作流引擎的體系結(jié)構(gòu),并且通過網(wǎng)上購(gòu)書的例子,對(duì)這個(gè)工作流引擎的執(zhí)行過程進(jìn)行理論的分析。該體系結(jié)構(gòu)還存在很多問題,需要在具體的實(shí)踐過程中進(jìn)行改正。希望通過使用UML 視圖模型對(duì)本體系結(jié)構(gòu)進(jìn)行進(jìn)一步分析,可以使之更加清晰直觀;并且希望能夠?qū)⒃擉w系結(jié)構(gòu)應(yīng)用到實(shí)踐中,形成一套有效的開發(fā)工具,可以縮短項(xiàng)目開發(fā)周期。
本文提出一種分布式工作流執(zhí)行系統(tǒng)的體系結(jié)構(gòu),將結(jié)構(gòu)劃分了5 個(gè)部分,分別是工作流元模型、分片管理器、工作流引擎、過程實(shí)例庫(kù)和事件處理庫(kù)。并且工作流引擎是核心部分,對(duì)它也進(jìn)行了詳細(xì)的設(shè)計(jì),分為5 個(gè)部分:活動(dòng)執(zhí)行器、條件判定器、過程控制管理器、資源存儲(chǔ)器和客戶端應(yīng)用接口。對(duì)結(jié)構(gòu)中的各部分功能進(jìn)行了描述,以及對(duì)執(zhí)行過程進(jìn)行了分析。最后將工作流引擎的設(shè)計(jì)思想應(yīng)用到具體實(shí)例分析中。