Page 89 - 《软件学报》2025年第5期
P. 89
温金凤 等: 服务器无感知平台性能度量研究 1989
2 943.20 ms 到 4 327.96 ms, 相差将近 1 400 ms, 因此不建议将应用配置在这个内存大小上. 对于其他内存配置, 这
些应用在不同内存下的冷启动延迟差异达到了 700 ms 左右, 这可从图 4 中的上下四分位数范围来观察到. 进一步
观察表 6 中的谷歌 Cloud Functions 的中位数结果, 发现不同语言的应用的冷启动延迟在 2.5–2.8 s 左右. 举例来说,
当内存大小设置为 1 024 MB 时, Python 应用、JavaScript 应用和 Java 应用的冷启动延迟分别是 2 687.67 ms、
2 622.05ms 和 2 839.60 ms. 当内存设置为 2 048 MB 时, 这 3 种应用的冷启动延迟分别是 2 678.67 ms、2 733.99 ms
和 2 892.08 ms. 总体而言, 谷歌 Cloud Functions 上执行的 Python 应用和 JavaScript 应用比 Java 应用具有更低的冷
启动延迟, 减少了大约 100 ms. 此外, 对于这些语言的应用, 我们观察到内存分配的大小不会对冷启动延迟产生明
显的提高或降低.
对于微软 Azure Functions 的冷启动性能, 该平台采用基于内存消耗的策略执行应用, 开发者无需提前指定内
存大小. 因此, 我们直接展示不同编程语言应用的冷启动延迟结果和分布. 图 5 结果显示 Python 应用的箱线图整
体略高于 JavaScript 和 Java 应用, 这与亚马逊 Lambda 和谷歌 Cloud Functions 的结果不同. 在微软 Azure
Functions 上执行的 Python 应用、JavaScript 应用和 Java 应用的性能数据的上下四分位数范围分别为 2 344.57–
3 443.72 ms、1 943.22–2 947.28 ms 和 1 793.71–2 777.07 ms, 这显示微软 Azure Functions 的性能差异达到了约 1 000 ms.
从表 6 中微软 Azure Functions 的中位数结果, 发现 Python 应用的冷启动延迟中位数为 2 824.34 ms, JavaScript 应
用的冷启动延迟为 2 385.69 ms, 而 Java 应用的冷启动延迟为 2 142.25 ms, 这也说明在微软 Azure Functions 上执
行 Java 应用产生的冷启动延迟最小, 而 Python 应用的冷启动延迟最大. 造成这一结果的原因可能是微软在 Java
应用的运行时环境初始化方面更为高效, 而 Python 应用的运行时环境可能相对较新, 在启动时需要进行更多的加
载和配置工作, 因此产生了较高的冷启动性能开销.
15 000
12 500
冷启动性能 (ms) 10 000
7 500
5 000
2 500
Python JavaScript Java
图 5 微软 Azure Functions 在不同内存分配下执行不同编程语言编写的应用产生的冷启动延迟
对于阿里巴巴 Function Compute 的冷启动性能, 从图 6 中性能结果分布可以看出, 在高内存分配 (大于 512 MB)
下, 阿里巴巴 Function Compute 执行 Python 应用的性能分布较不稳定, 而在低内存分配下, 冷启动性能结果更为
稳定. 这可能是因为阿里巴巴 Function Compute 在执行 Python 应用时, 较高的内存分配大小可以明显降低冷启动
延迟, 从而增强性能结果的稳定性. 对于 JavaScript 应用和 Java 应用, 内存分配的大小对冷启动延迟没有明显的影
响. 具体而言, JavaScript 应用在不同内存下的中位数性能范围为 1 147.31–1 165.22 ms, 而 Java 应用在不同内存下
中位数性能范围为 1 342.00–1 362.77 ms. 对于 JavaScript 应用, 在低内存分配下 (小于 512 MB) 性能较不稳定, 在
高内存分配下性能较稳定. 尽管 JavaScript 应用的中位数结果没有显著变化, 但在低内存下执行 JavaScript 应用会
产生较大的性能差异, 例如在 128 MB 下可以达到约 1 000 ms 的延迟. 对于 Java 应用, 在我们所度量的所有内存
分配大小下都展示出较稳定的性能结果, 尽管也存在一些异常值. 从表 6 中的阿里巴巴 Function Compute 的中位
数结果看, 执行 Python 应用产生的冷启动延迟整体高于 JavaScript 应用和 Java 应用. 例如, 在内存大小为
1 024 MB 时, Python 应用的冷启动延迟为 2 217.56 ms, 而 JavaScript 应用的冷启动延迟为 1 147.31 ms, Java 应用
的冷启动延迟为 1 354.29 ms. 这说明阿里巴巴 Function Compute 执行 JavaScript 应用所产生的冷启动延迟最低,
而执行 Python 应用的冷启动延迟最高.