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  应用的冷启动延迟最高.
   84   85   86   87   88   89   90   91   92   93   94