调度框架:两层调度
为什么会有两层调度?
单体调度的核心是所有节点的资源以及用户的任务均由中央服务器统一管理和调度,这样中央服务器容易成为单点瓶颈。
为了提升调度效率并支持多种类型的任务,我们可以尝试把资源和任务分开调度,也就是说一层调度器负责资源管理和分配,另一层调度器负责任务与资源的匹配。
两层调度结构对应的是两层调度器,资源的使用情况同时由中央调度器和第二层调度器管理,中央调度器从整体上进行资源的管理和分配,将资源分配到第二层调度器,再由第二层调度器负责将资源与具体的任务匹配。
两层调度的详细结构图如下。
两层调度器中的第一层调度器仍是一个经过简化的中央调度器,通常放在分布式集群管理系统中,而第二层调度则是由各个应用程序框架完成。两层调度器的职责:
- 第一层调度器负责管理资源并向框架分配资源。
- 第二层调度器接收分布式集群管理系统中第一层调度器分配的资源,然后根据任务和接收到的资源进行分配。
常见的常用了两层调度结构的集群管理系统有:
- Apache Mesos
- Hadoop YARN
Mesos中的两层调度设计
Mesos本身实现的调度器是第一层调度,负责资源管理,第二层调度交给了应用框架来完成。
以Mesos为基础的分布式资源管理与调度框架包括两部分:
- 资源管理集群,由一个Master节点和多个Slave节点组成的集中式系统,它由一个Master节点,负责管理Slave节点,并对接上层框架,Slave节点向Master节点周期汇报资源状态信息,并执行框架提交的任务。
- 框架,负责应用管理和调度的“组件“,它主要由调度器和执行器组成,调度器可以从Master节点获取集群节点的信息,执行器在Slave节点上执行任务。
Mesos两层调度的基本原理:
- 框架向Mesos Master注册。
- Mesos Slave节点定期向Mesos Master上报本节点的空闲资源。
- Mesos Master的Scheduler进程收集所有节点的空闲资源信息,并以Resource Offer的方式将空闲的资源发送给注册的框架。
- 框架的Scheduler接收到Mesos发送的资源后,进行任务调度和匹配,匹配成功后,将匹配结构下发给Mesos Master,并由Mesos Master转发给相应节点的执行器执行任务。
Resource Offer机制是指Mesos Master主动将节点空闲资源以类似发放的方式发给每个框架,如果框架需要则使用,不需要则返回。
通过Resource Offer机制,第一层调度将资源主动告知第二层调度,然后第二层调度进行具体的任务分配,从而实现了任务调度与资源管理的分离,Mesos Master通过资源分配算法决定给各个Framework提供多少资源,而Framework决定了接受哪些资源,以及哪些任务使用这些资源运行。
在调度中,常见的资源分配算法包括:
- 最大最小公平算法
- 主导资源公平算法
最大最小公平算法是一种在兼顾公平的前提上,尽可能让更多满意的资源分配算法。这个算法有3个主要原则:
- 按照用户对资源资源需求量递增的顺序进行空闲资源分配。
- 不存在用户得到的资源超过了自己需求的情况。
- 对于分配资源不满足需求的用户,所获得的资源是相等的。
主导资源公平算法在考虑绝对公平的前提下,还考虑了用户对不同类型的需求,以可能得合理分配资源,即主导资源公平算法可以尽可能的满足更多用户。
最大最小公平算法适用于单一类型的资源分配场景,而主导资源公平算法适用于多种类型的混合场景。并且最大最小算法从公平的角度出发。为了每个用户分配不多于与需求量的资源,而主导资源公平算法从任务出发,目的在于充分尽量利用资源使得能够执行的任务越多越好。