函数计算——应用初探

最近在项目中要使用阿里云的函数计算功能,所以开始按照说明尝试本地部署示例服务,并编写所需功能。参考文档:https://fc.console.aliyun.com/fc/guide/cn-hangzhou#tool

环境为macos。

按照说明,npm install @serverless-devs/s -g 安装完成,并且示例程序:image-style-transfer也安装完毕。

但s deploy执行时报错:

End the pre-hook
Error: "accountid" must be passed in
Project StyleComponent failed to execute
End of method: deploy

********** The operation was not fully successful **********
> Project Run Error: StyleComponent
Error: Error: "accountid" must be passed in

可以看到提示,是部署过程中缺失accountid导致。 如果是首次执行 s deploy命令,在执行过程中能看到提示在控制台输入accountid 和 秘钥信息。但我当时没有注意,敲了多次Enter,导致错过了输入的时机。而官方文档也并没有在示例中给出相应的问题和解决方法。

仔细研读完整的函数计算相关文档之后,按照一般的函数计算部署方式,我们需要提供一个.env文件,其中存储accountid 和 ACCESS_KEY_SECRET等信息。

关于冷启动:

所谓冷启动,是指函数计算被首次调用时,需要做一些初始化动作,导致响应耗时较长。回到根本,函数计算是一种弹性扩容的能力支持,让我们以调用远程方法的方式来执行一些计算逻辑,而不用关心高并发带来的资源消耗、动态扩容支持、费用等问题。它的实现采用的是k8s+docker方式,初始资源加载包括创建pod、拉取镜像等动作,那么显然会大于仅仅执行计算逻辑的耗时。

为了解决这个问题,我们采用的是定时执行,类似于保活的策略,来保证容器不会被销毁。

阿里云最佳实践文档:https://help.aliyun.com/document_detail/140338.html?spm=a2c4g.11174283.6.673.20685212lavP6J

文档中,完整的解决思路包括:

  1. 精简紧凑的代码包: 开发者要尽可能瘦身代码包,去掉不必要的依赖。降低 Download/Extract Code 的时间。例如对 Nodejs 函数使用 npm prune, 对 Python 函数使用autoflake,autoremove 去除没有使用的依赖。另外一些第三方库中可能会包含测试用例源代码,无用 binary 和数据文件。有选择地删除无用文件可以降低函数代码下载解压时间。
  2. 选择合适的函数语言: 由于语言理念的差异,Java 运行时冷启动时间通常要高于其他语言。对于冷启动延迟敏感的应用。在热启动延迟差别不大的情况下,使用 Python 这样的轻量语言可以大幅降低长尾延迟。
  3. 选择合适的内存: 在并发量一定的情况下,函数内存越大,冷启动表现越优。
  4. 降低冷启动概率:
    • 使用定时触发器预热函数
    • 使用 Initializer 函数入口,函数计算会异步调用初始化接口,消除掉 “User Code Init” 的时间,在函数计算系统升级或者函数更新过程中,用户对冷启动无感知。

你可能感兴趣的:(docker,阿里,函数计算,容器,弹性计算,阿里云)