2012年8月8日 星期三

BPM Orchestration

最近開始有要接觸到BPM這個環節了,趁著有閱讀 Implementing SOA Using Java EE,來做點筆記好了。

我想任何的大型企業級服務應用,其核心服務都會圍繞在商業邏輯處理以及工作流程上,尤其是現在的企業發展的快速又形形色色的多樣化,這些 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"]typical business process or work flow typical business process or work flow[/caption]

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"]strcutural activities strcutural activities[/caption]

  • 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 diagram BPEL diagram[/caption]

這些圖上的資訊其背後的意涵,就會寫成BPEL xml,細部資訊可參考眾多的Oracle Sample

 

沒有留言: