探尋繁雜定時任務的解決方案:分佈式任務調度系統

導語:本文咱們從架構和技術實現上來爲你們講解騰訊雲分佈式任務調度系統TCT(Tencent Cloud Task)如何實現任務調度的精準實時、穩定高效,以及任務的切分和編排。(編輯:中間件小Q妹)算法

背景介紹

緣起緣滅,自有因果安全

首先, 咱們來思考一些幾個業務場景:微信

  • XX信用卡中心,每個月28日凌晨1:00到3:00須要完成全網用戶當月的費用清單的生成。
  • XX服飾,須要天天上午9:00開始向會員推送送生日祝福短信。
  • XX遊戲平臺,新用戶註冊後,須要爲當前用戶生成定時任務, 在月底清算虛擬貨幣兌換的佣金額度。
  • XX公司,須要定時執行Python腳本,清理掉某文件服務系統中無效的tmp文件。
  • XX保險公司,須要天天凌晨2:00統計前一天新增保單數量,並觸發報表生成任務,完成後抄送郵件。

相似上述批量處理海量定時任務的業務場景,在企業從單體架構向微服務架構、雲化服務架構演進過程當中已經家常便飯,基於Quartz的常規調度框架沒法應對這種分佈式場景下的需求,既沒法實現任務調度的精準實時、穩定高效,也沒法實現任務的切分、編排、失敗補充。所以企業迫切須要一款一站式分佈式調度任務解決方案,幫助企業統一管理繁雜紛亂的定時任務,加強企業微服平臺服務化能力,支撐企業雲化服務轉型。markdown

現有的開源方案

它山之石能夠攻玉 ...網絡

在過往的發展中, 前人留下了很多優秀的方案, 各有利弊。常見開源產品: Quartz、XXL-Job、ElasticJob、Antares、SIA-TASK 等。架構

  • Quartz:該框架應用最爲普遍,其徹底基於Java實現,Quartz 對單個任務的控制基本作到了極致,以其強大功能和應用靈活性,成爲開源任務調度領域的權威及同類開源產品如Antares的基石;
  • XXL-JOB:一個輕量級分佈式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。XXL-JOB 支持分片,支持簡單任務依賴,支持子任務依賴,不支持跨平臺的。
  • Elastic-Job:支持任務分片(做業分片一致性),沒有任務編排,不支持跨平臺;
  • SIA-TASK:具備跨平臺、可編排、高可用、無侵入、一致性、異步並行、動態擴展、實時監控等特色。

開源方案的邏輯架構圖

開源方案的技術實現圖

從開源方案的邏輯架構和技術實現上,咱們也能直觀的看出開源方案的不足:併發

  • 架構方面:調度器職責劃分不清晰、系統擴展性不足。面對大規模虛擬化&複雜的網絡環境,簡單的遠程調用並不能完成勝任。
  • 性能方面:ZooKeeper集羣伴隨任務量和高頻事件的增多,成爲系統性能瓶頸。簡的遠程調用或者任務拉取等方案, 知足不了量大頻高的業務訴求。
  • 功能方面:缺少完整認證鑑權方面的系統設計,安全性沒法保障。任務干預、監控告警等系統運維方面能力較弱。

TCT簡介

爲了解決上述問題,咱們進行了深刻的探索,並設計出了一套企業級的分佈式任務調度系統TCT(Tencent Cloud Task)。TCT提供一站式分佈式調度任務解決方案,支持隨機、廣播多種任務類型,具有任務分片、任務編排能力,提供完善的監控告警體系。咱們結合了用戶實際的業務場景,吸收了歷史經驗,主要解決了面幾個核心問題:負載均衡

以上核心要素,對系統的要求各不相同,可提供以下總結進行參考:框架

核心要素 功能說明 系統特性
任務觸發 解析並計算任務的觸發時點, 生成觸發事件 CPU密集型
任務調度 承擔任務派發規則, 管理任務運行生命週期 IO密集型
任務觸達 承擔任務事件的觸達和獲取, 管理任務執行信息的獲取管道 網絡IO型
任務執行 任務執行單元, 執行真實的業務邏輯 取決於業務場景

技術架構

架構, 老是在需求中不斷演進...運維

技術架構圖

下面咱們解釋下架構圖中的各個功能模塊:

功能模塊 描述說明
管控器(Admin) 用戶控制檯, 提供任務管理和干預界面, 配置任務運維指標等
觸發器(Trigger) 解析任務, 生成觸發事件
調度器(Scheduler) 分配任務, 管理任務運行生命週期
接入網關(AGW) 認證鑑權, 回話管理, 任務信息透傳等
SDK / Agent 獲取任務執行單元, 執行任務邏輯

功能架構

功能架構圖 這樣設計分佈式任務調度系統,有如下幾個優勢:

優勢一:模塊化微服務架構設計, 職責清晰

觸發器

  • 只需根據任務執行規則,計算解析出不一樣時點的任務觸發事件。經過MQ的實現可靠性投遞(後續文章會逐步講解如何實現可靠性投遞),起到削峯填谷,避免高峯IO等問題, 提升吞吐量。
  • 經過合理的分片策略和容災策略,解決傳統多節點鎖競爭輪訓的解析加載策略,下降對存儲的壓力。
  • 冷熱數據隔離加載機制,進一步下降對存儲壓力和系統開銷。 根據高頻的任務執行策略,採起預加載策略和動態調整預加載算法,解決高頻觸發致使系統負載高的問題。

調度器

  • 整個任務調度系統中控制邏輯最爲複雜的組件,IO密集型組件。
  • 經過訂閱MQ消息事件,與觸發器解耦,有效提高系統的吞吐。 專一於任務調度的邏輯控制,如任務執行調度、負載均衡、容錯、限流、計費等。

接入網關

  • 獨立承擔客戶端的接入認證和鑑權,提供有效的權限校驗策略。
  • 負責上下行信道的回話管理,與複雜的業務邏輯完成解耦。
  • 客戶端節點及服務節點上下線自動探測感知機制,有效實現會話管理。
  • 數據透傳及路由,實現組件內閉環。
  • 配合SDK/Agent側設計,有效避免了單節點鏈接數瓶頸以及服務節點冷起場景下的高併發tcp創建鏈接問題。

優勢二:無狀態化設計,簡便水平擴展

觸發器

經過有效的分片策略,在實現避免觸發壓力集中化的狀況下,可快捷的完成服務的彈性擴縮容,實現近似無狀態的水平擴展。

調度器

徹底無狀態的設計方案,無需考慮任務的回源問題,實現無狀態的水平擴容。

接入網關

徹底無狀態的設計方案,可實現無狀態的水平擴容,實現理論上TCP鏈接數無上限。

優勢三:功能完備

靈活的觸發規則

  • 支持Cron表達式,例如 * 0/5 * * * ? 等。
  • 特定週期頻率的觸發規則,例如 間隔36分鐘等。

便捷的管理能力,提供暫停、恢復、中止、重試等多種多樣的管控能力。

任務管理

支持三種執行方式

  • 隨機節點執行:選擇集羣中一個可用的執行節點執行調度任務。適用場景:定時對帳。
  • 廣播執行:在集羣中全部的執行節點分發調度任務並執行。適用場景:批量運維。
  • 分片執行:按照用戶自定義分片邏輯進行拆分,分發到集羣中不一樣節點並行執行,提高資源利用效率。適用場景:海量日誌統計。

任務調度執行方式

支持三種觸發方式

  • 手動觸發:用戶在任務管理列表選擇特定任務手動執行一次,調度器當即進行任務分發,併產生一個執行批次。適用場景:週期執行任務補充。
  • 週期觸發:經過設置任務觸發的間隔時間來設置任務的執行時間;可支持 cron 表達式所不支持的週期設置。適用場景:定時備份。
  • 工做流觸發:工做流是一組任務集合,能夠編排任務的上下游邏輯依賴,進行任務觸發。適用場景:海量數據處理,如數據採集,數據過濾,數據清洗,數據聚合的流程編排。

任務觸發方式

日誌溯源能力

經過日誌服務, 方便用戶查詢任務執行日誌。用戶能夠經過執行記錄全部任務的執行批次詳情,可以對當前狀態爲執行中的批次進行中止執行操做,可以對當前已經終止的批次觸發從新執行操做;點擊批次ID進入該批次的執行詳情,點擊任務ID進入該任務的執行批次列表,點擊執行部署組進入資源詳情列表。

日誌查詢

支持複雜的任務編排能力

能夠實現多種場景的任務工做流。經過構建調度任務的上下游依賴關係完成複雜的任務調度邏輯。適用於大數據流程處理、任務執行工單、批量運維流程編排等應用場景。

任務編排

總結

一個平臺性的系統,從產品功能到技術架構都存在着方方面面的挑戰,須要層層抽象和逐步優化才能完成一個成熟產品落地。在大數據時代,面對海量的數據和用戶規模,任何一種架構設計,都面臨着網絡響應、 容錯、冪等、數據可靠性/一致性等諸多問題。

對於平臺而言,任務的可靠性是第一優先級須要考慮的,次之任務執行的時效性。合理地進行功能模塊化拆分,針對不一樣場景,設計不一樣的擴展方案,保證SLA的前提下提高系統總體吞吐,實現可靠有效觸達,應對頻高量大的業務場景。

對於用戶而言,多樣化的管理手段、多維度的運行指標查詢, 全方位的鏈路監控則是用戶追求的,只有讓用戶從複雜混亂的定時任務場景中抽離出來,才能更加專一在業務研發。


歡迎掃碼關注咱們的微信公衆號,期待與你相遇~

公衆號不按期有贈書、抽獎(騰訊公仔/T桖)的活動,快來關注咱們並添加中間件小Q妹微信吧

相關文章
相關標籤/搜索