並行網關

1、並行網關

假設現在我們想在旁邊放一份沙拉。無論如何,如果你想要沙拉,你可以像我們在圖1.1中所做的那樣建模。

圖1.1:準備沙拉和主菜。

在這裏,我們介紹了另一個符號:(文本)註釋;這是一個您可以與任何流對象(在本例中是任務)關聯的工件。你可以輸入任何文本;在我們的示例中,我們輸入了執行相關任務的平均時間。任務時間的總和等於流程的運行時間,意大利麪的運行時間爲48分鐘,牛排的運行時間爲43分鐘。祝賀您:您已經基於關鍵數據分析了您的第一個流程!

不過,這意味着要等23分鐘甚至28分鐘才能開始喫東西。難以忍受的!你真的很餓,但你能做什麼?也許你不會先準備沙拉,然後再做意大利麪或牛排,但你會同時做這兩件事——同時做。適當的符號是並行網關,或簡稱和網關,如圖1.2所示。

圖1.2:同時準備沙拉和主菜。

將任務畫成並行並不意味着必須同時處理。與圖1.1所示的示例相反,在開始其他任務之前也不是必須準備沙拉。然而,並行準備確實使我們的總時間減少了10分鐘。使任務儘可能並行化是經典的流程優化。

如示例所示,該進程不僅是並行的(它使用了and split),而且路徑稍後還會同步(an and merge)。原因很容易理解:你只能在主菜和配菜都準備好之後才能開始喫。

令牌的概念如何應用於此流程的實例?令牌在開始事件時產生,它運行choose recipe任務,然後插入and split。每個路徑都從網關中出現一個令牌。這意味着在本例中有兩個令牌:第一個令牌進入xor分割,其傳出路徑取決於所選的菜譜。

假設我們想做意大利麪。令牌進入任務並停留15分鐘。同時,第二個令牌進入第二個,準備沙拉任務,它只停留10分鐘。10分鐘後,它移到合併處。傳入路徑的數量決定了網關正在等待的相關令牌的數量,因此在這裏,它等待相同流程實例的兩個令牌。

在我們的場景中,第二個令牌在10分鐘後到達and merge,而第一個令牌在cook pasta中總共停留了15分鐘。這意味着and合併將等待到第一個令牌到達—額外的5分鐘。此時,令牌愉快地合併爲單個令牌,該令牌將繼續沿着傳出路徑運行。

這聽起來是不是太抽象或太專業了?它不是,這和你自己的做法是一樣的:沙拉準備好了,但意大利麪還沒有,所以你等着。當意大利麪最終做好時,你就可以吃了。

那麼,爲什麼使用這個看似複雜的符號概念呢?例如,每年信用機構創建9000萬個流程實例,這些並不是按照嚴格的順序執行的,他們有重疊,爲了每天正確地定義和執行這種複雜的流程及其各種並行操作、分支、合併和同步,令牌方法就對對概念設計和實現是非常有幫助,而且非常必要。我們希望到目前爲止,流程實例與令牌並不完全相同:許多令牌可以在單個流程實例的範圍內運行。

用下面的問題檢查你的理解:

問題:圖1.3顯示了相同的過程,但是由於缺少空間,省略了and merge,並且從prepare沙拉任務的路徑直接通向xor合併。如果我們實例化這個過程,並決定支持意大利麪,會發生什麼?

圖1.3:在這個過程中發生了什麼?

答:在and分割時生成令牌,然後像往常一樣進行克隆。當我們完成準備沙拉,令牌通過xor合併和喫飯執行,五分鐘後,意大利麪也做好了,它的令牌通過xor合併,並再次執行!這不是我們想要的行爲。

問題:圖1.4顯示了一個只包含兩個任務的流程。實例化後,流程實例存活多久?

圖1.4:流程實例存在多長時間?

答:它存在45天,這與進程的運行時間相對應。即使在and split中生成的令牌在30天后通過task 1,然後被上端事件使用,第二個令牌仍然在task 2中駐留15天,流程實例繼續存在,直到低端事件使用第二個令牌爲止。

注意:只要流程中有一個令牌存在,流程實例就存在!在使用所有生成的令牌之前,該實例無法完成。

 


本文會持續更新,歡迎關注,技術支持:盤古BPM 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章