輕量級分布式任務調度框架(一、LTS簡介、特點、工作流程)


LTS

輕量級分布式任務調度框架(Light Task Schedule)

(1) LTS簡介

LTS(light-task-scheduler)主要用於解決分布式任務調度問題,支持實時任務定時任務Cron任務有較好的伸縮性,擴展性,健壯穩定性而被多家公司使用,同時也希望開源愛好者一起貢獻。

(2) LTS框架概況

(2.1) LTS 四種節點:

  • JobClient:主要負責提交任務, 並接收任務執行反饋結果。

  • JobTracker:負責接收並分配任務,任務調度。

  • TaskTracker:負責執行任務,執行完反饋給JobTracker。

  • LTS-Admin:主要負責節點管理,任務隊列管理,監控管理等。
    詳解:
    其中JobClient,JobTracker,TaskTracker節點都是無狀態的。 可以部署多個動態的進行刪減,來實現負載均衡,實現更大的負載量, 並且框架采用FailStore策略使LTS具有很好的容錯能力

LTS注冊中心提供多種實現(Zookeeper,redis等),注冊中心進行節點信息暴露,master選舉。(Mongo or Mysql)存儲任務隊列和任務執行日志, netty or mina做底層通信, 並提供多種序列化方式fastjson, hessian2, java等。

(2.2) LTS支持任務類型

  • 實時任務:提交了之后立即就要執行的任務。
  • 定時任務:在指定時間點執行的任務,譬如 今天3點執行(單次)。
  • Cron任務:周期性任務,CronExpression,和quartz類似(但是不是使用quartz實現的)譬如 0 0/1 * * * ?

支持動態修改任務參數,任務執行時間等設置,支持后台動態添加任務,支持Cron任務暫停,支持手動停止正在執行的任務(有條件),支持任務的監控統計,支持各個節點的任務執行監控,JVM監控等等.

(3) LTS架構圖


組件說明:

  1. 節點組

NodeGroup:一個節點組等同於一個小的集群,同一個節點組中的各個節點是對等的,等效的,對外提供相同的服務。

每個節點組中都有一個master節點,這個master節點是由LTS動態選出來的,當一個master節點掛掉之后,LTS會立馬選出另外一個master節點,框架提供API監聽接口給用戶。

  1. FailStore

顧名思義,這個主要是用於失敗了存儲的,主要用於節點容錯,當遠程數據交互失敗之后,存儲在本地,等待遠程通信恢復的時候,再將數據提交。

FailStore主要用戶JobClient的任務提交,TaskTracker的任務反饋,TaskTracker的業務日志傳輸的場景下。

FailStore目前提供幾種實現:leveldb,rocksdb,berkeleydb,mapdb,ltsdb,用於可以自由選擇使用哪種,用戶也可以采用SPI擴展使用自己的實現。

(4) LTS-Admin新版界面預覽

目前后台帶有由ztajy提供的一個簡易的認證功能. 用戶名密碼在auth.cfg中,用戶自行修改.

(5) LTS特性


(5.1) Spring支持

LTS可以完全不用Spring框架,但是考慮到很用用戶項目中都是用了Spring框架,所以LTS也提供了對Spring的支持,包括Xml和注解,引入lts-spring.jar即可。


(5.2) 業務日志記錄器

在TaskTracker端提供了業務日志記錄器,供應用程序使用,通過這個業務日志器,可以將業務日志提交到JobTracker,這些業務日志可以通過任務ID串聯起來,可以在LTS-Admin中實時查看任務的執行進度。


(5.3) SPI擴展支持

SPI擴展可以達到零侵入,只需要實現相應的接口,並實現即可被LTS使用,目前開放出來的擴展接口有對任務隊列的擴展,用戶可以不選擇使用mysql或者mongo作為隊列存儲,也可以自己實現。對業務日志記錄器的擴展,目前主要支持console,mysql,mongo,用戶也可以通過擴展選擇往其他地方輸送日志。


(5.4) 故障轉移

當正在執行任務的TaskTracker宕機之后,JobTracker會立馬將分配在宕機的TaskTracker的所有任務再分配給其他正常的TaskTracker節點執行。


(5.5) 節點監控

可以對JobTracker,TaskTracker節點進行資源監控,任務監控等,可以實時的在LTS-Admin管理后台查看,進而進行合理的資源調配。


(5.6) 多樣化任務執行結果支持

LTS框架提供四種執行結果支持EXECUTE_SUCCESS,EXECUTE_FAILED,EXECUTE_LATER,EXECUTE_EXCEPTION,並對每種結果采取相應的處理機制,譬如重試。

EXECUTE_SUCCESS: 執行成功,這種情況,直接反饋客戶端(如果任務被設置了要反饋給客戶端)。

EXECUTE_FAILED執行失敗,這種情況,直接反饋給客戶端,不進行重試。

EXECUTE_LATER稍后執行(需要重試),這種情況,不反饋客戶端,重試策略采用1min,2min,3min的策略,默認最大重試次數為10次,用戶可以通過參數設置修改這個重試次數。

EXECUTE_EXCEPTION執行異常, 這中情況也會重試(重試策略,同上)


(5.7) FailStore容錯

采用FailStore機制來進行節點容錯,Fail And Store,不會因為遠程通信的不穩定性而影響當前應用的運行。具體FailStore說明,請參考概念說明中的FailStore說明。


(6) LTS工作流程

下圖是一個標准的實時任務執行流程。

解析:

  1. JobClient 提交一個 任務 給 JobTracker, 這里我提供了兩種客戶端API, 一種是如果JobTracker 不存在或者提交失敗,直接返回提交失敗。另一種客戶端是重試客戶端, 如果提交失敗,先存儲到本地FailStore(可以使用NFS來達到同個節點組共享leveldb文件的目的,多線程訪問,已經做了文件鎖處理),返回 給客戶端提交成功的信息,待JobTracker可用的時候,再將任務提交。

  2. JobTracker收到JobClient提交來的任務,將任務存入任務隊列。JobTracker等待TaskTracker的Pull請求,然后將任務Push給TaskTracker去執行。

  3. TaskTracker收到JobTracker分發來的任務之后,然后從線程池中拿到一個線程去執行。執行完畢之后,再反饋任務執行結果給 JobTracker(成功or 失敗[失敗有失敗錯誤信息]),如果發現JobTacker不可用,那么存儲本地FailStore,等待TaskTracker可用的時候再反饋。反饋 結果的同時,詢問JobTacker有沒有新的任務要執行。

  4. JobTacker收到TaskTracker節點的任務結果信息。根據任務信息決定要不要反饋給客戶端。不需要反饋的直接刪除,需要反饋的,直接反饋,反饋失敗進入FeedbackQueue, 等待重新反饋。

  5. JobClient收到任務執行結果,進行自己想要的邏輯處理。


輕量級分布式任務調度框架LTS系列

輕量級分布式任務調度框架(一、LTS簡介、特點、工作流程)
輕量級分布式任務調度框架(二、LTS編譯、打包、部署)
輕量級分布式任務調度框架(三、LTS簡單集成springboot項目)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM