工作流現狀 (原文) 作者Tom Baeyens 翻譯dinghong 前言如果數據庫系統( database systems)像受人尊敬的智者講述的條理清晰的故事,那么工作流(workflow)就像一群乳臭未干的小子在大談各自的“哲理”。之所以這樣講,我是想指出,工作流系統 (workflow management systems)還處于技術發展曲線( technology hype curve)上的初級階段。在這個領域我們將面臨一個激動人心的階段。 為了描述這一點,可以將工作流和關系數據庫系統(RDBMS)做一個對比。當在軟件開發團隊中談論RDBMS時,大部分人會有一個清晰的概念,在你和他們交流的時候,人們會通過輕微的點頭表示認可或理解你所說的。可當使用工作流術語討論工作流時,他們會搖頭表示不同意,因為每個人對工作流術語都有不同的理解。
![]() Figure 1: Workflow vs. RDBMS positioned in the hype-curve 導致形成這種狀況的原因之一,是在工作流中使用了過多的概念。在這個領域中的大量規范和工具沒有一個是相似的。當然,它們相互之間有重疊并且會相互參考引證。 在本文中,我首先解釋什么是工作流管理系統,然后介紹業務流程管理的優點。接下來描述一下為什么工作流市場乍看起來如此混亂。本文給出的主要結論是:選擇工作流系統是想用工作流系統的公司,將要面對的最困難的事情。為此,本文的核心部分描述了一個流程定義(process definition)的四個層次,為你選擇工作流提供一個基礎。本文還用中立的語言描述了工作流和BPM的通用概念。最后,給出了一些規范和工具的指導性描述。 什么是工作流管理系統(WFMS)定義工作流系統是以規格化的流程描述作為輸入的軟件組件,它維護流程的運行狀態,并在人和應用之間分派活動。 為了后面的描述,我們先定義一些基本的術語:流程定義(process definition)和流程實例(process instance). 一個流程定義是一個業務流程或過程的規格化描述。一個流程實例是流程定義的一個運行實體。 都目前為止,概念還比較清晰是不是?但當再深入一步時,我們就要小心使用文字了。如何闡述流程中的步驟,現在還沒有一個統一的方式。這是各種工作流規范和工具之間主要的分歧。
工作流系統另一個重要的職責是維護每一個流程運行的上下文信息。 流程上下文變量(process context variable) ,或簡稱變量,是與流程實例相關的變量。如,休假申請的開始日期、數據庫中一條記錄的鍵值、文檔管理系統中一篇文檔的索引等。通常在流程定義中聲明這些變量,然后在流程實例生成時,這些流程變量被實例化。所有成熟的工作流管理系統都支持定制的變量類型。 目標領域(Target usage)使用工作流管理系統的目的之一是作為企業應用系統集成(EAI)的平臺。在當前大部分企業級IT架構中,各種各樣的異構(heterogeneous)應用和數據庫運行在企業內網中。在這些系統被應用到組織時,都有一個清晰的目標。例如,客戶管理、文檔管理、供應鏈、訂單、支付、資源計劃等等。讓我們稱這些系統為專門應用( dedicated applications)。每一個專門應用都包含它們所支持業務流程的領域知識。這些專門應用中的自動化流程,被拼裝到企業中更大的非自動化流程中。每當一個這樣的專門應用安裝并投入使用,都會帶來涉及其他多個應用的新功能需求。企業應用系統集成(EAI)就是通過使用多個專門應用滿足軟件新需求的方法。有時,這只需要在兩個應用之間提供數據通訊的通道。專門應用將很多業務流程硬編碼在軟件中。可以這么說,在你購買專門應用時,你是購買了一組固定的自動化業務流程。而工作流管理系統是不必事先知道問題域的相關信息的。工作流系統將業務流程描述作為輸入并管理流程實例的執行,這使得它比專門應用更靈活(當然你也要花精力編寫業務流程的規格化描述)。這就是為什么說工作流系統和專門系統是相互補充的。工作流系統可以用來管理全局的業務流程。如果專門應用支持你所需要的業務流程,那么使用專門應用。在此討論的工作流系統的第一種使用方式就是:結合所有的專門應用,使用工作流系統構建一個EAI平臺。 工作流系統能夠發揮很大價值的第二個使用方式是:協助涉及多人相關任務工作流軟件的開發。為了達到這個目的,大部分工作流系統都有一個方便的機制,來生成執行任務的表單。對于專注于ISO 或者CMM認證的組織,采用這種方式使用工作流系統能夠顯著提高生產率。 不用將過程用文字的形式寫在紙上,工作流系統使你通過流程定義建模實現過程的自動化(如使用基于Web的應用)。 工作流系統的第三種使用方式是:將工作流引擎嵌入到其他應用中。在前面我們談到,專門應用將指定問題域相關的業務流程固化在軟件中。開發專門應用的公司也可以將工作流引擎嵌入到他們的軟件中。在這里,工作流引擎只是作為一個軟件組件,對于應用的最終用戶是不可見的。將工作流引擎嵌入到應用中的主要原因是為了重用(不重復發明輪子)和應用軟件的可維護性。 The case for workflow對于引入工作流的組織,能夠在軟件開發和業務兩個層次受益。 方便開發工作流管理系統能夠簡化企業級軟件開發甚至維護。
業務流程管理 (BPM)在自動化業務流程之前,分析并將它們規格化是一件艱苦但會有很好回報的工作。e-workflow.org對于分析流程能夠帶了的益處有不錯的闡述:
我認為他們還遺漏了一個使用工作流系統最重要的因數:提高對迭代開發的支持。如果軟件中業務流程部分不容易更改,組織就會花很大的精力在開發前的業務流程分析中,希望一次成功。但可悲的是,在任何軟件項目開發中,這都很少能實現。工作流系統使得新業務流程很容易部署,業務流程相關的軟件可以一種迭代的方式開發,因此使用工作流系統使開發更有效、風險更低。 缺失的一環(Missing link)我確實認為工作流系統是企業應用開發中缺失的一環。將企業業務流程邏輯在企業級軟件中實現的缺省方式是分散的。這意味著業務流程邏輯散布在各種系統中,如EJB、數據庫觸發器、消息代理等等。這樣得到的軟件難于維護,結果,企業只能將改變業務流程軟件作為最后的選擇。他們經常能夠做的是,改變流程以適應軟件。上述問題也適用于采用大型外部ERP軟件包的企業。進一步,假設我們認識到這個問題,并打算將一個流程相關的代碼都集中起來。對于一個流程來說這很不錯,但當你要實現多個流程時,你會看到管理狀態和流程變量的代碼被到處復制。最后,我們會整理這些代碼放到一個集中的庫中。好,...這就是一個工作流管理系統了,不用費心自己來實現,你可以從本文后面的列表中選擇一個。A closer lookWFMS interfaces一個工作流管理系統以流程定義作為輸入。在這里,可以將流程定義看作UML活動圖、UML狀態圖或者有限狀態機。在提交一張費用單據、申請休假、要求一個報價、...之后,工作流系統負責維護這些流程定義的執行狀態和上下文。為此,需要通知工作流系統狀態的變化。運行流程的狀態變化可以記錄下來,以備監控管理。
![]() Figure 2: Interfaces of a WFMS
流程定義的四個層次在下面這部分,我嘗試回答這樣的問題“什么是流程定義包括的內容?”。這是從各種規范和工具所使用模型的原則和概念中總結得來的,反映了大部分模型中通用的基本思想。流程定義的內容可以分為四個不同的層次:狀態(state)、上下文(context)、程序邏輯(programming logic)和用戶界面(UI)。狀態層所有狀態和控制流的表述,都屬于業務流程的狀態層。標準編程語言中的控制流來源于Von Neuman體系。控制流定義了必須被執行的指令的順序,控制流由我們書寫的命令、if語句、循環語句等確定。在業務流程中的控制流基本與此一致。但在業務流程中不是使用命令而是使用狀態作為基本元素。 在流程中,狀態 (或者說等待狀態)代表了一種對外部參與者(actor)的依賴。狀態的意思就像“現在X系統或某某人必須作某些事,在此等待直到參與者通知這些任務已完成”。狀態定義了一種對外部提供結果的依賴。狀態典型的例子是批準步驟(step)。 流程定義中的狀態也指定了執行依賴于哪個參與者。在活動圖中,泳道(swimlanes)的標注代表這些參與者的名字。工作流系統使用這些信息構建任務列表,這是一般工作流系統都有的功能。如前所述,參與者可以是人也可以是系統。對于需要人參與的狀態,工作流系統必須在運行時計算出具體的個人。這樣的計算使工作流系統必須依賴于組織結構信息。關于這方面的一篇非常有趣的文章是在further reading section提到的“工作流應用中的組織管理”( 'Organizational Management in Workflow Applications')。 流程定義的控制流包含一組狀態和它們之間的關系。狀態之間的邏輯關系描述了哪些執行路徑可以同時執行,那些不可以。同步執行路徑用分叉(forks)和聯合(joins)建模,異步執行路徑用判斷(decisions)和合并( merges)建模。注意在大多數模型中,在每個狀態之前都有一個隱式合并。 UML活動圖經常被用來做業務流程建模。作為一種直觀和通用的表達,活動圖在圖形表述上有一個主要問題,就是沒有區分狀態和動作,它們都用活動來表示。缺少這種區分(導致狀態概念的缺失)是學術派對UML活動圖的主要批評。UML活動圖的第二個問題是在UML2.0版中引入的。當多個遷移(transitions)到達一個活動時,以前的版本規定這是一個缺省合并(merge),在2.0版中規定這是一個需要同步的缺省聯合(join)。在我看來,UML活動圖的圖形部分仍舊可以用來對業務流程狀態層次建模,只要使用時對兩條構建語義作如下的變化:
在流程運行過程中,工作流系統用一個令牌(token)作為指針跟蹤流程的狀態。這相當于Von Neuman體系中的程序計數器。當令牌到達一個狀態時,它被分配給工作流系統等待的外部參與者。外部參與者可以是個人、組織或者計算機系統。我們定義流程運行的執行人或系統為“參與者”(actor)。只有在工作流系統將令牌分配給一個參與者時,才需要訪問組織結構信息。工作流系統通過分配令牌構建任務列表。 上下文層流程上下文變量(process context variable) ,或簡稱變量,是與流程實例相關的變量。流程開發人員可以使用流程變量存儲跨越流程實例整個生命周期的數據。一些工作流管理系統有固定數目的數據類型,另一些你可以定義自己的數據類型。 注意變量也可以用來存放引用( references)。一個變量可以引用如數據庫中的記錄、網絡上的文件。什么時候使用引用,取決于使用引用數據的其他應用。 和流程變量相關的另一個令人感興趣的方面是:工作流系統如何將數據轉化為信息。工作流是用于組織內部跨越各種異構系統實現任務和數據協同的。對于業務流程中人工執行的任務,工作流系統負責從其他相關系統,如SAP、數據庫、CRM系統、文檔管理系統收集數據。在業務流程的每一個人工步驟,只有相關聯的數據項被從異構系統中收集和計算。通過這種方式,從不同系統來的數據被轉換并展現為信息。 程序邏輯層如前所述,動作是在流程運行過程中,工作流系統響應指定的事件(event)執行的一段程序邏輯(programming logic)。程序邏輯可以是二進制或源代碼形式的、用任何語言或腳本編寫的軟件。程序邏輯層是所有這些軟件片斷和關于在什么事件發生時調用它們的信息的組合。程序邏輯的例子包括發Email、通過消息代理發消息、從ERP系統中拿數據和更新數據庫。 用戶界面層一個參與者通過向流程變量中填充數據的事件,來觸發結束一個狀態。比如,在請假的例子中,老板提供“同意”或“不同意”數據到流程中。某些工作流系統允許指定哪些數據可以填充到流程中,以及它們如何在流程變量中存儲。通過這些信息,可以生成從用戶收集信息的UI表單。基于流程定義生成用戶提交表單的Web應用例子,可以訪問the jBpm online demo。工作流全景可執行流程與工作流管理系統的比較(Executional processes versus a WFMS)當前在BPM領域中,關于可執行業務流程的規范有趨向于統一集中的趨勢。 XLANG, WSFL 和BPML合并為基于交互(消息交換)的BPEL。BPEL在面向服務體系結構(SOA)的大背景下定義。它的前提條件之一是涉及的服務必須用WSDL聲明。BPEL規定了一套XML語法,這套語法可以看作一種編程語言,用來描述包括對WSDL定義的服務調用的控制流。 在可執行業務流程和基于狀態的工作流管理系統所使用的方法中,我注意到了三點主要的區別:
學術界學術界對工作流的研究可以回溯到上個世紀七十年代。在當前,研究領域趨向于認為petr 網是所有流程定義語言之母。關于petri網已有大量先進的分析技術,去年在 2003 conference on Business Process Management上我有幸會晤了Petri教授。對于大部分人能夠訪問和理解的有關Petyri網最好的研究之一是工作流模式(workflow patterns)。工作流模式比較了大量的工作流管理系統并以petri網的術語表述了通用流程建模概念。開放源代碼項目最后我們看看真實世界中的工作流管理系統。選擇一個工作流管理系統是一件困難的事情,但有選擇總比沒有選擇好。:-) 本文闡述工作流基本概念的目的之一,就是使你能夠作更好的選擇。但我也意識到,對于現在的軟件架構師來說,選擇工作流系統是一件最具挑戰性的工作。 下面的列表來源于三個地方:my previous article, the list of Carlos E Perez, 和 list by Topicus.
商業軟件提供商
工具目錄
規范Michael zur Muehlen作了一個所有工作流相關規范的介紹性的幻燈片,很不錯。 我同意John Pyke 和 Wil van der Aalst 的觀點:工作流標準還處于制定階段。現在存在大量相互叢疊的規范。 在我看來,導致規范如此之多而同時每個規范的應用又很有限的原因是,在工作流最基礎概念上大家達成的共識很少。工作流是最容易讓你感到心煩的話題,因為工作流本身的概念會和其他相關概念和技術混淆在一起。可以舉一個具體的例子,比如說工作流完全是對Web Service的補充。你可以通過暴露接口以Web Service的方式訪問一個工作流管理系統,但是不能假定總是必須通過Web Service接口訪問工作流系統接口。一些規范造成了這樣的假設。除了Web Service,其他容易混淆的概念和技術包括:Email、流程之間的通訊、Web應用和組織結構。 在工作流領域第一個致力于標準化工作的是Workflow Management Coalition (WfMC),開始于 1993。 WfMC發布的參考模型很不錯,它定義了工作流管理系統和其他相關部分之間的接口。WfMC的另一項成果是XPDL規范。 XPDL定義了描述工作流聲明部分(declarative part)的XML結構。我個人認為,參考模型和XPDL是目前最好的規范。
結論我在本文中指出工作流市場還屬于年輕而又混亂(young and wild)的階段,但已經有可靠的工具存在了:
從以上所有這些中能得到的結論是:
我希望本文能夠激發你對工作流的興趣并且能夠為你進行有效的對比提供正確的背景知識。 Further reading
ThanksA special thanks for Gustavo Maciel Dias Vieira and Jef Vanbockryck for their valuable feedback on the draft versions of this article.
|