其他
函数计算镜像加速:从分钟到秒的跨越
作者:Shuai Chang,阿里云云原生 Serverless 团队高级技术专家,主导了函数计算同容器技术生态融合以及 FaaS 云原生可观测。
FaaS 和容器
函数计算镜像加速功能
加速效果
使用方式
方式一:在函数计算控制台函数配置下选择“开启镜像加速”。
方式二:使用 Funcraft 工具部署。
AccelerationType: Default
AccelerationType: None
CustomContainerConfig:
Image: registry-vpc.cn-beijing.aliyuncs.com/fc-demo/python-flask:v0.1
AccelerationType: Default
功能特点
使用简单:只需在函数上开启镜像加速,函数计算会自动制作加速镜像和缓存,转换完成后(5分钟以内),函数自动采用加速镜像缓存。 专注业务创新:开发者无需花费时间刻意精简优化镜像大小或严格区分 Serverless 和 Serverfull 应用镜像的构建方式,FC 负责按照应用实际使用数据拉取和解压。 加速免费,使用门槛低:镜像加速开启不产生额外费用,也不需要开发者额外购买或升级任何其他服务。事实上由于镜像拉取时间变短,相应的请求费用也随之降低。 极速弹性、缩容到 0、事件触发:FaaS 结合容器镜像已经极大简化了应用迁移至 Serverless,加速功能进一步解锁了实时、准实时工作负载,曾经需要分钟级别的容器启动现在可以几秒内快速启动,真正实现缩容到0。
镜像拉取为什么慢?
将各个 layer 对应的 tar.gz 文件完整下载至本地。 每层顺序解压。 将各个层合并(如 Overlay)作为 rootfs 启动容器。
文件格式缺陷、粗粒度数据分层、顺序解压:gzip 层导致无法细粒度随机读取应用实际需要的数据,且要求所有层单线程顺序解压。实际观察发现镜像层可以通过并发下载提高速度,然而解压环节在 gzip 格式下却很难优化。 低效的压缩/解压缩算法:镜像层采用的 gzip,benchmark gzip 解压速度对比 lz4 平均慢接近9倍。 全量数据下载:同样由于粗粒度的分层和 gzip 格式(不支持 seek),镜像数据不论是否实际有用,都要被完整下载至本地。
加速原理
按需加载:仅读取应用真实需要的数据,极大减少数据传输量 更高效的存储和算法:相同大小的数据,更快地解压
按需加载
高效解压
未来规划
附录:实验场景数据
Benchmark | 场景 | 镜像压缩大小 | 解压后大小 |
python-flask | Web 应用 | 46MB | 118MB |
ecommerce-nodejs | 电商, nodejs express | 130MB | 371MB |
ml-small-import/ml-large-import | 机器学习,使用 numpy, pandas, pystan 等库 | 728MB | 2.392GB |
ai-cat-or-dog | 机器学习,人工智能,推理预测 tensorflow, kera | 790MB | 1.824GB |
puppeteer-pdf | Headless chrome,网页转 PDF, 使用 puppeteer, nodejs express | 332MB | 894MB |
cypress-chrome | 前端 UI 自动化,cypress, headless chrome | 980MB | 2.608GB |
参考
函数计算支持容器镜像-加速应用 Serverless 进程:
https://developer.aliyun.com/article/772788
New for AWS Lambda – Container Image Support: https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/ 函数计算镜像拉取加速文档: https://help.aliyun.com/document_detail/193075.html Docker Slim: Minify and Secure Docker containers (free and open source!): https://github.com/docker-slim/docker-slim christopher-talke/node-express-puppeteer-pdf-example: https://github.com/christopher-talke/node-express-puppeteer-pdf-example awesome-fc/custom-container-docs: https://github.com/awesome-fc/custom-container-docs
﹀
﹀
﹀