实时计算-资源评估标准
今天用做了 3 年实时计算各种复杂业务场景开发,1 年多实时计算平台 owner 的经验,尽可能详尽梳理一番,分享干货给实时计算小伙伴一些参考,最后有一个评估指标标准。
实时计算-资源评估标准
资源评估一直是一个难以准确回答,因为不同人参考角度不一样,并不能精准回答一个人说,你看看我这个任务应该用多少资源合适?
不同业务逻辑,不同的任务结构,不同的算子链,不同的数据流量,实时流量的稳定性,计算任务的复杂度,等等等等~~
我只能说一个经验值参考值,单 CPU 能达到 5 千,就还行~~
资源配置标准
最终产出最低资源配置、正常资源配置、高峰日配置,以及相应吞吐量,均值
单 CPU 处理能力不是纯线性增长,只能仅供参考,经验值常规任务是单 CPU 处理 5K 消息
以下为实时任务资源上线标准表格
任务最低资源配置(临界点,低于这个值,日常流量会产生挤压)
| 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|
| 24P*5C12G24P*1 | 12W/s | 8W/s | 2.4W |
正常推荐配置:
| 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) | |
|---|---|---|---|---|
| 48P*5C12G24P*2 | 24W/s | 16W/s | 2.4W |
高峰日推荐配置:
| 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) | |
|---|---|---|---|---|
| 48P*5C12G16P*3 | 48W/s | 32W/s | 2.4W |
影响性能的因素?
不同的资源对任务的影响是不一样的,那么影响任务性能的因素又有哪些呢?
实时任务从开发到生产资源影响因素有很多,不同的任务,而且有些是时刻在变化的,从技术角度看:
- 最终 DAG
- 并行度不一致
- 木桶效应
- 数据热点
- 上游数据源吞吐量
- 下游数据源的 TPS
从资源角度看,对不同任务的预期参考细粒度指标:
- 单条记录数的大小
- 每秒处理的记录条数及流量大小
- 带状态的任务评估 key 的基数,及状态大小
- 状态更新的频次以及状态存储类型
- 网络带宽资源大小
基于以上所有的因素及参考指标,最终的目标都是为了平衡资源的投入与产出比,实时任务的 SLA 主要考量停机时间、数据最大吞吐量、以及延迟时间
资源与性能是线性的吗?
资源评估是根据不同的资源配置在上线之前拿真实数据试跑,评估所需资源,资源消耗的核数与吞吐能力并不完全线性比
简单举例:
- 10CU 跑的时候处理峰值 10W
- 8CU 跑的时候是 8W
- 5CU 跑的时候处理峰值有可能是 2W
- 2CU 跑的时候可能是 5 千
- 20CU 能处理峰值可能是 25W
资源消耗在忽略性能瓶颈,忽略的情况下会有临界点,比如上面来看,5CU 就是临界点,低于这个核数,性能会骤降。
临界点 默认是在忽略对性能进行调优,DAG 图产生改变,修改并行度等,因为这些变量的调整都会影响到临界点的变化,所以临界点判断是在各项优化手段之后,结构不再进行调整,准备上线时候评估是最准确的。
评估资源思路
评估资源一定是要有预生产稳定运行,根据统计时间跨度来拉长数据追踪。
综合试跑的情况来看,上线的时候我们要通过追数据,来找到临界点,对于临界点之后的线性增长是考虑资源收窄的关键点。
1. 找到临界点
临界点如何判断?主要有两个方式:
- 简单直接:通过调整 CU 数、并行度、Slots/TM 等资源参数调整,追数据,当吞吐趋于稳定,记录每秒吞吐量变化
- 看 DAG 图,如果在追数据的时候,DAG 图各节点并没有明显的背压位置

- 正常运行的时候,busy 指标在 0-80 区间,是正常的,稳定在 50-80 区间,说明上游数据稳定,并且未对上游产生背压,资源利用率压缩到相对稳定阶段

基于以上因素,针对每个任务正常运行评估需要的资源作为基线,外加资源缓冲量处理负载尖峰
缓冲量 要根据数据上游历史波动来峰谷判断,通常 buffer 在峰值增加 0.4~1.0 之间。 缓冲量评估看峰值持续时间占比、峰值与均值跨度、四分位区间判定 buffer 量。
2. 资源评估维度确定
并行度个数(parallelism)
单 TM 配置:
- CPU 个数
- Memory 大小
- slot 数
TM 个数(由并行度与单 tm slot 个数决定)
总并行度*单核参数*TM 个数:24P*5C12G24P*1
