玩转阿里云函数工作流(一)——秒级定时触发器

前言

阿里云函数工作流 Function Flow(FnF),是一个用来编排分布式任务的 Serverless 云服务,方便用户将大型复杂的任务拆分为更小的子任务,用户可按需设计子任务之间的执行顺序和跳转流程,并可实时跟进子任务的执行状态和针对子任务设计错误处理。以此来简化业务开发的流程跳转、错误处理,让用户更聚焦于业务逻辑的开发。

阿里云函数计算 Function Compute(FC),旨在帮助用户采用弹性伸缩、动态分配资源的方式来执行业务函数。让用户无需购买部署服务器,无需考虑业务负载,就能快速搭建可处理高并发的后台服务。

函数计算定时触发器支持定时执行用户函数,目前定时粒度只支持分钟级别。本文介绍如何使用函数工作流来进一步的实现函数秒级定时触发。

整体框架

借助于 FnF 提供的 task 任务步骤、wait 等待步骤 和 foreach 并行循环步骤,很方便的实现对 FC 函数调用或定时调用,以下介绍如何实现秒级定时调用 FC 函数 timer-handler

玩转阿里云函数工作流(一)——秒级定时触发器

执行流程如下:

  1. FC 定时触发器分钟级别触发 timer 函数
  2. timer 函数使用 FnF SDK 执行工作流
  3. 工作流中 task 步骤调用 timer-gen 函数生成秒级触发时间戳序列
  4. 并行循环 foreach 步骤为序列中每个时间戳生成并行定时任务来调用目标函数 timer-hander

实现

只需以下几步就能快速的实现对目标函数 timer-handler 的秒级定时调用:

1. 代码准备

下载 github 中 second-level-timer 示例代码。

2. 创建 FnF 工作流

在 FnF 控制台 使用代码中提供的流定义文件 flow.yml 创建工作流命名为 demo-timer-seconds
玩转阿里云函数工作流(一)——秒级定时触发器

3. [可选步骤] 配置日志仓库 sls

修改 template.yml,修改日志仓库为您自己的配置,函数的执行日志会写入到该日志仓库中。
玩转阿里云函数工作流(一)——秒级定时触发器

4. 创建 FC 函数和定时触发器

在代码根目录执行 fun deploy,该命令会读取执行目录下的 template.yml 自动创建所有定义的 FC 函数和定时触发器。
默认执行完毕后会在 FC 上创建

  • 服务 fnf-demo
  • 函数 timertimer-gentimer-handler
  • 函数 timer 的定时触发器 trigger

5. 验证是否生效

  • 前往 FnF 控制台查看工作流 demo-timer-seconds 执行记录,该工作流会每分钟触发一次。
    玩转阿里云函数工作流(一)——秒级定时触发器
  • 查看目标函数 timer-handler 调用记录,如果您在步骤 3 中配置了日志仓库,可直接前往查看
    玩转阿里云函数工作流(一)——秒级定时触发器

自定义执行

您可对示例代码中配置文件稍作修改,支持以下自定义执行:

自定义目标函数

如果想使用你自己的 FC 函数来替换实例代码中默认目标函数 timer-handler

  • 在 FC 控制台创建好你的函数,比如服务名:demo-timer-service,函数名:demo-timer-function。工作流调用 FC 函数时要求函数返回值为 json 格式,因而请确保您的函数返回正确的 json 格式,类似于 timer-handler
  • 修改工作流定义文件 flow.yml 中 task 步骤对应函数的 resourceArn
    玩转阿里云函数工作流(一)——秒级定时触发器
  • 在 FnF 控制台,更新工作流的定义

自定义秒级触发间隔

示例中默认的执行间隔为 1s,你可以修改 template.yml 文件中定时触发器的输入 duration 字段来设置:
玩转阿里云函数工作流(一)——秒级定时触发器
修改完后执行 fun deploy 重新部署定时触发器即可。

自定义目标函数的输入

目标函数 timer-handler调用时默认的 event 输入格式为:

{
"triggerName":"trigger",
"triggerTime":"2019-12-12T09:56:05Z",
"payload":{
"data":"hello world",
"duration":1
}
}

您可以修改 template.ymlPayload 字段的 input 值来自定义目标函数的输入:
玩转阿里云函数工作流(一)——秒级定时触发器
修改完后执行 fun deploy 重新部署定时触发器即可。

总结

函数工作流 FnF 极大简化了复杂业务流程的实现,将业务中每个子任务的执行变得可控透明化。同时工作流提供的逻辑步骤(顺序执行、并行、等待、跳转等)天然支持高并发和分布式任务的 Map/Reduce。

知识链接

函数工作流文档
函数计算文档
函数计算定时触发器
fun 工具

使用和交流

欢迎使用阿里云函数工作流和函数计算服务

  • 函数工作流官网客户群(钉钉):23116481
  • 函数计算官网客户群(钉钉):11721331