今天用做了 3 年实时计算各种复杂业务场景开发,1 年多实时计算平台 owner 的经验,尽可能详尽梳理一番,分享干货给实时计算小伙伴一些参考,最后有一个评估指标标准。

实时计算-资源评估标准

资源评估一直是一个难以准确回答,因为不同人参考角度不一样,并不能精准回答一个人说,你看看我这个任务应该用多少资源合适?

不同业务逻辑,不同的任务结构,不同的算子链,不同的数据流量,实时流量的稳定性,计算任务的复杂度,等等等等~~

我只能说一个经验值参考值,单 CPU 能达到 5 千,就还行~~

资源配置标准

最终产出最低资源配置、正常资源配置、高峰日配置,以及相应吞吐量,均值

单 CPU 处理能力不是纯线性增长,只能仅供参考,经验值常规任务是单 CPU 处理 5K 消息

以下为实时任务资源上线标准表格

任务最低资源配置(临界点,低于这个值,日常流量会产生挤压)

资源配置吞吐量峰值日常均值单 CPU 处理能力(仅供参考)
24P*5C12G24P*112W/s8W/s2.4W

正常推荐配置:

资源配置吞吐量峰值日常均值单 CPU 处理能力(仅供参考)
48P*5C12G24P*224W/s16W/s2.4W

高峰日推荐配置:

资源配置吞吐量峰值日常均值单 CPU 处理能力(仅供参考)
48P*5C12G16P*348W/s32W/s2.4W

影响性能的因素?

不同的资源对任务的影响是不一样的,那么影响任务性能的因素又有哪些呢?

实时任务从开发到生产资源影响因素有很多,不同的任务,而且有些是时刻在变化的,从技术角度看:

  • 最终 DAG
  • 并行度不一致
  • 木桶效应
  • 数据热点
  • 上游数据源吞吐量
  • 下游数据源的 TPS

从资源角度看,对不同任务的预期参考细粒度指标:

  • 单条记录数的大小
  • 每秒处理的记录条数及流量大小
  • 带状态的任务评估 key 的基数,及状态大小
  • 状态更新的频次以及状态存储类型
  • 网络带宽资源大小

基于以上所有的因素及参考指标,最终的目标都是为了平衡资源的投入与产出比,实时任务的 SLA 主要考量停机时间、数据最大吞吐量、以及延迟时间

资源与性能是线性的吗?

资源评估是根据不同的资源配置在上线之前拿真实数据试跑,评估所需资源,资源消耗的核数与吞吐能力并不完全线性比 简单举例:

  • 10CU 跑的时候处理峰值 10W
  • 8CU 跑的时候是 8W
  • 5CU 跑的时候处理峰值有可能是 2W
  • 2CU 跑的时候可能是 5 千
  • 20CU 能处理峰值可能是 25W

资源消耗在忽略性能瓶颈,忽略的情况下会有临界点,比如上面来看,5CU 就是临界点,低于这个核数,性能会骤降。

临界点 默认是在忽略对性能进行调优,DAG 图产生改变,修改并行度等,因为这些变量的调整都会影响到临界点的变化,所以临界点判断是在各项优化手段之后,结构不再进行调整,准备上线时候评估是最准确的。

评估资源思路

评估资源一定是要有预生产稳定运行,根据统计时间跨度来拉长数据追踪。

综合试跑的情况来看,上线的时候我们要通过追数据,来找到临界点,对于临界点之后的线性增长是考虑资源收窄的关键点。

1. 找到临界点

临界点如何判断?主要有两个方式:

  1. 简单直接:通过调整 CU 数、并行度、Slots/TM 等资源参数调整,追数据,当吞吐趋于稳定,记录每秒吞吐量变化
  2. 看 DAG 图,如果在追数据的时候,DAG 图各节点并没有明显的背压位置
  3. 正常运行的时候,busy 指标在 0-80 区间,是正常的,稳定在 50-80 区间,说明上游数据稳定,并且未对上游产生背压,资源利用率压缩到相对稳定阶段

基于以上因素,针对每个任务正常运行评估需要的资源作为基线,外加资源缓冲量处理负载尖峰

缓冲量 要根据数据上游历史波动来峰谷判断,通常 buffer 在峰值增加 0.4~1.0 之间。 缓冲量评估看峰值持续时间占比、峰值与均值跨度、四分位区间判定 buffer 量。

2. 资源评估维度确定

  • 并行度个数(parallelism)

  • 单 TM 配置:

    • CPU 个数
    • Memory 大小
    • slot 数
  • TM 个数(由并行度与单 tm slot 个数决定)

总并行度*单核参数*TM 个数:24P*5C12G24P*1