searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

资源调度系统介绍

2023-09-20 01:29:13
43
0

1 调度器的考量标准

调度器的主要工作是将资源需求与资源提供方做全局最优的匹配。所以一方面调度器的设计需要了解不同类型的资源拓扑,另一方面还需要对工作负载有充分的认识。

了解不同类型的资源拓扑,充分掌握环境拓扑信息能够使调度工作更充分的利用资源(如经常访问数据的任务如果距数据近可以显著减少执行时间),并且可以基于资源拓扑信息定义更加复杂的策略。但全局资源信息的维护消耗会限制集群的整体规模和调度执行时间,这也让调度器难以扩展,从而限制集群规模。

另一方面,由于不同类型的工作负载会有不同的甚至截然相反的特性,调度器还需要对工作负载有充分的认识,例如服务类任务,资源需求少,运行时间长,对调度时间并不敏感;而批处理类任务,资源需求大,运行时间短,任务可能相关,对调度时间要求较高。同时,调度器也要满足使用方的特殊要求。如任务尽量集中或者分散,保证多个任务同时进行等。

总的来说,好的调度器需要平衡好单次调度(调度时间,质量),同时要考虑到环境变化对调度结果的影响,保持结果最优(必要时重新调度),保证集群规模,同时还要能够支持用户无感知的升级和扩展。调度的结果需要满足但不限于下列条件,并最大可能满足尽可能优先级较高的条件:

  • 资源使用率最大化
  • 满足用户指定的调度需求
  • 满足自定义优先级要求
  • 调度效率高,能够根据资源情况快速做出决策
  • 能够根据负载的变化调整调度策略
  • 充分考虑各种层级的公平性

2 调度器类别

调度器一般来说可以分为三个类别:集中式调度器、双层调度器,以及共享状态调度器。

2.1 集中式调度器

集中式调度器也叫作单体调度器,指的是使用中心化的方式去管理资源和调度任务。 也就是说,调度器本身在系统中以单实例形式存在,所有的资源请求和任务调度都通过这个实例进行。同时它具备访问其他节点的权限,能够搜集各个节点的资源信息以及状态等信息,然后统一进行管理。

 

集中式调度器,资源使用和任务执行的状态被统一管理,降低了状态同步和并发控制的难度,相对来说状态同步比较容易且稳定。由于存在单点故障的可能性,集中式调度器的容错性一般,有些系统通过热备份 Master 的方式提高可用性。所有的资源和任务请求都要由中央调度器处理,集中式调度器的可扩展性较差,容易成为分布式系统吞吐量的瓶颈。

引用网上的一个集中式调度器示例

集中式调度系统示例

2.2 双层调度器

在单体调度架构中,中央服务器的单点瓶颈问题,会限制调度的效率和支持的任务类型。这是因为不同的服务具有不同的特征,对调度框架和计算的要求都不一样。比如说,业务最开始时只有批处理任务,后来发展到同时还包括流数据任务,但批处理任务是处理静态数据,流数据任务却是处理实时数据。显然,单体调度框架会随着任务类型增加而变得越来越复杂,最终出现扩展瓶颈。

为了提升调度效率并支持多种类型的任务,比较直接的方法就是把资源和任务分开调度,也就是说一层调度器只负责资源管理和分配,另外一层调度器负责任务与资源的匹配。这种调度架构,就是我们通常所说的两级调度。

 

双层调度器中的第一层调度器仍是一个经简化的中央调度器,通常放在分布式集群管理系统中,而第二层调度则是由各个应用程序框架完成。双层调度器的职责分别是:第一层调度器负责管理资源并向框架分配资源,第二层调度器接收分布式集群管理系统中第一层调度器分配的资源,然后根据任务和接收到的资源进行匹配。

采用两层调度结构的集群管理系统有很多,典型代表是 Apache Mesos 和 Hadoop YARN。

双层调度器

双层调度系统

2.3 共享状态调度器

在集中式调度器里,这两个状态都由中心调度器管理,并且一并集成了调度等功能。 双层调度器模式里,这两个状态分别由中央调度器和次级调度器管理。集中式调度器可以容易地保证全局状态的一致性但是可扩展性不够, 双层调度器对共享状态的管理较难达到好的一致性保证,也不容易实现全局最优调度。

为了解决这些问题,一种新的调度器架构被设计出来。 这种架构基本上沿袭了集中式调度器的模式,通过将中央调度器肢解为多个服务以提供更好的伸缩性。这种调度器的核心是共享的集群状态,因此可以被称为共享状态调度器。这种调度结构的典型代表有 Google 的 Omega、微软的 Apollo,以及 Hashicorp 的 Nomad 容器调度器。

共享状态调度器

共享状态调度器

共享状态调度架构为了提供高可用性和可扩展性,将集群状态之外的功能抽出来作为独立的服务。具体来说就是:

  • State Storage 模块(资源维护模块)负责存储和维护资源及任务状态,以便 Scheduler 查询资源状态和调度任务;
  • Resource Pool 即为多个节点集群,接收并执行 Scheduler 调度的任务;
  • 而 Scheduler 只包含任务调度操作,而不是像单体调度器那样还需要管理集群资源等。

共享状态调度也支持多种任务类型,但与两层调度架构相比,主要有两个不同之处:

  • 存在多个调度器,每个调度器都可以拥有集群全局的资源状态信息,可以根据该信息进行任务调度;
  • 共享状态调度是乐观并发调度,在执行了任务匹配算法后,调度器将其调度结果提交给 State Storage,由其决定是否进行本次调度,从而解决竞争同一种资源而引起的冲突问题,实现全局最优调度。而两层调度是悲观并发调度,在执行任务之前避免冲突,无法实现全局最优匹配。

乐观并发调度和悲观并发调度的区别:

  • 乐观并发调度,强调事后检测,在事务提交时检查是否避免了冲突:若避免,则提交;否则回滚并自动重新执行。在执行任务匹配调度算法后,待计算出结果后再进行冲突检测。
  • 悲观并发调度,强调事前预防,在事务执行时检查是否会存在冲突。不存在,则继续执行;否则等待或回滚。在执行任务匹配调度算法前,通过给不同的 Framework 发送不同的资源,以避免冲突。

3 各类调度器优缺点

单体调度,是由一个中央调度器去管理整个集群的资源信息和任务调度,所有任务只能通过中央调度器进行调度。

  • 优点:中央调度器拥有整个集群的节点资源信息,可以实现全局最优调度,且状态同步比较容易且稳定。
  • 缺点:无调度并发性,且中央服务器存在单点瓶颈问题,导致支持的调度规模和服务类型受限,同时会限制集群的调度效率。因此,单体调度适用于小规模集群。

 

两层调度,是将资源管理和任务调度分为两层来调度。其中,第一层调度器负责集群资源管理,并将可用资源发送给第二层调度;第二层调度接收到第一层调度发送的资源,进行任务调度。

  • 优点:避免了单体调度的单点瓶颈问题,可以支持更大的服务规模和更多的服务类型。
  • 缺点:第二层调度器往往只对全局资源信息有部分可观察性,因此任务匹配算法无法实现全局最优。双层调度适用于中等规模集群。

 

共享状态调度,多个调度器,每个调度器都可以看到集群的全局资源信息,并根据这些信息进行任务调度。相较于其他两个调度架构来说,共享状态调度架构适用的集群规模最大。

  • 优点:每个调度器都可以获取集群中的全局资源信息,因此任务匹配算法可以实现全局最优性。

缺点:因为每个调度器都可以在全局范围内进行任务匹配,所以多个调度器同时调度时,很可能会匹配到同一个节点,从而造成资源竞争和冲突。因些,共享状态调度适用于大规模集群。

0条评论
0 / 1000
成****胜
8文章数
0粉丝数
成****胜
8 文章 | 0 粉丝
原创

资源调度系统介绍

2023-09-20 01:29:13
43
0

1 调度器的考量标准

调度器的主要工作是将资源需求与资源提供方做全局最优的匹配。所以一方面调度器的设计需要了解不同类型的资源拓扑,另一方面还需要对工作负载有充分的认识。

了解不同类型的资源拓扑,充分掌握环境拓扑信息能够使调度工作更充分的利用资源(如经常访问数据的任务如果距数据近可以显著减少执行时间),并且可以基于资源拓扑信息定义更加复杂的策略。但全局资源信息的维护消耗会限制集群的整体规模和调度执行时间,这也让调度器难以扩展,从而限制集群规模。

另一方面,由于不同类型的工作负载会有不同的甚至截然相反的特性,调度器还需要对工作负载有充分的认识,例如服务类任务,资源需求少,运行时间长,对调度时间并不敏感;而批处理类任务,资源需求大,运行时间短,任务可能相关,对调度时间要求较高。同时,调度器也要满足使用方的特殊要求。如任务尽量集中或者分散,保证多个任务同时进行等。

总的来说,好的调度器需要平衡好单次调度(调度时间,质量),同时要考虑到环境变化对调度结果的影响,保持结果最优(必要时重新调度),保证集群规模,同时还要能够支持用户无感知的升级和扩展。调度的结果需要满足但不限于下列条件,并最大可能满足尽可能优先级较高的条件:

  • 资源使用率最大化
  • 满足用户指定的调度需求
  • 满足自定义优先级要求
  • 调度效率高,能够根据资源情况快速做出决策
  • 能够根据负载的变化调整调度策略
  • 充分考虑各种层级的公平性

2 调度器类别

调度器一般来说可以分为三个类别:集中式调度器、双层调度器,以及共享状态调度器。

2.1 集中式调度器

集中式调度器也叫作单体调度器,指的是使用中心化的方式去管理资源和调度任务。 也就是说,调度器本身在系统中以单实例形式存在,所有的资源请求和任务调度都通过这个实例进行。同时它具备访问其他节点的权限,能够搜集各个节点的资源信息以及状态等信息,然后统一进行管理。

 

集中式调度器,资源使用和任务执行的状态被统一管理,降低了状态同步和并发控制的难度,相对来说状态同步比较容易且稳定。由于存在单点故障的可能性,集中式调度器的容错性一般,有些系统通过热备份 Master 的方式提高可用性。所有的资源和任务请求都要由中央调度器处理,集中式调度器的可扩展性较差,容易成为分布式系统吞吐量的瓶颈。

引用网上的一个集中式调度器示例

集中式调度系统示例

2.2 双层调度器

在单体调度架构中,中央服务器的单点瓶颈问题,会限制调度的效率和支持的任务类型。这是因为不同的服务具有不同的特征,对调度框架和计算的要求都不一样。比如说,业务最开始时只有批处理任务,后来发展到同时还包括流数据任务,但批处理任务是处理静态数据,流数据任务却是处理实时数据。显然,单体调度框架会随着任务类型增加而变得越来越复杂,最终出现扩展瓶颈。

为了提升调度效率并支持多种类型的任务,比较直接的方法就是把资源和任务分开调度,也就是说一层调度器只负责资源管理和分配,另外一层调度器负责任务与资源的匹配。这种调度架构,就是我们通常所说的两级调度。

 

双层调度器中的第一层调度器仍是一个经简化的中央调度器,通常放在分布式集群管理系统中,而第二层调度则是由各个应用程序框架完成。双层调度器的职责分别是:第一层调度器负责管理资源并向框架分配资源,第二层调度器接收分布式集群管理系统中第一层调度器分配的资源,然后根据任务和接收到的资源进行匹配。

采用两层调度结构的集群管理系统有很多,典型代表是 Apache Mesos 和 Hadoop YARN。

双层调度器

双层调度系统

2.3 共享状态调度器

在集中式调度器里,这两个状态都由中心调度器管理,并且一并集成了调度等功能。 双层调度器模式里,这两个状态分别由中央调度器和次级调度器管理。集中式调度器可以容易地保证全局状态的一致性但是可扩展性不够, 双层调度器对共享状态的管理较难达到好的一致性保证,也不容易实现全局最优调度。

为了解决这些问题,一种新的调度器架构被设计出来。 这种架构基本上沿袭了集中式调度器的模式,通过将中央调度器肢解为多个服务以提供更好的伸缩性。这种调度器的核心是共享的集群状态,因此可以被称为共享状态调度器。这种调度结构的典型代表有 Google 的 Omega、微软的 Apollo,以及 Hashicorp 的 Nomad 容器调度器。

共享状态调度器

共享状态调度器

共享状态调度架构为了提供高可用性和可扩展性,将集群状态之外的功能抽出来作为独立的服务。具体来说就是:

  • State Storage 模块(资源维护模块)负责存储和维护资源及任务状态,以便 Scheduler 查询资源状态和调度任务;
  • Resource Pool 即为多个节点集群,接收并执行 Scheduler 调度的任务;
  • 而 Scheduler 只包含任务调度操作,而不是像单体调度器那样还需要管理集群资源等。

共享状态调度也支持多种任务类型,但与两层调度架构相比,主要有两个不同之处:

  • 存在多个调度器,每个调度器都可以拥有集群全局的资源状态信息,可以根据该信息进行任务调度;
  • 共享状态调度是乐观并发调度,在执行了任务匹配算法后,调度器将其调度结果提交给 State Storage,由其决定是否进行本次调度,从而解决竞争同一种资源而引起的冲突问题,实现全局最优调度。而两层调度是悲观并发调度,在执行任务之前避免冲突,无法实现全局最优匹配。

乐观并发调度和悲观并发调度的区别:

  • 乐观并发调度,强调事后检测,在事务提交时检查是否避免了冲突:若避免,则提交;否则回滚并自动重新执行。在执行任务匹配调度算法后,待计算出结果后再进行冲突检测。
  • 悲观并发调度,强调事前预防,在事务执行时检查是否会存在冲突。不存在,则继续执行;否则等待或回滚。在执行任务匹配调度算法前,通过给不同的 Framework 发送不同的资源,以避免冲突。

3 各类调度器优缺点

单体调度,是由一个中央调度器去管理整个集群的资源信息和任务调度,所有任务只能通过中央调度器进行调度。

  • 优点:中央调度器拥有整个集群的节点资源信息,可以实现全局最优调度,且状态同步比较容易且稳定。
  • 缺点:无调度并发性,且中央服务器存在单点瓶颈问题,导致支持的调度规模和服务类型受限,同时会限制集群的调度效率。因此,单体调度适用于小规模集群。

 

两层调度,是将资源管理和任务调度分为两层来调度。其中,第一层调度器负责集群资源管理,并将可用资源发送给第二层调度;第二层调度接收到第一层调度发送的资源,进行任务调度。

  • 优点:避免了单体调度的单点瓶颈问题,可以支持更大的服务规模和更多的服务类型。
  • 缺点:第二层调度器往往只对全局资源信息有部分可观察性,因此任务匹配算法无法实现全局最优。双层调度适用于中等规模集群。

 

共享状态调度,多个调度器,每个调度器都可以看到集群的全局资源信息,并根据这些信息进行任务调度。相较于其他两个调度架构来说,共享状态调度架构适用的集群规模最大。

  • 优点:每个调度器都可以获取集群中的全局资源信息,因此任务匹配算法可以实现全局最优性。

缺点:因为每个调度器都可以在全局范围内进行任务匹配,所以多个调度器同时调度时,很可能会匹配到同一个节点,从而造成资源竞争和冲突。因些,共享状态调度适用于大规模集群。

文章来自个人专栏
学习
8 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
1