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