Page 81 - 《软件学报》2025年第5期
P. 81
温金凤 等: 服务器无感知平台性能度量研究 1981
用应用所获得的结果. 为了获得冷启动性能数据, 我们在释放之前调用应用中服务器无感知函数的资源后, 然后再
次调用函数, 这将使应用经历冷启动. 为了确保函数是以冷启动方式调用的, 我们使用了 20 min 的调用频率. 通过
这种方式, 我们可以获得应用的冷启动延迟. 对于执行性能数据的获取, 我们在平台释放先前调用的函数资源之前
来调用应用. 因此, 我们在函数经历第一次冷启动调用后还存在函数资源的情况下, 使用 20 s 的调用频率来再次
执行函数以获得热启动下的执行性能. 通过这种方式, 我们可以获得应用的执行延迟. 为了获得可比较的冷启动延
迟和执行延迟的数据, 考虑到不同服务器无感知平台返回内容的不一致, 本文采用了时间戳获取的方式. 具体来
说, 冷启动延迟是指从请求开始到服务器无感知函数任务实际开始执行之前的时间, 而执行延迟是函数任务实际
执行的时间. 我们在请求开始时和服务器无感知函数代码体的最开始位置处设置时间断点, 以获得冷启动延迟. 特
别地, 冷启动延迟是从请求发出的时间开始计算的. 这种冷启动性能数据的获取方式是已被业界和学术界 [24,44,45]
广泛认可的合理方法. 对于执行延迟的获取, 我们通过在服务器无感知函数代码体的最开始位置处和请求结束
后分别设置时间断点来获取时间. 最后, 基于规范化的日志信息输出, 我们对不同服务器无感知平台进行了分析和
比较.
3 特征总结结果
在本节中, 我们总结并更新关于不同主流服务器无感知平台的关键特征分析结果. 具体而言, 我们比较亚马
逊 Lambda、谷歌 Cloud Functions、微软 Azure Functions 和阿里巴巴 Function Compute 在应用开发、部署和运行
时阶段的关键特点或使用限制. 以下所列举的特征信息可能和我们之前工作所获得的结果存在差别, 我们在梳理
特征的同时更新其具体内容或限制.
3.1 开发特点
对于应用开发特点, 我们在表 3 中总结支持的编程语言、触发器类型、开发方式和工作流支持性.
表 3 不同服务器无感知平台的开发特点
特点 亚马逊Lambda 谷歌Cloud Functions 微软Azure Functions 阿里巴巴Function Compute
JavaScript、Python、 JavaScript、Python、 JavaScript、Python、 JavaScript、Python、
支持的编程 Java、Ruby、 Java、Ruby、Go、PHP、 Java、PowerShell、 Java、PHP、.Net、
语言
Go、.Net、自定义 .Net、自定义 TypeScript、自定义 Go、自定义
HTTP请求、 HTTP请求、 HTTP请求、 HTTP请求、
触发器
亚马逊云服务 谷歌云服务 微软云服务 阿里巴巴云服务
控制台、命令行工具、
控制台、命令行工具、 控制台、命令行工具、 API、软件开发工具包、 控制台、命令行工具、
开发方式
API、软件开发工具包 API、软件开发工具包 Visual Studio、 API、软件开发工具包
Visual Studio Code
工作流 支持 (Azure Durable
支持 (Step Functions) 支持 (Cloud Workflows) 支持 (Serverless Workflow)
支持性 Functions)
不同的服务器无感知平台对于支持的编程语言有所不同. 在亚马逊 Lambda 上, 可以使用 JavaScript、Python、
Java、Ruby、Go 和.Net 等语言编写函数. 谷歌 Cloud Functions 支持 JavaScript、Python、Java、Ruby、Go、
PHP 和.Net 语言等. 微软 Azure Functions 支持 JavaScript、Python、Java、PowerShell 和 TypeScript 语言等. 而阿
里巴巴 Function Compute 则支持 JavaScript、Python、Java、PHP、.Net 和 Go 语言等. 此外, 这 4 个平台均支持使
用自定义的方式部署和创建应用, 这种方式允许开发者使用任何编程语言来开发应用. 从比较中可以发现
JavaScript、Python 和 Java 是这些平台都广泛支持的编程语言, 也是服务器无感知计算社区中被广泛使用的语言 [14] .
相比于之前工作报道的支持语言类型, 谷歌 Cloud Functions 增加了对 PHP 语言的支持, 阿里巴巴 Function
Compute 增加了对 Go 语言的支持. 支持更多的编程语言有助于吸引更多的开发者使用这些服务器无感知平台. 不
同开发者可能擅长的编程语言不同, 因此扩展编程语言的支持可以扩宽平台的用户基础. 而且, 支持多种编程语言
可以丰富平台的生态系统, 这意味着开发者可以更容易地集成已有的库、框架和工具, 从而提高开发效率. 不同的