知识卡片

初始化代码放在handler外以复用实例

专业/工作 · 332.a.1

内容

FaaS平台存在[[冷启动优化的三层手段]]中的实例复用——同一个实例处理完一次请求后不会立刻销毁,会 静默保留一段时间等待下一次触发。这意味着写在函数handler方法之外(模块加载时执行一次)的代码, 在实例被复用期间只会执行一次;而写在handler内部的代码,每次调用都会重新执行一遍。据此可以推出 一个具体的编程惯用法:数据库连接的建立、机器学习模型的加载、需要预先下载的大文件,这类耗时且 状态可以跨请求复用的初始化操作,都应该放在handler外层,让它们只在冷启动时执行一次,热启动的 后续请求直接复用已经就绪的对象,而不是每次调用都重新初始化一遍。

参考来源

《Serverless工程实践:从入门到进阶》第4章《Serverless应用开发、调试与优化》