解密函数计算异步任务能力之「任务的状态及生命周期管理」
前言
Aliware
任务的状态及生命周期的管理
Aliware
任务的状态管理
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
用户触发一次任务后,任务入队,变更为 Enqueued 状态,并返回触发成功; -
任务在函数计算后端服务中出队,任务变为 Dequeued 状态; -
后端会检查任务配置。如果
-
配置了异步消息有效期功能,并且该消息出队时间与入队时间之差已超过有效期,则任务被丢弃,变更为 Expired 状态。任务终止; -
任务对应的函数已被删除,或创建实例出现错误,则丢弃消息,任务变更为 Invalid 状态;
-
检查后任务正式进入 Running 状态。此时任务已触发实际的执行; -
任务执行完成后,根据返回会变更为以下几个状态:
-
Retrying:用户配置了重试次数(默认为 3),且任务执行失败,这时会进入重试中状态,之后会变更为 Running 状态; -
Failed:任务执行失败,且超过了重试次数。此时会将任务状态改为 Failed; -
Succeeded:任务执行成功。
-
如果在整个状态流转过程用户触发 Cancel,则任务会先变更为 Stopping 状态,并尝试停止任务执行。当任务停止执行成功后,任务进入 Stopped 状态。
任务运行时管理及生命周期
-
创建完成 -> 执行请求阶段:支持 Initializer 功能,支持初始化实例操作。用户可以配置诸如全局变量、连接池初始化等相关操作; -
执行中 -> 执行完成后 Pause 实例:支持 PreFreeze 接口,支持在函数 Pause 实例前执行用户侧的自定义逻辑; -
执行中 -> 外部 cancel:函数计算会强制 Restart 用户实例,在 Restart 前支持 PreStop 接口。用户可以配置优雅停止的相关逻辑,以便支持 Cancel 时的自定义行为; -
完成后 Pause -> 销毁实例:当一段时间没有请求后,函数计算将销毁实例。此时会调用 PreStop 接口,用户可以配置销毁容器的行为(如关闭连接池等)。
任务的停止操作
import fc "github.com/aliyun/fc-go-sdk"func CancelJob() {stopInput := fc.NewStopStatefulAsyncInvocationInput("ServiceName", "FunctionName", "TaskUUID")output, err := fcClient.StopStatefulAsyncInvocation(stopInput)...}
总结
Aliware
Serverless Task 提供了每个任务的状态细节,并会对这些细节进行实时的持久化。用户可以根据需要对这些状态信息进行实时的查询,并根据执行及业务情况进行相应的操作。在任务的运行阶段,函数计算提供了所有实例状态转移过程中的相关接口,支持用户自定义任务执行前后的逻辑。结合 PreStop 功能及 Cancel 停止任务功能,用户可以方便的实现任务的优雅操作。
往期回顾
点击阅读原文,查看更多函数计算相关内容!