導(dǎo)語:本文我們從架構(gòu)和技術(shù)實現(xiàn)上來為大家講解騰訊云分布式任務(wù)調(diào)度系統(tǒng)TCT(Tencent Cloud Task)如何實現(xiàn)任務(wù)調(diào)度的精準(zhǔn)實時、穩(wěn)定高效,以及任務(wù)的切分和編排。(編輯:中間件小Q妹)
01
背景介紹
緣起緣滅,自有因果
首先, 我們來思考一些幾個業(yè)務(wù)場景:
-
XX信用卡中心,每月28日凌晨1:00到3:00需要完成全網(wǎng)用戶當(dāng)月的費用清單的生成。
XX服飾,需要每天上午9:00開始向會員推送送生日祝福短信。
XX游戲平臺,新用戶注冊后,需要為當(dāng)前用戶生成定時任務(wù), 在月底清算虛擬貨幣兌換的傭金額度。
XX公司,需要定時執(zhí)行Python腳本,清理掉某文件服務(wù)系統(tǒng)中無效的tmp文件。
XX保險公司,需要每天凌晨2:00統(tǒng)計前一天新增保單數(shù)量,并觸發(fā)報表生成任務(wù),完成后抄送郵件。
類似上述批量處理海量定時任務(wù)的業(yè)務(wù)場景,企業(yè)從單體架構(gòu)向微服務(wù)架構(gòu)、云化服務(wù)架構(gòu)演進過程中已經(jīng)屢見不鮮,基于Quartz的常規(guī)調(diào)度框架已無法應(yīng)對這種分布式場景下的需求,既無法實現(xiàn)任務(wù)調(diào)度的精準(zhǔn)實時、穩(wěn)定高效,也無法實現(xiàn)任務(wù)的切分、編排、失敗補充。因此企業(yè)迫切需要一款一站式分布式調(diào)度任務(wù)解決方案,幫助企業(yè)統(tǒng)一管理繁雜紛亂的定時任務(wù),增強企業(yè)微服平臺服務(wù)化能力,支撐企業(yè)云化服務(wù)轉(zhuǎn)型。
02
現(xiàn)有的開源方案
它山之石可以攻玉 …
在過往的發(fā)展中, 前人留下了不少優(yōu)秀的方案, 各有利弊。常見開源產(chǎn)品: Quartz、XXL-Job、ElasticJob、Antares、SIA-TASK 等。
-
Quartz:該框架應(yīng)用最為廣泛,其完全基于Java實現(xiàn),Quartz 對單個任務(wù)的控制基本做到了極致,以其強大功能和應(yīng)用靈活性,成為開源任務(wù)調(diào)度領(lǐng)域的權(quán)威及同類開源產(chǎn)品如Antares的基石;
XXL-JOB:一個輕量級分布式任務(wù)調(diào)度平臺,其核心設(shè)計目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡單、輕量級、易擴展。XXL-JOB 支持分片,支持簡單任務(wù)依賴,支持子任務(wù)依賴,不支持跨平臺的。
Elastic-Job:支持任務(wù)分片(作業(yè)分片一致性),沒有任務(wù)編排,不支持跨平臺;
SIA-TASK:具有跨平臺、可編排、高可用、無侵入、一致性、異步并行、動態(tài)擴展、實時監(jiān)控等特點。
開源方案的邏輯架構(gòu)圖
開源方案的技術(shù)實現(xiàn)圖
從開源方案的邏輯架構(gòu)和技術(shù)實現(xiàn)上,我們也能直觀的看出開源方案的不足:
-
架構(gòu)方面:調(diào)度器職責(zé)劃分不清晰、系統(tǒng)擴展性不足。面對大規(guī)模虛擬化&復(fù)雜的網(wǎng)絡(luò)環(huán)境,簡單的遠程調(diào)用并不能完成勝任。
性能方面:ZooKeeper集群伴隨任務(wù)量和高頻事件的增多,成為系統(tǒng)性能瓶頸。簡的遠程調(diào)用或者任務(wù)拉取等方案, 滿足不了量大頻高的業(yè)務(wù)訴求。
功能方面:缺乏完整認證鑒權(quán)方面的系統(tǒng)設(shè)計,安全性無法保障。任務(wù)干預(yù)、監(jiān)控告警等系統(tǒng)運維方面能力較弱。
03
TCT簡介
為了解決上述問題,我們進行了深入的探索,并設(shè)計出了一套企業(yè)級的分布式任務(wù)調(diào)度系統(tǒng)TCT(Tencent Cloud Task)。TCT提供一站式分布式調(diào)度任務(wù)解決方案,支持隨機、廣播多種任務(wù)類型,具備任務(wù)分片、任務(wù)編排能力,提供完善的監(jiān)控告警體系。我們結(jié)合了用戶實際的業(yè)務(wù)場景,吸取了歷史經(jīng)驗,主要解決了面幾個核心問題:
以上核心要素,對系統(tǒng)的要求各不相同,可提供如下總結(jié)進行參考:
04
技術(shù)架構(gòu)
技術(shù)架構(gòu)圖
下面我們解釋下架構(gòu)圖中的各個功能模塊:
05
功能架構(gòu)
功能架構(gòu)圖
這樣設(shè)計分布式任務(wù)調(diào)度系統(tǒng),有以下幾個優(yōu)點:
優(yōu)點一:模塊化微服務(wù)架構(gòu)設(shè)計, 職責(zé)清晰
觸發(fā)器
-
只需根據(jù)任務(wù)執(zhí)行規(guī)則,計算解析出不同時點的任務(wù)觸發(fā)事件。通過MQ的實現(xiàn)可靠性投遞(后續(xù)文章會逐步講解如何實現(xiàn)可靠性投遞),起到削峰填谷,避免高峰IO等問題, 提高吞吐量。
通過合理的分片策略和容災(zāi)策略,解決傳統(tǒng)多節(jié)點鎖競爭輪訓(xùn)的解析加載策略,降低對存儲的壓力。
冷熱數(shù)據(jù)隔離加載機制,進一步降低對存儲壓力和系統(tǒng)開銷。
根據(jù)高頻的任務(wù)執(zhí)行策略,采取預(yù)加載策略和動態(tài)調(diào)整預(yù)加載算法,解決高頻觸發(fā)導(dǎo)致系統(tǒng)負載高的問題。
調(diào)度器
-
整個任務(wù)調(diào)度系統(tǒng)中控制邏輯最為復(fù)雜的組件,IO密集型組件。
通過訂閱MQ消息事件,與觸發(fā)器解耦,有效提升系統(tǒng)的吞吐。
專注于任務(wù)調(diào)度的邏輯控制,如任務(wù)執(zhí)行調(diào)度、負載均衡、容錯、限流、計費等。
接入網(wǎng)關(guān)
-
獨立承擔(dān)客戶端的接入認證和鑒權(quán),提供有效的權(quán)限校驗策略。
負責(zé)上下行信道的回話管理,與復(fù)雜的業(yè)務(wù)邏輯完成解耦。
客戶端節(jié)點及服務(wù)節(jié)點上下線自動探測感知機制,有效實現(xiàn)會話管理。
數(shù)據(jù)透傳及路由,實現(xiàn)組件內(nèi)閉環(huán)。
配合SDK/Agent側(cè)設(shè)計,有效避免了單節(jié)點連接數(shù)瓶頸以及服務(wù)節(jié)點冷起場景下的高并發(fā)tcp建立連接問題。
優(yōu)點二:無狀態(tài)化設(shè)計,簡便水平擴展
觸發(fā)器
-
通過有效的分片策略,在實現(xiàn)避免觸發(fā)壓力集中化的情況下,可快捷的完成服務(wù)的彈性擴縮容,實現(xiàn)近似無狀態(tài)的水平擴展。
調(diào)度器
-
完全無狀態(tài)的設(shè)計方案,無需考慮任務(wù)的回源問題,實現(xiàn)無狀態(tài)的水平擴容。
接入網(wǎng)關(guān)
-
完全無狀態(tài)的設(shè)計方案,可實現(xiàn)無狀態(tài)的水平擴容,實現(xiàn)理論上TCP連接數(shù)無上限。
優(yōu)點三:功能完備
靈活的觸發(fā)規(guī)則
-
支持Cron表達式,例如 * 0/5 * * * ? 等。
特定周期頻率的觸發(fā)規(guī)則,例如 間隔36分鐘等。
便捷的管理能力,提供暫停、恢復(fù)、停止、重試等多種多樣的管控能力。
任務(wù)管理
支持三種執(zhí)行方式
-
隨機節(jié)點執(zhí)行:選擇集群中一個可用的執(zhí)行節(jié)點執(zhí)行調(diào)度任務(wù)。適用場景:定時對賬。
廣播執(zhí)行:在集群中所有的執(zhí)行節(jié)點分發(fā)調(diào)度任務(wù)并執(zhí)行。適用場景:批量運維。
分片執(zhí)行:按照用戶自定義分片邏輯進行拆分,分發(fā)到集群中不同節(jié)點并行執(zhí)行,提升資源利用效率。適用場景:海量日志統(tǒng)計。
任務(wù)調(diào)度執(zhí)行方式
支持三種觸發(fā)方式
-
手動觸發(fā):用戶在任務(wù)管理列表選擇特定任務(wù)手動執(zhí)行一次,調(diào)度器立即進行任務(wù)分發(fā),并產(chǎn)生一個執(zhí)行批次。適用場景:周期執(zhí)行任務(wù)補充。
周期觸發(fā):通過設(shè)置任務(wù)觸發(fā)的間隔時間來設(shè)置任務(wù)的執(zhí)行時間;可支持 cron 表達式所不支持的周期設(shè)置。適用場景:定時備份。
工作流觸發(fā):工作流是一組任務(wù)集合,可以編排任務(wù)的上下游邏輯依賴,進行任務(wù)觸發(fā)。適用場景:海量數(shù)據(jù)處理,如數(shù)據(jù)采集,數(shù)據(jù)過濾,數(shù)據(jù)清洗,數(shù)據(jù)聚合的流程編排。
任務(wù)觸發(fā)方式
日志溯源能力
通過日志服務(wù), 方便用戶查詢?nèi)蝿?wù)執(zhí)行日志。用戶可以通過執(zhí)行記錄所有任務(wù)的執(zhí)行批次詳情,能夠?qū)Ξ?dāng)前狀態(tài)為執(zhí)行中的批次進行停止執(zhí)行操作,能夠?qū)Ξ?dāng)前已經(jīng)終止的批次觸發(fā)重新執(zhí)行操作;點擊批次ID進入該批次的執(zhí)行詳情,點擊任務(wù)ID進入該任務(wù)的執(zhí)行批次列表,點擊執(zhí)行部署組進入資源詳情列表。
日志查詢
支持復(fù)雜的任務(wù)編排能力
可以實現(xiàn)多種場景的任務(wù)工作流。通過構(gòu)建調(diào)度任務(wù)的上下游依賴關(guān)系完成復(fù)雜的任務(wù)調(diào)度邏輯。適用于大數(shù)據(jù)流程處理、任務(wù)執(zhí)行工單、批量運維流程編排等應(yīng)用場景。
任務(wù)編排
06
總結(jié)
一個平臺性的系統(tǒng),從產(chǎn)品功能到技術(shù)架構(gòu)都存在著方方面面的挑戰(zhàn),需要層層抽象和逐步優(yōu)化才能完成一個成熟產(chǎn)品落地。在大數(shù)據(jù)時代,面對海量的數(shù)據(jù)和用戶規(guī)模,任何一種架構(gòu)設(shè)計,都面臨著網(wǎng)絡(luò)響應(yīng)、 容錯、冪等、數(shù)據(jù)可靠性/一致性等諸多問題。
對于平臺而言,任務(wù)的可靠性是第一優(yōu)先級需要考慮的,次之任務(wù)執(zhí)行的時效性。合理地進行功能模塊化拆分,針對不同場景,設(shè)計不同的擴展方案,保證SLA的前提下提升系統(tǒng)整體吞吐,實現(xiàn)可靠有效觸達,應(yīng)對頻高量大的業(yè)務(wù)場景。
對于用戶而言,多樣化的管理手段、多維度的運行指標(biāo)查詢, 全方位的鏈路監(jiān)控則是用戶追求的,只有讓用戶從復(fù)雜混亂的定時任務(wù)場景中抽離出來,才能更加專注在業(yè)務(wù)研發(fā)。
-
如何寫出簡潔的 CQRS 代碼?
程序中的“零成本抽象”如何實現(xiàn)?
同程藝龍云原生 K8s 落地實踐
比特幣減半6行代碼解讀
深入解讀HTTP3的原理及應(yīng)用
本文由騰訊云中間件供稿,技術(shù)原創(chuàng)及架構(gòu)實踐文章,歡迎通過公眾號菜單「聯(lián)系我們」進行投稿。
高可用架構(gòu)改變互聯(lián)網(wǎng)的構(gòu)建方式
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。