作者:修踪
审核&校对:Chang Shuai、望宸
编辑&排版:雯燕

背景

函数计算在 2020 年 8 月创新地提供了容器镜像的函数部署方式。AWS Lambda 在 2020 年 12 月 Re-Invent,国内其他 FaaS 提供商在 2021 年 6 月也相继宣布了 FaaS 支持容器的重磅功能。冷启动一直都是 FaaS 的痛点,引入比代码压缩包大几十倍的容器镜像后冷启动恶化便成为开发者最大的担忧。

函数计算在支持容器镜像的设计阶段就决定要让开发者像使用代码包(秒级弹性能力)一样的体验使用镜像,既要易用性也要保持 FaaS 自身的极致弹性,免除用户的纠结和取舍。理想的用户体验是函数调用几乎感觉不到镜像数据远程传输带来的延迟额外消耗。

优化镜像加速冷启动大致分为两种做法:降低绝对延迟和降低冷启动概率。自容器镜像上线以来我们已经通过镜像加速技术,分阶段降低了绝对延迟。本文在此基础上,介绍借助函数计算下一代 IaaS 底座神龙裸金属和安全容器,进一步降低绝对延迟且能够大幅降低冷启动频率。

优化历程

(以某一镜像为例)

第一代架构:ECS 虚构机

第一阶段(2021 年 3 月):按需加载,减少数据传输

过去的问题在于启动镜像前全量拉取镜像内部数据,导致无用的镜像数据也会被完整下载而占用了过多的准备时间。于是我们最初的优化方向是尽量忽略无用的镜像数据,达到按需加载。为此,我们通过镜像加速技术,省略掉了拉取无用数据的时间,实现了函数计算自定义镜像冷启动从分钟级到秒级提升的相关技术细节。

第二阶段(2021 年 6 月):记录容器实例启动 I/O 轨迹,在后续实例启动中提前预取镜像数据

我们发现,函数实例在容器启动和初始化阶段,I/O 数据访问模式高度一致。根据 FaaS 平台基于应用运行模式调度资源的特点,我们在函数实例首次启动时记录了 I/O 轨迹的脱敏数据,在后续的实例启动时,将轨迹数据作为提示,提前预取镜像数据到本地,进一步减小了冷启动延时。

上述两种加速优化虽然大幅减小了冷启动绝对延迟,但由于传统 ECS VM 在闲置一段时间后就会被回收,再次启动新机器时就会重新触发冷启动。于是,如何减少冷启动频次便成为了下一阶段重点攻克的题目之一。

下一代架构:弹性裸金属服务器(神龙)+microVM

在设计下一代架构时我们不仅考虑解决冷启动频次问题,也同样注意到缓存对于启动时延的影响。于是我们创新性的发明了 Serverless Caching,根据不同的存储服务特点构建数据驱动、智能高效的缓存体系,实现软硬件协同优化,将 Custom Container 体验进一步提升。函数计算后台神龙的更迭时间远大于 ECS VM 的闲置回收时间,对于用户侧而言,热启动频率大幅提升,在冷启动后,缓存会持续保留在神龙机器上,缓存命中率可达 90% 以上。

对比 ECS 虚拟机,神龙裸金属加上微型虚拟机的架构为镜像加速带来了更多的优化空间:

  • 减小回源带宽压力并且减少重复数据存储。比起 ECS VM 来,同时几千实例启动,对于镜像仓库的读放大和磁盘存储空间的写放大降低至少两个数量级。

  • 虚拟机级别的安全隔离使得函数计算组件可以安全地组成可用区级别缓存网络,速度传输速度甚至优于云盘。

函数计算 Custom Container 登陆神龙的同时也提高了资源利用率,降低成本,这对用户和服务端维护是双赢。

Serverless Caching 的架构则可以在不增加资源使用成本的同时提供更多的优化潜力。

(L1~L4 为不同级别缓存,距离和延迟从小到大)

横向对比

到目前为止,我们已经将镜像加速优化到了较高的水准。我们在函数计算的公开用例里面挑选了 4 个典型的镜像并将它们适配至国内外几个大型云厂商(名称以厂商 A、厂商 B 代替)进行横向对比,每间隔 3 小时调用上述镜像,重复数次,我们得到了以下结果:

1、AI 在线推理-猫狗识别

该镜像包含了基于 TensorFlow 深度学习框架的图像识别应用。阿里云函数计算和厂商 A 都能正常运行,但厂商 A 性能较差。厂商 B 则无法正常运行。下图中阿里云函数计算和厂商 A 的延时数据包含镜像拉取,容器启动,执行推理运算端对端的延时,而厂商 B 的数据只是拉取镜像部分的延时,都已经是最慢。FC 相对稳定,可以看出函数计算在 CPU 消耗型如 AI 推理方面有着更大优势。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I7a6864E-1637584327234)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3be17fa89dfa4b668d5580d27ad3b4d0~tplv-k3u1fbpfcp-zoom-1.image “图片”)]以云盘热启动为基准(灰色),对比各个厂商的额外开销(彩色)

2、Python Flask Web Service

此镜像为常见的网络服务,内部使用 Python 搭配 Flask 服务框架。此镜像的作用旨在测试不同云产品是否有能力完成高效按需加载。FC 与厂商 A 均有波动但后者的波动最为明显。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UlL7s1FH-1637584327236)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/68cb5a1368194aa6b757d6263717b93b~tplv-k3u1fbpfcp-zoom-1.image “图片”)]以云盘热启动为基准(灰色),对比各个厂商的额外开销(彩色)

3、Python 机器学习运算

镜像内同样是 Python 运行环境,可以看出各个厂商依旧保持着各自的特性,厂商 B 全量下载,厂商 A 部分请求有优化但不稳定。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B6tzS9rC-1637584327237)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0defcf9ddf734896877df4c64d5633fe~tplv-k3u1fbpfcp-zoom-1.image “图片”)]以云盘热启动为基准(灰色),对比各个厂商的额外开销(彩色)

4、Cypress Headless Chrome

此镜像包含无头浏览器测试流程,厂商 A 由于编程模型限制和运行环境不兼容无法运行。而厂商 B 过慢只能在规定时间内耗时 71.1 秒完成应用初始化。不难看出函数计算在重 I/O 的镜像方面依然有着不错的表现。

以云盘热启动为基准(灰色),对比各个厂商的额外开销(彩色),绿色部位为优于基准线的端到端耗时04

推荐最佳实践

支持容器技术是 FaaS 的必备特质,容器增加了可移植性和交付敏捷性,而云服务减轻了运维与闲置成本、提供了弹性扩缩容能力。自定义镜像与函数计算结合最直接的解决了用户为云厂商定制化地移植大容量业务逻辑带来的困扰。

FaaS 运行容器时需要尽可能消除额外开销,使用户体验与本地运行场景相近。稳定快速的运行同样是优秀 FaaS 的标准,FC 提供了镜像加载优化的同时大大降低了冷启动频次为稳定快速的运行提供了保障。不仅如此,在应用的可移植方面更加需要做到平滑,不限制开发模式的同时也要尽量降低用户使用门槛。函数计算自定义镜像支持标准 HTTP 服务,自由配置可用端口,可读的同时也可写,提供多种工具链以及多元化的部署方案,无强制等待镜像准备完成时间,自带 HTTP 触发而不依赖其他云服务,支持自定义域名等一系列优质解决方案。

函数计算自定义镜像适用但不限于人工智能推理、大数据分析、游戏结算、在线课程教育、音视频处理等。推荐使用阿里云容器镜像服务企业版实例 ACR EE,自带镜像加速功能,省去使用 ACR 镜像时手动开启加速拉取和加速镜像准备的步骤。

AI/ML 在线推理

推理类计算依赖大体积底层训练框架以及大量的数据处理,普通的 AI 框架如 Tensorflow 的镜像可以轻松达到 GB 级,对 CPU 要求已经很高,要再满足扩缩容就更是挑战。函数计算自定义镜像可以很好的解决此类需求,用户只需直接使用底层训练框架镜像并与数据处理逻辑打包至新的镜像内便可以轻松省去更换运行环境所带来的移植开销,同时又可以满足弹性扩缩容带来的快速训练结果。歌曲喜好推理、图片 AI 识别分析等都可以无缝与函数计算衔接以达到弹性满足大量动态的在线推理请求。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JJtapTv1-1637584327238)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/592e15e273f54158ab070267fa46af3b~tplv-k3u1fbpfcp-zoom-1.image “图片”)]

轻量灵活 ETL

服务都依赖数据,而数据处理往往需要消耗大量资源来满足高效快速的数据变更请求。自定义镜像与其他函数计算运行时一样可以满足数据处理时的安全隔离,又同时保留了用户将数据处理部分的业务逻辑自由的打包成镜像的便捷能力。提供平滑迁移的同时满足了镜像启动的极低额外延时,满足了用户针对如数据库治理、万物物联等应用场景的安全,高效,弹性的数据处理需求。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0wqoAeY0-1637584327239)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/232463e458b64ac3b096f9c0efb4f5cb~tplv-k3u1fbpfcp-zoom-1.image “图片”)]

游戏战斗结算

各类游戏内通常会设置日常任务等场景短时间集聚大量玩家同时需要战斗结算一类的数据处理,为了不让游戏玩家失去耐心,战斗数据校验通常需要在短短几秒内完成,且单个玩家的数据结算单位时间不能随着玩家数量增长而恶化。此类数据处理的业务逻辑通常繁杂且高度重复,将玩家数据处理逻辑打包至函数计算自定义镜像内便可以弹性满足短时间大量相似的玩家结算请求。

未来规划

优化函数计算自定义镜像的初衷就是要让用户感受不到容器镜像传输带来的额外延迟,给云原生开发者最极致的体验。优化不会停止,我们最终的目标是几乎消除容器镜像拉取的额外开销和大量扩容时镜像仓库成为瓶颈,极速伸缩。进一步完善 Serverless Caching 的同时 Custom Container 功能未来会帮助 Kubernetes 上的 Web 应用, Job 类工作负载无缝运行在函数计算。Kubernetes 负责处理常驻、流量稳定的工作负载,Serverless 服务分担波动明显的计算将逐渐成为云原生的最佳实践。

1)函数计算公开用例

https://github.com/awesome-fc

2)社区官网

http://www.serverless-devs.com/

3)项目仓库

https://github.com/Serverless-Devs/Serverless-Devs

4)Serverless Desktop 桌面客户端

https://serverlessdevs.resume.net.cn/zh-cn/desktop/index.html

5)Serverless 应用开发者套件

http://serverless-dk.oss.devsapp.net/docs/tutorial-dk/intro/react

6)Serverless Devs CLI

https://serverlessdevs.resume.net.cn/zh-cn/cli/index.html

7)Serverless Hub 应用中心

https://serverlesshub.resume.net.cn/#/hubs/special-view

戳​​此处​​了解更多函数计算详情!​

函数计算 GB 镜像秒级启动:下一代软硬件架构协同优化相关推荐

  1. 函数计算GB镜像秒级启动:下一代软硬件架构协同优化

    简介: 优化镜像加速冷启动大致分为两种做法:降低绝对延迟和降低冷启动概率.自容器镜像上线以来我们已经通过镜像加速技术,分阶段降低了绝对延迟.本文在此基础上,介绍借助函数计算下一代IaaS底座神龙裸金属 ...

  2. 函数计算 GB 镜像秒级启动

    一 背景 ​ 函数计算在2020年8月创新地提供了容器镜像的函数部署方式.AWS Lambda在2020年12月Re-Invent,国内其他FaaS提供商在2021年6月也相继宣布了FaaS支持容器的 ...

  3. 启动延时缩短 50%-80%,函数计算发布镜像加速功能

    作者 | Shuai Chang  阿里云云原生 Serverless 团队高级技术专家 来源 | 阿里巴巴云原生公众号 体验文档:镜像拉取加速文档 FaaS 和容器 容器镜像因其颠覆式创新成为云原生 ...

  4. 秒级启动万个容器,探秘阿里云容器镜像加速黑科技

    阿里云容器与存储团队展开合作,利用DADI加速器支持镜像按需读取和P2P分发,实现3.01秒启动10000个容器,完美杜绝容器冷启动的数分钟漫长等待,以及镜像仓库大规模并行分发场景下的网络拥堵. 年关 ...

  5. 揭秘阿里秒级百万TPS平台架构实现

    转载自  揭秘阿里秒级百万TPS平台架构实现 导读:搜索离线数据处理是一个典型的海量数据批次/实时计算结合的场景,阿里搜索中台团队立足内部技术结合开源大数据存储和计算系统,针对自身业务和技术特点构建了 ...

  6. 腾讯 PB 级大数据计算如何做到秒级?

    天穹 SuperSQL 是腾讯自研,基于统一的 SQL 语言模型,面向机器学习智能调优,提供虚拟化数据和开放式计算引擎的大数据智能融合平台.在开放融合的 Data Cloud 上,业务方可以消费完整的 ...

  7. 开源函数计算平台 OpenFunction 保姆级入门教程

    OpenFunction 0.6.0 上周已经正式发布了,带来了许多值得注意的功能,包括函数插件.函数的分布式跟踪.控制自动缩放.HTTP 函数触发异步函数等.同时,异步运行时定义也被重构了.核心 A ...

  8. Linux脚本5秒后启动程序,嵌入式Linux启动时间优化的秘密之四-启动脚本

    本文主要讲述嵌入式Linux启动时间优化的秘密,我们继续上篇没有讲完的嵌入式Linux启动时间优化方法,本文主要会讲启动脚本.想看上一篇的请查看本文结尾的链接. 启动脚本 1.优化初始化脚本和系统启动 ...

  9. 函数计算镜像加速:从分钟到秒的跨越

    简介:函数计算 FC 正式发布容器镜像加速,通过按需读取和更高效的解压技术在不同场景下加速 50%-80%,即使 GB 级别的镜像也可以在几秒内完成端到端启动. 作者信息: Shuai Chang,阿 ...

最新文章

  1. C++中指向类成员指针的用法
  2. Matlab姿态表示
  3. 链表问题16——单链表的选择排序
  4. H3C路由器的备份与还原(1)
  5. cisco+++mysql_搭建cacti监控linux服务器,cisco,华为,mysql,
  6. SpringBoot配置嵌入式Servlet容器
  7. 功能自动化测试工具列表大全
  8. E1. Rubik‘s Cube Coloring (easy version) 贪心,满二叉树(1300)
  9. 膨胀卷积的缺点_膨胀卷积与IDCNN
  10. ssis lookup_SSIS中的LOOKUP转换概述
  11. oracle linux 版本 uek,在运行 Oracle Linux 7.1 UEK3 或 7.2 或者 RHEL 7.1 或 7.2 的系统上,RDMA 服务无法启动...
  12. elementui带输入建议查询_知道Profiler是什么吗?带你了解SQL Server的性能优化工具...
  13. 苹果Mac图片清晰度增强软件:Topaz Sharpen AI
  14. 团队作业 -- beta版本
  15. Hadoop作业提交多种方案具体流程详解
  16. 离散数学实验一 利用真值表法求取主析取范式以及主合取范式的实现
  17. Java 分布式解决方案
  18. 订阅号服务器消息推送数量,微信服务号一个月4次的推文次数用完了,怎么增加推送数量?...
  19. 弥散阴影html,超赞!一份简单易上手的青春弥散阴影修炼手册
  20. 1600-卡斯丁狗要吃糖葫芦 ZCMU

热门文章

  1. pwn学习总结(五) —— ret2dl_runtime_resolve(待补充)
  2. 1043 Is It a Binary Search Tree (25 分)【难度: 中 / 知识点: 构造二叉搜索树(BST) 】
  3. 1003 Emergency (25 分)【难度: 中等 / 知识点: 变种的Dijkstra】
  4. 一个判断字符是不是10进制数的函数------isdigit()
  5. Shell中的read语句
  6. Java集合Vector
  7. jQuery的事件方法
  8. Model层的两种写法
  9. python socket能做什么_用python写一个聊天小程序!和女朋友的专属聊天工具!
  10. c#连接远程sqlserver2008_C#用代码控制网络断开与重连