更新时间:2023-11-06 GMT+08:00

预留实例管理(旧)

什么是预留实例?

函数工作流提供了按量和预留两种类型的实例。

  • 按量实例是由函数工作流根据用户使用函数的实际情况来创建和释放,当函数工作流收到函数的调用请求时,自动为此请求分配执行环境。
  • 预留实例是将函数实例的创建和释放交由用户管理,当您为某一函数创建了预留实例,函数工作流收到此函数的调用请求时,会优先将请求转发给您的预留实例,当请求的峰值超过预留实例处理能力时,剩余部分的请求将会转发给按量实例,由函数工作流自动为您分配执行环境。

    预留实例在创建完成后,会自动加载该函数的代码、依赖包以及执行初始化入口函数,且预留实例会常驻环境,消除冷启动对业务的影响。

    用户默认没有权限使用预留实例,如果需要使用预留实例功能,请在工单系统提交工单添加白名单。

您可以直接创建或者通过函数创建预留实例,两者的区别如下:

表1 两种方式创建预留实例的区别

创建方式

优点

缺点

直接创建

创建步骤简单,易操作

只能创建固定个数的预留实例,可能导致繁忙时预留实例不够用,或者空闲时,预留实例资源浪费

通过函数创建

支持创建不同时间段不同数量的预留实例,避免繁忙时预留实例不够用,或者空闲时,预留实例资源浪费

创建步骤繁杂

直接创建固定个数的预留实例

直接创建固定个数的预留实例前,确保FunctionGraph控制台已存在需要创建预留实例的目标函数,例如Objective-func。

  1. 登录FunctionGraph控制台,在左侧导航栏选择“函数 > 预留实例列表”,进入“预留实例列表”界面。
  2. 单击“配置预留实例”,弹出“配置预留实例”对话框。
  3. 设置以下信息。
    表2 预留实例信息

    参数

    参数说明

    应用

    选择Objective-func所属的应用。

    函数

    选择“Objective-func”。

    版本

    选择Objective-func的版本。

    预留实例个数

    输入需要创建预留实例的个数。

    您可以参见“资源统计”中统计的Objective-func实际运行使用的实例数,设置预留实例个数,或者根据Objective-func过往使用情况,设置预留实例个数。

  4. 单击“确定”,完成预留实例的创建。

    预留实例创建完成后,只支持修改预留实例的个数。

通过函数创建数量可变的预留实例

用户在不同的时间段,业务使用的实例数可能不一样,您可以通过定时触发器调用函数,为各个时间段设置不同的预留实例数,避免在业务繁忙时未设置预留实例,导致函数被冷启动影响业务或者在业务空闲时设置多个预留实例,导致资源闲置。

通过函数创建数量可变的预留实例前,确保FunctionGraph控制台已存在需要创建预留实例的目标函数,例如Objective-func。

  1. 返回函数工作流控制台,在左侧导航栏选择“函数 > 函数列表”,进入函数列表界面。
  2. 单击“创建函数”,进入“创建函数”界面。
  3. 输入以下信息。

    参数

    参数说明

    模板

    选择“使用空模板”。

    函数名称

    输入您自定义的函数名称,用于识别不同的函数。

    所属应用

    选择“default”。

    委托名称

    选择“不使用任何委托”。

    描述

    输入您对函数的描述信息,可以不填。

    运行时语言

    选择“Python 2.7”。

    函数执行入口

    输入“index.handler”。

    代码上传方式

    函数配置时,先选择“默认代码”。在配置“页签”选择“在线编辑”,输入如下代码。

    # -*- coding:utf-8 -*-
    import json
    import requests
    def handler (event, context):
        domainId = "https://{Endpoint}"
        url = "/v2/{project_id}/fgs/functions/{func-urn}/reservedinstances"
        token = context.getToken()
        requrl = domainId + url
        headerdata = {"Content-Type":"application/json","x-auth-token":token}
        r = requests.put(requrl, data=event["user_event"], headers=headerdata,verify=False)
        return r.json

    注意将上述代码中参数部分根据实际情况进行替换:

    • Endpoint:Objective-func所在的终端节点,可以从地区和终端节点获取。
    • project_id:Objective-func所在的项目ID
    • func-urn:Objective-func的URN。
  4. 单击“创建函数”,完成函数的创建。
  5. 在“配置”页签,单击“创建委托”,进入“委托”界面。
  6. 创建“FunctionGraph User”权限的委托,具体参见配置委托权限
  7. 返回“配置”页签,在“委托名称”中选择6中创建的委托,单击“保存”,保存配置的委托。
  8. 在“触发器”页签,单击“创建触发器”,弹出“创建触发器”对话框。
  9. 输入以下信息。

    参数

    参数说明

    触发器类型

    选择“定时触发器(TIMER)”。

    定时器名称

    输入您自定义的定时器名称,用于识别不同的定时器。

    触发规则

    选择“Cron表达式”,根据实际情况输入触发规则。

    是否开启

    默认选择开启,无需修改。

    附加信息

    结合“触发规则”,输入不同时间段需要的预留实例数。

    图1 创建定时触发器

    图1所示,创建了一个每隔3分钟创建2个预留实例的定时触发器。

  10. 单击“确定”,完成触发器的创建。

    触发器创建完成后,Objective-func通过您创建的触发规则在不同时间段,创建数量不同的预留实例数。