傳遞信息,分享正能量
在這里找尋
每一個發(fā)展歷程的足跡
了解從這里開始
瀏覽【25688】 2021-09-09 10:50:00
大數(shù)據(jù)人工智能快速發(fā)展,加大了數(shù)據(jù)中心處理數(shù)據(jù),資源的能力,加劇了人們對于提升資源效率的需求。為了合理分配大規(guī)模集群的資源,滿足日益增多的服務(wù)和任務(wù)的資源需求,出現(xiàn)了一系列的集群資源調(diào)度系統(tǒng)。
當下,主流大數(shù)據(jù)資源調(diào)度平臺有Yarn、Mesos、K8s。這些平臺背后技術(shù)路線不同,接口不同,安全認證過程不同,因此要統(tǒng)一管理運行在這些平臺是一個不小的挑戰(zhàn)。
如果有統(tǒng)一的服務(wù)將不同資源調(diào)度平臺透明化,業(yè)務(wù)系統(tǒng)只關(guān)心業(yè)務(wù)程序本身,剩下的交給單個標準接口處理,將大大降低這些資源調(diào)度平臺的應(yīng)用成本。
需求過程和設(shè)計過程
我們需要考慮幾個問題:
1、不同資源調(diào)度平臺間的接口調(diào)用如何統(tǒng)一?
2、不同資源調(diào)度平臺間的安全認證的證書如何管理?
3、業(yè)務(wù)系統(tǒng)應(yīng)用程序本身的資源文件,如果管理?
4、從業(yè)務(wù)應(yīng)用程序本身來說,可能要面臨程序文件、程序資源文件、程序運行環(huán)境等業(yè)務(wù)程序執(zhí)行所關(guān)聯(lián)的要素如何管理的問題?
針對問題1
針對問題1,我們可以使用適配器模式完成各個大數(shù)據(jù)資源調(diào)度系統(tǒng)的統(tǒng)一接口適配。這種相對比較容易實現(xiàn)。但是,如何業(yè)務(wù)上完成一定程度的統(tǒng)一,從而減輕某一類業(yè)務(wù)的底層技術(shù)的實現(xiàn)難度,是必須要面對問題。
例如,我們目前大部分數(shù)據(jù)處理業(yè)務(wù)都要使用Spark平臺,并且有數(shù)據(jù)處理業(yè)務(wù)流程化(DAG)的需求。
流程化過程可以分為兩個部分。一個是流程定義,另一個是流程執(zhí)行。
對于流程定義,可以考慮將業(yè)務(wù)過程以過程描述文件的方法定義,并將任務(wù)接口以ID標識的方式設(shè)計,并形成基礎(chǔ)的SDK。此SDK包含基礎(chǔ)的所需的程序lib文件、程序資源文件,并且預(yù)留DAG過程入口API,從實現(xiàn)部分業(yè)務(wù)統(tǒng)一化的需求。
例如,數(shù)據(jù)分析類應(yīng)用可以按照下圖完成流程描述文件的設(shè)計。
通過設(shè)計流程與節(jié)點描述,根據(jù)出入路徑實現(xiàn)DAG進行設(shè)計可以完成大部分流程類應(yīng)用的業(yè)務(wù)。
而對于流程執(zhí)行,實際上是一個流程驅(qū)動的過程。這個驅(qū)動過程可以使用以下思路實現(xiàn):
我們可將節(jié)點間描述邏輯實體化到系統(tǒng)中,連接邏輯和流轉(zhuǎn)邏輯使用Transition完成,使用Builder完成所有流程要素的生成。Process負責所有流程對象的承載,并觸發(fā)這個流程的執(zhí)行。Behavior是我們業(yè)務(wù)程序的入口定義,Meta則是節(jié)點間的數(shù)據(jù)傳遞和業(yè)務(wù)元數(shù)據(jù)定義邏輯,而Execution,則是所有業(yè)務(wù)入口的驅(qū)動對象。
針對問題2-4
我們可以看到,其核心是如何管理大數(shù)據(jù)資源調(diào)度平臺的相關(guān)配置文件和業(yè)務(wù)系統(tǒng)的相關(guān)程序文件??梢越y(tǒng)一抽象出資源的類定義,然后根據(jù)資源類型使用面向?qū)ο蠓椒ㄟM行規(guī)劃。
此處引入頂層資源的概念,從頂層資源可以繼承出文件資源、配置資源、應(yīng)用資源等。配置資源可以拓展出Hadoop配置資源、K8s配置資源。應(yīng)用資源可以繼續(xù)拓展出基于Spark的應(yīng)用資源、基于Flink的應(yīng)用資源等。
基于以上面向?qū)ο蠓椒ㄍ瓿傻囊?guī)劃可以在后續(xù)的需求中比較容易的拓展出其他類型的資源調(diào)度平臺的應(yīng)用,例如K8s應(yīng)用。同時,K8s應(yīng)用可以快速的組合其他的配置資源、文件資源等。
適配資源調(diào)度系統(tǒng)過程中若干設(shè)計要素
從需求側(cè)我們可以總結(jié)出以下幾個業(yè)務(wù)要素:
1、大數(shù)據(jù)資源調(diào)度與管理平臺,如K8s、Yarn、Mesos等。
2、業(yè)務(wù)應(yīng)用,如基于Spark的應(yīng)用、基于Flink的應(yīng)用、從底層實現(xiàn)各種數(shù)據(jù)處理程序等。
3、一個大數(shù)據(jù)任務(wù)管理服務(wù),此服務(wù)可以使用相同形式的接口將各個應(yīng)用提交到大數(shù)據(jù)資源管理平臺。
4、可以實現(xiàn)部分業(yè)務(wù)過程的抽象統(tǒng)一化適配,提供適配過程的SDK開發(fā)包。
基于以上設(shè)計要素,可以實現(xiàn)以下系統(tǒng)邏輯架構(gòu)圖:
業(yè)務(wù)應(yīng)用通過API接口將程序提交到Y(jié)arn、K8s、Mesos等大數(shù)據(jù)資源調(diào)度平臺中執(zhí)行。大數(shù)據(jù)任務(wù)管理服務(wù)提供對執(zhí)行任務(wù)的監(jiān)控、日志提取和任務(wù)管理的接口,是業(yè)務(wù)應(yīng)用系統(tǒng)程序在云計算環(huán)境中執(zhí)行的橋接服務(wù)。
服務(wù)內(nèi)部通過注冊資源和應(yīng)用完成對程序資源的管理和應(yīng)用管理,其中系統(tǒng)資源類型包括容器類(K8s、Yarn),程序基礎(chǔ)框架類(Spark、Hive、Hbase),開發(fā)語言類(Python、Java),服務(wù)提供應(yīng)用系統(tǒng)的定時、實時調(diào)度功能。
服務(wù)對外提供一套應(yīng)用系統(tǒng)管理的REST接口。
1、應(yīng)用系統(tǒng)管理:提供注冊、禁用、提取狀態(tài),配置應(yīng)用系統(tǒng)的調(diào)度功能的接口。
2、作業(yè)管理:針對已注冊應(yīng)用,可以動態(tài)提交基于該應(yīng)用系統(tǒng)的作業(yè),實時執(zhí)行并獲取執(zhí)行狀態(tài)、日志。
3、授權(quán)管理:針對每個應(yīng)用系統(tǒng)的授權(quán)碼的管理。
基于以上各設(shè)計要素,可以實現(xiàn)一個通用的橋接服務(wù),通過該服務(wù)可將資源調(diào)度過程透明化,并可適配未來出現(xiàn)的未知資源調(diào)度平臺。
總結(jié)
適配多個大數(shù)據(jù)資源調(diào)度平臺是一個比較復雜的過程,通過使用面向?qū)ο蟮馁Y源化設(shè)計方法,是一個比較自然且易于擴展的思路。
部分業(yè)務(wù)應(yīng)用中可以抽象出一些基礎(chǔ)的業(yè)務(wù)邏輯,例如流程驅(qū)動的數(shù)據(jù)處理業(yè)務(wù)。此時我們可以抽象出通用的SDK,業(yè)務(wù)應(yīng)用直接基于此SDK開發(fā),可以快速實現(xiàn)流程驅(qū)動的數(shù)據(jù)處理類應(yīng)用。資源化各個設(shè)計要素后,系統(tǒng)可以通過組合不同的資源快速實現(xiàn)各種基于大數(shù)據(jù)資源調(diào)度平臺的業(yè)務(wù)應(yīng)用。