本插件帮助您通过 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 |
特别提醒:默认的请求
method
为head
生效的前提是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触发器使用
- 如果您需要关闭定时触发器,可以设置参数
enable: false
, 或者删除定时函数 - 如果您需要定时触发器生效,最佳实践是将
trigger
的method
方法,添加上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
- Serverless Devs 工具:
- 阿里云函数计算组件:
- 钉钉交流群:33947367