写点什么

从工具看函数资源评估

作者:刘宇
  • 2021 年 12 月 15 日
  • 本文字数:1672 字

    阅读完需:约 5 分钟

从工具看函数资源评估

在 Serverless 领域内,通常会出现以下两种使用场景:


  • CPU 密集型场景对于 CPU 密集型场景,例如音视频处理、AI 推理或图片处理等,您一般会选择使用单实例单并发。由于该类场景的函数内存大小和 CPU 能力成正比,因此您需要根据函数是成本敏感型还是延迟敏感型选择合适的内存规格。

  • I/O 密集型场景对于 I/O 密集型场景,您一般会选择使用单实例多并发。该类场景下由于函数内存和 CPU 能力成正比,建议您将函数内存规格设置足够大,但可能会出现浪费资源的现象,很难选择合适的单实例并发值。


针对在以上两种使用场景无法设置合适的参数规格的情况,Serverless Devs 为您提供了探测功能,可以实现内存探测和并发度探测,获取满足您需求的参数配置信息。eval 命令是对函数进行探测的命令;通过 eval 指令,可以对函数探测内存(单实例单并发)或者探测并发度(单实例多并发)。例如给 CPU 密集型场景的函数设置合适的内存,给 I/O 密集型场景的函数设置合适的并发值,根据探测结果,获取满足需求的最佳内存大小或最佳并发度值。


注意: 这个命令只是针对开发上线前阶段的函数, 不要对生产函数执行探测操作

内存探测模式

本示例以探测 CPU 密集型场景事件函数为例,介绍如何实现内存模式的探测。请执行以下命令,获取最佳的内存规格:


s cli fc eval start --region cn-hangzhou --function-name cpu-test --service-name Service  --eval-type memory  --run-count 10   --payload '{"key":"val"}' --memory-size 128,256,512,1024  --access default
复制代码


本示例表示被探测的目标函数在 128 MB、256 MB、512 MB 和 1024 MB 四个不同的内存模式下分别被调用十次后取平均值,例如目标函数在 128 MB 内存格式下被调用十次后取平均值,最终对目标函数在这四个不同内存模式下分别被调用十次后的平均值进行对比,获取探测信息。


输出示例:


...>-http://memory-tuning.devsapp.cn/#gAAAAQACAAQ=;AIAARwBYgEYAoPdFAHiBRQ==;37w+OH+BPjiqxzc4/SxAOA==
复制代码


此时,可以通过浏览器打开返回的地址,查看相关探测信息:



关于该结果的解析如下:


  1. 图中红色的线表示执行时间与内存大小的关系;蓝色的线表示所消耗的成本与内存之间的关系;

  2. 右侧四个数字分别是:

  3. Best Cost:消费最少的时候,内存是 512MB;

  4. Best Time:执行耗时最短的时候,内存是 1024MB;

  5. Worst Cost:消费最多的时候,内存是 1024MB;

  6. Worst Time:执行耗时最长的时候,内存是 128MB;


此时可以根据这个数据,当前函数资源进行内存设定,可以综合曲线和实际业务需求,例如,在当前时刻,延迟要求在 20000ms 以内,256M 是成本最佳, 如果要求延迟在 5000ms 以内, 这个时候 1024M 是最佳选择。

并发度探测模式

本示例以 I/O 密集型场景的 HTTP 函数为例,介绍如何对函数实现并发度的探测。请执行以下命令,获取最佳的并发度规格:


s cli fc eval start --region cn-hangzhou --function-name demo --service-name Service --eval-type concurrency --memory 1536 --concurrency-args 2,20,5 --rt 200 --method=get --path /login  --query 'a=1&b=2'  --headers='{"header_a":"v"}' --access default
复制代码


本示例表示将被探测的目标函数的内存规格设置为 1.5 GB,并发度范围[2,20],步长为 5,即被探测的目标函数分别在 2,7,12 和 17 不同并发值模式下实现探测,获取探测信息。


输出示例:


...>-http://concurrency-tuning.devsapp.cn/#AgAHAAwAEQA=;Ilj3QCL+QEFCR5tBGFO4QQ==;AAC2QgAA1kIAADtDAABCQw==
复制代码


此时,可以通过浏览器打开返回的地址,查看相关探测信息:



关于该结果的解析如下:


  1. 图中红色的线表示执行时间与单实例并发度的关系;蓝色的线表示有效的 QPS 与单实例并发度之间的关系;

  2. 右侧四个数字分别是:

  3. Best QPS:有效 QPS 最高的时候,单实例并发度是 17;

  4. Best Time:执行耗时最短的时候,单实例并发度是 2;

  5. Worst QPS:有效 QPS 最低的时候,单实例并发度是 2;

  6. Worst Time:执行耗时最短的时候,单实例并发度是 17;


此时可以根据这个数据,可以对这个函数的单实例多并发的并发度值进行设置, 如果需要函数的每次执行时间都小于 20ms, 那么设置并发度 12 是一个好的选择。

用户头像

刘宇

关注

阿里云Serverless云布道师 2020.01.04 加入

阿里云Serverless产品经理,国防科大在读博士,《Serverless架构》、《Serverless实践》、《人人都能学会的Serverless架构》等书籍作者,Serverless Devs发起人,Anycodes在线编程负责人。

评论

发布
暂无评论
从工具看函数资源评估