ASW 工作流最佳實踐(二):使用 ASW 併發調用函數

在音視頻轉碼、ETL 作業處理、基因數據處理等諸多場景中,我們都可以通過工作流並行調用雲函數,將任務進行並行處理,大大提高任務處理的吞吐量,滿足應用場景的高實時性、高併發能力。

《使用 ASW 工作流創建您的第一個函數編排》文章中,我們分享瞭如何使用 ASW 編排一個 Sum 雲函數進行求和計算。本期文章主要分享如何使用 ASW 的 Map 節點能力進行併發的數據求和計算。

01. 創建函數

  1. 登錄「雲函數控制檯」,創建一個函數名稱爲 Sum,運行環境爲 Python 3.6 的雲函數。
# -*- coding: utf8 -*-
import json 
def main_handler(event, context):
    sum = 0
    for i in event["values"]:
        sum += i
    return sum

02. 創建工作流

  1. 登錄「應用與編排服務流控制檯」,在工作流頁面,單擊「新建」,進入創建工作流頁面,單擊「入門模板」,選擇「Map 循環」模板。
  • ASW 中 Map 節點會遍歷輸入中的某個數組類型參數,對於數組中的每個元素並行執行其串行節點。Map 節點類似於編程語言中的 foreach,但節點循環任務是併發執行的。
  • ASW 控制檯地址:https://console.cloud.tencent.com/asw
  1. 修改「代碼」中 Iterator 下 States 節點中的 state01 爲 sum 函數調用,如下工作流定義:
{
 "Comment": "使用Map節點循環處理數組array中的數據",
 "StartAt": "MapState",
 "States": {
  "MapState": {
   "Type": "Map",
   "ItemsPath": "$.array",
   "ResultPath": "$.result",
   "MaxConcurrency": 2,
   "Next": "FinalState",
   "Iterator": {
    "StartAt": "State01",
    "States": {
     "State01": {
      "Type": "Task",
      "Comment": "調用求和函數",
      "Resource": "qrn:qcs:asw:ap-guangzhou:123456789:sdk:json:qcloud:scf:Invoke/sum/$DEFAULT/default",
      "End": true
     }
    }
   }
  },
  "FinalState": {
   "Type": "Pass",
   "End": true
}

ItemsPath 指定作爲了 Map節點循環的數組。

MaxConcurrency 指定了 Map 節點併發調用的函數數量。

Iterator 爲 Map 節點 循環任務定義。

  1. 單擊「下一步」,在「配置基本信息」頁面,輸入工作流名稱,選擇運行角色與工作流類型,單擊「完成」,完成工作流創建。

03. 運行工作流

  1. 在工作流列表,單擊「名稱」鏈接進入工作流,您在彈出的「開始執行」窗口中,以 JSON 格式輸入 array 數組。例如:
{
 "array": [{
   "values": [1, 2, 3, 4, 5]
  },
  {
   "values": [4, 2, 3, 1, 5]
  },
  {
   "values": [1, 0, 8, 4, 5]
  },
  {
   "values": [7, 2, 3, -2, 5]
  }
 ]
}
  1. 單擊「確定」,完成狀態執行後,可以在詳情頁查看執行結果。滑動至頁面最下方,在「執行歷史記錄」下,您可以查看子節點的運行情況。我們可以看到 Map 節點會以併發數(MaxConcurrency)爲 2 來調用 sum 函數,每個 sum 函數的入參爲 array 數組的一個 item。
  1. 單擊「資源」中的雲函數鏈接,可以直接跳到雲函數控制檯,查看函數執行詳情。

識別下方 👇 二維碼,即可加入騰訊雲 ASW 交流羣。


One More Thing

立即體驗騰訊雲 Serverless Demo,領取 Serverless 新用戶禮包 👉 騰訊雲 Serverless 新手體驗

歡迎訪問:Serverless 中文網

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