当函数第一次被调用的时候,函数计算需要动态调度实例、下载代码、解 压代码、启动实例,得到一个可执行函数的代码环境。然后才开始在系统分配的实例中真正 地执行用户的初始化函数,执行函数业务逻辑。这个调度实例启动实例的过程,就是系统的 冷启动过程。函数逻辑执行结束后,不会立即释放掉实例,会等一段时间,如果在这段时间内有新的 调用,会复用这个实例,比如上图中的 Request 2,由于执行环境已经分配好了, Request 2 可以直接使用,所以 Request 2 就不会遇到冷启动。 Request 2 执行结束后,等待一段时间,如果这段时间没有新的请求分配到这个实例 上,那系统会回收实例,释放执行环境。此实例释放后,新的请求 Request 3 来到函数 计算,需要重新调度实例、下载代码、解压代码,启动实例,又会遇到冷启动。 所以,为了减小冷启动带来的影响,要尽可能避免冷启动,降低冷启动带来的延时。使用预留实例可以完全避免冷启动,预留实例是在用户预留后就分配实例,准备执行环 境,请求结束后系统也不会自动回收实例。 预留实例不由系统自动分配与回收,由用户控制实例的生命周期,可以长驻不销毁,这 将彻底消除实例冷启动带来的延时毛刺,提供极致性能,也为在线应用迁移至函数计算扫清 障碍。如果业务场景不适合使用预留实例,那就要设法降低冷启动的延时,比如降低代码包大 小,可以降低下载代码包、解压代码包的时间。Initializer 函数是实例的初始化函数, Initializer 在同一实例中执行且只执行一次,所以可以将一些耗时的公共逻辑放到 Initializer 中,比如在 NAS 中加载依赖、建立连接等等。另外要尽量保持请求连续稳定, 避免突发的流量,由于系统已启动的实例不足以支撑大量的突发流量,就会带来不可避免的 冷启动。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。