在分布式计算环境中,资源调度是一个核心问题。单体调度虽然简单,但在处理大规模集群时容易出现瓶颈。两层调度作为一种更灵活的调度架构,被广泛应用于各种分布式系统。本文档旨在深入探讨分布式领域中的两层调度,重点介绍其概念、优势、典型实现和相关算法。
1. 单体调度的局限性
单体调度使用中央服务器统一管理和调度资源和任务,当集群规模增大时,中央服务器容易成为性能瓶颈和单点故障点。
2. 什么是两层调度?
两层调度是一种将资源管理和任务调度分离的调度架构。它包含两层调度器:
第一层调度器: 负责资源管理和分配,例如将集群中的节点资源分配给不同的应用程序或框架。
第二层调度器: 负责任务与资源的匹配,例如将应用程序的任务调度到已分配的资源上执行。

3. 两层调度的优势
资源隔离: 第一层调度器负责资源分配,可以实现不同应用程序或框架之间的资源隔离。
灵活性: 第二层调度器由应用程序或框架自行实现,可以根据其特点选择合适的调度算法。
可扩展性: 两层调度架构可以更好地支持大规模集群。
4. 典型实现:Mesos 和 Hadoop YARN
Mesos 和 Hadoop YARN 是典型的两层调度器。
4.1 Mesos 的两层调度设计
资源管理集群和框架: Mesos 将集群资源抽象成统一的资源池,并允许不同的框架(例如 Hadoop、Spark)运行在 Mesos 之上。
Mesos Master 上的调度器: 负责管理并分配集群中的所有资源。
框架: 框架负责任务的管理与调度。每个框架都可以在 Mesos 上注册一个调度器,接收 Mesos Master 分配的资源,并将其分配给自己的任务。
资源分配流程:
Mesos Master 向框架提供可用的资源。
框架在其自身的调度器中选择接受哪些资源,并告知 Mesos Master 在这些资源上启动哪些任务。
5. 两层调度算法
第一层调度器通常需要使用一定的算法来分配资源。以下是两种常见的两层调度算法:
5.1 最大最小公平算法
资源分配原则: 按照用户对资源需求量递增的顺序进行空闲资源分配。
公平性保证:
不存在用户得到的资源超过其需求的情况。
对于分配的资源不满足需求的用户,其获得的资源是相等的。
优点: 能够保证所有用户获得其应得的最小份额的资源。
缺点: 没有考虑用户对不同资源类型(例如 CPU、内存)的需求。

5.2 主导资源公平算法
考虑资源类型: 考虑用户对不同资源类型的需求。
主导资源: 用户消耗量最大的那类资源被定义为主导资源。
公平性目标: 平衡所有用户的主导资源占用率,尽可能最大化所有用户中最小的主导资源占用率。
优点: 能够更好地平衡不同类型资源的使用,提高资源利用率。
6. 两层调度的资源隔离
两层调度通常使用容器技术来实现资源隔离。
容器: 容器的实质是进程,运行于属于自己的独立的命名空间。
资源隔离: 通过限制容器的 CPU、内存、存储等资源使用量,实现不同应用之间的资源隔离。
7. 总结
两层调度提供多租户、多框架的支持,Mesos 的两层调度设计非常巧妙,为构建灵活、可扩展的分布式系统提供了强大的支持。





