【福利活动】1分钟Serverless部署PHP商城实验班上线啦!

带你体验如何使用 Serverless 应用引擎 SAE 快速部署一个PHP商城,并体验 SAE 带来的弹性伸缩、应用监控等强大能力。

完成实验,即可获得价值10元的猫超卡和价值5元阿里云通用代金券!快来参加吧!

活动时间:2月6日 - 2月17日

活动链接(建议 PC 端访问):

https://developer.aliyun.com/adc/series/activity/SAE

背景介绍

全托管的 Serverless 计算平台能给用户带来更少的运维代价、更强的稳定性和更快的弹性能力。

Serverless 的目标之一是免运维,但仍旧存在一些障碍,在 Serverless 场景特有的一些关键服务配置比如“并发度”、“最小实例数”、“最大实例数”,如何配置参数才是最合适的?怎么确定自己配置的参数是否合理?仍旧一直是让用户头痛的事情。

本文介绍了函数计算团队在自动化推荐 Serverless 函数最佳配置上的思考和相关工作,希望帮助用户解决目前使用 Serverless 的痛点问题,彻底解放用户的双手,释放 Serverless 服务的价值。

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

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

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

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

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

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

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

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

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

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

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

CPU 密集型的规格越高,maxTPS 越大;并且规格与 maxTPS 呈现明显的线性关系。

规格越大,maxRT 越低 ,说明CPU密集型的函数,增大资源规格可以显著降低 RT。但是规格增大到 4G、8G 后,对 RT 的降低效果边际效应递减。

下图展示了 IO 密集型函数在不同规格下的压测数据:

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

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

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

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

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

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

青铜用户:拍脑袋设置

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

白银用户:人工反复调整

函数上线后,可能会发现之前的配置不合理,仍旧需要反复修改函数配置验证。如果修改了函数逻辑,可能会发现之前的配置会出现问题,比如请求延迟变大,或者函数偶然出现 OOM 错误。

有一些经验的开发者会选择自己进行压测,确定函数的最佳配置。但是压测的使用具有一定的门槛,并且压测得到数据一般用户也不知道怎么分析,可能会产生更多的疑问。最终折腾一番,用户也不是很确定压测得到的配置是否是最符合自己预期的最优选择。

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

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

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

具体的探测方法,根据 **little's law **排队理论,我们知道服务的吞吐量、并发数和响应时间之间存在着一个等式关系:并发数 = 请求的平均延迟 * TPS

如果我们使用图形化表示,如下图所示:



横坐标是并发数,左边的纵坐标是 TPS,右边的纵坐标是延迟。由于每个服务器的处理能力都有限,所以会出现

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

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

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

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

整个功能采用流程图的方式指引,先压测单实例,再压测多实例,因为在性能表现平稳的系统,多实例的性能是单实例性能的线性叠加,所以只需要压测出单实例的性能,就可以推算出多实例的性能。

用户能够根据引导使用性能探测,并得到推荐结果;同时性能探测功能是完全免费的,用户只需要为函数承接的请求流量付费,不需要为压测功能付费。



单实例压测结果分析页面:

单实例压测数据详情页面:



目前函数性能压测功能已经在函数计算控制台上线,具体详细的使用方式可以参考文档

性能探测推荐的函数配置优先保证满足性能需求,实现最高的资源利用率,但是真正实现最低成本配置,需要结合函数线上历史流量数据分析,进行推荐。

在进行成本优化推荐规格时,不仅需要达到节约成本的目的,还需要保证不破坏现有服务的 QoS,即性能不会因为实例规格的降低,而导致延迟增大。

比如下面这张图表示用户实际资源使用量较低,实际配置的规格偏大,我们可以推荐更低的规格,以帮助用户节约成本。

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

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

最后我们期待的至尊王者,是彻底解放用户的双手,能够智能动态地调整函数的并发度,不管流量变化或业务逻辑如何变化,用户再也不需要关心或重新配置函数并发度的大小。

智能动态并发度未来一个演化方向,在这种模式下,用户不需要通过手动配置参数,而是在函数运行时动态调整,根据实例 CPU 负载的健康指标自动调整到最佳值。函数计算也会继续努力,打造体验更好的,更帮用户节省成本,更 Serverless 的自动化配置方案。

总结与展望

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

参考

Little's Law Wikipedia

RobustScaler: QoS-Aware Autoscaling for Complex Workloads

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

从青铜到王者,揭秘 Serverless 自动化函数最佳配置的更多相关文章

  1. 学习swift从青铜到王者之Swift语言函数05

    1.定义一个函数以及调用 //一,定义一个无参无返回值函数 func fun1(){ print("this is first function") } fun1() 2.定义一个 ...

  2. 揭秘PHP匿名函数

    揭秘PHP匿名函数 定义:匿名函数就是没有名字的函数. 有2种形式的匿名函数: 形式1:将一个匿名函数"赋值"给一个变量--此时该变量就代表该匿名函数了! 形式2: 是直接将一个匿 ...

  3. UI设计行业中的“延禧攻略”,教你从青铜变王者

    最近一直在追<延禧攻略>,女主魏璎珞敢爱敢恨,有仇必报的性格吸引不少人,她从低贱的秀坊小宫女步步为营,最终成为皇帝最宠爱的令妃呼风唤雨.尔虞我诈的后宫,想要打怪升级光有颜值是万万不够的,更 ...

  4. Python文本转化语音模块大比拼,看看青铜与王者的差别!

    文本转语音 如果把Python比喻成游戏中的一个英雄,你觉得它是谁?对于Dota老玩家来说,我会想到钢琴手卡尔!感觉Python和卡尔一样,除了生孩子什么都可以做的角色.日常生活中,我们会涉及到很多语 ...

  5. Serverless 实战 —— 函数计算 + Typescript 实践

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...

  6. ylb:SQLServer常用系统函数-字符串函数、配置函数、系统统计函数

    原文:ylb:SQLServer常用系统函数-字符串函数.配置函数.系统统计函数 ylbtech-SQL Server:SQL Server-SQLServer常用系统函数 -- ========== ...

  7. Cobbler自动化部署最佳实践

    第1章 Cobbler自动化部署最佳实践 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统,如果不通过自动化来完成,根本是不可想象的. 面对 ...

  8. Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(二)

    一.说明 1.1 说明 前面介绍采用 Jenkinsfile + KubernetesPod.yaml 方式进行部署项目(Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-s ...

  9. 明解STM32—GPIO应用设计篇之API函数及配置使用技巧

    一.前言 本篇开始对STM32的GPIO在实际开发设计中的使用配置和技巧进行探讨,可以先去回顾下之前介绍的GPIO的相关理论基础知识包括基本结构,工作模式和寄存器原理. 了解过STM32的GPIO相关 ...

  10. 青铜到王者,快速提升你 MySQL 数据库的段位!

    Reference: https://mp.weixin.qq.com/s?src=11&timestamp=1513259125&ver=574&signature=Uxls ...

随机推荐

  1. java String字符串总结

    这里我们将总结字符串相关的知识,除了总结String的API用法,同时我们还会总结一些相关的知识点,包括字符串常量池.StringBuffer.StringBuilder,以及equals和==的用法 ...

  2. 浅析MySQL代价模型:告别盲目使用EXPLAIN,提前预知索引优化策略

    背景 在 MySQL 中,当我们为表创建了一个或多个索引后,通常需要在索引定义完成后,根据具体的数据情况执行 EXPLAIN 命令,才能观察到数据库实际使用哪个索引.是否使用索引.这使得我们在添加新索 ...

  3. web概念概述

    JavaWeb:   *使用Java语言开发基于互联网的项目 软件架构   1.C/S:Client/Server 客户端/服务器端     *在用户本地有一个客户端程序,在远端有一个服务端程序    ...

  4. python操作elasticsearch-全文检索、拼写纠错、补全提示

    1.首先安装elasticsearch包 pip install elasticsearch (一般会包含新旧版本,如果想要特定的版本,比如5.x 可以在后面加5数字) ""&qu ...

  5. ElasticSearch-Mapping类型映射-增删改查

    https://www.elastic.co/guide/en/elasticsearch/reference/6.8/mapping.html 7.x版本后默认都是_doc类型 增加Mapping映 ...

  6. 从零玩转设计模式之抽象工厂设计模式-chouxiangshejimoshi

    title: 从零玩转设计模式之抽象工厂设计模式 date: 2022-12-08 16:05:03.28 updated: 2022-12-11 23:03:16.842 url: https:// ...

  7. 调用含有header的WebService时,跳过证书验证

    最近在做Webservice的接口调用,header的用户名和密码都是正确的,地址也是对的,但一直提示:基础连接已关闭,未能与SSL/TLS安全通道建立信任关系. 解决方案: 请求之前加上下面得代码即 ...

  8. Mybatis源码4 Cache的实现和其原理

    Mybatis CachingExecutor, 二级缓存,缓存的实现 一丶二级缓存概述 上一章节,我们知道mybaits在构造SqlSession的时候,需要让SqlSession持有一个执行器,如 ...

  9. 开源的代名词「GitHub 热点速览」

    当开发者谈论开源时,通常会想到 GitHub,它不仅仅是一个代码托管平台,更是一个汇聚了全球开发者的社交中心.过去,开发者发布一款软件后,都是在自己的小圈子里默默努力和交流,现在通过 GitHub 平 ...

  10. 技术解读丨GaussDB数仓高可用容灾利器之逻辑备份

    摘要:GaussDB数仓的Roach工具,同时提供物理备份和逻辑备份两种主要形态的备份.逻辑备份针对数据库的逻辑对象进行抽取和备份,能够有效地应对单表.schema级等较细粒度的备份,较为灵活和便利. ...