我想任何的大型企業級服務應用,其核心服務都會圍繞在商業邏輯處理以及工作流程上,尤其是現在的企業發展的快速又形形色色的多樣化,這些 business process & workflow 正以指數的方式在快速的遞增當中。自動化的商業流程運作能提供了巨大的優勢,可是相對的,若無法對這些自動化的流程能有效管理,對於維運上會造成相當的困擾,尤其是多數早期的服務之間的直接取用,沒有透過任何mediator 的概念的話,對於直接綁定的設計是有很大的問題的。
在幾年前,業界開始推出了一套標準,用來描述整個業務流程中的細節與規範,名為 WS-BPEL -- Web Service Business Process Execution Language (這裡,我們就不去討論中間的故事了,有興趣再去google吧),而對於流程的呈現的方式(或者說舞台搭設)則是名為 WS-CDL -- Web Service-Choreography Definition Language。
每一個大型的企業服務都是由多個分組、部門,以及業務單位所構成,所以在彼此之間的互動上會有多種的樣貌呈現,而這也反映在企業內部流程上的活潑與可變性(當然我們也可謂之為彈性),而開發者或者企業服務規劃者,就是要在這些活動中找出其應該溝通的資訊、交換的資訊,以及溝通的順序,來完成其企業流程架構設計。
一個完整的商務流程(以下都以business process 原文示意),若應用在企業級服務上,可以被看作是一個為了達成某個特殊的商務要求的處方籤,因為他安排所有所需要的素材與使用方法,而每個企業級服務都可能涵蓋了多個business process,而每單一個business process 各自持有其流程控制元件 ( inputs / process / output ),在這裡所提到的input與output都是整個business process 之中不可或缺的元素(參考下圖 -譬如:input 的資訊須為完成bp的必要資訊,而output為流程結果所仰望的重要資訊)。
[caption id="attachment_569" align="alignnone" width="537"]
Orchestration (筆者: 在此應可看作是workflow 的編排)
Orchestration通常是用來指出在企業服務當中的bp or workflow。Orchestration只是的通用的語彙而不是代表著任何一門特定的技術,你可以透過任何的方法或工具來達成這樣的流程安排的描述,當然,更深遠的來看,以服務的角度出發,我們會希望所繪製的腳本會是個Service-Oriented的設計,所以也可將之作為 Web Services-Oriented。
Business Process Execution Language ( BPEL )就是上述的第二代的 web services技術,幫助我們實現企業級 work flow。可是,眾所周知的早期的web service剛開始風行時,在各大廠商提供實作時開始進入到了分岐,由於有兩大陣營的技術貢獻者分別地提供了:
- WSFL - Web Services Flow Language - IBM
- XLANG - Microsoft
而BPEL則是整併了上述二者的語言,BPEL剛開始的前身叫做 BPEL4WS - Business Process Execution Language for Web Services,而時至今日BPEL已趨於完整,最新的版本是 WS-BPEL 2.0。每一個business process都可以被分解為數個步驟,而每個步驟都可以更深入的拆解為一連串的企業活動(以下將以原文 business activities示意),WS-BPEL規範了一組以XML格式的資訊來呈現這些一連串的活動內容與細節,這個XML被區分為四大類:
- Declarations Elements
用來定義process , 變數,或者其他餐與者相關的資訊。
<process> - 定義business process ,是為 root element
<partnerLink> - 定義服務合作的資訊包含了有角色以及目的端的操作內容(i.e , WSDL port type)
<variable> - 定義所需要使用的資料內涵
- Basic Activity Elements
這種類型的elements也被稱為是primitive activity elements,還分成了兩大類 process-related / service-related。
process-related 關注在 processing activities - namely(換句話說),對特定的活動(activity)能暫停或產出錯誤控制
service-related 關注在觸發 web service , 發送一個回應給partner諸如此類的
底下來看看關於process related 的幾個elements
<assign> - assign values to the variables
<throw> - generating a fault where there occur one
<wait> - suspending a particular operation for a period
<empty> - does not have a role in the process
Service Related
<invoke> - 描述調用的partner web service
<reply> - 回應 partner 的 service request
<receive> - blocks a call and waits for the message from the partner
- Structrued Activity Elements
活動的部分就可以看成是活動圖的extension,主要用於流程控制方面,主要有以下elements
<while> - 允許process 操作過程中進行looping activity
<switch> - 就跟coding沒兩樣, switch based on case
<pick> - 提供流程中可以選擇的主要流程路徑與替代路徑
<flow> - 提供一個特殊建構的process,可以在同步模式下執行process
(原文: enables constructing the process execution in a concurrent mannner)
<sequence> - 執行一連串的活動行為,但先決條件必須是前一次的activity必須正常執行完畢。
<eventHandlers> - 處理與process 運作過程中相關的事件
[caption id="attachment_570" align="alignnone" width="678"]
- Management Activities Elements
<compensate> - implementing a compensating logic to reverse the previously compeleted business activity
ps: compensate - 補償
<correlate> - associate messages with specific process instances
<faultHandlers> - exception handling
<scope> - defines the scope or bounds for the variables / fault handlers / compensation / correlation
<terminate> - 提供即時停止特定process 的能力
Processing BPEL
BPEL 的流程繪製是有點像UML的,只是也許須搭配其他有提供實作的廠商以GUI方式繪製會來的有效率,以下是一張範例參考。
[caption id="attachment_575" align="alignnone" width="607"]
這些圖上的資訊其背後的意涵,就會寫成BPEL xml,細部資訊可參考眾多的Oracle Sample
沒有留言:
張貼留言