日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
解密函數(shù)計算異步任務能力之任務的狀態(tài)及生命周期管理

一、前言

任務系統(tǒng)中有一類很重要的概念,即任務的狀態(tài)。其本質(zhì)是對任務的生命周期管理。細分的狀態(tài)有助于在使用時能夠更清楚的了解系統(tǒng)發(fā)生了什么內(nèi)容,便于針對性的根據(jù)業(yè)務情況進行操作。函數(shù)計算 Serverless Task 提供了多種可查詢的狀態(tài),并提供了各狀態(tài)間轉(zhuǎn)移的時間點。在函數(shù)的執(zhí)行層面,函數(shù)計算也提供了任務的生命周期管理概念,用戶可以根據(jù)需求決定當系統(tǒng)對任務實例進行初始化、回收等一系列動作時的執(zhí)行邏輯,實現(xiàn)完整的運行時生命周期管理。本文將分別對任務運行狀態(tài)及運行時管理這兩個方面的內(nèi)容進行介紹。

二、任務的狀態(tài)及生命周期的管理

1.任務的狀態(tài)管理

執(zhí)行狀態(tài)

說明

Enqueued

用戶觸發(fā)的 Task 異步消息已進入內(nèi)部隊列,等待處理。

Dequeued

Task 異步消息已從函數(shù)計算后端服務出隊,等待觸發(fā)。

Running

Task 調(diào)用執(zhí)行中。

Succeeded

Task 調(diào)用執(zhí)行成功。

Failed

Task 調(diào)用執(zhí)行失敗。

Stopped

Task 調(diào)用因用戶 Cancel 而執(zhí)行終止。

Stopping

Task 調(diào)用因用戶 Cancel ,嘗試停止任務中。

Expired

您給異步消息配置了有效期,該消息因過期已被丟棄(未觸發(fā))。

Invalid

您的執(zhí)行因函數(shù)或服務被刪除等原因處于無效狀態(tài)(未觸發(fā))。

Retrying

Task 調(diào)用因執(zhí)行錯誤重試中。

當用戶提交任務并收到提交成功的返回后,任務便已經(jīng)進入系統(tǒng)對其生命周期的管理流程中。一個任務的狀態(tài)變更由內(nèi)部的一個狀態(tài)機負責管理,并對外透出狀態(tài)支持實時查詢。整個狀態(tài)轉(zhuǎn)換圖如下所示:

圖 1

  • 用戶觸發(fā)一次任務后,任務入隊,變更為 Enqueued 狀態(tài),并返回觸發(fā)成功;
  • 任務在函數(shù)計算后端服務中出隊,任務變?yōu)?Dequeued 狀態(tài);
  • 后端會檢查任務配置。如果:

配置了異步消息有效期功能,并且該消息出隊時間與入隊時間之差已超過有效期,則任務被丟棄,變更為 Expired 狀態(tài)。任務終止;

任務對應的函數(shù)已被刪除,或創(chuàng)建實例出現(xiàn)錯誤,則丟棄消息,任務變更為 Invalid 狀態(tài);

  • 檢查后任務正式進入 Running 狀態(tài)。此時任務已觸發(fā)實際的執(zhí)行;
  • 任務執(zhí)行完成后,根據(jù)返回會變更為以下幾個狀態(tài):

Retrying:用戶配置了重試次數(shù)(默認為 3),且任務執(zhí)行失敗,這時會進入重試中狀態(tài),之后會變更為 Running 狀態(tài);

Failed:任務執(zhí)行失敗,且超過了重試次數(shù)。此時會將任務狀態(tài)改為 Failed;

Succeeded:任務執(zhí)行成功。

  • 如果在整個狀態(tài)流轉(zhuǎn)過程用戶觸發(fā) Cancel,則任務會先變更為 Stopping 狀態(tài),并嘗試停止任務執(zhí)行。當任務停止執(zhí)行成功后,任務進入 Stopped 狀態(tài)。

2.任務運行時管理及生命周期

當任務狀態(tài)進入 Running 后,任務的實際執(zhí)行便已交給函數(shù)計算的運行時。在安全性方面,函數(shù)計算會按照 VM 對不同賬號進行隔離,同一個賬號下的函數(shù)可能運行于同一個 VM 中。VM 內(nèi)有一個負責管理容器的客戶端,來實際觸發(fā)函數(shù)的執(zhí)行,并收集執(zhí)行結果。用戶的運行實例有幾個不同的狀態(tài):

圖 2

函數(shù)計算對上述所有實例狀態(tài)變化的過程均提供接口,支持用戶側配置相應的邏輯。

  • 創(chuàng)建完成 -> 執(zhí)行請求階段:支持 Initializer 功能,支持初始化實例操作。用戶可以配置諸如全局變量、連接池初始化等相關操作;
  • 執(zhí)行中 -> 執(zhí)行完成后 Pause 實例:支持 PreFreeze 接口,支持在函數(shù) Pause 實例前執(zhí)行用戶側的自定義邏輯;
  • 執(zhí)行中 -> 外部 cancel:函數(shù)計算會強制 Restart 用戶實例,在 Restart 前支持 PreStop 接口。用戶可以配置優(yōu)雅停止的相關邏輯,以便支持 Cancel 時的自定義行為;
  • 完成后 Pause -> 銷毀實例:當一段時間沒有請求后,函數(shù)計算將銷毀實例。此時會調(diào)用 PreStop 接口,用戶可以配置銷毀容器的行為(如關閉連接池等)。

圖 3

3.任務的停止操作

目前階段函數(shù)計算支持了停止單一任務的操作。當用戶操作停止時,支持配置 PreStop 接口,在停止前進行一系列的資源回收工作。停止操作用戶可以使用 SDK 或控制臺來進行調(diào)用。以 Go 語言為例,停止一次執(zhí)行的偽代碼如下所示:

import fc "github.com/aliyun/fc-go-sdk"


func CancelJob() {
stopInput := fc.NewStopStatefulAsyncInvocationInput("ServiceName", "FunctionName", "TaskUUID")
output, err := fcClient.StopStatefulAsyncInvocation(stopInput)
...
}

三、總結

Serverless Task 提供了每個任務的狀態(tài)細節(jié),并會對這些細節(jié)進行實時的持久化。用戶可以根據(jù)需要對這些狀態(tài)信息進行實時的查詢,并根據(jù)執(zhí)行及業(yè)務情況進行相應的操作。在任務的運行階段,函數(shù)計算提供了所有實例狀態(tài)轉(zhuǎn)移過程中的相關接口,支持用戶自定義任務執(zhí)行前后的邏輯。結合 PreStop 功能及 Cancel 停止任務功能,用戶可以方便的實現(xiàn)任務的優(yōu)雅操作。?


網(wǎng)頁名稱:解密函數(shù)計算異步任務能力之任務的狀態(tài)及生命周期管理
本文路徑:http://m.5511xx.com/article/cdiieog.html