函数性能探测:更简单高效的 Serverless 规格选型方案

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 函数性能探测:更简单高效的 Serverless 规格选型方案

作者:拂衣、丛霄


2019 年 Berkeley 预测 Serverless 将取代 Serverful 计算成为云计算新范式。Serverless 为应用开发提供了一种全新系统架构。借助 2023 年由 OpenAI 所带来的 AIGC 风潮,以阿里云函数计算 FC、AWS Lambda 为代表的 Serverless 以其更高成本效益、更简化的后端代码 & 扩展性及更极致的弹性等众多特性,将开发者从繁重的手动资源管理与性能成本优化中解放,再次激发开发者蓬勃的想象力与创造力。国内越来越多开发者及企业开始尝试如何将 Serverless 应用于实际业务或者场景。


但在优雅使用 Serverless 之前,依旧有不少小问题需要提前解决。由于 Serverless 平台的扩缩容是基于请求处理/事件驱动的并发度进行扩缩容的,对于习惯基于 CPU 指标进行 Pod 水平扩缩的的开发者而言,就会遇到以下难题,比如并发度、最小实例数、最大实例数这几个参数之间的关系是什么样的?又比如单个实例最大并发度怎么设置,才能够符合自己的业务需求?


01 Serverless 参数配置的考量维度


Serverless 能提供一定通用能力,但针对不同业务逻辑需要采取合适的配置才能更好的发挥 Serverless 价值。但如何评估函数的最佳配置涉及到多变量协同优化的问题,虽然函数计算 FC 提供了基于应用“每日请求总数”和“平均请求响应时间”的请求预估、基于应用目前使用的服务器“规格”和“利用率”的现有服务器用量预估等方式辅助进行参数配置。但想要更好进行配置,我们建议从以下三个维度去评估配置 Serverless 服务参数。


(1)在成本与性能之间进行取舍

如何根据业务偏好选择性能优先或成本优先是参数配置需要考虑的第一大难点。在单实例多并发数相对固定的情况下,可以提高单实例并行处理请求数量,减少实例数,从而降低成本。当并发数过高时会增加资源竞争,导致性能延迟增加,从而增加成本;如果对于延时敏感度相对较低,可以选取较低实例规格,单价成本更低,与之相反,想要更短延时,可以选择较高的实例规格,但单价成更高。


(2)结合不同函数业务逻辑的复杂度

除了成本和性能取舍,针对不同类型函数逻辑,不同配置参数效果也有着巨大差异。很多函数业务逻辑复杂,只针对单一逻辑分支进行特定配置并不代表整体性能最优;不恰当的配置可能产生大量预期之外的运维成本。对此,我们针对 CPU 密集型、 IO 密集型不同类型函数进行测试,以便更好的挖掘不同规格与不同类型函数TPS之间的关系。


  • 在不同规格下,对 CPU 密集型函数进行压测



可以看到 CPU 密集型规格越高, maxTPS 越大,规格与 maxTPS 呈现明显线性关系。规格越大,maxRT 越低 ,说明 CPU 密集型的函数,增大资源规格可以显著降低 RT。但规格增大到 4G、8G 后,对 RT 的降低效果边际效应递减。


  • 在不同规格下,对 IO 密集型函数进行压测



可以看到规格提升对 IO 密集型的性能改善非常有限,规格与 maxRT、maxTPS 关联度有限。特别扩展到高规格后,对于 maxTPS 的提升较小。


借助上面压测,我们可以看到这样子的结论:对于 CPU 密集型函数,规格增加对单实例性能的提升能够提供较大的改善。但对于 IO 密集型函数,规格增加对单实例性能的提升存在边际递减效应。当超过一定规格后,规格提升对性能提升几乎没有提升。


(3)兼顾函数配置对计算资源配置的影响

由于函数并发度、最小实例数、最大实例数等配置会影响到 Serverless 平台的资源分配,保证单函数资源刚性交付、多函数的资源隔离同时,合理利用平台弹性调度能力并提高资源利用率是最后要考虑的问题。


以同时处理 x 个并发请求场景举例,当实例并发度设置为 1 时,每个实例同时只能处理 1 个请求,函数计算需要创建 x 个实例来处理这 x 个请求。当实例并发度设置为 X*10 时,每个实例同时可以处理 X*10 个请求,函数计算只需要创建 1 个实例就能处理这 x 个请求。



单实例多并发适用于函数中有较多时间在等待下游服务响应的场景。等待响应一般不消耗资源,在一个实例内并发处理可以节省费用。但较低单实例并发度在函数流量波动变化时会提前达到单实例并发上限,导致实例扩缩容、冷启动更频繁。与此同时,需要创建和维护更多实例个数,造成整体资源利用率偏低。


02 评估参数配置的合理性


结合以上三个维度,我们可以看到评估 Serverless 的参数配置绝非易事。很多用户在开始尝试使用 Serverless 时仅是通过文档指引进行相关参数配置。在函数正式上线后,很快就会发现之前配置不合理,所造成的成本超预期以及性能不及预期等问题,并尝试反复修改函数配置进行验证。资深开发者会选择进行压测,以便测试出最佳的函数配置。但压测脚本配置、压测数据报告解读需要有一定的实践经验,开发者也无法十分笃定压测所得出的配置结论是否是符合业务预期的最优选择。在统计了海量用户实际配置使用情况后,我们发现表示用户实际资源使用量较低,实际配置规格偏大,造成一定的浪费。



为了更好的验证配置参数的合理性,函数计算 FC 提供基于性能测试 PTS 能力的函数性能探测功能来评估函数单个实例在不同规格下的性能上限,借以推荐满足用户预期延迟的最佳并发度与函数规格配置,探测方法基于 little's law[1]排队理论(并发数 = 请求的平均延迟 * TPS ),如图示:


(横坐标是并发数,左边的纵坐标是 TPS,右边的纵坐标是延迟)


由于每个服务器的处理能力都有限,所以会出现随着并发数上升,吞吐量先上升后平缓,可能出现下降,即性能恶化;当并发度过高时,延迟会变高,甚至会急剧恶化。通过性能探测,我们会得到每种规格的关键性能数据,即每个规格最高能承受的 QPS,在知晓自身对业务流量规模前提下,即可得出最恰当的函数所需的最小实例数和最大实例数以最佳规格和规格下的最佳并发度。我们可以只压测单实例,因为在性能表现平稳的系统,多实例的性能是单实例性能的线性叠加,所以只需要压测出单实例的性能,就可以推算出多实例的性能。


比如,用户预期函数调用端到端延迟为 1000 ms,根据 1000 毫秒的延迟限制选型出最佳的规格及该规格下最佳并发度,即满足延迟限制的最高 QPS 的对应并发度。


由于目前性能探测仅支持对 HTTP 函数进行压测,不支持对事件函数进行压测。仅支持单实例压测,不支持多实例压测。因此,我们提供性能探测(单实例)、性能测试 PTS(多实例)两种方式进行验证。


  • 关于性能探测

作为函数计算 FC 的功能之一,为了进一步降低行能探测的使用门槛,功能采取流程化指引,同时性能探测功能完全免费,用户只需要为函数承接的请求流量付费,不需要为压测功能付费。



  • 关于性能测试 PTS

作为阿里巴巴集团淘宝双十一的性能测试工具,性能测试 PTS 支持按需发起压测任务,可提供百万并发、千万 TPS 流量发起能力,100% 兼容 JMeter。提供的场景编排、API 调试、流量定制、流量录制等功能,可快速创建业务压测脚本,精准模拟不同量级用户访问业务系统,帮助业务快速提升系统性能和稳定性。目前,提供新用户 5000VUM 的免费试用额度。


03 针对单实例,如何通过性能探测验证单实例配置参数


接下来,我们简单介绍性能探测的配置流程,仅需三步即可快速发起性能探测。


1. 登录函数计算控制台[2],在左侧导航栏选择服务及函数,并在服务列表页面选择目标服务。

2. 在函数管理页面,选择目标函数并在性能探测页签新建压测任务

3. 在单实例性能压测评估页签,输入必要的压测 API 信息(见下表),单击执行压测


(在执行压测前,请先点击 API 测试,验证 API 的 HTTP 请求参数是否配置正确,函数是否能成功执行。)



4. 查看压测结果分析报告:在单实例压测结果分析页签,查看压测结果。压测过程中,界面会提示压测预估时间。压测的规格越多,压测时间越长,压测费用也越高。压测结果中包含推荐的实例规格和最佳并发请求数。您还可以从压测结果下方的两张分析图中,查看分析过程。



说明:函数计算的压测功能仅支持单实例压测。如您需要配置多实例压测,请单击单实例压测结果分析页签右侧的多实例弹性能力压测,跳转至 PTS 控制台[3]配置。


5. 查看单实例压测数据详情:单击查看单实例压测详情跳转至单实例压测数据详情页签,查看每个规格的压测详情。每个规格的压测详情中,您可以看到随着并发度增加,延迟和最大 QPS 的变化情况。



但需要特别说明的是,性能探测推荐的函数配置优先保证满足性能需求,实现最高的资源利用率,但真正实现最低成本配置,需要结合函数线上历史流量数据分析,进行推荐。在进行成本优化推荐规格时,不仅需要达到节约成本的目的,还需要保证不破坏现有服务的 QoS,即性能不会因为实例规格的降低,而导致延迟增大。


04 针对多实例,如何借助性能测试 PTS 进行多实例配置参数


接下来,我们简单介绍性能测试 PTS 的配置流程,仅需配置 API,即可快速发起压测。


1. 前往性能测试 PTS 控制台。在左侧导航栏中,选择性能测试>创建场景

2. 在创建场景页面,单击 PTS 压测



3. 在创建 PTS 场景页面,设置场景名,例如函数计算 Serverless 应用压测,然后在场景配置页签,输入压测 API 名称,例如 demo,单击添加压测节点右侧的图标。在压测 URL 区域中输入上一小节复制保存的 Serverless 应用的访问域名。配置完成后,您可以单击调试 API,验证 API 接口配置是否符合预期。当调试的响应状态码为 200 时,表示该 API 可以正常访问。



4. 在创建 PTS 场景页面单击施压配置页签,配置相关压测参数,递增模式选择自动递增最大并发输入 500递增百分比输入 20单量级持续时长输入 1,压测总时长输入 5,串联链路1的最大并发权重输入 100,串联链路1的起始百分比输入 20。确认参数后,单击保存去压测。在温馨提示对话框中,确认任务预估的预估消耗,未超过免费额度。确认后单击确定,启动压测。(以上参数仅为示例,请根据实际业务进行调整)




5. 大约等待 3 分钟,即可在压测中页面查看当前应用实时的压测数据。



6. 在压测中页面,您可以看到成功率、RT 和 TPS 等概览数据。



7. 在压测完成之后,会自动跳转到编辑场景页面,然后单击压测报告。在压测报告页签,找到您的压测报告,单击右侧操作列下的查看



8. 在压测报告了解详细的压测报告内容,查看本次压测详细的性能数据。关于压测报告的更多详情,请参见查看 PTS 压测报告[4]。此时已实现通过性能测试 PTS 对 Serverless 应用的压测。



05 开发者场景体验


目前,「通过性能测试 PTS 对 Serverless 应用进行性能压测」场景已经上线云启实验室。在提供相关的免费试用额度的同时,提供相关操作流程与模板,以便大家快速体验通过 FC 创建应用以及通过 PTS 进行压测。


传送门:https://developer.aliyun.com/adc/scenario/186a9f71954b42419ebfa1f27fd8b042


相关链接:

[1] little's law

https://en.wikipedia.org/wiki/Little%27s_law

[2] 函数计算控制台

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Ffcnext.console.aliyun.com%2F&lang=zh

[3] PTS 控制台

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fpts.console.aliyun.com%2F&lang=zh#/pts/create

[4] 查看 PTS 压测报告

https://help.aliyun.com/document_detail/65304.html


点击此处立即体验

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
29天前
|
消息中间件 缓存 监控
在FaaS中,如何设计无状态的函数来确保数据处理的一致性?
在FaaS中,如何设计无状态的函数来确保数据处理的一致性?
|
2月前
|
关系型数据库 MySQL Serverless
探索PolarDB MySQL版:Serverless数据库的灵活性与性能
本文介绍了个人开发者对阿里云PolarDB MySQL版,特别是其Serverless特性的详细评测体验。评测涵盖了产品初体验、性能观测、Serverless特性深度评测及成本效益分析等方面。尽管试用过程中遇到一些小问题,但总体而言,PolarDB MySQL版表现出色,提供了高性能、高可用性和灵活的资源管理,是个人开发者和企业用户的优秀选择。
|
3月前
|
运维 负载均衡 Serverless
函数计算产品使用问题之在同一地域同一时刻最多可以同时运行多少个函数实例
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
29天前
|
机器学习/深度学习 监控 物联网
函数即服务(FaaS)
函数即服务(FaaS)
|
2月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
435 15
|
2月前
|
弹性计算 关系型数据库 Serverless
告别资源瓶颈,函数计算驱动多媒体文件处理方案:https://www.aliyun.com/solution/tech-solution/fc-drive-file
本文介绍了一种基于阿里云的一键部署解决方案,利用云服务器ECS、RDS MySQL、OSS、函数计算FC及MNS等服务,实现高效的多媒体文件处理。方案通过事件驱动机制,将文件处理任务解耦,并自动弹性扩展,按需付费,简化部署流程,提高处理效率。本文还提供了详细的部署步骤与体验反馈,展示了从配置到文件处理的全过程。
|
3月前
|
运维 Serverless 网络安全
函数计算产品使用问题之函数运行时间大于24小时该如何解决
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
Serverless API 异构计算
函数计算产品使用问题之gpu实例函数该如何创建
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
运维 Serverless 调度
函数计算产品使用问题之怎么在HTTP触发的函数里添加或读取自定义头部
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
存储 运维 Java
函数计算产品使用问题之怎么配置定时触发器来调用Java函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
下一篇
无影云桌面