中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

蘇寧 11.11 :蘇寧大數(shù)據(jù)離線任務(wù)開發(fā)調(diào)度平臺(tái)實(shí)踐

2018-11-16    來(lái)源:raincent

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

目錄

背景 2

設(shè)計(jì)目標(biāo) 2

2.1 用戶交互的產(chǎn)品功能 2
2.2 后臺(tái)調(diào)度功能 3
2.3 任務(wù)執(zhí)行器功能 4
2.4 任務(wù)運(yùn)維功能 5
2.5 平臺(tái)對(duì)外功能 6

平臺(tái)價(jià)值 7

平臺(tái)建設(shè) 7

4.1 用戶功能實(shí)現(xiàn)說(shuō)明 8
4.2 調(diào)度周期設(shè)計(jì)說(shuō)明 12
4.3 調(diào)度策略設(shè)計(jì)說(shuō)明 13
4.4 調(diào)度流控設(shè)計(jì)說(shuō)明 15
4.5 系統(tǒng)高可用設(shè)計(jì)說(shuō)明 16
4.6 任務(wù)失敗策略 17
4.7 任務(wù)運(yùn)行分析設(shè)計(jì)說(shuō)明 18

現(xiàn)狀和未來(lái) 20

后續(xù) 21

 

 

 

1. 背景

在數(shù)據(jù)倉(cāng)庫(kù)的建立過(guò)程中,核心技術(shù)是抽取、轉(zhuǎn)換、裝載(ETL),它為數(shù)據(jù)倉(cāng)庫(kù)提供及時(shí)、高質(zhì)而準(zhǔn)確的數(shù)據(jù)。由于 ETL 包括眾多的處理任務(wù),且這些任務(wù)之間有一定的約束關(guān)系,如何高效的調(diào)度和管理這些任務(wù)是數(shù)據(jù)倉(cāng)庫(kù) ETL 實(shí)施中非常重要的工作,也是提高數(shù)據(jù)倉(cāng)庫(kù)開發(fā)效率和資源利用率的關(guān)鍵。

在大數(shù)據(jù)平臺(tái),隨著業(yè)務(wù)發(fā)展,每天承載著成千上萬(wàn)的 ETL 任務(wù)調(diào)度,這些任務(wù)的形態(tài)各種各樣。怎么樣讓大量的 ETL 任務(wù)準(zhǔn)確的完成調(diào)度而不出現(xiàn)問(wèn)題,甚至在任務(wù)調(diào)度執(zhí)行中出現(xiàn)錯(cuò)誤的情況下,任務(wù)能夠完成自我恢復(fù)甚至執(zhí)行錯(cuò)誤告警與完整的日志查詢。IDE 大數(shù)據(jù)離線任務(wù)調(diào)度系統(tǒng)就是在這種背景下衍生的一款分布式調(diào)度系統(tǒng)。

在闡述 IDE 平臺(tái)之前,首先討論一下作業(yè)調(diào)度系統(tǒng)和資源調(diào)度系統(tǒng)的區(qū)別,因?yàn)橥型瑢W(xué)把這兩者混為一談。資源調(diào)度系統(tǒng)的典型代表比如:Yarn/Mesos/Omega/Borg,還有阿里的伏羲,騰訊的蓋婭(Gaia),百度的諾曼底 (Normandy) 等等。我們今天的內(nèi)容主要講述的是作業(yè)調(diào)度系統(tǒng)。不過(guò),IDE 除了完成了大數(shù)據(jù)的任務(wù)各種復(fù)雜調(diào)度外,還包含了任務(wù)開發(fā)、依賴組織、狀態(tài)維護(hù)、任務(wù)監(jiān)控、任務(wù)治理、服務(wù)監(jiān)控、動(dòng)態(tài)擴(kuò)縮容等諸多內(nèi)容。

2. 設(shè)計(jì)目標(biāo)

2.1 用戶交互的產(chǎn)品功能

從用戶交互的產(chǎn)品功能上看,主要包括以下幾點(diǎn):

提供可視化的操作頁(yè)面,任務(wù)的開發(fā)、運(yùn)維、監(jiān)控等操作圖形化頁(yè)面化
對(duì)擁有權(quán)限的作業(yè)/任務(wù)進(jìn)行管理,包括設(shè)計(jì)調(diào)度周期和時(shí)間、添加、修改、刪除任務(wù)節(jié)點(diǎn)、組織依賴關(guān)系、查詢等
對(duì)任務(wù)運(yùn)行狀態(tài)進(jìn)行查看、監(jiān)控,進(jìn)行殺死、重跑、補(bǔ)數(shù)據(jù)、查看運(yùn)行日志、查看操作記錄等運(yùn)維操作
支持作業(yè)失敗自動(dòng)重試,可以設(shè)置自動(dòng)重試次數(shù),重試間隔等
支持任務(wù)失敗報(bào)警,超時(shí)報(bào)警,到達(dá)指定時(shí)間未執(zhí)行報(bào)警等異常情況的報(bào)警監(jiān)控
支持動(dòng)態(tài)按應(yīng)用/業(yè)務(wù)/優(yōu)先級(jí)等維度調(diào)整作業(yè)執(zhí)行的并發(fā)度調(diào)度時(shí)間和數(shù)據(jù)時(shí)間的分離
支持歷史任務(wù)獨(dú)立重刷或按照依賴關(guān)系重刷后續(xù)整條作業(yè)鏈路允許設(shè)置作業(yè)生命周期,可以臨時(shí)禁止或啟用一個(gè)周期作業(yè)
提供任務(wù)鏈路依賴分析,便于分析任務(wù)的上下游影響,調(diào)度執(zhí)行延遲的溯源分析
提供任務(wù)的異常自助診斷分析和優(yōu)化建議,便于用戶及時(shí)合理的整改任務(wù)
提供任務(wù)的導(dǎo)入導(dǎo)出、復(fù)制等功能,便于用戶在多個(gè)運(yùn)行環(huán)境和數(shù)據(jù)中心快速開發(fā)任務(wù),提高開發(fā)效率
支持多用戶的并發(fā)訪問(wèn)控制,便于多用戶的協(xié)同開發(fā)而不出問(wèn)題
提供任務(wù)的發(fā)布管控和權(quán)限管控的配置功能,規(guī)范任務(wù)開發(fā)流程,降低生產(chǎn)風(fēng)險(xiǎn)

 

詳細(xì)的用戶產(chǎn)品功能如圖 1 所示:

 

 

(圖 1:用戶產(chǎn)品功能清單)

2.2 后臺(tái)調(diào)度功能

準(zhǔn)實(shí)時(shí)調(diào)度,支持僅執(zhí)行一次和周期性任務(wù)(分鐘、小時(shí)、天、周、月),作業(yè)計(jì)劃的變更,即時(shí)生效
靈活的調(diào)度策略,觸發(fā)方式需要支持:時(shí)間觸發(fā),依賴觸發(fā)或者混合觸發(fā),支持多種依賴關(guān)系等
做好多租戶隔離,執(zhí)行器資源隔離、內(nèi)建流控,負(fù)載均衡和作業(yè)優(yōu)先級(jí)等機(jī)制
系統(tǒng)高可用,組件模塊化,核心組件無(wú)狀態(tài)化
支持任務(wù)失敗轉(zhuǎn)移、執(zhí)行機(jī)器資源發(fā)現(xiàn)和健康度評(píng)估
提供調(diào)度內(nèi)存對(duì)象的跟蹤捕捉,便于復(fù)雜場(chǎng)景下的任務(wù)調(diào)度異常原因分析
開放系統(tǒng)接口,對(duì)外提供 REST API,便于對(duì)接周邊系統(tǒng)
提供任務(wù)狀態(tài)的發(fā)布訂閱,便于對(duì)接外部系統(tǒng)根據(jù)任務(wù)狀態(tài)的變化完成其他業(yè)務(wù)邏輯

詳細(xì)的調(diào)度模塊功能如圖 2 所示:

 

 

(圖 2:調(diào)度模塊的功能清單)

2.3 任務(wù)執(zhí)行器功能


支持任務(wù)進(jìn)程之間的隔離,防止任務(wù)之間的互相影響
支持自動(dòng)健康檢查和狀態(tài)匯報(bào),不健康時(shí)及時(shí)匯報(bào)調(diào)度系統(tǒng),不再繼續(xù)領(lǐng)取執(zhí)行任務(wù)
部署無(wú)狀態(tài),支持動(dòng)態(tài)擴(kuò)縮容
能夠支持異常任務(wù)跟蹤,高耗 CPU 和內(nèi)存的任務(wù)的自助發(fā)現(xiàn)和記錄
支持固定、動(dòng)態(tài)、智能分配任務(wù)執(zhí)行資源,合理利用服務(wù)器資源
能夠進(jìn)行很好的容錯(cuò)處理

詳細(xì)的任務(wù)執(zhí)行器功能如圖 3 所示:

(圖 3:任務(wù)執(zhí)行器功能清單)

2.4 任務(wù)運(yùn)維功能

從任務(wù)運(yùn)維角度看,主要包括以下幾點(diǎn):

提供任務(wù)狀態(tài)的監(jiān)控告警功能,任務(wù)異常時(shí)及時(shí)告警和干預(yù),避免造成任務(wù)堆積和業(yè)務(wù)異常
提供自動(dòng)化部署,包括調(diào)度模塊和執(zhí)行器模塊,支持動(dòng)態(tài)擴(kuò)縮容
任務(wù)執(zhí)行進(jìn)度和完成時(shí)間預(yù)測(cè)
提供任務(wù)運(yùn)行分析和自助診斷功能
任務(wù)日志分析,自動(dòng)識(shí)別錯(cuò)誤原因和類型
提供 PC 和移動(dòng)端運(yùn)維功能,便于隨時(shí)隨地發(fā)現(xiàn)和解決問(wèn)題
提供知識(shí)庫(kù)建立和應(yīng)急解決方案、系統(tǒng)降級(jí)方案

平臺(tái)運(yùn)維能力如圖 4 所示:

 

 

(圖 4:平臺(tái)運(yùn)維能力)

2.5 平臺(tái)對(duì)外功能

從平臺(tái)對(duì)外的能力輸出方面,主要包括以下幾點(diǎn)

提供任務(wù)創(chuàng)建、狀態(tài)查詢和殺死、重跑、補(bǔ)數(shù)據(jù)等運(yùn)維接口,便于復(fù)雜業(yè)務(wù)場(chǎng)景根據(jù)業(yè)務(wù)邏輯動(dòng)態(tài)操作任務(wù)

接口授權(quán)和安全性校驗(yàn),打通與外部系統(tǒng)的對(duì)接,擴(kuò)展平臺(tái)和業(yè)務(wù)系統(tǒng)的大數(shù)據(jù)開發(fā)能力

平臺(tái)的對(duì)外服務(wù)能力如圖 5 所示:

 

 

(圖 5:平臺(tái)對(duì)外服務(wù)能力)

3. 平臺(tái)價(jià)值

目前蘇寧八大產(chǎn)業(yè)齊聚并發(fā),數(shù)據(jù)爆發(fā)增長(zhǎng),依托大數(shù)據(jù)平臺(tái)打通各產(chǎn)業(yè)數(shù)據(jù),服務(wù)智慧零售。在整個(gè)智慧零售中和大數(shù)據(jù)開發(fā)戰(zhàn)略中,ETL 是 BI(商業(yè)智能)的基礎(chǔ),數(shù)據(jù)調(diào)度是 ETL 的靈魂。

使用該平臺(tái)能夠?qū)ζ髽I(yè)中批量運(yùn)行作業(yè)進(jìn)行集中管理,并通過(guò)強(qiáng)大的調(diào)度引擎功能實(shí)現(xiàn)作業(yè)的邏輯運(yùn)行,并提供直觀詳細(xì)的監(jiān)控手段,輔助運(yùn)維工作。平臺(tái)為系統(tǒng)的開發(fā)與運(yùn)維提供以下價(jià)值:

解放人力,提高工作效率。

通過(guò)使用平臺(tái)對(duì)大數(shù)據(jù)作業(yè)進(jìn)行自動(dòng)化管理和監(jiān)視。當(dāng)系統(tǒng)出現(xiàn)異常的情況時(shí),以郵件、短信等多種方式通知相應(yīng)的管理員進(jìn)行人工參與,大大減輕了現(xiàn)有管理員的工作壓力,提高了 IT 系統(tǒng)的管理效率。

靈活的配置及告警機(jī)制。

利用平臺(tái)提供的靈活配置功能和完善的告警處理機(jī)制,大大避免了因?yàn)楣收咸幚聿患皶r(shí)而帶來(lái)的損失。

強(qiáng)大的權(quán)限管理。

將各種運(yùn)行操作權(quán)限合理的分配給作業(yè)及操作人員,進(jìn)行權(quán)限限定的批量作業(yè)設(shè)置、運(yùn)行和監(jiān)視,使核心權(quán)限得到有效保護(hù)。

全面的作業(yè)運(yùn)行狀況分析。

通過(guò)自動(dòng)采集作業(yè)運(yùn)行狀況、時(shí)間,分析故障分布、作業(yè)運(yùn)行時(shí)長(zhǎng)等業(yè)務(wù)運(yùn)行指標(biāo),整體把握系統(tǒng)運(yùn)行健康度。

4. 平臺(tái)建設(shè)

IDE 平臺(tái)旨在為用戶提供從數(shù)據(jù)源申請(qǐng)、任務(wù)創(chuàng)建、任務(wù)調(diào)度編排、任務(wù)運(yùn)維、任務(wù)告警、運(yùn)行分析等一站式大數(shù)據(jù)開發(fā)平臺(tái),幫助企業(yè)快速完全數(shù)據(jù)中臺(tái)搭建。

IDE 大數(shù)據(jù)開發(fā)平臺(tái)在架構(gòu)上分為任務(wù)管理平臺(tái)、任務(wù)調(diào)度、任務(wù)執(zhí)行、任務(wù)監(jiān)控、和 API 服務(wù)五部分。平臺(tái)采用了先進(jìn)的 JavaEE 技術(shù)架構(gòu),具有很強(qiáng)的跨平臺(tái)性。部署簡(jiǎn)便,維護(hù)簡(jiǎn)單,容易使用。支持分步式的多機(jī)集群,能承載大規(guī)模數(shù)據(jù)的高負(fù)荷運(yùn)行,具有良好的穩(wěn)定性。平臺(tái)采用了多層架構(gòu),結(jié)構(gòu)清晰,具有良好的擴(kuò)展性、穩(wěn)定性和容錯(cuò)性。

平臺(tái)整體架構(gòu)如圖 6 所示。

 

 

(圖 6:平臺(tái)架構(gòu)設(shè)計(jì))

接下來(lái),我們重點(diǎn)闡述部分設(shè)計(jì)實(shí)現(xiàn)細(xì)節(jié)和相關(guān)實(shí)踐經(jīng)驗(yàn)。

4.1 用戶功能實(shí)現(xiàn)說(shuō)明

用戶交互的產(chǎn)品功能,注重圖形化可視化,易操作易維護(hù)

讓用戶能夠盡可能的自助服務(wù),同時(shí)降低操作代價(jià),減少犯錯(cuò)的可能性。支持當(dāng)日任務(wù)計(jì)劃和執(zhí)行歷史的查詢,支持周期作業(yè)信息的檢索,包括作業(yè)概況,歷史運(yùn)行流水,運(yùn)行日志,變更記錄,依賴關(guān)系、任務(wù)運(yùn)行明細(xì)查詢等。這部分功能的目的,是為了讓系統(tǒng)更加透明,讓業(yè)務(wù)更加可控,讓排查和分析問(wèn)題更加容易。盡可能的讓一切作業(yè)任務(wù)信息和變更記錄都有源可查,做到任務(wù)操作都可以追蹤和溯源。

主要操作全部圖形化可視化,降低用戶使用成本,提高開發(fā)效率。

任務(wù)流和任務(wù)的開發(fā)設(shè)計(jì)頁(yè)面如圖 7 所示

 

 

(圖 7:任務(wù)開發(fā)主頁(yè)面)

任務(wù)流的開發(fā)提供畫布操作,任務(wù)節(jié)點(diǎn)拖拽方便,編排簡(jiǎn)單,如圖 8 和圖 9 所示。

 

 

(圖 8:任務(wù)流設(shè)計(jì)畫布)

 

 

(圖 9:任務(wù)節(jié)點(diǎn)依賴關(guān)系編排)

任務(wù)配置可視化,簡(jiǎn)單化,降低犯錯(cuò)率,如圖 10 所示。

 

 

(圖 10:任務(wù)可視化配置頁(yè)面)

任務(wù)運(yùn)行狀態(tài)進(jìn)行查看、監(jiān)控,進(jìn)行殺死、重跑、補(bǔ)數(shù)據(jù)、查看運(yùn)行日志、查看操作記錄等運(yùn)維操作。如圖 11 和圖 12 所示

 

 

(圖 11:任務(wù)運(yùn)維管理頁(yè)面)

 

 

(圖 12:任務(wù)流畫布上的運(yùn)維操作)

提供豐富的告警,便于及時(shí)跟蹤任務(wù)執(zhí)行狀態(tài),降低事故率。如圖 13 和 14 所示

 

 

(圖 13:任務(wù)告警類型)

 

 

(圖 14:任務(wù)告警配置頁(yè)面)

提供任務(wù)鏈路依賴分析,便于分析任務(wù)的上下游影響,調(diào)度執(zhí)行延遲的溯源分析。

如圖 15 所示。

 

 

(圖 15:任務(wù)執(zhí)行依賴分析)

4.2 調(diào)度周期設(shè)計(jì)說(shuō)明

準(zhǔn)實(shí)時(shí)調(diào)度,支持周期性任務(wù)(分鐘、小時(shí)、天、周、月),作業(yè)計(jì)劃的變更

所謂準(zhǔn)時(shí)實(shí)調(diào)度,首先指的是平臺(tái)會(huì)按照各個(gè)上線的任務(wù)流的調(diào)度時(shí)間生成調(diào)度執(zhí)行計(jì)劃,當(dāng)觸發(fā)時(shí)間到了,平臺(tái)會(huì)按照調(diào)度執(zhí)行計(jì)劃精確的生成任務(wù)流實(shí)例和任務(wù)實(shí)例。但是在任務(wù)執(zhí)行上,并不保證準(zhǔn)實(shí)時(shí)的分配機(jī)器執(zhí)行。實(shí)際上平臺(tái)以整體資源使用情況為最高原則,并按照一定的限流策略控制任務(wù)的執(zhí)行,比如:任務(wù)優(yōu)先級(jí)、任務(wù)組并發(fā)度、平臺(tái)任務(wù)并發(fā)數(shù)、任務(wù)特定執(zhí)行時(shí)間等因素。在保證平臺(tái)資源允許的情況下,盡量按時(shí)執(zhí)行任務(wù)。為了保障任務(wù)的實(shí)時(shí)性,必須保障任務(wù)資源的可用性和計(jì)劃可控性。

作業(yè)計(jì)劃的變更允許用戶調(diào)整自己上線的任務(wù)流執(zhí)行計(jì)劃。比如天任務(wù)調(diào)整為小時(shí)任務(wù),調(diào)度開始時(shí)間從 1 點(diǎn)開始調(diào)整為 2 點(diǎn)開始。如果對(duì)上線已經(jīng)生成任務(wù)實(shí)例的任務(wù)流進(jìn)行調(diào)整,必須下線后再調(diào)整,此時(shí)會(huì)提示用戶殺死當(dāng)前的任務(wù),然后完成計(jì)劃調(diào)整。如果上線的任務(wù)流還未到觸發(fā)時(shí)間,沒(méi)有生成任務(wù)實(shí)例,用戶可以及時(shí)修正,并對(duì)任務(wù)執(zhí)行無(wú)影響。

圖 16 是平臺(tái)的任務(wù)流頻率支持的類型。

 

 

(圖 16:任務(wù)流調(diào)度頻率類型)

4.3 調(diào)度策略設(shè)計(jì)說(shuō)明

靈活的調(diào)度策略,觸發(fā)方式需要支持:時(shí)間觸發(fā),依賴觸發(fā)或者混合觸發(fā),支持多種依賴關(guān)系等

首先,在一些復(fù)雜的業(yè)務(wù)場(chǎng)景里,存在跨流任務(wù)依賴調(diào)度,不同的任務(wù)流的頻率和時(shí)間周期不一致,比如天依賴小時(shí)、周依賴天等

其次,針對(duì)不同優(yōu)先級(jí)的任務(wù),在資源利用高峰和任務(wù)執(zhí)行高峰時(shí)段,可以適當(dāng)調(diào)整中低優(yōu)先級(jí)的任務(wù)的執(zhí)行時(shí)間窗口,避免低優(yōu)先級(jí)的任務(wù)和高優(yōu)先級(jí)的任務(wù)進(jìn)行資源搶占,錯(cuò)峰執(zhí)行,提高資源利用率和均衡性。

在解決跨流依賴方面,平臺(tái)目前僅支持 大頻率依賴小頻率,比如:天依賴小時(shí)、周依賴天、月依賴天,以及同頻依賴,比如:小時(shí)依賴小時(shí)、天依賴天、周依賴周、月依賴月。平臺(tái)在設(shè)計(jì)之初限制了一個(gè)任務(wù)只能屬于一個(gè)任務(wù)流,不允許任務(wù)跨流存在,如何解決跨流依賴的問(wèn)題呢?我們建議用戶對(duì)任務(wù)創(chuàng)建任務(wù)事件,可以理解成任務(wù)的一個(gè)執(zhí)行副本。這個(gè)事件是允許跨流存在的。如果一個(gè)任務(wù)流需要依賴另外一個(gè)任務(wù)流的的某個(gè)任務(wù),只要依賴這個(gè)任務(wù)的事件即可,通過(guò)事件我們將任務(wù)流進(jìn)行串聯(lián)起來(lái)。如圖 17 所示。

 

 

(圖 17:任務(wù)事件依賴)

在解決跨系統(tǒng)之間的依賴問(wèn)題,我們提供了 FTP 事件,即在 FTP 服務(wù)器上建立標(biāo)識(shí)文件,一個(gè)事件對(duì)應(yīng)一個(gè)標(biāo)識(shí)文件地址,當(dāng) FTP 服務(wù)器上的標(biāo)識(shí)文件生成的時(shí)候,我們認(rèn)為業(yè)務(wù)系統(tǒng)已經(jīng)完成作業(yè),需要觸發(fā)平臺(tái)任務(wù)執(zhí)行。

因?yàn)?FTP 事件存在實(shí)時(shí)性和穩(wěn)定性的問(wèn)題,即調(diào)度服務(wù)是不停的輪詢各個(gè) FTP 事件服務(wù)器,當(dāng) FTP 服務(wù)器負(fù)荷較重,往往會(huì)連接超時(shí),導(dǎo)致掃描文件標(biāo)識(shí)延遲,進(jìn)而導(dǎo)致下游任務(wù)延遲,我們對(duì)用戶系統(tǒng)了 API 事件,即業(yè)務(wù)系統(tǒng)作業(yè)完成后可以調(diào)用平臺(tái)的 API 接口,觸發(fā)下游任務(wù)執(zhí)行,解決了時(shí)效性和穩(wěn)定性的問(wèn)題。

 

 

(圖 18:事件列表)

4.4 調(diào)度流控設(shè)計(jì)說(shuō)明

做好多租戶隔離,執(zhí)行器資源隔離、內(nèi)建流控,負(fù)載均衡和作業(yè)優(yōu)先級(jí)等機(jī)制

大多數(shù)的工作流調(diào)度系統(tǒng),多租戶的隔離比較簡(jiǎn)單,業(yè)務(wù)上租戶之間完全獨(dú)立,租戶之間的業(yè)務(wù)很難相互關(guān)聯(lián)。同一租戶的工作流方面也不能互相依賴和關(guān)聯(lián)。更多的考慮是物理資源層面的隔離,這個(gè),多半通過(guò)獨(dú)立集群或者虛擬化的方案來(lái)解決,同一租戶內(nèi)部,做得好的可能再考慮一下業(yè)務(wù)隊(duì)列管理。

我司的業(yè)務(wù)環(huán)境則不適合采取類似的方案,首先從業(yè)務(wù)的角度來(lái)說(shuō),不同的業(yè)務(wù)組(亦即租戶),雖然管理的作業(yè)會(huì)有不同,但是往往不同租戶之間的作業(yè),相互依賴關(guān)系復(fù)雜,犬牙交錯(cuò),變化也頻繁,基本不可能在物理集群或機(jī)器的層面進(jìn)行隔離,業(yè)務(wù)組之間的人員流動(dòng),業(yè)務(wù)變更也比較頻繁。

其次在同一租戶業(yè)務(wù)內(nèi)部,不同優(yōu)先級(jí)的任務(wù),不同類型的任務(wù),不同應(yīng)用來(lái)源的任務(wù),包括周期任務(wù),一次性任務(wù),失敗重試任務(wù),歷史重刷任務(wù)等各種情況,也有不同的資源和流控管控需求。

目前本平臺(tái)在開發(fā)實(shí)踐中,主要從以下幾方面進(jìn)行限流控制:

任務(wù)優(yōu)先級(jí),任務(wù)分為高中低三個(gè)優(yōu)先級(jí),分別對(duì)應(yīng)底層 yarn 的資源調(diào)度不同的權(quán)重,高優(yōu)先級(jí)的優(yōu)先分配執(zhí)行機(jī)器和計(jì)算資源

系統(tǒng)調(diào)用和用戶補(bǔ)數(shù)據(jù)操作分開,平臺(tái)絕大部分的任務(wù)執(zhí)行都是依賴自身的調(diào)度周期執(zhí)行,無(wú)需用戶干涉,優(yōu)先保證這部分的任務(wù)的執(zhí)行資源;在某些業(yè)務(wù)場(chǎng)景下,需要對(duì)歷史數(shù)據(jù)進(jìn)行彌補(bǔ),通過(guò)指定運(yùn)行的數(shù)據(jù)時(shí)間強(qiáng)制任務(wù)執(zhí)行,這類任務(wù)往往不是很緊急,可以將優(yōu)先級(jí)降低

失敗重試和用戶重跑優(yōu)先級(jí)高于系統(tǒng)調(diào)用的優(yōu)先級(jí)。當(dāng)任務(wù)出現(xiàn)異常需要進(jìn)行重跑或者重試,需要人工進(jìn)行干預(yù)的情況下,一般屬于緊急情況,需要優(yōu)先保證這部分的任務(wù)的計(jì)算資源

部分任務(wù)可以設(shè)置固定時(shí)間,錯(cuò)峰執(zhí)行,避免高峰時(shí)段的資源壓力

對(duì)于同一任務(wù)流內(nèi)同一層級(jí)內(nèi)部的多個(gè)任務(wù),可以設(shè)置任務(wù)組,通過(guò)設(shè)置任務(wù)組的并發(fā)度來(lái)限制任務(wù)的并行個(gè)數(shù),降低對(duì)業(yè)務(wù)系統(tǒng)的訪問(wèn)壓力。這個(gè)往往在對(duì)分庫(kù)數(shù)據(jù)庫(kù)或者同一數(shù)據(jù)庫(kù)進(jìn)行多任務(wù)訪問(wèn)操作的時(shí)候,減輕業(yè)務(wù)數(shù)據(jù)庫(kù)的訪問(wèn)壓力,可以限制任務(wù)的并行執(zhí)行個(gè)數(shù)

按照任務(wù)類型進(jìn)行限流。平臺(tái)支持的任務(wù)類型很多,當(dāng)?shù)讓訉?duì)應(yīng)的計(jì)算或者存儲(chǔ)資源壓力過(guò)大,可以限制某些類型的任務(wù)的并發(fā)個(gè)數(shù),降低底層的計(jì)算壓力。這個(gè)限流可以做到平臺(tái)全局層面,也可以做到系統(tǒng)賬號(hào)層面。

可以為某些類型任務(wù)或者某個(gè)系統(tǒng)賬號(hào)下的任務(wù)指定固定的機(jī)器資源執(zhí)行,這樣可以降低大資源消耗任務(wù)對(duì)其他任務(wù)的資源搶占,保障特殊任務(wù)的資源需求,也可以進(jìn)行部分賬號(hào)的任務(wù)的灰度發(fā)布,降低生產(chǎn)事故率

Worker 節(jié)點(diǎn)的被動(dòng)負(fù)載反饋(負(fù)載高的情況拒絕接收任務(wù))和主節(jié)點(diǎn)的主動(dòng)負(fù)載均衡(輪詢和 Worker 節(jié)點(diǎn)并發(fā)數(shù)控制等策略)。在分配任務(wù)和領(lǐng)取任務(wù)方面都進(jìn)行了任務(wù)隊(duì)列深度控制,防止過(guò)度分配和過(guò)度領(lǐng)取而導(dǎo)致分配不均而引起的任務(wù)堆積

4.5 系統(tǒng)高可用設(shè)計(jì)說(shuō)明

系統(tǒng)高可用,組件模塊化,核心組件無(wú)狀態(tài)化

從系統(tǒng)架構(gòu)的角度出發(fā),模塊化的設(shè)計(jì)有利于功能隔離,降低組件耦合度和單個(gè)組件的復(fù)雜度,提升系統(tǒng)的可拓展性,一定程度上有利于提升系統(tǒng)穩(wěn)定性,但帶來(lái)的問(wèn)題是開發(fā)調(diào)試會(huì)更加困難,從這個(gè)角度來(lái)說(shuō)又不利于穩(wěn)定性的改進(jìn)。所以各個(gè)功能模塊拆不拆,怎么拆往往是需要權(quán)衡考慮的。

平臺(tái)采用常見(jiàn)的主從式架構(gòu),按照功能模塊劃分清晰,職責(zé)單一而不緊耦合,避免繁重復(fù)雜的業(yè)務(wù)耦合設(shè)計(jì)。Master 節(jié)點(diǎn)負(fù)責(zé)作業(yè)計(jì)劃的管理和任務(wù)的調(diào)度分配,worker 節(jié)點(diǎn)負(fù)責(zé)具體任務(wù)的執(zhí)行。用戶通過(guò) Web 控制后臺(tái)管理作業(yè),而 Web 控制后臺(tái)與 Master 服務(wù)器之間的交互透過(guò) Rest 服務(wù)來(lái)執(zhí)行,Rest 服務(wù)也可以給 Web 控制后臺(tái)以外的其它系統(tǒng)提供服務(wù)(用于支持外部系統(tǒng)和調(diào)度系統(tǒng)的對(duì)接)。平臺(tái)部署架構(gòu)圖如圖 19 所示。

 

 

(圖 19:部署架構(gòu)圖)

Master 調(diào)度除了引入 Quartz 的負(fù)責(zé)時(shí)間調(diào)度外,核心的就是任務(wù)實(shí)例在執(zhí)行過(guò)程中的狀態(tài)變化以及變化后觸發(fā)的操作邏輯。任務(wù)實(shí)例狀態(tài)的變化切換目前仿照 yarn 的狀態(tài)機(jī)實(shí)現(xiàn)原理,重新進(jìn)行了改造封裝。這塊的核心組件受限研發(fā)時(shí)間和技術(shù)問(wèn)題沒(méi)有做到無(wú)狀態(tài)。

這里所說(shuō)的無(wú)狀態(tài)化,更多的強(qiáng)調(diào)的是各個(gè)調(diào)度組件運(yùn)行時(shí)狀態(tài)的持久化,在組件崩潰重啟后,所有的運(yùn)行時(shí)狀態(tài)都應(yīng)該能夠通過(guò)外部持久化的數(shù)據(jù)中快速的恢復(fù)重建。

為了保證狀態(tài)的一致統(tǒng)一,平臺(tái)的所有作業(yè)和任務(wù)的信息變更,無(wú)論是用戶發(fā)起的作業(yè)配置修改,還是執(zhí)行器反饋的作業(yè)狀態(tài)變更,都會(huì)提交給 Master 節(jié)點(diǎn)同步寫入到數(shù)據(jù)庫(kù)。

在 HA 方面,按照準(zhǔn)實(shí)時(shí)的設(shè)計(jì)目標(biāo),平臺(tái)并沒(méi)有打算做到秒級(jí)別的崩潰恢復(fù)速度,系統(tǒng)崩潰時(shí),只要能在分鐘級(jí)別范圍內(nèi),重建系統(tǒng)狀態(tài),就基本能滿足系統(tǒng)的設(shè)計(jì)目標(biāo)需求。

所以其實(shí)高可用性設(shè)計(jì)的重點(diǎn),關(guān)鍵在于重建的過(guò)程中,系統(tǒng)的狀態(tài)能否準(zhǔn)確的恢復(fù)。比如,主節(jié)點(diǎn)崩潰或維護(hù)期間,發(fā)生狀態(tài)變更的任務(wù)在主節(jié)點(diǎn)恢復(fù)以后,能否正確更新狀態(tài)等等。而雙機(jī)熱備份無(wú)縫切換,目前來(lái)看實(shí)現(xiàn)難度較大(太多流程需要考慮原子操作,數(shù)據(jù)同步和避免競(jìng)爭(zhēng)沖突),實(shí)際需求也不強(qiáng)烈,通過(guò)監(jiān)控,自動(dòng)重啟和雙機(jī)冷備的方式來(lái)加快系統(tǒng)重建速度,基本也就足夠了。

另外,為了提高系統(tǒng)局部維護(hù)/升級(jí)期間的系統(tǒng)可用性,平臺(tái)支持 Worker 節(jié)點(diǎn)的動(dòng)態(tài)上下線,可以對(duì) worker 節(jié)點(diǎn)進(jìn)行滾動(dòng)維護(hù),當(dāng) Master 節(jié)點(diǎn)下線時(shí),Worker 節(jié)點(diǎn)和 ZK 節(jié)點(diǎn)也會(huì)緩存任務(wù)的狀態(tài)變更信息,等到 Master 節(jié)點(diǎn)重新上線后再次匯報(bào)結(jié)果。所以一定程度上也能減少和規(guī)避系統(tǒng)不可用的時(shí)間。

4.6 任務(wù)失敗策略

支持任務(wù)失敗轉(zhuǎn)移、執(zhí)行機(jī)器資源發(fā)現(xiàn)和健康度評(píng)估

作業(yè)失敗的原因很多,有上游表數(shù)據(jù)不對(duì)、腳本配置錯(cuò)誤等主要原因,也有一些臨時(shí)性的原因,比如網(wǎng)絡(luò)原因、外部 DB 負(fù)載原因,可能重試了就好了。所以,為了降低運(yùn)維代價(jià),我們需要可以支持相關(guān)重試策略的配置。當(dāng)然,更加理想的情況是系統(tǒng)可以智能的根據(jù)失敗的原因自動(dòng)采取不同的策略。

 

 

(圖 20:任務(wù)失敗重試配置)

 

 

(圖 21:任務(wù)失敗重試運(yùn)行記錄)

4.7 任務(wù)運(yùn)行分析設(shè)計(jì)說(shuō)明

任務(wù)運(yùn)行自助分析,對(duì)任務(wù)進(jìn)行診斷分析,便于用戶發(fā)現(xiàn)和調(diào)整問(wèn)題。

針對(duì)失敗的任務(wù)提供任務(wù)運(yùn)行日志,方便查看出錯(cuò)問(wèn)題,識(shí)別常見(jiàn)的錯(cuò)誤模式,明確的告訴用戶錯(cuò)誤類型,如果可能,告知解決方案。

 

 

(圖 22:任務(wù)執(zhí)行日志)

針對(duì)成功的任務(wù)提供診斷信息,比如某個(gè)任務(wù)跑得慢,是因?yàn)?GC,還是數(shù)據(jù)量變化,是因?yàn)榧嘿Y源不夠,還是自身業(yè)務(wù)在某個(gè)環(huán)節(jié)被限流?各種情況下,用戶該如何應(yīng)對(duì)解決,能否自動(dòng)給出建議?此外,是否能夠定期自動(dòng)診斷,及時(shí)提醒用戶,敦促用戶自主優(yōu)化?避免問(wèn)題積壓到影響業(yè)務(wù)正常運(yùn)行的時(shí)候才被關(guān)注。

目前我們自研了“華佗”平臺(tái),可以針對(duì)在 hadoop 上執(zhí)行的 hive、mr、spark 任務(wù)進(jìn)行運(yùn)行診斷,對(duì)于出現(xiàn) GC、數(shù)據(jù)傾斜、資源消耗等方面做出綜合的診斷。

 

 

(圖 23:任務(wù)運(yùn)行診斷)

 

 

(圖 24:任務(wù)運(yùn)行診斷詳情)

5. 現(xiàn)狀和未來(lái)

整體來(lái)說(shuō),本文前面所描述的設(shè)計(jì)目標(biāo),平臺(tái)基本上都已經(jīng)實(shí)現(xiàn)了。經(jīng)過(guò) 3 年的開發(fā)和持續(xù)改進(jìn)過(guò)程,當(dāng)前調(diào)度系統(tǒng)日常大概日均承載約 20 萬(wàn)個(gè)周期調(diào)度作業(yè),接入集團(tuán)絕大部分的離線計(jì)算相關(guān)的開發(fā)任務(wù)。平臺(tái)目前趨于穩(wěn)定,由于系統(tǒng)自身原因造成的大規(guī)模系統(tǒng)故障已經(jīng)非常罕見(jiàn)。

但是,由于前期平臺(tái)過(guò)分追求滿足用戶的離線作業(yè)需求,未考慮任務(wù)配置的合理性、優(yōu)先級(jí)和業(yè)務(wù)的關(guān)聯(lián)性以及任務(wù)之間的血緣關(guān)系等,在后期任務(wù)量快速上升的情況下,經(jīng)常出現(xiàn)資源競(jìng)爭(zhēng)激烈、任務(wù)小文件碎片化嚴(yán)重、任務(wù)變更影響和追蹤定位鏈路過(guò)長(zhǎng)等等問(wèn)題。另外在極端環(huán)境下,尤其是在高負(fù)載大流量情況下,遇到系統(tǒng)硬件,內(nèi)存,DB 或網(wǎng)絡(luò)異常問(wèn)題時(shí),能否較好的進(jìn)行容錯(cuò)處理,還是需要經(jīng)歷更多的復(fù)雜場(chǎng)景來(lái)加以磨練的。

未來(lái),我們將從以下幾個(gè)方面進(jìn)行優(yōu)化提升。

用戶層面

在保證現(xiàn)有平臺(tái)功能穩(wěn)定的基礎(chǔ)上,進(jìn)一步豐富平臺(tái)的任務(wù)類型、任務(wù)參數(shù)、任務(wù)樣例、幫助手冊(cè)等,提高平臺(tái)的易用性
提供任務(wù)分析報(bào)表,可視化分析跟蹤任務(wù)的總體運(yùn)行情況、調(diào)度資源、計(jì)算資源、健康度,更好的按不同維度(個(gè)人/系統(tǒng)/全局等)匯總展示給用戶,方便用戶隨時(shí)掌控和調(diào)整自身業(yè)務(wù)
提供任務(wù)異常的快速分析診斷能力,提高用戶的自運(yùn)維能力
能夠定期自動(dòng)診斷,及時(shí)提醒用戶,敦促用戶自主優(yōu)化。避免問(wèn)題積壓到影響業(yè)務(wù)正常運(yùn)行的時(shí)候才被關(guān)注。

調(diào)度層面

準(zhǔn)實(shí)時(shí)調(diào)度,支持短周期任務(wù),作業(yè)計(jì)劃的變更,即時(shí)生效
靈活的調(diào)度策略,觸發(fā)方式需要支持:時(shí)間觸發(fā),依賴觸發(fā)或者混合觸發(fā),支持多種依賴關(guān)系等
系統(tǒng)高可用,組件模塊化,核心組件無(wú)狀態(tài)化
支持用戶權(quán)限管理,能和各種周邊系統(tǒng)和底層存儲(chǔ)計(jì)算框架既有的權(quán)限體系靈活對(duì)接
做好多租戶隔離,內(nèi)建流控,負(fù)載均衡和作業(yè)優(yōu)先級(jí)等機(jī)制
開放系統(tǒng)接口,對(duì)外提供 REST API,便于對(duì)接周邊系統(tǒng)

任務(wù)分析治理層面

系統(tǒng)整體業(yè)務(wù)健康度檢測(cè)和評(píng)估手段改進(jìn)
業(yè)務(wù)診斷專家系統(tǒng)的改進(jìn)
非標(biāo)準(zhǔn)任務(wù)的轉(zhuǎn)換和大任務(wù)流的拆分
優(yōu)化任務(wù)配置

6. 后續(xù)

我司的大數(shù)據(jù)離線任務(wù)開發(fā)調(diào)度平臺(tái)從設(shè)計(jì)、開發(fā)到上線運(yùn)營(yíng)經(jīng)歷了很多問(wèn)題,尤其是在第二次版本改造升級(jí)過(guò)程中,除了自身調(diào)研外,還參考和借鑒了一些其他產(chǎn)品的設(shè)計(jì)理念。平臺(tái)的部分設(shè)計(jì)內(nèi)容和思想?yún)⒖剂?蘑菇街 劉旭輝的《大數(shù)據(jù)平臺(tái)調(diào)度系統(tǒng)架構(gòu)理論和實(shí)踐》的相關(guān)內(nèi)容,在此特別感謝劉旭輝的理論文章,同時(shí)也感謝參與平臺(tái)設(shè)計(jì)開發(fā)的每一位小伙伴的付出。

此次內(nèi)容主要從理論層面講述蘇寧大數(shù)據(jù)離線平臺(tái)的設(shè)計(jì)和實(shí)踐,后續(xù)將對(duì)平臺(tái)內(nèi)部的具體功能的詳細(xì)設(shè)計(jì)、關(guān)鍵代碼實(shí)現(xiàn)做一次分享,敬請(qǐng)期待。

作者:

桑強(qiáng),蘇寧易購(gòu) IT 總部大數(shù)據(jù)平臺(tái)研發(fā)中心離線計(jì)算工具研發(fā)部經(jīng)理。10 年軟件行業(yè)從業(yè)背景,13 年開始接觸大數(shù)據(jù),有著 5 年多的大數(shù)據(jù)應(yīng)用和平臺(tái)開發(fā)經(jīng)驗(yàn),F(xiàn)在負(fù)責(zé)蘇寧大數(shù)據(jù)基礎(chǔ)工具平臺(tái)的研發(fā)工作,主要包括離線計(jì)算工具、實(shí)時(shí)計(jì)算工具、數(shù)據(jù)資產(chǎn)與質(zhì)量平臺(tái)的架構(gòu)、研發(fā)和項(xiàng)目管理等工作。在對(duì)接大數(shù)據(jù)底層和大數(shù)據(jù)業(yè)務(wù)線之間,如何做好平臺(tái)工具化,降低用戶使用難度,支撐大數(shù)據(jù)應(yīng)用的實(shí)踐和研發(fā)上有著豐富的研發(fā)經(jīng)驗(yàn)。

標(biāo)簽: 安全 大數(shù)據(jù) 大數(shù)據(jù)基礎(chǔ) 大數(shù)據(jù)開發(fā) 大數(shù)據(jù)平臺(tái) 大數(shù)據(jù)應(yīng)用 代碼 服務(wù)器 腳本 權(quán)限 權(quán)限管理 數(shù)據(jù)庫(kù) 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:精選Python開源項(xiàng)目Top10!

下一篇:數(shù)據(jù)安全治理的基本思路