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

news2025/1/15 13:00:17

作者:拂衣、丛霄

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 个请求。当实例并发度设置为 X10 时,每个实例同时可以处理 X10 个请求,函数计算只需要创建 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 请求参数是否配置正确,函数是否能成功执行。)

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

  1. 在压测报告了解详细的压测报告内容,查看本次压测详细的性能数据。关于压测报告的更多详情,请参见查看 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

点击此处立即体验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/885471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件压力测试对软件产品起到什么作用?

一、软件压力测试是什么? 软件压力测试是一种通过模拟正常使用环境中可能出现的大量用户和大数据量的情况,来评估软件系统在压力下的稳定性和性能表现的测试方法。在软件开发过程中,经常会遇到一些性能瓶颈和稳定性问题,而软件压力测试的作…

AlexNet网络结构详解

AlexNet论文地址: https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf 1、简介 AlexNet是2012年ISLVRC(ImageNet Large Scale Visual Recognition Challenge)竞赛的冠军网络,图像分类的正确率从70%提升到80%&…

《财讯》期刊简介及投稿要求

《财讯》杂志是经国家新闻出版总署批准,面向国内外公开发行的“全国综合性教育理论学术期刊 面向全国各级各类大、中专经济院校工作者;银行、经贸委、财政及行政管理人员,是作者科研、晋级等方面权威依据的优秀期刊。 主管单位:…

什么是冒烟测试?什么时候做冒烟测试?冒烟测试的用例哪儿来的?

什么是冒烟测试? 冒烟测试(Smoke Testing) 是软件测试中的一项基础测试,也称为构建验证测试(Build Verification Testing),通常用于确认新版本的软件是否可以进行基本的功能测试或者是否能够正…

常见期权策略类型有哪些?

这几天在做一个期权策略类型的整理分类,怎么解释期权策略,期权策略是现代金融市场中运用非常广泛、变化非常丰富、结构非常精妙的金融衍生产品;同时也是一种更为复杂也更为灵活的投资工具,下文介绍常见期权策略类型有哪些&#xf…

图片转换成pdf格式?这几种转换格式方法了解一下

图片转换成pdf格式?将图片转换成PDF格式的好处有很多。首先,PDF格式具有通用性,可以在几乎任何设备上查看。其次,PDF格式可以更好地保护文件,防止被篡改或者复制。此外,PDF格式还可以更好地压缩文件大小&am…

BitLocker已加密 - 解决方案

BitLocker介绍 Bitlocker 是 Windows 磁盘加密功能,旨在通过为整个卷提供加密来保护数据。 BitLocker 解决了因设备丢失、被盗或不适当解除授权而遭受数据盗窃或泄露的威胁。 BitLocker虽然增强了数据安全性,但也增加了用户的使用困难度,因为…

Ansys Zemax | 手机镜头设计 - 第 1 部分:光学设计

本文是 3 篇系列文章的一部分,该系列文章将讨论智能手机镜头模组设计的挑战,从概念、设计到制造和结构变形的分析。本文是三部分系列的第一部分,将专注于OpticStudio中镜头模组的设计、分析和可制造性评估。(联系我们获取文章附件…

【猿灰灰赠书活动 - 02期】- 【Java从入门到精通2023年7月最新(第7版)】

说明:博文为大家争取福利,与清华大学出版社合作进行送书活动 图书:《Java从入门到精通》 一、好书推荐 图书介绍 Java入门经典,95万Java程序员的入行选择。配备升级版Java开发资源库,在线大咖课在线答疑,学…

shell脚本之函数及数组

shell脚本之函数及数组 一函数1.1函数的作用1.2函数的基本格式1.3函数的注意事项1.4函数调用的方法1.5函数的返回值1.6函数的传参1.7在外部调用函数1.8函数变量的作用范围1.9函数的递归 二.数组2.1shell数组的定义2.2定义属组的方式2.3数组的数据类型2.4获取数组的数据列表2.5获…

回归预测 | MATLAB实现GRU门控循环单元多输入多输出

回归预测 | MATLAB实现GRU门控循环单元多输入多输出 目录 回归预测 | MATLAB实现GRU门控循环单元多输入多输出预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 MATLAB实现GRU门控循环单元多输入多输出,数据为多输入多输出预测数据,输入10个…

2023电商销售额增幅全球第一!这个国家潜力正在爆发!

随着欧、美等跨境电商市场日趋饱和,拉美地区正逐渐成为全球电商投资的热点。这让该地区增长最强劲的电商市场——阿根廷——成为众多跨境卖家寻求增长与突破的新选择。 那么,阿根廷为什么是跨境卖家扩展电商业务的新机会?阿根廷电子商务市场…

ps变形怎么增加网格? PS怎么变形?

PS图片怎么变形:打开PS,找到需要处理的图片,复制图层,点选“编辑”—“变换”—“变形”,出现变形网格后,按需要操作就可以了。 PS是一款图片编辑的处理软件,它有很多的功能,在图形…

一百五十八、Kettle——Kettle各版本及其相关安装包分享(网盘链接,不需积分、不需验证码) 持续更新、持续分享

一、目的 最近因为kettle9.3的shim问题看了好多博客,都没有网盘分享。后来有一位博主分享了kettle9.2的shim安装包,已经很感谢他,但是是博客分享,下载还需要搞验证码下载码之类的。 kettle9.2的shim安装包下载好后,一…

基于LVQ神经网络的人脸朝向识别

1案例背景 1.1人脸识别概述 人脸识别作为一个复杂的模式识别问题,近年来受到了广泛的关注,识别领域的各种方法在这个问题上各显所长,而且发展出了许多新方法,大大丰富和拓宽了模式识别的方向。人脸识别、检测,跟踪、特征定位等技术近年来一直是研究的热点。人脸识别是人脸应用…

springboot结合shiro实战-身份认证

目录 环境搭建 配置shiro环境 总结 hello,大家好,我们写任何企业级项目基本都会需要做权限,权限包含身份认证和授权。 所谓身份认证,就是证明你是你。 所谓授权就是明白你登录之后能干什么。 现在,让我们用sprin…

根据一棵树的两种遍历构造二叉树

题目 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null,…

【Java从0到1学习】09 正则表达式

1. 正则表达式概述 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 正则表达式,又称正规表示法、常规表示法&#xff…

js watermark实现水印效果

2023.8.15今天学习了如何给页面添加水印,效果如下: 1.创建watermark.js文件: import id from "element-ui/src/locale/lang/id";let watermark {} let setWatermark (str) > {let id 1.23452384164.123412415if (document.g…

智安网络|深入比较:Sass系统与源码系统的差异及选择指南

随着前端开发的快速发展,开发人员需要使用更高效和灵活的工具来处理样式表。在这个领域,Sass系统和源码系统是两个备受关注的选项。 Sass系统 Sass(Syntactically Awesome Style Sheets)是一种CSS预处理器,它扩展了CS…