写在前面

在分布式理论之体系结构 一文中我们提到了分布式的体系架构中有一种是集中式架构,在这种架构中由主来负责数据的存储和任务的分配,注意这里的任务分配,该怎么分呢?这里其实就是调度的问题了,在分布式中解决这类问题的架构我们叫做是调度架构,主要有单体调度和和两层调度,本文分别来看下。在正式开始之前我们先来看几个概念:

作业和任务:作业就是要执行的具体操作,包含多个任务。
资源:就是可供使用的从节点
调度器:负责调度任务到可用资源的组件
资源收集器:负责收集各个从节点信息的组件,供调度器任务匹配资源时使用

1:单体调度

单体调度就是在主中有一个调度器,一个资源收集器,从节点会定期上报资源信息到资源收集器中,当有任务需要分配时,会通过主的调度器分配到某个从节点,如下图:

Kubernetes 双层调度器 双层调度架构的定义_分布式

其中k8s使用的调度架构就是单体调度,其中的kube scheduler就是这里的调度器角色,负责将POD分配到某个worker节点,如下图:

Kubernetes 双层调度器 双层调度架构的定义_Kubernetes 双层调度器_02

单体调度的优点是实现简单,缺点是存在单点性能瓶颈和单点故障问题。

2:两层调度

当任务的类型变多之后,不同任务的调度逻辑是不同的,如果是所有的调度策略都在一个调度器中完成的话,势必会使得调度器变得非常复杂,难以维护,那怎么办呢?分,分成多个调度器,但这多个调度器在哪里实现呢?还是要看下问题的根源,根源是多种的任务类型,而多种的任务类型是由各种不同的计算框架产生的,那么很自然的,不同的计算框架就要负责提供不用的调度器实现。此时,主只负责维护资源信息,然后,将这些信息分配给不同计算框架的调度器就行,这就是两层调度,如下图:

Kubernetes 双层调度器 双层调度架构的定义_调度架构_03

scheduler 1就是主,其负责维护资源信息,scheduler 2们就是不同的资源调度器。工作过程如下:

1:计算框架注册自己的信息到主
2:任务到主后,根据任务类型分配给具体的任务调度器
3:任务调度器匹配任务到资源后,调用主,主将任务交给具体的资源执行

其中,apache mesos采用的就是两层调度架构,因此其可以对接各种不同的计算框架。

这种架构的优点是解决了单点性能瓶颈和单点故障问题,缺点是对用户的使用门槛要求比较高。

写在后面

小结

本文看了调度架构的单体调度,和两层调度,并给出了具体的应用案例。希望本文能够帮助到你。

参考文章列表

k8s之工作机制 。

分布式理论之体系结构 。