Page 86 - 《软件学报》2025年第5期
P. 86
1986 软件学报 2025 年第 36 卷第 5 期
据, 从而实现数据共享和协作. 在运行时系统方面, 亚马逊 Lambda 使用了 Linux 以及 Linux 2 两种系统. 具体来说,
Linux 系统是亚马逊 Lambda 的早期版本所使用的运行时环境. 当触发函数执行时, 亚马逊 Lambda 会创建一个
Linux 容器实例来运行该函数. 随着时间的推移, 亚马逊引入了 Linux 2 作为亚马逊 Lambda 的运行时环境. Linux 2
是亚马逊专门开发的 Linux 发行版, 它构建在自定义内核上 [52] , 并提供了更好的性能、安全性和稳定性. 对于被定
义为容器镜像的函数, 可以在创建容器镜像时选择运行时和 Linux 发行版. 谷歌 Cloud Functions 则使用两种了
Ubuntu 系统: Ubuntu 18.04 和 Ubuntu 22.04. 相较于先前工作, 该平台增加了 Ubuntu 22.04 系统的使用, 为函数提供
更先进的执行环境. 而微软 Azure Functions 对不同的支持语言提供了多个运行时系统选项. 例如, JavaScript 可以
运行在 Linux 上, 也可以运行在 Windows, 但 Python 只能运行在 Linux 上. 至于阿里巴巴 Function Compute, 它的
函数运行时基于特定的 Linux 发行版本制作, 先前工作报道该平台只支持 Debian 9 (Stretch). 然而, 目前该平台支
持 Debian 9 (Stretch) 和 Debian 10 (Buster) 两种发行版本, 且运行时可以支持单个版本或多个版本的同一种语言,
也可以支持多种语言. 版本的使用寿命结束时, 指定语言或框架版本的运行时也将终止支持. 不同的运行时系统可
以支持不同的编程语言, 提供多个运行时系统选项可以满足不同开发者和应用需求, 并提供更丰富的生态系统支
持. 而且, 不同的运行时系统可能具有不同的性能特性和优化, 选择合适的运行时系统可以提高应用的性能和可扩
展性. 我们也观察到平台对运行时系统的更新, 这可以帮助平台跟上新的技术和发展趋势, 提供更先进的运行时环
境. 然而, 不同的运行时系统可能支持不同的库和依赖项, 开发者需要确保其应用程序的依赖项在所选系统下可用.
在付费模型方面, 这些平台都提供了细粒度的付费模式. 然而, 各个平台的计费方式有所不同, 具体可分为两
种: 基于分配的内存使用量和基于消耗的内存使用量. 亚马逊 Lambda、谷歌 Cloud Functions 和阿里巴巴 Function
Compute 都是基于函数执行时间和实际分配的内存大小来计算成本, 且执行时间以更细粒度的 1 ms 为单位计算.
概括来讲, 这些平台的计费方式主要由函数调用次数以及相应的资源使用量计费. 资源使用量一般包括函数执行
使用的内存资源量和 CPU 资源量. 在默认情况下, 这些平台的 CPU 大小随分配的内存大小自动分配和确定. 因
此, 可以依据函数执行时间进一步计算出所使用的内存资源量和 CPU 资源量. 因此, 默认情况下, 这些平台被认定
为是基于分配的内存使用量来确定成本. 由第 3.2 节的 CPU 分配可知, 谷歌 Cloud Functions 和阿里巴巴 Function
Compute 允许开发者手动修改 CPU 资源大小. 如果开发者在这两个平台上手动修改 CPU 大小, 成本中的资源使
用量将分别按照各自配置的内存大小和 CPU 大小计算相应的资源使用量. 然而, 微软 Azure Functions 的付费模型
是根据消耗量计费, 即函数在运行时消耗的内存大小和执行时间, 其中消耗内存范围从 128 MB 到 1 536 MB 不等,
并且执行时间也以 1 ms 为单位计算. 这 4 个平台都提供了细粒度的计费模型, 允许开发者按照实际资源确定成
本, 从而提供更公平的计费方式. 对于使用基于消耗资源使用量的计费可能需要更多的监控和记录, 以确保准确的
计费, 但这可能增加了监控和记录的复杂性.
发现: 调研的 4 个平台都支持同步和异步函数调用, 并且对请求的负载大小有不同的限制. 当函数的输入输出
数据需要存储时, 开发者可以利用各个平台提供的云存储服务. 它们大多数支持的运行时系统都是在 Linux 下的
具体版本, 但微软 Azure Functions 对特定语言还支持 Windows 上运行. 另外, 亚马逊 Lambda、谷歌 Cloud
Functions 和阿里巴巴 Function Compute 使用的付费模型是基于分配的内存使用量, 而微软 Azure Functions 则是
基于消耗的内存使用量进行计费.
4 运行时性能分析结果
本节基于不同基准测试程序集, 对亚马逊 Lambda、谷歌 Cloud Functions、微软 Azure Functions 和阿里巴巴
Function Compute 的冷启动性能和执行性能进行了探究.
4.1 冷启动性能
冷启动性能是服务器无感知计算面临的关键挑战. 为了帮助开发者更好地理解不同服务器无感知平台产生的
冷启动性能, 本节使用微基准测试程序集中的 Hello World 应用, 该应用实现为不同编程语言版本, 以比较不同平
台之间的冷启动延迟. 具体而言, 我们研究了编程语言类型和内存分配大小对冷启动延迟的影响.