作者:修踪

审核&校正: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 推理方面有着更大优势。

图片以云盘热发动为基准(灰色),比照各个厂商的额定开支(五颜六色)

2、Python Flask Web Service

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

图片以云盘热发动为基准(灰色),比照各个厂商的额定开支(五颜六色)

3、Python 机器学习运算

镜像内相同是 Python 运转环境,能够看出各个厂商依旧保持着各自的特性,厂商 B 全量下载,厂商 A 部分恳求有优化但不安稳。

图片以云盘热发动为基准(灰色),比照各个厂商的额定开支(五颜六色)

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 辨认分析等都能够无缝与函数核算联接以到达弹性满意很多动态的在线推理恳求。

图片

轻量灵敏 ETL

服务都依靠数据,而数据处理往往需求耗费很多资源来满意高效快速的数据改变恳求。自定义镜像与其他函数核算运转时一样能够满意数据处理时的安全隔离,又一起保留了用户将数据处理部分的事务逻辑自在的打包成镜像的快捷才能。供给平滑迁移的一起满意了镜像发动的极低额定延时,满意了用户针对如数据库管理、万物物联等运用场景的安全,高效,弹性的数据处理需求。

图片

游戏战役结算

各类游戏内通常会设置日常任务等场景短时刻集聚很多玩家一起需求战役结算一类的数据处理,为了不让游戏玩家失掉耐性,战役数据校验通常需求在短短几秒内完结,且单个玩家的数据结算单位时刻不能随着玩家数量增加而恶化。此类数据处理的事务逻辑通常繁杂且高度重复,将玩家数据处理逻辑打包至函数核算自定义镜像内便能够弹性满意短时刻很多类似的玩家结算恳求。

未来规划

优化函数核算自定义镜像的初衷便是要让用户感受不到容器镜像传输带来的额定推迟,给云原生开发者最极致的体会。优化不会中止,咱们终究的方针是简直消除容器镜像拉取的额定开支和很多扩容时镜像仓库成为瓶颈,极速伸缩。进一步完善 Serverless Caching 的一起 Custom Container 功用未来会协助 Kubernetes 上的 Web 运用, Job 类作业负载无缝运转在函数核算。Kubernetes 负责处理常驻、流量安稳的作业负载,Serverless 服务分担动摇明显的核算将逐渐成为云原生的最佳实践。

1)函数核算揭露用例

github.com/awesome-fc

2)社区官网

www.serverless-devs.com/

3)项目仓库

github.com/Serverless-…

4)Serverless Desktop 桌面客户端

serverlessdevs.resume.net.cn/zh-cn/deskt…

5)Serverless 运用开发者套件

serverless-dk.oss.devsapp.net/docs/tutori…

6)Serverless Devs CLI 

serverlessdevs.resume.net.cn/zh-cn/cli/i…

7)Serverless Hub 运用中心

serverlesshub.resume.net.cn/#/hubs/spec…

 戳​​此处​​了解更多函数核算概况!​