並行步驟可同時執行多個封鎖呼叫,藉此縮短工作流程的總執行時間。
封鎖呼叫 (例如 sleep、HTTP 呼叫和回呼) 可能需要一段時間,從毫秒到天數不等。平行步驟旨在協助處理這類並行長時間執行的作業。如果工作流程必須執行多個彼此獨立的阻斷呼叫,使用平行分支可以同時啟動呼叫,並等待所有呼叫完成,藉此縮短總執行時間。
舉例來說,如果工作流程必須先從多個獨立系統擷取顧客資料,才能繼續執行,平行分支可同時發出 API 要求。假設有五個系統,每個系統的回應時間為兩秒,如果依序執行工作流程中的步驟,至少需要 10 秒;如果平行執行,則只需要兩秒。
建立平行步驟
建立 parallel
步驟,定義工作流程的一部分,其中可同時執行兩個以上的步驟。
YAML
- PARALLEL_STEP_NAME: parallel: exception_policy: POLICY shared: [VARIABLE_A, VARIABLE_B, ...] concurrency_limit: CONCURRENCY_LIMIT BRANCHES_OR_FOR: ...
JSON
[ { "PARALLEL_STEP_NAME": { "parallel": { "exception_policy": "POLICY", "shared": [ "VARIABLE_A", "VARIABLE_B", ... ], "concurrency_limit": "CONCURRENCY_LIMIT", "BRANCHES_OR_FOR": ... } } } ]
更改下列內容:
PARALLEL_STEP_NAME
:平行步驟的名稱。POLICY
(選用):決定發生未處理的例外狀況時,其他分支機構將採取的動作。預設政策continueAll
不會導致任何後續動作,所有其他分支都會嘗試執行。請注意,目前僅支援continueAll
政策。VARIABLE_A
、VARIABLE_B
等:可寫入的變數清單,其中包含允許在平行步驟中指派的父項範圍。詳情請參閱共用變數。CONCURRENCY_LIMIT
(選用):單一工作流程執行作業中可同時執行的分支和疊代數量上限,超過後系統會將其他分支和疊代排入佇列等待。這項設定只會套用至單一parallel
步驟,不會連帶影響後續步驟。必須為正整數,可以是常值或運算式。詳情請參閱「並行限制」。BRANCHES_OR_FOR
:使用branches
或for
指出下列其中一項:- 可同時執行的分支。
- 迴圈,可同時執行疊代。
注意事項:
以平行步驟取代實驗函式
如果您使用 experimental.executions.map
支援平行作業,可以改用平行步驟遷移工作流程,平行執行一般 for
迴圈。如需範例,請參閱「以平行步驟取代實驗性函式」。
範例
這些範例說明語法。
並行執行作業 (使用分支)
如果工作流程有多個不同的步驟集可同時執行,將這些步驟集放在平行分支中,可縮短完成這些步驟所需的總時間。
在下列範例中,使用者 ID 會做為引數傳遞至工作流程,並從兩個不同的服務平行擷取資料。共用變數 允許在分支中寫入值,並在分支完成後讀取:
YAML
JSON
平行處理項目 (使用平行迴圈)
如果需要對清單中的每個項目執行相同動作,可以使用平行迴圈更快完成執行作業。平行迴圈可讓多個迴圈疊代作業平行執行。請注意,與一般 for 迴圈不同,疊代可以依任何順序執行。
在以下範例中,一組使用者通知會在平行 for
迴圈中處理:
YAML
JSON
匯總資料 (使用平行迴圈)
您可以處理一組項目,同時收集對每個項目執行的作業資料。舉例來說,您可能想追蹤建立的項目 ID,或是維護含有錯誤的項目清單。
在下列範例中,對公開 BigQuery 資料集執行的 10 項個別查詢,都會傳回文件或一組文件中的字數。共用變數可讓字數累計,並在所有疊代完成後讀取。計算完所有文件中的字數後,工作流程會傳回總字數。