1.1 集群调度概述

本书中的集群调度具有明确的指向性,是针对IaaS(Infrastructure as a Service)的资源层的集群调度,是围绕资源视角展开的。在正式介绍集群调度内容之前,我们有必要详细阐述一下任务调度、集群调度和集群管理的关系,以便更准确地理解各概念、各系统的层次关系,从而理解本书中的调度所指。

1.1.1 层次关系

集群调度和管理实践内容庞大,本书从资源侧切入,按照图1-1所示的内容层次关系来组织。

img

图1-1 集群调度和管理实践的内容层次关系

集群调度包括任务调度和资源调度,集群管理包括资源管理和成本效率管理。有时候,又可以将其简化为任务调度、资源调度和资源管理,将成本效率管理“淡化”。这主要是考虑很多企业在发展初期或成长期,更聚焦于业务的发展,通过钱能解决的问题都不是“问题”。从另一个层面来讲,任务调度、资源调度和资源管理的最佳实践过程,就是成本效率管理的实践过程。按照图1-2所示的关系来理解,也比较自然。

img

图1-2 任务调度、资源调度和集群管理之间的关系

任务调度、资源调度和集群管理彼此有交集,但又有各自的侧重点。在撰写本书时,业界对“集群调度”和“集群管理”术语并没有统一的标准,并且这部分内容更偏重基础设施层面,不同于一般计算机应用业务。例如Web服务应用研发,有前后端通用的开发框架、通信协议,而且在某种程度上,业界已对微服务架构形成共性认知。为了更好地理解知识点内容,本书采用问题导向模式,如图1-3所示,参照互联网设计文档的一般撰写方式来阐述。但是由于交流、沟通、调查的普遍性限制,一些术语对于部分读者来说可能会存在“歧义”,甚至“颠倒”概念。

img

图1-3 问题导向模式

1.1.2 术语解释

下面对本书中关键的三个术语进行解释,但读者也不必纠结于术语。当然,如果你有更好的建议,则可以直接访问本书的GitHub讨论地址提出,确保术语背后真正表达的具体内容更加真实、更加容易理解。

术语“任务调度”

本书中的任务调度,特指发起资源申请的任务调度。其背后是将一个完整的业务需求阶段化,分为任务调度和资源调度。例如一个PaaS(Platform as a Service)[1]用户,从Pass入口发起一个资源申请,然后这个申请被传递到IaaS[2]平台,对于IaaS来说,这个申请就是一个任务。当多个请求到达集群时,在资源有限的情况下,就出现了任务的排队、任务的优先级等需求。其他一些地方提到的集群任务调度,其实是站在集群视角,调度当前集群上多个申请资源的需求。

术语“集群调度”

本书中的集群调度具有明确的指向性,即偏向于资源侧的调度,准确地说是资源调度,如虚拟机调度(定位在IaaS资源层)、容器调度(定位在PaaS资源层)等。服务调度(定位在SaaS(Software as a Service)资源层)不属于本书讨论的范畴,如FaaS(Function as a Service)函数计算等。本书也不讨论机房建设、机架部署、供电、服务器本身的研发等。用一句话概述本书中的集群调度,就是:将一些物理机组成一个资源池,在逻辑上分为多个集群,从集群视角将这些资源以虚拟机或容器为单位进行切分,交付上游系统进行相关服务处理。上游处理,包括PaaS服务运维、安装业务软件等。本书中的资源调度,特指从一个或者多个物理集群或逻辑集群选择合适的物理机,然后分配计算、存储、网络资源,完成一个虚拟机或者容器运行时所需资源的准备,以及在运行过程中的资源竞争、稳定性保障等二次调度、单机本地资源微调等,如Kubernetes[3]中的Pod调度。

术语“集群管理”

本书中的集群管理,特指对一个提供资源调度的集群的资源的管理。既不是从应用视角,看一个应用在一定容量或者服务能力下,背后所需要的资源管理,也不是从资源托管、运维管理视角,看对多个业务集群的管理。本书中的集群管理局限在IaaS侧,管理的是大规模的底层资源池,以及基础的软硬件,是借助经济的手段,服务好集群资源调度器,从而更好地实现资源分时共享分配的可预期、可管理、高效、低成本。

围绕IaaS资源视角,除了本书中提到的管理内容,其实还有非常多的内容,如机房建设、网络交换机架构、机架、供电、服务器机型配置、硬件采购等底层资源的管理。本书对这部分内容没有描述。从分层上看[1],本书仅仅聚焦于有限的范畴。如图1-4所示为资源上层抽象内容和资源下层抽象内容。在介绍资源上层抽象内容时,往往不关心资源下层抽象内容,下层对上层来说是透明的。

img

图1-4 资源分层抽象示意图