本文介紹了工作流調度固定版本或預留資源函數和Serverless 工作流實現的具體步驟。
簡介
在實際生產場景中,任務流所調度的函數因為業務場景變化可能需要頻繁變更,您會考慮到如何避免變更帶來的非預期行為,控制變更穩定性。在Serverless 工作流任務步驟使用固定版本的函數將對以下場景產生幫助:
- 流程A編排了多個函數f1、f2和f3,同一次任務必須執行函數的相同版本。假如流程A正在執行中,已執行完了函數f1,但是此時進行了函數更新,則正在執行的流程可能會執行函數f2、f3的最新版本造成非預期情況發生。那么必須保證,每次流程執行函數的版本在執行時已經固定。
- 某個函數的快速回滾。上線后,發現流程執行失敗是由于新變更引起的,那么需要快速回滾流程執行上一固定版本。
- 通過函數別名調用預留資源函數、降低函數冷啟動時間。關于函數計算的計費方式和按量模式,請參見計費概述和按量模式。
函數計算版本及別名可以有效支持類似上述場景的持續集成、持續發布的各種需求。下文將通過一個具體示例展示如何在流程中使用別名調用預留資源函數。預留資源函數是依賴于固定版本函數的,因此對于其他需要固定版本的場景,也可參見本示例操作。
流程
本次示例操作包含以下步驟:
步驟一:創建函數預留實例
首先創建一個名為
fnf-demo
的函數計算服務,并在該服務下創建一個名為provision的Python3函數并發布版本、別名,生成預留實例,詳細步驟,請參見彈性管理(含預留模式)。假設創建的函數版本為1,別名為online,并發布了一個預留實例。函數內容如下。
import logging
def handler(event, context):
logger = logging.getLogger()
logger.info('Started function test')
return {"success": True}
步驟二:創建工作流
Serverless 工作流對函數計算版本及別名進行了原生支持。
在Serverless 工作流的Task步驟中,默認填寫的resourceArn
一般為acs:fc:{region}:{accID}:services/fnf/functions/test
。按照函數執行規則,默認會選擇最新的函數版本執行。您可以發布版本或別名,并在工作流Task步驟中填寫resourceArn
一項為acs:fc:{region}:{accID}:services/fnf.{別名or版本}/functions/test
來實現對特定版本函數的調用。因此,流程可以定義如下:
version: v1
type: flow
steps:
- type: task
resourceArn: acs:fc:::services/fnf-demo.online/functions/provision
# 也可以使用版本號,resourceArn: acs:fc:::services/fnf-demo.1/functions/provision。
name: TestFCProvision
步驟三:使用命令行或控制臺執行并觀察預留函數執行
- 啟動工作流執行。使用預留模式前。
- 使用預留模式后。
從工作流的執行時間來看,在task步驟從未使用預留模式前的耗時500 ms縮短為預留模式后的230 ms。
文檔內容是否對您有幫助?