[go: up one dir, main page]

Skip to content

fc warm插件,减少函数计算冷启动,保持温状态

License

Notifications You must be signed in to change notification settings

devsapp/keep-warm-fc

Repository files navigation

Keep-warm-fc Plugin

image

node.js version license

本插件帮助您通过 Serverless-Devs 工具和 FC组件 实现实例预热,降低冷启动的概率。

快速开始

作用

本插件主要通过定时触发器预热函数达到有效降低冷启动的概率目的

快速上手

website-fc本质是针对FC组件进行增强。 还是遵循FC组件的Yaml规范

通过s init start-keep-warm-fc 快速体验keep-warm-fc插件

在执行部署钩子post-deploy之后声明插件, 同时声明Http函数的访问链接

actions:
  post-deploy: # 在deploy之后运行
    - plugin: keep-warm-fc
      args:
        url: ${otherService.output.url.system_url}

参数说明

参数名称 默认值 参数含义 必填
url - Http函数的访问地址 true
method head Timer请求方法 false
cronExpression 2m 请求的频率(默认2分钟) false
enable true 定时函数是否开启 false

特别提醒:默认的请求methodhead生效的前提是trigger以及domain支持head方法。配置如下:

triggers:
  - name: httpTrigger
    type: http
    config:
      authType: anonymous
      methods:
        - GET
        - HEAD # 这里需要支持HEAD方法,Timer触发器使用
customDomains:
  - domainName: auto
    protocol: HTTP
    routeConfigs:
      - path: /*
        methods:
          - GET
          - HEAD # 这里需要支持HEAD方法,Timer触发器使用

注意事项

  1. 如果您需要关闭定时触发器,可以设置参数 enable: false, 或者删除定时函数
  2. 如果您需要定时触发器生效,最佳实践是将triggermethod方法,添加上HEAD类型。这样的话,性能是相对最好的

工作原理

工作原理比较简单,就是在完成当前部署后。post-deploy的钩子函数中,部署一个定时触发器的辅助函数,函数名格式为_FC_PLUGIN_keep-warm-${serviceName}-${functionName},这个函数每隔2m(默认是2分钟,用户可以通过cronExpression参数配置)会触发一次主函数(Http函数)中的URL,达到降低冷启动概率的目的。

实现代码

def handler(event, context):
  url = os.environ['KEEP_WARM_FC_URL']
  res = requests.head(url)
  return res.status_code

关于我们