Page 98 - 《软件学报》2025年第5期
P. 98

1998                                                       软件学报  2025  年第  36  卷第  5  期


                 5.1   启 示
                    (1) 选择广泛采用的编程语言: 基于本文提供的编程语言结果, 开发者可以根据自己的偏好和需求来选择广泛
                 采用的编程语言来开发应用. Python、JavaScript 和      Java 都是主流服务器无感知平台所支持的语言, 这表明它们在
                 服务器无感知社区中非常流行           [14] , 并且被平台广泛支持. 对于新手的开发者来说, 选择这些流行的编程语言进行
                 服务器无感知计算应用开发是一个明智的选择. 选择广泛采用的编程语言有几个好处. 首先, 当开发者想要将应用
                 从一个平台移植到另一个平台时, 应用代码的改动量将大大降低. 因为这些广泛支持的编程语言在不同平台上都
                 具有高度的兼容性, 开发者可能只需要适应不同平台对于服务器无感知函数的编写格式差异即可. 其次, 广泛采用
                 的编程语言通常拥有更多的开发资源和支持. 由于它们在服务器无感知计算社区中的流行度, 开发者可以更容易
                 地找到相关的文档、教程、库和工具来支持开发工作, 这将更快速地解决问题、提高开发效率.
                    (2) 注意平台的部署包大小限制: 每个平台都有不同的部署包大小限制, 开发者编写应用功能时应该意识到这
                 一限制, 并确保应用不会超过限制, 以降低部署失败的概率. 此外, 由于服务器无感知计算更适用于执行轻量级任
                 务, 对于一些复杂的任务, 最好尽量避免在此类平台上部署. 而且, 开发者还需要注意任务中使用的重量级依赖库,
                 因为这些库往往会加大部署包大小, 增加失败的风险. 这一点也建议开发者要去设计和开发轻量级的应用, 使用更
                 精简的代码和依赖库, 以降低应用依赖和提高部署效率.
                    (3) 平衡内存分配大小与成本和性能之间的关系: 一般来说, 用户关注的端到端性能主要由冷启动性能和执行
                 性能组成. 1) 对于冷启动性能, 本文的冷启动性能分析揭示了内存大小对冷启动性能和数据稳定性产生影响. 举例
                 来说, 亚马逊   Lambda 在  128 MB  内存分配下表现出的冷启动性能数据并不稳定, 而阿里巴巴                 Function Compute 在
                 执行  Python  应用时, 内存越大所获得的冷启动性能越好. 2) 对于执行性能, 通过本文的第                  3  节特征总结可知, 开发
                 者需为任务在平台上真正执行的时间付费. 真正执行的时间受分配的内存大小影响, 因为它决定了平台分配给任
                 务的资源大小, 这进一步影响了执行性能. 付费模型总结了在大多数平台上内存分配大小直接关系到开发者需要
                 支付的费用. 具体来说, 在平台上分配的内存大小                (决定了资源使用量) 以及应用在该内存上真正执行的时间
                 (执行性能) 是影响应用成本计算的关键因子. 因此, 内存分配大小、端到端性能                       (包括冷启动性能和执行性能) 和
                 成本之间存在关系. 在这种情况下, 开发者需要谨慎考虑如何在冷启动性能、应用执行性能和其成本之间取得平
                 衡, 以选择合适的内存分配大小. 过小的内存大小可能导致冷启动性能结果和稳定性下降, 从而使得应用响应时间
                 延迟长, 甚至可能发生程序崩溃. 然而, 过大的内存大小可能导致应用在执行期间的资源浪费, 而且, 内存过大不一
                 定使应用的执行性能结果得到进一步优化               [53] , 进而可能产生额外的费用支出. 在选择内存分配大小时, 开发者可
                 以考虑以下几点. 首先, 他们应该了解应用执行时真正的内存需求, 以确定最低要求的内存大小与最优冷启动性能
                 和最佳执行性能之间的平衡点. 通过对应用进行监测, 开发者可以获得有关应用运行时的内存使用情况以及冷启
                 动性能和应用执行性能表现的数据, 从而更好地评估应用运行时的内存需求. 其次, 开发者应用考虑到预算限制,
                 他们需要综合可用预算和应用的性能需求               (稳定的冷启动性能, 以及成本效益高且相对快速的执行性能), 选择一
                 个合理的内存分配大小, 以达到最佳的性价比.
                    (4) 注意负载请求大小: 在处理负载请求大小时, 开发者需要注意不同平台对请求负载数据大小的限制. 以同
                 步调用为例, 亚马逊      Lambda 和阿里巴巴    Function Compute 分别将请求负载大小限制在       6 MB  和  32 MB  以内. 如
                 果请求的大小超过了这些限制, 建议开发者使用云存储服务等方式先保存请求数据. 使用云储存服务可能是一种
                 常见的解决方案. 开发者可以将超出限制的请求数据存储在可靠的云存储中, 如亚马逊                            S3  或阿里云对象存储. 数
                 据存储后, 开发者可以在代码中直接读取数据完成后续功能. 或者开发者设置事件触发器, 当新的数据写入数据
                 时, 触发相应的函数执行. 这样, 开发者就可以绕过平台对请求负载大小的限制, 确保请求的顺利处理. 使用云存储
                 服务来处理超大请求的优势在于, 它提供了高可靠性和可扩展性. 云存储服务通常会自动处理数据备份和冗余, 确
                 保数据安全性和可用性. 此外, 云存储还具备高度可扩展特性, 处理大量的数据请求, 并在需要时自动进行扩展, 以
                 满足并发和高吞吐量的要求. 当然, 使用云存储服务也需要额外的成本和延迟. 存储数据和触发函数之间存储一定
                 的时间延迟, 可能会对应用的响应时间产生一定影响. 此外, 云存储服务的使用可能会增加额外的存储和网络传输
   93   94   95   96   97   98   99   100   101   102   103