标准答案
- Web 请求通常关注短延迟,批处理更关注吞吐,消息消费关注积压和确认,定时任务关注按时执行和幂等。
- 为它们设置独立线程池、协程信号量、进程或队列,可以分别设置并发、超时、优先级和拒绝策略。
- 隔离不是无限扩容,所有资源仍受 CPU、内存、连接和下游总容量约束。
- 监控要能看出是哪类工作占满资源,并保留核心请求的最低容量。
题目解析
在线请求、批处理、消息消费和定时任务的成功标准不同:在线请求关注尾延迟,批处理关注进度,消息消费关注积压与确认,定时任务关注窗口和幂等。共用执行资源会让一种负载改变另一种负载的失败方式。
隔离可以是线程池、进程、队列、租户配额或并发信号量,不一定意味着每类任务各占一台机器。关键是为核心路径保留最低容量,并让非核心工作在过载时先被限制。
隔离之后仍要看全局预算。多个池各自看起来不大,合计可能超过 CPU、内存、连接和下游限额;因此需要同时监控分类资源和实例总资源。
常见误区
- 误区:所有任务共用一个无限线程池。改正:按用户影响和资源特征隔离,并为每类工作设置有界并发。
- 误区:把隔离理解成每类任务都可以独占全部 CPU。改正:隔离要服从实例总容量,必要时用配额和优先级保留核心资源。
- 误区:定时任务错过执行窗口后直接补跑全部历史任务。改正:定义幂等、跳过、合并和补偿策略,避免恢复时形成新的流量尖峰。