4. 调度策略核心指标:吞吐量、延迟、资源利用率、任务失败率

聊调度策略,不能光看算法多花哨。你得有尺子去量。

我个人习惯,衡量一个调度器好不好,就看四个维度:吞吐量、延迟、资源利用率、任务失败率。这四个指标,说白了就是调度器的“体检报告”。任何一个指标出问题,你的日志平台都可能“带病运行”。

核心观点: 这四个指标相互制约,不存在“全优”的调度策略。你只能根据业务场景做取舍。

调度策略核心四维指标 调度策略 吞吐量 延迟 资源利用率 任务失败率 四个指标相互制约,优化一个往往会影响其他三个

4.1 吞吐量:你到底能处理多少活儿?

吞吐量,就是单位时间内调度器能处理的任务数量。比如每秒调度多少个日志采集任务,或者每分钟完成多少个日志解析作业。

我记得有一次,线上日志量突然暴涨,调度器直接卡死。查了半天,发现是吞吐量上限设得太低。嗯,这里要注意:吞吐量不是越高越好。你硬往上顶,系统会崩溃。

我的经验: 吞吐量要留 20%-30% 的余量。别把调度器跑满,否则遇到突发流量,你就等着收告警吧。

影响吞吐量的因素有哪些?我列个表给你看:

因素 影响方式 典型瓶颈
任务队列长度 队列越长,吞吐量上限越低 内存不足导致队列溢出
调度器线程数 线程数太少,吞吐量上不去 CPU 上下文切换开销
后端存储 IO 写日志慢,调度器就得等 磁盘 IOPS 打满
网络带宽 日志传输慢,任务堆积 网卡带宽跑满

4.2 延迟:任务从提交到完成,等了多久?

延迟,就是任务从提交到完成的时间。对于日志平台来说,延迟尤其敏感。你想想看,一个日志采集任务延迟了 10 分钟,那这 10 分钟的日志就丢了,或者至少是延迟入库。

我曾经遇到过一个 case:调度器为了追求高吞吐量,把任务批量提交,结果单个任务的延迟飙到了 5 分钟。业务方投诉说日志实时性太差。后来我调整了策略,把批量大小从 1000 降到 100,延迟降到了 30 秒以内。

避坑指南: 吞吐量和延迟是“跷跷板”。你追求高吞吐,延迟必然上升;你追求低延迟,吞吐量就会下降。没有银弹。

延迟的构成,我习惯拆成三部分:

  • 排队延迟: 任务在队列里等着被调度。队列越长,排队越久。
  • 调度延迟: 调度器本身做决策的时间。比如计算资源匹配、优先级排序。
  • 执行延迟: 任务实际执行的时间。比如日志解析、写入存储。

你排查延迟问题时,按这个顺序查,基本能定位到根因。

4.3 资源利用率:你的机器到底用没用好?

资源利用率,就是 CPU、内存、磁盘、网络这些资源被用了多少。我见过很多团队,机器买了一大堆,利用率不到 20%。说白了,就是浪费钱。

但反过来,资源利用率也不是越高越好。我记得有一次,我把 CPU 利用率压到了 95%,结果调度器频繁触发 OOM。为什么?因为资源用得太满,系统没有余量处理突发请求。

我的建议: 资源利用率控制在 60%-80% 之间。低于 60% 说明你资源浪费,高于 80% 说明你随时可能出问题。

资源利用率要分维度看:

  • CPU 利用率: 调度器是 CPU 密集型还是 IO 密集型?日志解析通常是 CPU 密集型。
  • 内存利用率: 任务队列、缓存、中间结果都会吃内存。
  • 磁盘 IO 利用率: 日志写入磁盘,IO 很容易成为瓶颈。
  • 网络带宽利用率: 日志传输,尤其是跨机房传输,带宽很贵。

4.4 任务失败率:你的调度器靠谱吗?

任务失败率,就是调度失败的任务占总任务的比例。这个指标直接反映调度器的稳定性。

我曾经接手过一个日志平台,任务失败率高达 15%。什么意思?每 100 个任务,有 15 个是失败的。业务方天天投诉。后来发现,是调度器在资源不足时直接丢弃任务,没有重试机制。

避坑指南: 任务失败率要控制在 1% 以下。超过 5% 就必须立即排查。我曾经因为忽视这个指标,导致日志丢失了整整一个晚上。

任务失败的原因,我总结了几类:

失败类型 常见原因 解决方案
资源不足 CPU/内存/磁盘不够 增加资源或限流
超时 任务执行时间超过阈值 调整超时时间或拆分任务
依赖失败 上游数据源或下游存储挂了 增加重试和降级策略
调度器自身故障 调度器进程崩溃或死锁 高可用部署和监控告警

4.5 四个指标如何权衡?

你可能会问:这四个指标,到底优先优化哪个?

我的答案是:看业务场景。

  • 如果是实时日志分析,延迟优先。哪怕牺牲一点吞吐量,也要保证日志秒级入库。
  • 如果是离线批量处理,吞吐量优先。延迟可以放宽,但单位时间内要处理尽可能多的日志。
  • 如果是成本敏感场景,资源利用率优先。把机器用满,别浪费。
  • 如果是核心业务日志,任务失败率优先。丢日志等于丢钱,必须保证 100% 成功。

我的经验: 没有完美的调度策略。你只能根据业务目标,找到那个“最不坏”的平衡点。我一般会先保证任务失败率低于 1%,然后再去优化其他指标。

嗯,这四个指标,你记住了吗?吞吐量、延迟、资源利用率、任务失败率。下次你设计调度策略时,拿这四个尺子量一量,就知道自己的方案行不行了。