任务系统中有一类很重要的概念,即任务的状态。其本质是对任务的生命周期管理。细分的状态有助于在使用时能够更清楚的了解系统发生了什么内容,便于针对性的根据业务情况进行操作。函数计算 Serverless Task 提供了多种可查询的状态,并提供了各状态间转移的时间点。在函数的执行层面,函数计算也提供了任务的生命周期管理概念,用户可以根据需求决定当系统对任务实例进行初始化、回收等一系列动作时的执行逻辑,实现完整的运行时生命周期管理。本文将分别对任务运行状态及运行时管理这两个方面的内容进行介绍。
执行状态 |
说明 |
Enqueued |
用户触发的 Task 异步消息已进入内部队列,等待处理。 |
Dequeued |
Task 异步消息已从函数计算后端服务出队,等待触发。 |
Running |
Task 调用执行中。 |
Succeeded |
Task 调用执行成功。 |
Failed |
Task 调用执行失败。 |
Stopped |
Task 调用因用户 Cancel 而执行终止。 |
Stopping |
Task 调用因用户 Cancel ,尝试停止任务中。 |
Expired |
您给异步消息配置了有效期,该消息因过期已被丢弃(未触发)。 |
Invalid |
您的执行因函数或服务被删除等原因处于无效状态(未触发)。 |
Retrying |
Task 调用因执行错误重试中。 |
当用户提交任务并收到提交成功的返回后,任务便已经进入系统对其生命周期的管理流程中。一个任务的状态变更由内部的一个状态机负责管理,并对外透出状态支持实时查询。整个状态转换图如下所示:
图 1
配置了异步消息有效期功能,并且该消息出队时间与入队时间之差已超过有效期,则任务被丢弃,变更为 Expired 状态。任务终止;
任务对应的函数已被删除,或创建实例出现错误,则丢弃消息,任务变更为 Invalid 状态;
Retrying:用户配置了重试次数(默认为 3),且任务执行失败,这时会进入重试中状态,之后会变更为 Running 状态;
Failed:任务执行失败,且超过了重试次数。此时会将任务状态改为 Failed;
Succeeded:任务执行成功。
当任务状态进入 Running 后,任务的实际执行便已交给函数计算的运行时。在安全性方面,函数计算会按照 VM 对不同账号进行隔离,同一个账号下的函数可能运行于同一个 VM 中。VM 内有一个负责管理容器的客户端,来实际触发函数的执行,并收集执行结果。用户的运行实例有几个不同的状态:
图 2
函数计算对上述所有实例状态变化的过程均提供接口,支持用户侧配置相应的逻辑。
图 3
目前阶段函数计算支持了停止单一任务的操作。当用户操作停止时,支持配置 PreStop 接口,在停止前进行一系列的资源回收工作。停止操作用户可以使用 SDK 或控制台来进行调用。以 Go 语言为例,停止一次执行的伪代码如下所示:
import fc "github.com/aliyun/fc-go-sdk"
func CancelJob() {
stopInput := fc.NewStopStatefulAsyncInvocationInput("ServiceName", "FunctionName", "TaskUUID")
output, err := fcClient.StopStatefulAsyncInvocation(stopInput)
...
}
Serverless Task 提供了每个任务的状态细节,并会对这些细节进行实时的持久化。用户可以根据需要对这些状态信息进行实时的查询,并根据执行及业务情况进行相应的操作。在任务的运行阶段,函数计算提供了所有实例状态转移过程中的相关接口,支持用户自定义任务执行前后的逻辑。结合 PreStop 功能及 Cancel 停止任务功能,用户可以方便的实现任务的优雅操作。
当前题目:解密函数计算异步任务能力之任务的状态及生命周期管理
当前URL:http://www.shufengxianlan.com/qtweb/news22/444172.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联