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  应用, 该应用实现为不同编程语言版本, 以比较不同平
                 台之间的冷启动延迟. 具体而言, 我们研究了编程语言类型和内存分配大小对冷启动延迟的影响.
   81   82   83   84   85   86   87   88   89   90   91