国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘

這篇具有很好參考價(jià)值的文章主要介紹了分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

點(diǎn)擊藍(lán)字 關(guān)注我們

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

作者 | 歐陽業(yè)偉

01

導(dǎo)讀

Apache DolphinScheduler 是一個(gè)分布式易擴(kuò)展的可視化 DAG 工作流任務(wù)調(diào)度平臺,致力于解決數(shù)據(jù)處理流程中錯(cuò)綜復(fù)雜的依賴關(guān)系,使得調(diào)度系統(tǒng)在數(shù)據(jù)處理流程中開箱即用。自 2019 年開源以來,得益于其自身的穩(wěn)定性、易用性、擴(kuò)展性和完備的功能備受關(guān)注,筆者收集了一些業(yè)界案例:

  • 有贊:全面從 Airflow 遷移到 DolphinScheduler,日均調(diào)度 6w+ 任務(wù)實(shí)例;

  • 360數(shù)科:全面從 Azkaban 遷移到 DolphinScheduler,日均調(diào)度 1w+ 任務(wù)實(shí)例;

  • Fordeal:全面從 Azkaban 遷移到 DolphinScheduler,日均調(diào)度 3500+ 工作流實(shí)例、1.5w+ 任務(wù)實(shí)例;

  • 新網(wǎng)銀行:借助 DolphinScheduler 調(diào)度實(shí)時(shí)跑批、準(zhǔn)實(shí)時(shí)跑批和指標(biāo)管理系統(tǒng)的離線跑批,日均 9000+ 任務(wù)實(shí)例;

  • 中國聯(lián)通:借助 DolphinScheduler 調(diào)度處理 Spark/Flink/SeaTunnel 等作業(yè),業(yè)務(wù)涵蓋稽核、收入分?jǐn)?、?jì)費(fèi)業(yè)務(wù),日均調(diào)度 300+ 工作流實(shí)例、5000+ 任務(wù)實(shí)例,業(yè)務(wù)覆蓋 3 地 4 集群;

  • T3出行:結(jié)合 DolphinScheduler + Kyuubi on Spark,日均處理 3w+ 離線調(diào)度任務(wù)、300+ Spark Streaming 任務(wù)、100+ Flink 任務(wù)、500+ Kylin、ClickHouse 和 Shell 任務(wù);

  • 聯(lián)通數(shù)科:借助 DolphinScheduler 調(diào)度大數(shù)據(jù)調(diào)度任務(wù)和數(shù)倉計(jì)算任務(wù)(如 Spark/Flink 等),日均調(diào)度 1w+ 工作流實(shí)例、7w+ 個(gè)任務(wù)實(shí)例、集群規(guī)模 80+ 個(gè)節(jié)點(diǎn);

  • 聯(lián)通醫(yī)療:基于 DolphinScheduler 構(gòu)建了涵蓋數(shù)據(jù)采集、同步、處理和治理為一體的大數(shù)據(jù)平臺,日均調(diào)度 6000+ 任務(wù)實(shí)例;

  • 伊利集團(tuán):借助 DolphinScheduler 構(gòu)建了一個(gè)統(tǒng)一的數(shù)據(jù)集成、開發(fā)、調(diào)度和運(yùn)維的多云大數(shù)據(jù)平臺,日均調(diào)度任務(wù)數(shù)達(dá)到 1.3 萬個(gè),每日搬遷 8000+ 張表,集群規(guī)模 15 個(gè)節(jié)點(diǎn),涉及 4 朵云(阿里云+騰訊云+京東云+自建云),80 多個(gè)業(yè)務(wù)系統(tǒng)。

本文是基于 3.0.0-release 正式版本分析討論,筆者水平有限,若有不當(dāng)之處,請不吝指正。

02

業(yè)界主流產(chǎn)品對比

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

03

架構(gòu)設(shè)計(jì)

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

圖片來源:Apache DolphinScheduler官網(wǎng)首頁

核心組件包括如下:

  • ApiServer:對外統(tǒng)一提供 RESTful API,涵蓋工作流的增刪改查、上下線、啟動、暫停、恢復(fù)、從指定節(jié)點(diǎn)開始執(zhí)行、任務(wù)執(zhí)行狀態(tài)的查看等;

  • AlertServer:一方面負(fù)責(zé)對外提供告警接口,另一方面負(fù)責(zé)定時(shí)發(fā)送集群級別和用戶業(yè)務(wù)級別的告警信息;

  • MasterServer:采用分布式去中心化設(shè)計(jì),內(nèi)部集成Quartz服務(wù),主要負(fù)責(zé)工作流DAG的任務(wù)切分、監(jiān)聽任務(wù)提交情況、監(jiān)聽其它MasterServer/WorkerServer的健康狀態(tài);啟動時(shí)主動向ZooKeeper注冊臨時(shí)節(jié)點(diǎn),并通過監(jiān)聽ZooKeeper進(jìn)行容錯(cuò);

  • WorkerServer:采用分布式去中心化設(shè)計(jì),主要負(fù)責(zé)DAG任務(wù)的執(zhí)行和提供日志查詢服務(wù);啟動時(shí)主動向ZooKeeper注冊臨時(shí)節(jié)點(diǎn),并周期性上報(bào)心跳信息。

04

MasterServer 設(shè)計(jì)要點(diǎn)

4.1

核心服務(wù)

MasterServer 的核心服務(wù)如下:

  • Scheduler:分布式調(diào)度組件,主要負(fù)責(zé)Quartz定時(shí)任務(wù)的啟動,當(dāng)Quartz調(diào)度任務(wù)后,MasterServer內(nèi)部任務(wù)線程池負(fù)責(zé)處理任務(wù)的后續(xù)操作;

  • MasterRegistryClient:ZooKeeper客戶端,封裝了MasterServer與ZooKeeper相關(guān)的操作,例如注冊、監(jiān)聽、刪除、注銷等;

    • MasterConnectionStateListener:監(jiān)聽MasterServer和ZooKeeper連接狀態(tài),一旦斷連則觸發(fā)MasterServer的自殺邏輯;

    • MasterRegistryDataListener:監(jiān)聽ZooKeeper的MasterServer臨時(shí)節(jié)點(diǎn)事件,一旦發(fā)生節(jié)點(diǎn)移除事件,則先移除ZooKeeper上的臨時(shí)節(jié)點(diǎn),再觸發(fā)MasterServer的故障轉(zhuǎn)移(過程和FailoverExecuteThread一致);

  • MasterSchedulerBootstrap:調(diào)度線程,每隔一段時(shí)間掃描DB,按照分片策略批量取出Command,封裝成工作流任務(wù)執(zhí)行線程(WorkflowExecuteThread),投放至緩沖隊(duì)列中,等待下一個(gè)線程消費(fèi);

  • FailoverExecuteThread:故障轉(zhuǎn)移線程,每隔一段時(shí)間掃描DB,篩選出分配到故障節(jié)點(diǎn)的工作流實(shí)例,向WorkerServer發(fā)送TaskKillRequestCommand請求殺死運(yùn)行中的任務(wù);向Command表寫入RECOVER_TOLERANCE_FAULT_PROCESS記錄,等待MasterServer消費(fèi);

  • EventExecuteService:工作流的執(zhí)行線程,包含兩部分:

    • ProcessInstanceExecCacheManager:工作流實(shí)例的緩沖隊(duì)列。MasterSchedulerBootstrap按照分片策略取出Command,封裝成工作流實(shí)例執(zhí)行線程(WorkflowExecuteThread)后投放;

    • WorkflowExecuteThreadPool:從緩沖隊(duì)列中取出WorkflowExecuteThread,并監(jiān)聽線程的執(zhí)行情況(執(zhí)行前先檢查是否已經(jīng)被其它線程啟動);

  • TaskPriorityQueueConsumer:任務(wù)隊(duì)列消費(fèi)線程,根據(jù)負(fù)載均衡算法將任務(wù)分發(fā)至Worker;

  • TaskPluginManager:任務(wù)插件管理器,啟動時(shí)會將TaskChannelFactory的所有實(shí)現(xiàn)類持久化到t_ds_plugin表中;因此,如果開發(fā)者需要自定義任務(wù)插件,只需集成實(shí)現(xiàn)TaskChannelFactory即可;

  • MasterRPCServer:MasterServer RPC服務(wù)端,封裝了Netty服務(wù)端創(chuàng)建等通用邏輯,并注冊了各種消息處理器:

    • CacheProcessor:接收來自ApiServer的CacheExpireCommand請求,強(qiáng)制刷新緩存;

    • LoggerRequestProcessor:接收來自ApiServer的GetLogBytesRequestCommand、ViewLogRequestCommand、RollViewLogRequestCommand、RemoveTaskLogRequestCommand請求,操作日志;

    • StateEventProcessor:接收StateEventChangeCommand請求,處理工作流實(shí)例/任務(wù)實(shí)例的狀態(tài)變更,包括工作流實(shí)例/任務(wù)實(shí)例的提交成功、運(yùn)行中、成功、失敗、超時(shí)、殺死、準(zhǔn)備暫停、暫停、準(zhǔn)備停止、停止、準(zhǔn)備阻塞、阻塞、故障轉(zhuǎn)移等;

    • TaskEventProcessor:接收TaskEventChangeCommand請求,處理任務(wù)實(shí)例的狀態(tài)變更,包括:強(qiáng)制啟動、喚醒;

    • TaskKillResponseProcessor:接收來自WorkerServer的TaskKillResponseCommand請求,請求內(nèi)容是殺死任務(wù)實(shí)例請求的響應(yīng)結(jié)果;

    • TaskExecuteRunningProcessor:接收來自WorkerServer的TaskExecuteRunningCommand請求,請求內(nèi)容是任務(wù)實(shí)例的運(yùn)行信息(工作流實(shí)例ID、任務(wù)實(shí)例ID、運(yùn)行狀態(tài)、執(zhí)行機(jī)器信息、開始時(shí)間、程序運(yùn)行目錄、日志目錄等)

    • TaskExecuteResponseProcessor:接收來自WorkerServer的TaskExecuteResultCommand請求,請求內(nèi)容是任務(wù)實(shí)例的運(yùn)行結(jié)果信息(工作流實(shí)例ID、任務(wù)實(shí)例ID、開始時(shí)間、結(jié)束時(shí)間、運(yùn)行狀態(tài)、執(zhí)行機(jī)器信息、程序運(yùn)行目錄、日志目錄等);

    • WorkflowExecutingDataRequestProcessor:接收來自ApiServer的WorkflowExecutingDataRequestCommand請求,向指定的WorkerServer查詢執(zhí)行中的工作流實(shí)例信息。

4.2

自治去中心化

分布式系統(tǒng)的架構(gòu)設(shè)計(jì)基本分為“中心化”和“去中心化”兩種,取決于業(yè)務(wù)用途,各有優(yōu)劣:

4.2.1、中心化的設(shè)計(jì)思想

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

通常采用Master/Slave主從模式,分布式集群中的節(jié)點(diǎn)機(jī)器按照角色分工,Master節(jié)點(diǎn)通常負(fù)責(zé)均衡分發(fā)任務(wù)并監(jiān)聽Slave節(jié)點(diǎn)的健康狀態(tài),當(dāng)某個(gè)Slave節(jié)點(diǎn)宕機(jī),Master節(jié)點(diǎn)往往會剔除該節(jié)點(diǎn),并將該節(jié)點(diǎn)上的任務(wù)轉(zhuǎn)移至其它Slave節(jié)點(diǎn)執(zhí)行;中心化的設(shè)計(jì)思想存在兩個(gè)主要問題:

  • 單點(diǎn)故障:如果Master節(jié)點(diǎn)宕機(jī)則集群就會崩潰,為了解決這問題,大多數(shù)中心化系統(tǒng)都采用Master主備切換的設(shè)計(jì)方案,可以是熱備或者冷備,也可以是自動切換或者手動切換,越來越多的中心化系統(tǒng)都具備自動選舉切換Master的能力,以提升系統(tǒng)的高可用性;

  • Master過載:如果系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)不完善,例如Master節(jié)點(diǎn)上的任務(wù)并發(fā)量過大、業(yè)務(wù)邏輯過于復(fù)雜,可能會導(dǎo)致Master節(jié)點(diǎn)負(fù)載過高,那么系統(tǒng)性能瓶頸就卡在Master節(jié)點(diǎn)上。

4.2.2、去中心化設(shè)計(jì)思想?

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

相對于中心化設(shè)計(jì),在去中心的系統(tǒng)網(wǎng)絡(luò)中,沒有“主”、“從”節(jié)點(diǎn)的角色區(qū)分,每個(gè)節(jié)點(diǎn)都是平等且自由的關(guān)系,沒有誰依賴誰,全球互聯(lián)網(wǎng)就是一個(gè)典型的去中心化的分布式系統(tǒng),聯(lián)網(wǎng)的任意節(jié)點(diǎn)設(shè)備宕機(jī),都只會影響很小范圍的功能;去中心化設(shè)計(jì)的核心設(shè)計(jì)在于整個(gè)分布式系統(tǒng)中不存在一個(gè)區(qū)別于其他的Master節(jié)點(diǎn),因此不存在單點(diǎn)故障問題。

在中心化設(shè)計(jì)中,Master節(jié)點(diǎn)存儲著系統(tǒng)中所有的節(jié)點(diǎn)信息,并可以實(shí)時(shí)將這些信息同步到其它節(jié)點(diǎn),同時(shí)可以利用諸如Raft、Paxos等算法達(dá)到一致性。但在去中心化設(shè)計(jì)中,由于不存在Master節(jié)點(diǎn),所以每個(gè)節(jié)點(diǎn)都需要跟其他節(jié)點(diǎn)不斷通信才能獲取整個(gè)系統(tǒng)的節(jié)點(diǎn)信息,而分布式系統(tǒng)間網(wǎng)絡(luò)通信的不可靠性,則大大增加了上述功能的實(shí)現(xiàn)難度;

去中心化設(shè)計(jì)中最難解決的是“腦裂”問題,這種情況的發(fā)生概率低,但影響很大。腦裂指一個(gè)集群由于網(wǎng)絡(luò)通信故障,被分為至少兩個(gè)彼此無法通信的單獨(dú)集群,此時(shí)如果兩個(gè)集群都各自工作,則可能產(chǎn)生數(shù)據(jù)沖突;

4.2.3、DolphinScheduler 的設(shè)計(jì)思想

DolphinScheduler 在架構(gòu)設(shè)計(jì)初期,考慮到如果采用中心化設(shè)計(jì),除了單點(diǎn)故障問題,還會面臨DAG分發(fā)的問題,如果調(diào)度器(Scheduler)在Master上,雖然可以支持一個(gè)DAG中不同的任務(wù)分發(fā)到不同的機(jī)器上,但是可能會導(dǎo)致Master的高負(fù)載;而如果調(diào)度器(Scheduler)在Slave上,則一個(gè)DAG中所有的任務(wù)都只能在某一臺機(jī)器上進(jìn)行作業(yè)提交,當(dāng)并行任務(wù)數(shù)比較多時(shí),Slave的壓力可能會很大;

最終 DolphinScheduler 采用去中心化設(shè)計(jì),其架構(gòu)設(shè)計(jì)思路是MasterServer/WorkerServer各自注冊到Zookeeper,實(shí)現(xiàn)MasterServer/WorkerServer集群無中心。另外由于網(wǎng)絡(luò)抖動,可能會使得節(jié)點(diǎn)短時(shí)間內(nèi)失去和ZooKeeper的心跳,從而發(fā)生znode臨時(shí)節(jié)點(diǎn)的移除事件,觸發(fā)腦裂問題(MasterServer節(jié)點(diǎn)假死,仍在分發(fā)工作流),對于這種場景,直接將對應(yīng)的MasterServer/WorkerServer節(jié)點(diǎn)服務(wù)停掉;

4.3

緩存策略

MasterServer 調(diào)度過程中,有大量的數(shù)據(jù)庫讀操作,例如t_ds_user、t_ds_tenant、t_ds_process_definition、t_ds_task_definition表等,考慮到這部分業(yè)務(wù)數(shù)據(jù)是讀多寫少的場景,開發(fā)者引入緩存機(jī)制,一方面減少DB讀壓力,另一方面加快核心調(diào)度流程;

  • 緩存管理:采用 caffeine,可調(diào)整緩存相關(guān)配置,例如緩存大小、過期時(shí)間等;

  • 緩存讀?。?/strong>采用 spring-cache 機(jī)制,可直接在Spring配置文件中決定是否開啟(默認(rèn)關(guān)閉),配置在相關(guān)的 Java Mapper 層;

  • 緩存刷新:通過 AOP 切面 @CacheEvict 監(jiān)聽 ApiServer 接口的業(yè)務(wù)數(shù)據(jù)更新,當(dāng)有數(shù)據(jù)更新時(shí)會通過 Netty 發(fā)送 CacheExpireCommand 請求通知 MasterServer 進(jìn)行緩存驅(qū)逐。

4.4

任務(wù)分發(fā)

4.4.1、分片機(jī)制

分片策略是為了保證密集調(diào)度的高效性,以及解決任務(wù)重復(fù)分發(fā)執(zhí)行的問題。調(diào)度密集或者耗時(shí)任務(wù)可能會導(dǎo)致任務(wù)阻塞,在分布式集群場景下,調(diào)度組件會小概率重復(fù)分發(fā),針對這種情況,通常結(jié)合 “單機(jī)路由策略(如:一致性哈希)” + “阻塞策略(如:丟棄后續(xù)調(diào)度)” 來規(guī)避,最終避免任務(wù)重復(fù)執(zhí)行;

無論是用戶手動觸發(fā),還是定時(shí)調(diào)度器觸發(fā)的工作流任務(wù),都會先封裝成命令并持久化至元數(shù)據(jù)DB中,隨后等待MasterServer分發(fā)調(diào)度,MasterServer中的MasterSchedulerBootstrap線程會每隔一段時(shí)間掃描Command表,取出命令、封裝后投放至任務(wù)隊(duì)列,等待線程消費(fèi);

由于采用去中心化的設(shè)計(jì)思想,DolphinScheduler集群會有一定數(shù)量的MasterServer節(jié)點(diǎn)在同時(shí)工作,意味著同一時(shí)刻可能會有多個(gè)MasterServer節(jié)點(diǎn)在掃描Command表,如果多個(gè)MasterServer都取到同一條Command則會導(dǎo)致工作流任務(wù)被執(zhí)行若干次,這顯然是不合理的,為了保證單條命令只能由一個(gè)MasterServer接管,開發(fā)者設(shè)計(jì)了分片機(jī)制,原理比較簡單,MasterServer從Command表分頁獲取滿足 Id % MasterCount = MasterSlotId 的記錄行,其中:

  • Id:Command表中的記錄ID;

  • MasterCount:分片總數(shù),成功注冊在ZooKeeper的MasterServer總數(shù);

  • MasterSlotId:分片序號,當(dāng)前MasterServer在ZooKeeper的位置索引。

例如集群有3個(gè)MasterServer,按照分片策略,Command表記錄會公平分配到每個(gè)MasterServer。值得說明的是,分片是以 MasterServer 為維度,動態(tài)擴(kuò)容 MasterServer 以增加分片數(shù)量,在進(jìn)行大數(shù)據(jù)量業(yè)務(wù)操作時(shí)可有效提升任務(wù)處理能力和速度:

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

下面思考一個(gè)問題,如何保證同一個(gè)命令只被一個(gè)MasterServer執(zhí)行?在任務(wù)分片路由的過程中,假如 MasterServer 正在做水平擴(kuò)縮,由于 MasterServer 的分片總數(shù)和分片索引發(fā)生變化,可能會導(dǎo)致同一個(gè)命令被分發(fā)至不同的 MasterServer 中,如下圖例子,擴(kuò)容了1臺 MasterServer,id=6的命令根據(jù)哈希計(jì)算又分配給了MasterServer 3,為了避免同一個(gè)命令被重復(fù)執(zhí)行,MasterServer 在領(lǐng)取到命令后,會通過數(shù)據(jù)庫事務(wù)完成命令和工作流實(shí)例的轉(zhuǎn)換、刪除命令等操作,如果刪除操作失敗便回滾事務(wù),意味著命令已經(jīng)被其它MasterServer認(rèn)領(lǐng),則丟棄調(diào)度,這樣即可保證同一個(gè)命令只能被一個(gè)MasterServer執(zhí)行。

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

4.4.2、負(fù)載均衡策略

MasterServer將DAG任務(wù)下發(fā)至WorkerServer前,會根據(jù)負(fù)載均衡策略選出合適的WorkerServer節(jié)點(diǎn),而負(fù)載均衡策略有如下三種:

  • 加權(quán)隨機(jī)(Random):隨機(jī)選擇一個(gè)節(jié)點(diǎn);算法缺點(diǎn)是所有節(jié)點(diǎn)被訪問到的概率是相同的,具有不可預(yù)測性,在一次完整的輪詢中,有可能負(fù)載低的完全沒被選中,而負(fù)載高的頻繁被選中;

  • 加權(quán)輪詢(LowerWeight):默認(rèn)策略。WorkerServer節(jié)點(diǎn)每隔一段時(shí)間向ZooKeeper上報(bào)心跳信息(包含cpuload、可用物理內(nèi)存、啟動時(shí)間、線程數(shù)量等信息),MasterServer分發(fā)任務(wù)時(shí)根據(jù)WorkerServer節(jié)點(diǎn)的CPU Load平均值、可用物理內(nèi)存、系統(tǒng)平均負(fù)載、服務(wù)啟動耗時(shí)計(jì)算節(jié)點(diǎn)權(quán)重值,值越大意味著節(jié)點(diǎn)負(fù)載越低,選中的優(yōu)先級越高;算法缺點(diǎn)是在某些特殊的權(quán)重下,會生成不均勻的序列,這種不平滑的負(fù)載可能會導(dǎo)致節(jié)點(diǎn)出現(xiàn)瞬間高負(fù)載的現(xiàn)象,導(dǎo)致節(jié)點(diǎn)存在宕機(jī)風(fēng)險(xiǎn);

  • 平滑加權(quán)輪詢(RoundRobin):節(jié)點(diǎn)宕機(jī)時(shí)降低有效權(quán)重值,節(jié)點(diǎn)正常時(shí)提高有效權(quán)重值;降權(quán)起到緩慢剔除宕機(jī)節(jié)點(diǎn)的效果,提權(quán)起到緩沖恢復(fù)宕機(jī)節(jié)點(diǎn)的效果。

所有的負(fù)載均衡算法都是基于WorkerServer節(jié)點(diǎn)的權(quán)重進(jìn)行加權(quán)計(jì)算的,權(quán)重影響分發(fā)結(jié)果,考慮到JIT優(yōu)化,Worker在啟動后會低功率地運(yùn)行一段時(shí)間(默認(rèn)十分鐘),隨后逐漸達(dá)到最佳性能,此過程稱為“JVM 預(yù)熱”,預(yù)熱期間WorkerServer節(jié)點(diǎn)的權(quán)重會緩慢動態(tài)調(diào)整,實(shí)現(xiàn)代碼可參見 HostWeight 類。

private double calculateWeight(double cpu, double memory, double loadAverage, long startTime) {
    double calculatedWeight = cpu * CPU_FACTOR + memory * MEMORY_FACTOR + loadAverage * LOAD_AVERAGE_FACTOR;
    long uptime = System.currentTimeMillis() - startTime;
    if (uptime > 0 && uptime < Constants.WARM_UP_TIME) {
      // If the warm-up is not over, add the weight
      return calculatedWeight * Constants.WARM_UP_TIME / uptime;
    }
    return calculatedWeight;
}

4.4.3、召回策略

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

在 2.0.6 版本以前,當(dāng)集群有多個(gè) WorkerServer 節(jié)點(diǎn)時(shí),比如3個(gè) WorkerServer 節(jié)點(diǎn),所對應(yīng)的負(fù)載分別是 0.1, 0.2, 0.2,如果按照默認(rèn)的負(fù)載均衡策略 LowerWeight 來分配任務(wù),若一次啟動100個(gè)任務(wù),在啟動任務(wù)的心跳周期內(nèi),可能導(dǎo)致任務(wù)會直接分配到負(fù)載為0.1的 WorkerServer 中,而其他兩個(gè) WorkerServer 分配不到任務(wù),當(dāng) WorkerServer 的并發(fā)數(shù)是10個(gè)任務(wù)時(shí),另外90個(gè)任務(wù)在同一個(gè)節(jié)點(diǎn)排隊(duì),這就拉長了任務(wù)整體運(yùn)行的時(shí)間?;诖藛栴},2.0.6+ 版本增加了 MasterServer 的召回策略:

  • WorkerServer 的隊(duì)列有:

    • 等待分配隊(duì)列:org.apache.dolphinscheduler.server.worker.runner.WorkerManagerThread#waitSubmitQueue,無邊界的阻塞隊(duì)列,負(fù)責(zé)接收來自MasterServer的DAG任務(wù),此隊(duì)列會延遲執(zhí)行隊(duì)列;

    • 執(zhí)行隊(duì)列:org.apache.dolphinscheduler.server.worker.runner.WorkerExecService,線程池(大小默認(rèn)100),可通過worker.exec-threads參數(shù)調(diào)整;

    • 等待執(zhí)行隊(duì)列:同執(zhí)行隊(duì)列,其中未分配到空閑線程而阻塞的任務(wù)數(shù),即為等待執(zhí)行的任務(wù)數(shù);

  • WorkerServer 會周期性更新 ZooKeeper 中的心跳信息,其中包括等待執(zhí)行隊(duì)列的大小,假如在一次心跳周期內(nèi)啟動了大量的任務(wù)(本次心跳周期內(nèi)等待隊(duì)列還未更新),WorkerServer 獲取到任務(wù)時(shí)先放到等待分配隊(duì)列,等待分配隊(duì)列會將任務(wù)給執(zhí)行隊(duì)列,執(zhí)行隊(duì)列滿時(shí),會放到等待執(zhí)行隊(duì)列,當(dāng)執(zhí)行隊(duì)列、等待執(zhí)行隊(duì)列都滿時(shí),等待分配隊(duì)列則無法分配任務(wù),就會觸發(fā) MasterServer 召回策略,WorkerServer 把任務(wù)返回給 MasterServer,MasterServer 會重新分配。

4.5

容錯(cuò)機(jī)制

4.5.1、腦裂問題

腦裂是指一個(gè)集群由于網(wǎng)絡(luò)故障,被分為至少兩個(gè)彼此無法通信的單獨(dú)集群,此時(shí)如果兩個(gè)集群各自工作,則可能會產(chǎn)生嚴(yán)重的數(shù)據(jù)沖突和錯(cuò)誤。由于網(wǎng)絡(luò)抖動,可能會使得MasterServer節(jié)點(diǎn)短時(shí)間內(nèi)失去和ZooKeeper的心跳,從而發(fā)生znode臨時(shí)節(jié)點(diǎn)的移除事件,觸發(fā)腦裂問題(節(jié)點(diǎn)假死,但仍在分發(fā)工作流),對于這種場景,開發(fā)者通過監(jiān)聽器監(jiān)聽節(jié)點(diǎn)和ZooKeeper的連接情況,一旦斷連則直接觸發(fā)自殺邏輯:

public class MasterConnectionStateListener implements ConnectionListener {
    ...
    @Override
    public void onUpdate(ConnectionState state) {
        switch (state) {
            ...
            case DISCONNECTED:
                logger.warn("registry connection state is {}, ready to stop myself", state);
                registryClient.getStoppable().stop("registry connection state is DISCONNECTED, stop myself");
                break;
            default:
        }
    }
}

4.5.2、宕機(jī)容錯(cuò)

依賴ZooKeeper的監(jiān)聽機(jī)制,MasterServer/WorkerServer各自在啟動時(shí)會向ZooKeeper注冊臨時(shí)節(jié)點(diǎn),并監(jiān)聽臨時(shí)節(jié)點(diǎn)的remove事件,一旦節(jié)點(diǎn)被移除,則持久化告警信息,等待發(fā)送;

關(guān)鍵實(shí)現(xiàn)類方法:

  • MasterDataListener:監(jiān)聽ZK路徑 /dolphinscheduler/nodes/master,若發(fā)生臨時(shí)節(jié)點(diǎn)移除事件,則發(fā)送告警;

  • WorkerDataListener:監(jiān)聽ZK路徑 /dolphinscheduler/nodes/worker/${WorkerGroup},若發(fā)生臨時(shí)節(jié)點(diǎn)移除事件,則發(fā)送告警。

ZooKeeper注冊路徑:

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

4.5.3、故障轉(zhuǎn)移

故障轉(zhuǎn)移發(fā)生在調(diào)度階段,假如某個(gè) MasterServer 節(jié)點(diǎn)在執(zhí)行中途宕機(jī)或者假死,導(dǎo)致ZooKeeper上的znode被移除,則需要將原本由此節(jié)點(diǎn)代理的工作流任務(wù),重新轉(zhuǎn)移至其它存活狀態(tài)的 MasterServer 節(jié)點(diǎn)上,否則會導(dǎo)致任務(wù)無法下發(fā),或者 WorkerServer 執(zhí)行完任務(wù)后無法向任務(wù)關(guān)聯(lián)的 MasterServer 發(fā)送RPC請求。

org.apache.dolphinscheduler.server.master.runner.FailoverExecuteThread 線程隨著 MasterServer 一起啟動,負(fù)責(zé)周期性巡檢元數(shù)據(jù),篩選出分配到故障節(jié)點(diǎn)的工作流實(shí)例,向WorkerServer發(fā)送TaskKillRequestCommand請求殺死運(yùn)行中的任務(wù);向Command表寫入RECOVER_TOLERANCE_FAULT_PROCESS記錄,等待MasterServer消費(fèi);

感謝閱讀!筆者水平有限,若有不當(dāng)之處,請不吝指正!

原文鏈接:https://blog.csdn.net/yeweiouyang/article/details/127212062

參與貢獻(xiàn)

隨著國內(nèi)開源的迅猛崛起,Apache DolphinScheduler 社區(qū)迎來蓬勃發(fā)展,為了做更好用、易用的調(diào)度,真誠歡迎熱愛開源的伙伴加入到開源社區(qū)中來,為中國開源崛起獻(xiàn)上一份自己的力量,讓本土開源走向全球。

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

參與 DolphinScheduler 社區(qū)有非常多的參與貢獻(xiàn)的方式,包括:

分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算

貢獻(xiàn)第一個(gè)PR(文檔、代碼)?我們也希望是簡單的,第一個(gè)PR用于熟悉提交的流程和社區(qū)協(xié)作以及感受社區(qū)的友好度。

社區(qū)匯總了以下適合新手的問題列表:https://github.com/apache/dolphinscheduler/issues/5689

非新手問題列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22

如何參與貢獻(xiàn)鏈接:https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html

來吧,DolphinScheduler開源社區(qū)需要您的參與,為中國開源崛起添磚加瓦吧,哪怕只是小小的一塊瓦,匯聚起來的力量也是巨大的。

參與開源可以近距離與各路高手切磋,迅速提升自己的技能,如果您想?yún)⑴c貢獻(xiàn),我們有個(gè)貢獻(xiàn)者種子孵化群,可以添加社區(qū)小助手微信(Leonard-ds) ,手把手教會您( 貢獻(xiàn)者不分水平高低,有問必答,關(guān)鍵是有一顆愿意貢獻(xiàn)的心 )。

添加社區(qū)小助手微信(Leonard-ds)?

添加小助手微信時(shí)請說明想?yún)⑴c貢獻(xiàn)。

來吧,開源社區(qū)非常期待您的參與。

< ?????>

更多精彩推薦

?在 AWS 上部署無服務(wù)器 Apache DolphinScheduler 任務(wù)調(diào)度系統(tǒng)

?Apache Dolphinscheduler 任務(wù)插件版圖再添 Linkis,大幅提高計(jì)算治理能力

?DolphinScheduler 快速構(gòu)建 Hugging Face 文本分類工作流,基于工作流的機(jī)器學(xué)習(xí)訓(xùn)練部署太強(qiáng)了!

?Apache DolphinScheduler 任務(wù)調(diào)度3.1.0版本源碼剖析

?名額已排到10月 | Apache DolphinScheduler Meetup分享嘉賓繼續(xù)火熱招募中

?【Meetup講師】您有一張社區(qū)認(rèn)證講師證書未領(lǐng)取,點(diǎn)擊領(lǐng)?。?/p>

?非代碼的貢獻(xiàn)也能成為Committer,我與DolphinScheduler社區(qū)的故事

我知道你在看分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘,分布式,騰訊云,大數(shù)據(jù),阿里云,云計(jì)算文章來源地址http://www.zghlxwxcb.cn/news/detail-620605.html

到了這里,關(guān)于分布式可視化作業(yè)調(diào)度平臺 DolphinScheduler MasterServer 設(shè)計(jì)核心要點(diǎn)揭秘的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用可視化docker瀏覽器,輕松實(shí)現(xiàn)分布式web自動化

    使用可視化docker瀏覽器,輕松實(shí)現(xiàn)分布式web自動化

    順著docker的發(fā)展,很多測試的同學(xué)也已經(jīng)在測試工作上使用docker作為環(huán)境基礎(chǔ)去進(jìn)行一些自動化測試,這篇文章主要講述我們在docker中使用瀏覽器進(jìn)行自動化測試如果可以實(shí)現(xiàn)可視化,同時(shí)可以對瀏覽器進(jìn)行相關(guān)的操作。 首先我們先了解什么是有頭瀏覽器和無頭瀏覽器的區(qū)別

    2024年02月14日
    瀏覽(27)
  • 完美的分布式監(jiān)控系統(tǒng) Prometheus與優(yōu)雅的開源可視化平臺 Grafana

    完美的分布式監(jiān)控系統(tǒng) Prometheus與優(yōu)雅的開源可視化平臺 Grafana

    prometheus與grafana之間是相輔相成的關(guān)系。簡而言之Grafana作為可視化的平臺,平臺的數(shù)據(jù)從Prometheus中取到來進(jìn)行儀表盤的展示。而Prometheus這源源不斷的給Grafana提供數(shù)據(jù)的支持。 Prometheus是一個(gè)開源的系統(tǒng)監(jiān)控和報(bào)警系統(tǒng),能夠監(jiān)控和告警各種系統(tǒng),包括網(wǎng)絡(luò)、存儲、服務(wù)器和

    2024年02月07日
    瀏覽(21)
  • 史上最全從零搭建ELKB(Elasticsearch、Logstash、Kibana、Beat)分布式日志管理可視化平臺之一

    史上最全從零搭建ELKB(Elasticsearch、Logstash、Kibana、Beat)分布式日志管理可視化平臺之一

    ELKB(Elasticsearch、Logstash、Kibana、Beat的組合)是一套開源的分布式日志管理方案。憑借其閉環(huán)的日志處理流程、高效的檢索性能、線性的擴(kuò)展能力、較低的運(yùn)維成本等特點(diǎn),ELKB在最近幾年迅速崛起,成為實(shí)時(shí)日志處理開源領(lǐng)域的首要選擇。(https://cloud.tencent.com/developer/article/1143

    2024年01月19日
    瀏覽(48)
  • 完美的分布式監(jiān)控系統(tǒng)——Prometheus(普羅米修斯)與優(yōu)雅的開源可視化平臺——Grafana(格魯夫娜)

    完美的分布式監(jiān)控系統(tǒng)——Prometheus(普羅米修斯)與優(yōu)雅的開源可視化平臺——Grafana(格魯夫娜)

    ? ? ? ? prometheus與grafana之間是相輔相成的關(guān)系。作為完美的分布式監(jiān)控系統(tǒng)的Prometheus,就想布加迪威龍一樣示例和動力強(qiáng)勁。在猛的車也少不了儀表盤來觀察。于是優(yōu)雅的可視化平臺Grafana出現(xiàn)了。 ? ? ? ? 簡而言之Grafana作為可視化的平臺,平臺的數(shù)據(jù)從Prometheus中取到來進(jìn)

    2024年02月14日
    瀏覽(21)
  • 分布式作業(yè)調(diào)度框架——ElasticJob

    分布式作業(yè)調(diào)度框架——ElasticJob

    ElasticJob 是面向互聯(lián)網(wǎng)生態(tài)和海量任務(wù)的分布式調(diào)度解決方案,由兩個(gè)相互獨(dú)立的子項(xiàng)目 ElasticJob-Lite 和 ElasticJob-Cloud 組成。 它通過彈性調(diào)度、資源管控、以及作業(yè)治理的功能,打造一個(gè)適用于互聯(lián)網(wǎng)場景的分布式調(diào)度解決方案,并通過開放的架構(gòu)設(shè)計(jì),提供多元化的作業(yè)生

    2024年02月13日
    瀏覽(31)
  • 結(jié)合云計(jì)算的最新技術(shù)和現(xiàn)狀,介紹云計(jì)算基礎(chǔ)知識、開源分布式數(shù)據(jù)庫Clickhouse、可視化數(shù)據(jù)分析工具、分布式鏈路跟蹤系統(tǒng)Pinpoint、數(shù)據(jù)湖存儲系統(tǒng)Pulsar等

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 2019年,“云計(jì)算”將成為“經(jīng)濟(jì)全球化”的熱門詞匯之一,2020年全球云計(jì)算市場規(guī)模預(yù)計(jì)達(dá)到1萬億美元。中國是繼美國、英國之后,成為全球第四大云服務(wù)提供商。華為、騰訊、阿里巴巴等互聯(lián)網(wǎng)巨頭紛紛布局云計(jì)算領(lǐng)域,各家公司紛紛推出

    2024年02月08日
    瀏覽(29)
  • 分布式任務(wù)調(diào)度系統(tǒng)分析

    分布式任務(wù)調(diào)度系統(tǒng)分析

    首先,我們來思考一些幾個(gè)業(yè)務(wù)場景: XX 信用卡中心,每月 28 日凌晨 1:00 到 3:00 需要完成全網(wǎng)用戶當(dāng)月的費(fèi)用清單的生成 XX 電商平臺,需要每天上午 9:00 開始向會員推送送優(yōu)惠券使用提醒 XX 公司,需要定時(shí)執(zhí)行 Python 腳本,清理掉某文件服務(wù)系統(tǒng)中無效的 tmp 文件 最開始,

    2023年04月22日
    瀏覽(39)
  • ??????Mapreduce分布式計(jì)算組件和YARN分布式資源調(diào)度

    上文我們已經(jīng)介紹Hadoop中HDFS分布式存儲組件 今天我們來學(xué)習(xí)Hadoop生態(tài)中另兩大組件Mapreduce和YARN Map階段 : 將數(shù)據(jù)拆分到不同的服務(wù)器后執(zhí)行Maptask任務(wù),得到一個(gè)中間結(jié)果 Reduce階段 : 將Maptask執(zhí)行的結(jié)果進(jìn)行匯總,按照Reducetask的計(jì)算 規(guī)則獲得一個(gè)唯一的結(jié)果 我們在MapReduce計(jì)算框

    2024年04月13日
    瀏覽(24)
  • 分布式之任務(wù)調(diào)度學(xué)習(xí)二

    分布式之任務(wù)調(diào)度學(xué)習(xí)二

    Spring-quartz 工程 Spring 在 spring-context-support.jar 中直接提供了對 Quartz 的支持 可以在配置文件中把 JobDetail、Trigger、Scheduler 定義成 Bean。 4.1 定義 Job 4.2 定義 Trigger 4.3 定義 Scheduler 既然可以在配置文件配置,當(dāng)然也可以用@Bean 注解配置。在配置類上加上@Configuration 讓 Spring 讀取到

    2024年02月03日
    瀏覽(28)
  • 分布式任務(wù)調(diào)度(00)--Quartz

    分布式任務(wù)調(diào)度(00)--Quartz

    調(diào)度器 :工廠類創(chuàng)建Scheduler,根據(jù)觸發(fā)器定義的時(shí)間規(guī)則調(diào)度任務(wù) 任務(wù):Job表示被調(diào)度的任務(wù) 觸發(fā)器:Trigger 定義調(diào)度時(shí)間的元素,按啥時(shí)間規(guī)則執(zhí)行任務(wù)。一個(gè)Job可被多個(gè)Trigger關(guān)聯(lián),但是一個(gè)Trigger 只能關(guān)聯(lián)一個(gè)Job 執(zhí)行任務(wù)調(diào)度核心類QuartzSchedulerThread: 調(diào)度線程從JobSt

    2024年02月05日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包