关于网络招聘反欺诈声明!

返回

美林数据技术专家团队 | 大数据资源调度系统多样化适配过程中的业务和设计


浏览【16290】  2021-09-09 10:50:00



大数据人工智能快速发展,加大了数据中心处理数据,资源的能力,加剧了人们对于提升资源效率的需求。为了合理分配大规模集群的资源,满足日益增多的服务和任务的资源需求,出现了一系列的集群资源调度系统。
当下,主流大数据资源调度平台有Yarn、Mesos、K8s。这些平台背后技术路线不同,接口不同,安全认证过程不同,因此要统一管理运行在这些平台是一个不小的挑战。
如果有统一的服务将不同资源调度平台透明化,业务系统只关心业务程序本身,剩下的交给单个标准接口处理,将大大降低这些资源调度平台的应用成本。

需求过程和设计过程
我们需要考虑几个问题:
1、不同资源调度平台间的接口调用如何统一?
2、不同资源调度平台间的安全认证的证书如何管理?
3、业务系统应用程序本身的资源文件,如果管理?
4、从业务应用程序本身来说,可能要面临程序文件、程序资源文件、程序运行环境等业务程序执行所关联的要素如何管理的问题?
针对问题1
针对问题1,我们可以使用适配器模式完成各个大数据资源调度系统的统一接口适配。这种相对比较容易实现。但是,如何业务上完成一定程度的统一,从而减轻某一类业务的底层技术的实现难度,是必须要面对问题。
例如,我们目前大部分数据处理业务都要使用Spark平台,并且有数据处理业务流程化(DAG)的需求。
流程化过程可以分为两个部分。一个是流程定义,另一个是流程执行。
对于流程定义,可以考虑将业务过程以过程描述文件的方法定义,并将任务接口以ID标识的方式设计,并形成基础的SDK。此SDK包含基础的所需的程序lib文件、程序资源文件,并且预留DAG过程入口API,从实现部分业务统一化的需求。
例如,数据分析类应用可以按照下图完成流程描述文件的设计。

数据分析类应用

通过设计流程与节点描述,根据出入路径实现DAG进行设计可以完成大部分流程类应用的业务。
而对于流程执行,实际上是一个流程驱动的过程。这个驱动过程可以使用以下思路实现:

驱动过程实现思路

我们可将节点间描述逻辑实体化到系统中,连接逻辑和流转逻辑使用Transition完成,使用Builder完成所有流程要素的生成。Process负责所有流程对象的承载,并触发这个流程的执行。Behavior是我们业务程序的入口定义,Meta则是节点间的数据传递和业务元数据定义逻辑,而Execution,则是所有业务入口的驱动对象。
针对问题2-4
我们可以看到,其核心是如何管理大数据资源调度平台的相关配置文件和业务系统的相关程序文件。可以统一抽象出资源的类定义,然后根据资源类型使用面向对象方法进行规划。

大数据资源调度平台

此处引入顶层资源的概念,从顶层资源可以继承出文件资源、配置资源、应用资源等。配置资源可以拓展出Hadoop配置资源、K8s配置资源。应用资源可以继续拓展出基于Spark的应用资源、基于Flink的应用资源等。
基于以上面向对象方法完成的规划可以在后续的需求中比较容易的拓展出其他类型的资源调度平台的应用,例如K8s应用。同时,K8s应用可以快速的组合其他的配置资源、文件资源等。
适配资源调度系统过程中若干设计要素
从需求侧我们可以总结出以下几个业务要素:
1、大数据资源调度与管理平台,如K8s、Yarn、Mesos等。
2、业务应用,如基于Spark的应用、基于Flink的应用、从底层实现各种数据处理程序等。
3、一个大数据任务管理服务,此服务可以使用相同形式的接口将各个应用提交到大数据资源管理平台。
4、可以实现部分业务过程的抽象统一化适配,提供适配过程的SDK开发包。
基于以上设计要素,可以实现以下系统逻辑架构图:

系统逻辑架构图

业务应用通过API接口将程序提交到Yarn、K8s、Mesos等大数据资源调度平台中执行。大数据任务管理服务提供对执行任务的监控、日志提取和任务管理的接口,是业务应用系统程序在云计算环境中执行的桥接服务。
服务内部通过注册资源和应用完成对程序资源的管理和应用管理,其中系统资源类型包括容器类(K8s、Yarn),程序基础框架类(Spark、Hive、Hbase),开发语言类(Python、Java),服务提供应用系统的定时、实时调度功能。
服务对外提供一套应用系统管理的REST接口。
1、应用系统管理:提供注册、禁用、提取状态,配置应用系统的调度功能的接口。
2、作业管理:针对已注册应用,可以动态提交基于该应用系统的作业,实时执行并获取执行状态、日志。
3、授权管理:针对每个应用系统的授权码的管理。
基于以上各设计要素,可以实现一个通用的桥接服务,通过该服务可将资源调度过程透明化,并可适配未来出现的未知资源调度平台。
总结
适配多个大数据资源调度平台是一个比较复杂的过程,通过使用面向对象的资源化设计方法,是一个比较自然且易于扩展的思路。
部分业务应用中可以抽象出一些基础的业务逻辑,例如流程驱动的数据处理业务。此时我们可以抽象出通用的SDK,业务应用直接基于此SDK开发,可以快速实现流程驱动的数据处理类应用。资源化各个设计要素后,系统可以通过组合不同的资源快速实现各种基于大数据资源调度平台的业务应用。