使用SCF-provisioned-concurrency计算脚本为云函数快速计算相对合适的预置并发数量
因为云函数提供了定时预置并发功能, 可以更加灵活的为不同时间段的请求动态设置预置并发,减少了闲置预置并发的费用。为了帮助用户得到云函数的一个相对合理的预置并发数量的配置,提供了方便的计算脚本: SCF-provisioned-concurrency. 使用此脚本,用户只需要对基本的数据资料进行填充,即可得到一个基于云函数并发请求量计算出来的预置并发的参考配置。 提供了:
- 基于时间聚合区间的费用计算
- 基于时间聚合区间的预置并发配置推荐, 用户可以作为云函数定时预置并发的参考值
- 以天为单位的费用总计
- 基于时间粒度的费用计算
仓库地址
此 repo 包含了两个计算脚本 parseCSV.js
和 timer.js
, 可以根据云函数的请求量来计算合适的预置并发配置
使用步骤
git clone git@github.com:yyh84yangtao/SCF-provisioned-concurrency.git
- 安装依赖:
npm install
- 在腾讯云控制台找到想要统计的云函数,通过 监控信息可以获取云函数的并发执行个数和预置并发此项数据,将 csv 数据下载到此脚本仓库的
resources
(如没有此文件夹,自行创建即可), 注意事项:- 下载的每一天的数据,必须保证选取的时间粒度相同
- 下载的 csv 文件建议使用日期 函数名命名
- 将所需云函数的 csv 监控数据下载在 resources 文件夹之后,执行
npm run build:data
, 执行成功之后,会在根目录生成data.json
文件,包含了对resources
下的源数据分析:
{
"date": ["xxx", "yyyy", "zzz"],
"data": [1, 3, 4]
}
代码语言:txt复制1. `date`: 根据源数据中的时间自动生成的日期数据, 其中 **年-月-日**字段是为了后面的图表展示自动生成的,没有实际意义
2. `data`: 根据每一天的源数据中的**并发执行个数**数据,自动计算得到。比如现在有两个源文件: `scf-2022-01-01.csv, scf-2022-01-02.csv`, 会把这两个文件中同一时间粒度的并发执行个数计算得到一个平均数值
3. 需要对 `data.json` 中生成的数据进行数据可视化,进而确定要统计的时间区间, 我们这里以`Echarts`图形库为例, 用户可自行选择合适的工具:
4. 打开[Echarts 在线编辑器](https://echarts.apache.org/examples/zh/editor.html?c=line-sections)
5. 将如下内容复制到编辑框中:
代码语言:javascript复制option = {
dataZoom: {},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
},
},
xAxis: {
type: 'category',
boundaryGap: false,
// prettier-ignore
data: [],
},
yAxis: {
type: 'value',
axisLabel: {
formatter: '{value}',
},
axisPointer: {
snap: true,
},
},
series: [
{
type: 'line',
smooth: true,
// prettier-ignore
data: [],
},
],
};
data.json
数据中的date
数据放置在上面数据结构的xAxis->data
中,data
数据放置在series->data
中,生成完整的可视化图表,观察数据走势,确定数据划分区间.- 将生成的数据划分区间填充在
timeRange.json
文件中:
[
["00:00", "02:00"],
["02:01", "08:59"],
["09:00", "23:59"]
]
上面的例子表示将以天为单位的时间粒度划分出 3 个时间聚合区间.
- 执行
npm run build:result
生成预置并发预测数据:result.json
: costTotal
: 代表一天中总的闲置预置并发的费用plan
:time
: 表示需要配置预置并发的时间区间count
: 表示在time
时间设置的预置并发数量itemCostTotal
: 表示在time
区间的的闲置预置并发费用cost
中的每一项代表在当前时间粒度中发生的并发请求数量以及对应的闲置预置并发费用.- 根据
result.json
生成的结果数据,用户可以自行在腾讯云控制台上配置云函数所需要的预置并发数量
{
"costTotal": "1.2",
"plan": [{
"time": ["00:00", "02:00"],
"count": 1,
"itemCostTotal": 0.3,
"cost": [
{
"time": "2022-01-05 0:0",
"concurrency": 2,
"itemCost": 0
}
],
"...."
}]
}