容器镜像相比于代码包有更好的可移植性和更丰富的工具链生态,但其自带的与应用无关的数据极易使镜像臃肿,GB级的镜像会导致分钟级的冷启动。开启函数计算的镜像加速后,可提速2~5倍,将分钟级的镜像拉取缩短至秒级。本文介绍镜像拉取加速的使用原理、注意事项及配置方法。

使用原理

对于运行环境为Custom Container的函数,每次创建或更新该类函数(CreateFunction/UpdateFunction)时,为该函数开启镜像加速功能后,函数计算会扮演服务RAM角色,用临时的AccessKey拉取镜像,并且转存至函数计算系统的加速镜像缓存服务中。转存结束后,函数中的自定义容器镜像拉取速度将会得到显著提升。

注意事项

  • 支持镜像拉取加速的地域有华北2(北京)、华北3(张家口)、华东1(杭州)、华东2(上海)、中国香港、新加坡(新加坡)、美国(硅谷)以及美国(弗吉尼亚)。
  • 如果您同意开启镜像加速,则代表您同意并授权函数计算拉取您仓库内的镜像并转存至函数计算服务内部的加速缓存服务中。镜像数据将被加密,并且具备网络隔离和身份鉴权,以保证足够的数据安全性。开启该功能前,请确保将镜像转存在函数计算系统内部存储服务的操作符合您所在机构的安全规范和指导。
  • 在创建或更新函数后,由于转存镜像也有一定的时间消耗,在缓存镜像可用之前,仍然可能遇到缓存不命中的情况。加速镜像通常会在创建或更新函数后5分钟内完成。

配置方法

您可以在创建或更新函数时,通过以下方式配置镜像拉取加速:

查看加速镜像可用状态

此外,您可以通过调用GetFunction接口,根据返回的AccelerationInfoStatus参数判断当前加速状态:
  • Preparing:加速正在准备中,这时调用会使用没有加速效果的原始镜像。
  • Ready:加速完成,后续函数调用会有加速效果。

查看加速效果

示例项目puppeteer-pdf中提供了一个完整的使用Node.js Express结合Puppeteer将网页转换成PDF的示例,加速前端到端耗时66.51s,加速后仅需15.2s,速度提升77.1%。示例代码如下:

time curl -H "x-fc-invocation-target: 2016-08-15/proxy/CustomContainerDemo/puppeteer-pdf-no-accl" https://$ACCOUNT_ID.$REGION.fc.aliyuncs.com/generate-pdf\?url\=http://example.com -o /tmp/fc-demo-puppeteer-pdf-no-accl.pdf

# Time spent: 0.06s user 0.09s system 0% cpu 1:06.51 total


time curl -H "x-fc-invocation-target: 2016-08-15/proxy/CustomContainerDemo/puppeteer-pdf-accl" https://$ACCOUNT_ID.$REGION.fc.aliyuncs.com/generate-pdf\?url\=http://example.com -o /tmp/fc-demo-puppeteer-pdf-accl.pdf

# Time spent: 0.05s user 0.06s system 0% cpu 15.200 total