本文介紹了工作流調(diào)度固定版本或預(yù)留資源函數(shù)和Serverless工作流實(shí)現(xiàn)的具體步驟。

簡(jiǎn)介

在實(shí)際生產(chǎn)場(chǎng)景中,任務(wù)流所調(diào)度的函數(shù)因?yàn)闃I(yè)務(wù)場(chǎng)景變化可能需要頻繁變更,我們會(huì)考慮到如何避免變更帶來的非預(yù)期行為,控制變更穩(wěn)定性。在Serverless工作流任務(wù)步驟使用固定版本的函數(shù)將對(duì)以下場(chǎng)景產(chǎn)生幫助:

  • 流程A編排了多個(gè)函數(shù)f1、f2、f3,同一次任務(wù)必須執(zhí)行函數(shù)的相同版本。假如流程A正在執(zhí)行中,已執(zhí)行完了函數(shù)f1,但是此時(shí)進(jìn)行了函數(shù)更新,則正在執(zhí)行的流程可能會(huì)執(zhí)行函數(shù)f2、f3的最新版本造成非預(yù)期情況發(fā)生。那么必須保證,每次流程執(zhí)行函數(shù)的版本在執(zhí)行時(shí)已經(jīng)固定。
  • 某個(gè)函數(shù)的快速回滾。上線后,發(fā)現(xiàn)流程執(zhí)行失敗是由于新變更引起的,那么需要快速回滾流程執(zhí)行上一固定版本。
  • 通過函數(shù)別名調(diào)用預(yù)留資源函數(shù)、降低函數(shù)冷啟動(dòng)時(shí)間及優(yōu)化函數(shù)成本

函數(shù)計(jì)算版本別名可以有效支持類似上述場(chǎng)景的持續(xù)集成、持續(xù)發(fā)布的各種需求。下文將通過一個(gè)具體示例展示如何在流程中使用別名調(diào)用預(yù)留資源函數(shù)。預(yù)留資源函數(shù)是依賴于固定版本函數(shù)的,因此對(duì)于其他需要固定版本的場(chǎng)景,也可參見本示例操作。

步驟一:創(chuàng)建函數(shù)預(yù)留實(shí)例

首先創(chuàng)建一個(gè)名為fnf-demo的函數(shù)計(jì)算服務(wù),并在該服務(wù)下創(chuàng)建一個(gè)名為provision的Python3函數(shù)并發(fā)布版本、別名,生成預(yù)留實(shí)例,詳細(xì)步驟,請(qǐng)參見預(yù)留模式操作

假設(shè)創(chuàng)建的函數(shù)版本為1,別名為online,并發(fā)布了一個(gè)預(yù)留實(shí)例。函數(shù)內(nèi)容如下。

import logging

def handler(event, context):
  logger = logging.getLogger()

  logger.info('Started function test')
  return {"success": True}           

步驟二:創(chuàng)建工作流

Serverless工作流對(duì)函數(shù)計(jì)算版本及別名進(jìn)行了原生支持。

Serverless工作流的Task步驟中,默認(rèn)填寫的resourceArn一般為acs:fc:{region}:{accID}:services/fnf/functions/test。按照函數(shù)執(zhí)行規(guī)則,默認(rèn)會(huì)選擇最新的函數(shù)版本執(zhí)行。您可以發(fā)布版本別名,并在工作流Task步驟中填寫resourceArn一項(xiàng)為acs:fc:{region}:{accID}:services/fnf.{別名or版本}/functions/test來實(shí)現(xiàn)對(duì)特定版本函數(shù)的調(diào)用。因此,流程可以定義如下:

version: v1
type: flow
steps:
  - type: task
    resourceArn: acs:fc:::services/fnf-demo.online/functions/provision
    # 也可以使用版本號(hào),resourceArn: acs:fc:::services/fnf-demo.1/functions/provision。name: TestFCProvision          

步驟三:使用命令行或控制臺(tái)執(zhí)行并觀察預(yù)留函數(shù)執(zhí)行

  1. 啟動(dòng)工作流執(zhí)行。使用預(yù)留模式前。1
  2. 使用預(yù)留模式后。2

從工作流的執(zhí)行時(shí)間來看,在task步驟從未使用預(yù)留模式前的耗時(shí)500 ms縮短為預(yù)留模式后的230 ms。