第四章 集群资源管理与调度
资源管理抽象模型通用架构:
调度系统设计的基本问题
- 资源异质性与任务负载异质性:
资源异质说的是节点之间的配置并不都是相同的,有的节点cpu核数更多,内存容量更大,设计系统时应该考虑到,一般时通过细化资源分配粒度来来解决这个问题。而任务负载异质说的是,有长任务,有短任务,有需求大量资源的任务,有只要很少资源就能运行的任务,应结合实际场景综合考虑如何统筹安排这些任务,并能充分利用集群的资源。 - 数据局部性
任务向数据移动,一个好的调度系统应该尽量保证节点局部性。所谓节点局部性是指,任务被发送的节点存有对应的数据。 - 抢占式调度还是非抢占式调度
- 死锁与饿死问题
- 资源隔离机制
yearn与mesos都采用的是linux容器
调度器模型
- 集中式调度器
所有的调度逻辑全由中央处理器进行处理,中央处理器成为性能瓶颈,并发性能不高,所以不适合大规模集群。 - 两级调度器
从中央处理器分离出部分功能,放到下一级的调度器,并发性能更高。 - 状态共享调度器
与两级调度器不同的是,状态共享调度器的所有下一级调度器能看到集群中所有的资源状态,并进行抢占式获取。他适合与任务异质性强的场景
资源调度策略及调度器
- 先进先出调度策略
- 延时调度策略
延时调度策略准确的来说不是一种策略,它的思想是,当任务分配不能满足数据局部性时,可以先等待一段时间,让其他的任务先执行,以期在此期间对应的资源会被释放。 - 主资源公平调度策略(DRF)
对于多种类型的任务,优先给 已分配主资源/该类资源总量 的任务分配相应资源,初始时 优先给 该任务所需主资源/该类资源总量 的任务分配资源。尽量让各类型的任务分得的主资源/该类资源总量 大致相等。 - 能力调度器
能力调度器会限制每个用户使用的资源总量。 - Fair调度器
公平调度器的流程如下,先按照队列所需的最小资源保障将资源分配给队列,然后将剩余资源依照队列间的优先级按比例分配给他们。在队列内部,它默认采用DRF算法调度任务。它主要与能力调度器有两点不同,其支持抢占式调度,当一个队列长时间得不到资源时,调度器会杀死大人任务,将其资源分配给该队列;其次其默认采用DRF算法。