導語:本文咱們從架構和技術實現上來爲你們講解騰訊雲分佈式任務調度系統TCT(Tencent Cloud Task)如何實現任務調度的精準實時、穩定高效,以及任務的切分和編排。(編輯:中間件小Q妹)算法
緣起緣滅,自有因果安全
首先, 咱們來思考一些幾個業務場景:微信
相似上述批量處理海量定時任務的業務場景,在企業從單體架構向微服務架構、雲化服務架構演進過程當中已經家常便飯,基於Quartz的常規調度框架沒法應對這種分佈式場景下的需求,既沒法實現任務調度的精準實時、穩定高效,也沒法實現任務的切分、編排、失敗補充。所以企業迫切須要一款一站式分佈式調度任務解決方案,幫助企業統一管理繁雜紛亂的定時任務,加強企業微服平臺服務化能力,支撐企業雲化服務轉型。markdown
它山之石能夠攻玉 ...網絡
在過往的發展中, 前人留下了很多優秀的方案, 各有利弊。常見開源產品: Quartz、XXL-Job、ElasticJob、Antares、SIA-TASK 等。架構
從開源方案的邏輯架構和技術實現上,咱們也能直觀的看出開源方案的不足:併發
爲了解決上述問題,咱們進行了深刻的探索,並設計出了一套企業級的分佈式任務調度系統TCT(Tencent Cloud Task)。TCT提供一站式分佈式調度任務解決方案,支持隨機、廣播多種任務類型,具有任務分片、任務編排能力,提供完善的監控告警體系。咱們結合了用戶實際的業務場景,吸收了歷史經驗,主要解決了面幾個核心問題:負載均衡
以上核心要素,對系統的要求各不相同,可提供以下總結進行參考:框架
核心要素 | 功能說明 | 系統特性 |
---|---|---|
任務觸發 | 解析並計算任務的觸發時點, 生成觸發事件 | CPU密集型 |
任務調度 | 承擔任務派發規則, 管理任務運行生命週期 | IO密集型 |
任務觸達 | 承擔任務事件的觸達和獲取, 管理任務執行信息的獲取管道 | 網絡IO型 |
任務執行 | 任務執行單元, 執行真實的業務邏輯 | 取決於業務場景 |
架構, 老是在需求中不斷演進...運維
下面咱們解釋下架構圖中的各個功能模塊:
功能模塊 | 描述說明 |
---|---|
管控器(Admin) | 用戶控制檯, 提供任務管理和干預界面, 配置任務運維指標等 |
觸發器(Trigger) | 解析任務, 生成觸發事件 |
調度器(Scheduler) | 分配任務, 管理任務運行生命週期 |
接入網關(AGW) | 認證鑑權, 回話管理, 任務信息透傳等 |
SDK / Agent | 獲取任務執行單元, 執行任務邏輯 |
經過有效的分片策略,在實現避免觸發壓力集中化的狀況下,可快捷的完成服務的彈性擴縮容,實現近似無狀態的水平擴展。
徹底無狀態的設計方案,無需考慮任務的回源問題,實現無狀態的水平擴容。
徹底無狀態的設計方案,可實現無狀態的水平擴容,實現理論上TCP鏈接數無上限。
便捷的管理能力,提供暫停、恢復、中止、重試等多種多樣的管控能力。
經過日誌服務, 方便用戶查詢任務執行日誌。用戶能夠經過執行記錄全部任務的執行批次詳情,可以對當前狀態爲執行中的批次進行中止執行操做,可以對當前已經終止的批次觸發從新執行操做;點擊批次ID進入該批次的執行詳情,點擊任務ID進入該任務的執行批次列表,點擊執行部署組進入資源詳情列表。
能夠實現多種場景的任務工做流。經過構建調度任務的上下游依賴關係完成複雜的任務調度邏輯。適用於大數據流程處理、任務執行工單、批量運維流程編排等應用場景。
一個平臺性的系統,從產品功能到技術架構都存在着方方面面的挑戰,須要層層抽象和逐步優化才能完成一個成熟產品落地。在大數據時代,面對海量的數據和用戶規模,任何一種架構設計,都面臨着網絡響應、 容錯、冪等、數據可靠性/一致性等諸多問題。
對於平臺而言,任務的可靠性是第一優先級須要考慮的,次之任務執行的時效性。合理地進行功能模塊化拆分,針對不一樣場景,設計不一樣的擴展方案,保證SLA的前提下提高系統總體吞吐,實現可靠有效觸達,應對頻高量大的業務場景。
對於用戶而言,多樣化的管理手段、多維度的運行指標查詢, 全方位的鏈路監控則是用戶追求的,只有讓用戶從複雜混亂的定時任務場景中抽離出來,才能更加專一在業務研發。
歡迎掃碼關注咱們的微信公衆號,期待與你相遇~
公衆號不按期有贈書、抽獎(騰訊公仔/T桖)的活動,快來關注咱們並添加中間件小Q妹微信吧