0

ASW 工作流最佳实践(二):使用 ASW 并发调用函数

 1 year ago
source link: https://serverlesscloud.cn/best-practice/2021-05-17-asw
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ASW 工作流最佳实践(二):使用 ASW 并发调用函数

发布于: 2021-5-17
归档于:

标签:Serverless云函数

在音视频转码、ETL 作业处理、基因数据处理等诸多场景中,我们都可以通过工作流并行调用云函数,将任务进行并行处理,大大提高任务处理的吞吐量,满足应用场景的高实时性、高并发能力。

《使用 ASW 工作流创建您的第一个函数编排》文章中,我们分享了如何使用 ASW 编排一个 Sum 云函数进行求和计算。本期文章主要分享如何使用 ASW 的 Map 节点能力进行并发的数据求和计算。

01. 创建函数

  1. 登录「云函数控制台」,创建一个函数名称为 Sum,运行环境为 Python 3.6 的云函数。
  2. 云函数控制台地址:https://console.cloud.tencent.com/scf
# -*- coding: utf8 -*-
import json 
def main_handler(event, context):
    sum = 0
    for i in event["values"]:
        sum += i
    return sum
ad61d38d455aa379eccb0ebd4f395e66.png

02. 创建工作流

  1. 登录「应用与编排服务流控制台」,在工作流页面,单击「新建」,进入创建工作流页面,单击「入门模板」,选择「Map 循环」模板。
  2. ASW 中 Map 节点会遍历输入中的某个数组类型参数,对于数组中的每个元素并行执行其串行节点。Map 节点类似于编程语言中的 foreach,但节点循环任务是并发执行的。
  3. ASW 控制台地址:https://console.cloud.tencent.com/asw
83082d24eddb0322328d83947c59ec1f.png
  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. 单击「下一步」,在「配置基本信息」页面,输入工作流名称,选择运行角色与工作流类型,单击「完成」,完成工作流创建。
506e6ff0696b58f83e0857da94906d41.png

03. 运行工作流

  1. 在工作流列表,单击「名称」链接进入工作流,您在弹出的「开始执行」窗口中,以 JSON 格式输入 array 数组。例如:
ea282e8007e39db63b9736f1dd1991d8.png
{
 "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。
744c5f9e5cf53044ac4243bc4c994463.png
  1. 单击「资源」中的云函数链接,可以直接跳到云函数控制台,查看函数执行详情。
d6827d4193ca68aa86028d62dad2fe55.png

识别下方 👇 二维码,即可加入腾讯云 ASW 交流群。

22821ff9d923fd60056f2313db287a79.png

传送门:

欢迎访问:Serverless 中文网,您可以在 最佳实践 里体验更多关于 Serverless 应用的开发!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK