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%,然后再去优化其他指标。
嗯,这四个指标,你记住了吗?吞吐量、延迟、资源利用率、任务失败率。下次你设计调度策略时,拿这四个尺子量一量,就知道自己的方案行不行了。