任务调度系统总结

2019-10-09  本文已影响0人  周群力

解决什么问题

把任务分配给合适的机器执行

分类

业务上可以分为:

架构上,按Worker集群的类型可以分为:

按调度方式可以分为:

经典问题:

1. 当任务很多、Worker机器资源不足时,如何进行调度?
追求找到好的调度策略,使得任务的等待时间短、最大化利用硬件资源,或者追求公平性。
传统单机OS进程调度、分布式批处理任务调度都很关注这个问题,这里有不同算法的课程,例如FIFO,最短优先,轮询,Dominant Resource Fairness(就是百分比共产主义,每个任务的各种资源占总资源的百分比里,最大值大家都一样)等。
但是算法比较理想,实践中怎么量化集群中剩余多少资源,怎么量化预测一个没执行的任务将要吃多少资源、执行多少时间、从而找到最短的任务?

另一方面,业界(分布式)定时任务调度系统似乎都不怎么关注这个问题(用定时任务的场景来描述就是“0点到0点30分之间有海量定时任务先后触发,机器资源不够他们一起执行,那么如何调度这些定时任务、谁先谁后?还是轮流?”),个人理解有如下原因:

2. 当scheduler成为瓶颈时如何扩展
例如当调度逻辑复杂难以添加新的调度策略、调度算法耗时较长导致head-of-line blocking、集群机器规模大但scheduler吞吐量有限等问题出现时,scheduler成为瓶颈。Google的Omega论文有讨论这个问题。

3. 虽然集群里Worker机器总资源够,但是有的Worker负载很高有的很低,如何负载均衡?
面临问题1场景的系统应该不用担心该问题,因为不管FIFO还是啥调度算法,首要关注的是硬件资源占用率,会让整个集群所有Worker的负载都尽量满着。
能想到的第一种方法是“预防式(Preventive)”,任务执行前先申请、报备资源。
这同样面临上面的问题:怎么量化得知当前剩余资源、任务将要占用的资源?如果不能预测任务将要占用的资源怎么办?
那么,能否设计出Reactive的负载均衡方法?能想到的办法有:

上一篇 下一篇

猜你喜欢

热点阅读