写在前面
在分布式理论之体系结构 一文中我们提到了分布式的体系架构中有一种是集中式架构,在这种架构中由主来负责数据的存储和任务的分配,注意这里的任务分配,该怎么分呢?这里其实就是调度的问题了,在分布式中解决这类问题的架构我们叫做是调度架构,主要有单体调度和和两层调度,本文分别来看下。在正式开始之前我们先来看几个概念:
作业和任务:作业就是要执行的具体操作,包含多个任务。
资源:就是可供使用的从节点
调度器:负责调度任务到可用资源的组件
资源收集器:负责收集各个从节点信息的组件,供调度器任务匹配资源时使用
1:单体调度
单体调度就是在主中有一个调度器,一个资源收集器,从节点会定期上报资源信息到资源收集器中,当有任务需要分配时,会通过主的调度器分配到某个从节点,如下图:
其中k8s使用的调度架构就是单体调度,其中的kube scheduler就是这里的调度器角色,负责将POD分配到某个worker节点,如下图:
单体调度的优点是实现简单,缺点是存在单点性能瓶颈和单点故障问题。
2:两层调度
当任务的类型变多之后,不同任务的调度逻辑是不同的,如果是所有的调度策略都在一个调度器中完成的话,势必会使得调度器变得非常复杂,难以维护,那怎么办呢?分,分成多个调度器,但这多个调度器在哪里实现呢?还是要看下问题的根源,根源是多种的任务类型,而多种的任务类型是由各种不同的计算框架产生的,那么很自然的,不同的计算框架就要负责提供不用的调度器实现。此时,主只负责维护资源信息,然后,将这些信息分配给不同计算框架的调度器就行,这就是两层调度,如下图:
scheduler 1就是主,其负责维护资源信息,scheduler 2们就是不同的资源调度器。工作过程如下:
1:计算框架注册自己的信息到主
2:任务到主后,根据任务类型分配给具体的任务调度器
3:任务调度器匹配任务到资源后,调用主,主将任务交给具体的资源执行
其中,apache mesos采用的就是两层调度架构,因此其可以对接各种不同的计算框架。
这种架构的优点是解决了单点性能瓶颈和单点故障问题,缺点是对用户的使用门槛要求比较高。
写在后面
小结
本文看了调度架构的单体调度,和两层调度,并给出了具体的应用案例。希望本文能够帮助到你。
参考文章列表
k8s之工作机制 。
分布式理论之体系结构 。