详解异步任务:任务的状态及生命周期管理

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 任务系统中有一类很重要的概念,即任务的状态和生命周期管理。细分的状态有助于在使用时能够更清楚的了解系统发生了什么内容,便于针对性的根据业务情况进行操作。

前言

任务系统中有一类很重要的概念,即任务的状态和生命周期管理。细分的状态有助于在使用时能够更清楚的了解系统发生了什么内容,便于针对性的根据业务情况进行操作。


阿里云函数计算 Serverless Task 提供了多种可查询的状态,并提供了各状态间转移的时间点。在函数的执行层面,函数计算也提供了任务的生命周期管理概念,用户可以根据需求决定当系统对任务实例进行初始化、回收等一系列动作时的执行逻辑,实现完整的运行时生命周期管理。


本文将分别对任务运行状态运行时管理这两个方面的内容进行介绍。


任务的状态


任务的状态管理


当用户提交任务并收到提交成功的返回后,任务便已经进入系统对其生命周期的管理流程中。


执行状态

说明

Enqueued

用户触发的 Task 异步消息已进入内部队列,等待处理。

Dequeued

Task 异步消息已从函数计算后端服务出队,等待触发。

Running

Task 调用执行中。

Succeeded

Task 调用执行成功。

Failed

Task 调用执行失败。

Stopped

Task 调用因用户 Cancel 而执行终止。

Stopping

Task 调用因用户 Cancel ,尝试停止任务中。

Expired

您给异步消息配置了有效期,该消息因过期已被丢弃(未触发)。

Invalid

您的执行因函数或服务被删除等原因处于无效状态(未触发)。

Retrying

Task 调用因执行错误重试中。


一个任务的状态变更由内部的一个状态机负责管理,并对外透出状态支持实时查询。整个状态转换图如下所示:


1、用户触发一次任务后,任务入队,变更为 Enqueued 状态,并返回触发成功;

2、任务在函数计算后端服务中出队,任务变为 Dequeued 状态;

3、后端会检查任务配置。如果:

  1. 配置了异步消息有效期功能,并且该消息出队时间与入队时间之差已超过有效期,则任务被丢弃,变更为 Expired 状态。任务终止;
  2. 任务对应的函数已被删除,或创建实例出现错误,则丢弃消息,任务变更为 Invalid 状态;

4、检查后任务正式进入 Running 状态。此时任务已触发实际的执行;

5、任务执行完成后,根据返回会变更为以下几个状态:

  1. Retrying:用户配置了重试次数(默认为 3),且任务执行失败,这时会进入重试中状态,之后会变更为 Running 状态;
  2. Failed:任务执行失败,且超过了重试次数。此时会将任务状态改为 Failed;
  3. Succeeded:任务执行成功。

6、如果在整个状态流转过程用户触发 Cancel,则任务会先变更为 Stopping 状态,并尝试停止任务执行。当任务停止执行成功后,任务进入 Stopped 状态。


任务运行时管理及生命周期


当任务状态进入 Running 后,任务的实际执行便已交给函数计算的运行时。


在安全性方面,函数计算会按照 VM 对不同账号进行隔离,同一个账号下的函数可能运行于同一个 VM 中。VM 内有一个负责管理容器的客户端,来实际触发函数的执行,并收集执行结果。


用户的运行实例有几个不同的状态:


函数计算对上述所有实例状态变化的过程均提供接口,支持用户侧配置相应的逻辑。

1、创建完成 -> 执行请求阶段:支持 Initializer 功能,支持初始化实例操作。用户可以配置诸如全局变量、连接池初始化等相关操作;

2、执行中 -> 执行完成后 Pause 实例:支持 PreFreeze 接口,支持在函数 Pause 实例前执行用户侧的自定义逻辑;

3、执行中 -> 外部 cancel:函数计算会强制 Restart 用户实例,在 Restart 前支持 PreStop 接口。用户可以配置优雅停止的相关逻辑,以便支持 Cancel 时的自定义行为;

4、完成后 Pause -> 销毁实例:当一段时间没有请求后,函数计算将销毁实例。此时会调用 PreStop 接口,用户可以配置销毁容器的行为(如关闭连接池等)。


任务的停止操作


目前阶段函数计算支持了停止单一任务的操作。

当用户操作停止时,支持配置 PreStop 接口,在停止前进行一系列的资源回收工作。停止操作用户可以使用 SDK 或控制台来进行调用。以 Go 语言为例,停止一次执行的伪代码如下所示:

importfc"github.com/aliyun/fc-go-sdk"funcCancelJob() {
stopInput :=fc.NewStopStatefulAsyncInvocationInput("ServiceName", "FunctionName", "TaskUUID")
output, err :=fcClient.StopStatefulAsyncInvocation(stopInput)
...}

总结

Serverless Task 提供了每个任务的状态细节,并会对这些细节进行实时的持久化。用户可以根据需要对这些状态信息进行实时的查询,并根据执行及业务情况进行相应的操作。


在任务的运行阶段,函数计算提供了所有实例状态转移过程中的相关接口,支持用户自定义任务执行前后的逻辑。结合 PreStop 功能及 Cancel 停止任务功能,用户可以方便的实现任务的优雅操作。




使用 Serverless 1 分钟轻松搭建你的首个个人网站!




免费额度,轻松上手!小白也可极速建站:无需考虑服务器和网站源码,我们为你提供免费计算资源,运维管理服务器。活动期间完成场景体验,即有机会领取天猫超市 10 元代金券

活动时间:2022年6月20日-7月1日(工作日期间领取)

答疑群:钉钉搜索 “44700570”

体验地址:浏览器访问链接(建议pc端体验)


https://developer.aliyun.com/adc/series/activity/serverless2022

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
11月前
|
消息中间件 存储 NoSQL
解决MQ下单消息重复消费幂等机制详解
【11月更文挑战第20天】在分布式系统中,消息队列(Message Queue, MQ)作为一种常用的中间件,用于在不同系统或服务之间异步传输消息。MQ的应用场景广泛,如订单处理、日志收集、系统解耦等。然而,MQ的使用也伴随着一些挑战,其中消息重复消费是一个常见问题。特别是在下单场景中,如果消息被重复消费,可能会导致订单被重复创建或处理,从而引发一系列业务问题。
667 6
|
7月前
|
自然语言处理 算法 JavaScript
模糊搜索:在不确定性中寻找精确结果
模糊搜索作为搜索技术的基础部分,凭借其较强的容错性和高效性,广泛应用于各类场景。然而,在需求越来越复杂的今天,模糊搜索的局限性也逐渐显现,尤其在深层语义理解和复杂查询中。因此,模糊搜索在与语义搜索等新型搜索方式结合的过程中展现了更大的潜力。希望本文对你理解模糊搜索的背景、原理及应用有所帮助,助力你在实际项目中灵活运用这一工具。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
模糊搜索:在不确定性中寻找精确结果
|
11月前
|
Web App开发 算法 应用服务中间件
nginx开启局域网https访问
【10月更文挑战第22天】为了调试WebRTC功能,需要在局域网内搭建HTTPS协议。具体步骤包括:在已部署Nginx和安装OpenSSL的环境中生成私钥、证书签名请求和自签名证书;将生成的文件放置到Nginx的证书目录并修改Nginx配置文件,最后重启Nginx服务。注意,自签名证书不受第三方机构认可,如需正式使用,需向CA申请签名。
548 2
|
消息中间件 Java Kafka
如何在Java中实现异步消息处理?
如何在Java中实现异步消息处理?
|
JSON 前端开发 中间件
三万字长文让你彻底掌握 FastAPI
三万字长文让你彻底掌握 FastAPI
2126 1
|
存储 安全 Devops
这个代码托管平台真的香!比 Github 速度更快!!!
这个代码托管平台真的香!比 Github 速度更快!!!
5664 0
这个代码托管平台真的香!比 Github 速度更快!!!
|
监控 数据可视化 Java
在Spring中理解状态机:解锁业务流程的无限可能
在Spring中理解状态机:解锁业务流程的无限可能
1404 0
|
机器学习/深度学习 人工智能 自然语言处理
人工智能在现实世界中的应用:从理论到实践
【10月更文挑战第8天】人工智能在现实世界中的应用:从理论到实践
509 0
|
存储 算法 数据安全/隐私保护
基于 HTTP Header 传输签名参数
基于 HTTP Header 传输签名参数
270 13
|
弹性计算 应用服务中间件 Linux
双剑合璧:在同一ECS服务器上共存Apache与Nginx的实战攻略
在ECS服务器上同时部署Apache和Nginx的实战:安装更新系统,Ubuntu用`sudo apt install apache2 nginx`,CentOS用`sudo yum install httpd nginx`。配置Nginx作为反向代理,处理静态内容及转发动态请求到Apache(监听8080端口)。调整Apache的`ports.conf`监听8080。重启服务测试,实现两者高效协同,提升Web服务性能。记得根据流量和需求优化配置。【6月更文挑战第21天】
1192 1