# Scheduling

为任务寻找合适的服务器，叫做调度。

## 单体调度

集群中仅一个节点运行调度进程，调度器同时管理任务和资源，拥有资源和任务的全局视图。

调度算法一般包括两个阶段：

* 可行性检查，找到多台可以运行任务的机器。
* 评分，从多台中选择一台。又分为“最差匹配”和“最佳匹配”两种。

![](https://3232244687-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LYZow-MmROshIrkwdtE%2F-MIES6lXooMM9axGo7Rg%2F-MINx_dJ1LqVpFYeGNPS%2Fimage.png?alt=media\&token=a98d3c89-c0b0-43f3-9e24-0204e72197c5)

若是有多个集群，则通过**集群联邦**来实现单体调度。集群联邦就是单体调度的分层实现。

## 两层调度

两层调度的第一层是中央调度器，只负责资源的管理和分配；第二层只能获得部分的资源视图，负责任务与资源匹配。

![](https://3232244687-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LYZow-MmROshIrkwdtE%2F-MINxjT5rYG_MyNHKG6i%2F-MIO3bdKLmoLvRk1UzhE%2Fimage.png?alt=media\&token=fd918911-882d-4626-94a2-1907ab534f5d)

## 共享状态调度

有多个调度器，共享集群状态，包括资源状态和任务状态。通过乐观并发调度来解决冲突，而双层调度是悲观的并发调度。

![](https://3232244687-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LYZow-MmROshIrkwdtE%2F-MIO3wjfhLfxyuktoOMD%2F-MIOFED4rSbRdOWedFa6%2Fimage.png?alt=media\&token=521ed5be-4a3f-4072-820a-3f12f93bc981)

## 对比

![](https://3232244687-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LYZow-MmROshIrkwdtE%2F-MIO3wjfhLfxyuktoOMD%2F-MIOFRLJ4-c3HSRBfd9e%2Fimage.png?alt=media\&token=d10884fe-b1e5-4950-b957-9f3d7ea29efa)

![](https://3232244687-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LYZow-MmROshIrkwdtE%2F-MIO3wjfhLfxyuktoOMD%2F-MIOFTF-RvGlsCF4e4Aa%2Fimage.png?alt=media\&token=3d486a23-a07f-4ecb-be57-e262cf03f90b)
