当您对函数发起异步调用时,相关请求会被持久化保存到函数计算内部队列中,然后被可靠地处理。如果您想追踪并保存异步调用各个阶段的状态,实现更丰富的任务控制和可观测能力,可以选择开启任务模式处理异步请求。本文介绍异步任务的背景信息、使用限制和常用功能。
背景信息
开启异步任务后,您可以实现以下功能:
每次函数调用将详细记录调用过程中的状态转换信息,例如调用输入、执行结果和错误信息等。
拥有调用级的控制能力,可以主动终止调用等。
异步任务会保存状态信息,因此,函数的调用和执行会有一定的额外延迟,该延迟不会产生额外的费用。关于函数计算计费的详细信息,请参见计费概述。
使用限制
场景限制
异步任务虽然功能更丰富,但相应的系统开销更大。以下场景建议您关闭任务模式:
您对请求处理链路延时非常敏感,需要平均延时在百毫秒以下。
您需要每秒数千甚至更高的速率发起异步调用。
地域限制
异步任务支持华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北3(张家口)、华南1(深圳)、西南1(成都)、中国香港、新加坡、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)、德国(法兰克福)、马来西亚(吉隆坡)、印度尼西亚(雅加达)、泰国(曼谷)、日本(东京)和韩国(首尔)地域。
时效限制
仅支持查询7天内的任务状态信息。
功能对比
如果您要自行构建异步任务处理平台,或者实现简单的定时类任务,可以使用Kubernetes的Jobs功能来实现。以下是函数计算异步任务和Kubernetes的Jobs功能对比。
对比项 | 函数计算异步任务 | Kubernetes的Jobs功能 |
适用场景 | 适用于任务执行时长数十毫秒的实时任务和任务执行时长数十小时的离线任务。 | 适用于任务提交速度要求不高,任务负载比较固定,任务实时性要求不高的离线任务。 |
任务可观测能力 | 支持。提供日志、任务排队数等指标和任务链路耗时、任务状态查询等丰富的可观测能力。 | 需自行整合开源软件来实现。 |
任务实例自动扩缩容 | 支持。根据任务排队数和实例资源使用率自动扩缩容。 | 需通过任务队列自行实现扩缩容和实例负载均衡,复杂度较高。 |
任务实例伸缩速度 | 毫秒级。 | 分钟级。 |
任务实例资源利用率 | 用户只需要选择合适的实例规格,实例自动伸缩,按实际处理任务的时长计量,资源利用率高。 | 需在Jobs提交时确定实例的规格和数目。实例难以自动伸缩和负载均衡,资源利用率低。 |
任务提交速度 | 单个用户支持每秒提交数万条任务。 | 整个集群每秒最多启动数百条Jobs。 |
任务定时或延时提交 | 支持。 | 支持任务定时提交,不支持任务延时提交。 |
任务去重 | 支持。 | 不支持。 |
终止指定任务 | 支持。 | 有限支持。通过终止任务实例间接实现。 |
任务流控 | 支持。可在用户或任务处理函数等不同粒度进行流控。 | 不支持。 |
任务结果自动回调 | 支持。 | 不支持。 |
开发运维成本 | 只需要实现任务的处理逻辑。 | 需维护K8s集群。 |
常见功能
异步任务的常见功能如下所示: