从青铜到王者,揭秘 Serverless 自动化函数最佳配置

news2025/2/26 0:56:32

作者:丛霄

背景介绍

全托管的 Serverless 计算平台能给用户带来更少的运维代价、更强的稳定性和更快的弹性能力。
Serverless 的目标之一是免运维,但仍旧存在一些障碍,在 Serverless 场景特有的一些关键服务配置比如**“并发度”、“最小实例数”、“最大实例数”**,如何配置参数才是最合适的?怎么确定自己配置的参数是否合理?仍旧一直是让用户头痛的事情。
本文介绍了函数计算团队在自动化推荐 Serverless 函数最佳配置上的思考和相关工作,希望帮助用户解决目前使用 Serverless 的痛点问题,彻底解放用户的双手,释放 Serverless 服务的价值。

截屏2023-02-08 上午11.35.03.png

评估 Serverless 服务最佳配置的难点

用户使用 Serverless 服务的预期是:更低的成本、更快的弹性、更优的性能、更稳定的环境,这同时也是 Serverless 平台承诺提供给用户的能力。尽管如此,很多用户在使用过程中还是出现了各种问题:

  • 为什么使用 Serverless 后发现成本还变高了?
  • 为什么使用 Serverless 的冷启动时间那么长?
  • 在 Serverless 平台上的性能延迟表现为什么更差了?

Serverless 平台能提供一定的基础能力,但是针对不同的业务逻辑,需要采取合适的配置才能更好的发挥 Serverless 的效果。但是如何评估某函数的最佳配置,其中涉及到多变量的协同优化问题,并不是一个简单的问题。具有以下几个难点:

难点1:成本和性能的权衡

  • 一定的单实例多并发数,可以提高单实例并行处理请求的数量,减少实例数,从而降低成本;
  • 并发数过高时,会增加资源竞争,导致性能延迟增加,从而增加成本;
  • 较低的实例规格单价成本更低,但是延时更大;较高的实例规格单价成更高,但是延时可能更低

如何针对用户的偏好场景(性能优先还是成本优先),为用户推荐最佳的函数配置,成为首先需要考虑的一大难点。

难点2:不同函数业务逻辑的复杂度

除了成本和性能维度的衡量,针对不同类型的函数逻辑,不同的配置参数效果也有差异。很多函数业务逻辑复杂,只针对单一逻辑分支进行评估最佳配置并不代表整体的最优;不合适的配置可能增大用户非预期的成本。比如:

  • 对于 CPU 密集型的函数,规格增加对单实例性能的提升有较大的改善
  • 对于 IO 密集型的函数,规格增加对单实例性能的提升存在边际效应递减的情况,当超过某规格后,规格的提升对性能提升的效果基本没有

比如下图展示了 CPU 密集型函数在不同规格下的压测数据:
image.png

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

下图展示了 IO 密集型函数在不同规格下的压测数据:
截屏2023-02-07 下午8.01.21.png

规格的提升对 IO 密集型的性能改善作用有限,特别到了高规格,比如 3G 后,maxTPS 增幅不大

难点3: 函数配置对平台侧资源的影响

函数的并发度、最小实例数、最大实例数等配置会影响到平台侧资源池的容量规划,如何保证单函数的资源刚性交付,多函数的资源隔离;如何优化平台侧弹性调度能力,提高平台侧的资源利用率,是另一个难点问题。

  • 较低的单实例并发度,函数流量波动变化的场景,会提前达到单实例并发上限,导致实例扩缩容频繁,对用户体感来说的冷启动更频繁,对平台来说需要创建和维护更多的实例个数,整体的资源利用率偏低
  • 最大实例数的配置,如何保证实例资源的刚性交付

如何评估 Serverless 服务的最佳配置

通过以上几个难点分析,我们知道评估 Serverless 服务的最佳配置并非易事,下面的几个演化阶段,介绍了用户使用 Serverless 进行服务配置的方式变化,从青铜到王者,我们一直在为用户提供最好的 Serverless 服务努力。
截屏2023-02-08 上午11.45.10.png

青铜用户:拍脑袋设置

在上线初期,用户需要面对一堆配置参数,如果是初次使用函数计算的新用户,还需要翻看文档才了解配置含义,反复折腾后也不知道配置参数多少才合适,最后还是“拍脑袋”随便设置了一个值。

白银用户:人工反复调整

函数上线后,可能会发现之前的配置不合理,仍旧需要反复修改函数配置验证。如果修改了函数逻辑,可能会发现之前的配置会出现问题,比如请求延迟变大,或者函数偶然出现 OOM 错误。
有一些经验的开发者会选择自己进行压测,确定函数的最佳配置。但是压测的使用具有一定的门槛,并且压测得到数据一般用户也不知道怎么分析,可能会产生更多的疑问。最终折腾一番,用户也不是很确定压测得到的配置是否是最符合自己预期的最优选择。

为了解决青铜和白银用户的这些困扰,我们推出了自动化推荐配置的王者功能。

王者:性能探测+数据分析的自动化推荐

近期函数计算重磅推出了函数的**性能探测功能,**性能探测的目的是帮助用户评估函数单个实例在不同规格下的性能上限,并且推荐出满足用户预期延迟的最佳并发度和函数规格配置。

具体的探测方法,根据 **little’s law **排队理论,我们知道服务的吞吐量、并发数和响应时间之间存在着一个等式关系:并发数 = 请求的平均延迟 * TPS
如果我们使用图形化表示,如下图所示:
截屏2023-02-08 下午4.57.32.png
横坐标是并发数,左边的纵坐标是 TPS,右边的纵坐标是延迟。由于每个服务器的处理能力都有限,所以会出现

  • 吞吐量-并发数:随着并发数上升,吞吐量先上升后平缓,可能出现下降,即性能恶化;
  • 延迟-并发数:当并发度过高时,延迟会变高,甚至会急剧恶化;

通过性能探测,我们会得到每种规格的关键性能数据:

  • 每个规格的最高能承受的 QPS:基于此,用户如果对业务流量比较清楚,可以计算得到函数所需的最小实例数和最大实例数。
  • 推荐的最佳规格和规格下的最佳并发度。

比如用户预期自己的函数调用端到端延迟是 1000 毫秒,那么我们会根据 1000 毫秒的延迟限制,推荐出最佳的规格,以及该规格下的最佳并发度,即满足延迟限制的最高 QPS 时对应的并发度。

整个功能采用流程图的方式指引,先压测单实例,再压测多实例,因为在性能表现平稳的系统,多实例的性能是单实例性能的线性叠加,所以只需要压测出单实例的性能,就可以推算出多实例的性能。
用户能够根据引导使用性能探测,并得到推荐结果;同时性能探测功能是完全免费的,用户只需要为函数承接的请求流量付费,不需要为压测功能付费。
截屏2023-02-08 下午1.38.19.png
单实例压测结果分析页面:

截屏2023-02-07 下午7.59.02.png

单实例压测数据详情页面:
截屏2023-02-08 下午1.34.43.png
目前函数性能压测功能已经在函数计算控制台上线,具体详细的使用方式可以参考文档。

性能探测推荐的函数配置优先保证满足性能需求,实现最高的资源利用率,但是真正实现最低成本配置,需要结合函数线上历史流量数据分析,进行推荐。
在进行成本优化推荐规格时,不仅需要达到节约成本的目的,还需要保证不破坏现有服务的 QoS,即性能不会因为实例规格的降低,而导致延迟增大。
比如下面这张图表示用户实际资源使用量较低,实际配置的规格偏大,我们可以推荐更低的规格,以帮助用户节约成本。
截屏2023-02-07 下午8.58.14.png

通过结合性能探测+历史流量数据分析,可以自动化给用户推荐得到保证性能的同时,成本最低的最佳函数配置。

至尊王者:智能动态调整并发度

最后我们期待的至尊王者,是彻底解放用户的双手,能够智能动态地调整函数的并发度,不管流量变化或业务逻辑如何变化,用户再也不需要关心或重新配置函数并发度的大小。
智能动态并发度未来一个演化方向,在这种模式下,用户不需要通过手动配置参数,而是在函数运行时动态调整,根据实例 CPU 负载的健康指标自动调整到最佳值。函数计算也会继续努力,打造体验更好的,更帮用户节省成本,更 Serverless 的自动化配置方案。

总结与展望

目前性能探测功能已经在函数计算控制台开放,基于历史流量评估能够降低成本的最佳配置也会在近期公测开放。基于性能探测的自动化推荐函数配置功能,极大降低了用户上手以及运维函数配置的复杂度,期望能给用户使用 Serverless 带来王者般的体验。

参考

Little’s Law Wikipedia
RobustScaler: QoS-Aware Autoscaling for Complex Workloads

更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。

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

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

相关文章

史上最详细的PyCharm快速上手指南,你值得拥有

上一节中我们介绍了Python并安装了环境,有了Python环境我们就可以开发了吗?各位朋友们。 也可以也不可以!哈哈哈不要怪我朋友们,我说的是事实。 如果你喜欢Python自带的Python命令开发,即我们所说的交互式&#xff0…

5.33 综合案例2.0 -ESP32拍照上传阿里云OSS

综合案例2.0 - ESP32拍照上传阿里云OSS案例说明连线功能实现1.阿里云平台连接2.OSS对象存储服务3.ESP32-CAM开发环境4.代码ESP32-CAM开发板代码HaaS506开发板代码测试数据转图片方法案例说明 使用ESP32拍照,将照片数据上传阿里云OSS(通过4G网络上传)。 …

【ArcGIS Pro二次开发】(4):ArcGIS Pro封装的窗体控件

在ArcGIS Pro,有一类窗体控件是系统已经封装好的,比如消息框、提醒框等。下面通过代码来学习一下。 新建一个项目,命名为【ProWindow】,添加5个按钮,命名为【Show_MessageBox、Show_NoticeBox、Show_OpenDialog、Show…

交通部互通互联码的根证书规则

引言 为了更好的服务交通互通互联码而更新这篇文章。 中金根证书其实是可以自己生成的。 代码内调整 中心公钥索引要保证自己的唯一性。 此处的唯一,是要保证在机具侧的唯一,因为他要根据这个索引去查找证书以及公钥。 提供根公钥给机具侧 生成的公钥…

“黑洞”竟是外星人的量子计算机?

宇宙中的黑洞可以用作终极量子计算机,我们可以从中探索它们的特征。(图片来源:网络)我们完全有理由怀疑生命在我们的宇宙中很常见,但是为什么我们从未发现过其他生命存在的迹象?这个问题几乎自现代天文学诞…

JavaScript 教程

手册简介JavaScript 是世界上最流行的脚本语言。 JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。 JavaScript 被设计为向 HTML 页面增加交互性。 许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几…

SpringBoot Data JPA配置多数据源

SpringBoot Data JPA配置多数据源1. Dependency2. Application.properties3. Code3.1 Datasource config3.2 Primary Config3.3 Second Config4. Awakening1. Dependency <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jd…

常用设计模式介绍

java设计模式类型创建型模式&#xff1a;将对象的创建与使用分离结构型模式&#xff1a;如何将类和对象按照某种布局组成更大的格局行为型模式&#xff1a;用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务23种设计模式介绍1.单例&#xff08;Singleton&…

linux高级命令之软件安装

软件安装学习目标能够使用apt-get命令安装软件1. 软件安装的介绍Ubuntu软件安装有两种方式:离线安装(deb文件格式安装&#xff09;在线安装(apt-get方式安装)2. deb文件格式安装是 Ubuntu 的安装包格式&#xff0c;可以使用 dpkg 命令进行软件的安装和卸载。命令说明dpkg安装和…

以“大数据”赋能产业链精准招商

​ 随着我国产业发展的不断迭代升级&#xff0c;传统招商模式的不足逐步凸显&#xff0c;侧重土地与税费优惠的同质化竞争招商以及来者不拒的无门槛型招商已经遏制了区域产业的发展&#xff0c;导致各产业园区很难形成产业集聚及持续的吸引力。在这样的大环境下&#xff0c;产业…

使用LogToHtml导出Airtest报告

simple_report接口&#xff0c;是个简化版的生成报告接口&#xff0c;如果仅仅需要在本地查看的话&#xff0c;用这个接口即可。 但是如果需要导出报告&#xff0c;即他人也可以正常查看&#xff0c;则需要用LogToHtml类。 参数解释 script_root&#xff0c;脚本路径 log_ro…

论一个上班族如何一次性通过PMP考试

PMP是我工作后考取的一个证书。从准备到通过&#xff0c;花了大约三个月的时间。我之前在某家互联网公司从事程序员的工作&#xff0c;工作一段时间后&#xff0c;天天敲着代码&#xff0c;改着bug&#xff0c;感觉比较迷茫&#xff0c;不知道未来的发展在哪里&#xff0c;都说…

Viper捐款7000万韩元,合计人民币是多少钱?

Viper捐款7000万韩元&#xff0c;合计人民币是多少钱&#xff1f; #2023LCK春季赛##英雄联盟# #Viper捐款7000万韩元# Viper向大田东区捐款 7000 万&#xff0c;成为大田荣誉协会 105 号会员。Viper选手从 2019 年开始一直向大田东区捐款&#xff0c;但是他不希望这件事被公开…

[VMware]Ubuntu18.04 网络图标消失

Ubuntu 18.04 网络图标消失运行环境问题解决NO.1 执行 sudo systemctl stop network-managerNO.2 执行 sudo rm /var/lib/NetworkManager/NetworkManager.stateNO.3 执行 sudo systemctl start network-managerNO.4 vi /etc/NetworkManager/NetworkManager.confNO.5 执行 sudo …

【Linux 多线程】线程的4大基础操作(创建、等待、终止、分离)

目录 1.线程的创建 2.线程等待 3.线程分离 线程共享一个地址空间 &#xff0c;把资源&#xff08;代码和数据&#xff09;化成若干份&#xff0c;供各个线程使用 线程的栈和上下文不是共享的以前学习的进程是具有一个线程的进程1.线程的创建 成功返回0&#xff0c;失败返回…

第一章:初始化react项目+antd+less

初始化react项目 我们首先使用react脚手架创建一个项目 Ant Design less creact-react-app中文文档 creact-react-app demo生产环境打包运行 当我们执行了 npm run build 打包后直接访问index.html 看效果白屏 这时候就需要安装一个serve包 npm install -g serve当我们安…

操作系统(二):死锁的检测,死锁的恢复和死锁的预防

文章目录零、什么是死锁一、死锁检测1. 对每种类型一个资源的死锁检测2. 对每种类型多个资源的死锁检测二、死锁恢复三、死锁预防四、死锁避免1 面向单个资源的银行家算法2 面向多个资源的银行家算法总结银行家算法的核心就是避免系统进行系统资源分配的不安全状态零、什么是死…

Zipkin : Golang 微服务全链路监控(二)

Zipkin : Golang 微服务全链路监控&#xff08;二&#xff09; Golang 微服务全链路监控实现 broker-service -> auth-service -> postgres dbzipkin 监控&#xff1a;需代码入侵 一、auth-service 通过 context 传递 span main.go package mainimport ("broke…

CSDN 编辑器 Marddown 语法备忘

原文链接&#xff1a;https://blog.csdn.net/blogdevteam/article/details/103478461 本文对其二次加工&#xff0c;增加渲染样式、补充例程、添加未收录的常用语法。 CSDN Markdown 编辑器遵循 CommonMark spec 语法规范。 快捷键 撤销&#xff1a;Ctrl/Command Z 重做&…

成都链安受邀参加第五届CCF中国区块链技术大会

2月10-12日&#xff0c;由中国计算机学会主办的&#xff0c;2023年国内首场大型区块链学术会议—第五届CCF中国区块链技术大会在无锡市成功举办&#xff0c;成都链安作为区块链安全头部企业受邀参加此次大会。大会上&#xff0c;成都链安创始人&CTO郭文生教授与锡东新城商务…