當當開源elastic-job,分布式作業調度框架

xdld 9年前發布 | 49K 次閱讀 elastic-job

當當近期開源了分布式作業調度框架 elastic-job 項目。

elastic-job 是當當內部應用框架 ddframe 中 dd-job 的作業模塊中分離出來的分布式彈性作業框架。去掉了 dd-job 中監控和 ddframe 接入規范部分。ddframe 其他模塊也有可獨立開源的部分,之前當當曾開源過 dd-soa 的基石模塊 DubboX。

elastic-job 和 ddframe 關系見下圖:查看大圖

當當開源elastic-job,分布式作業調度框架

Elastic-job 的主要包括以下功能。

  1. 定時任務:基于成熟的定時任務作業框架 Quartz cron 表達式執行定時任務。
  2. 作業注冊中心:基于 Zookeeper 和其客戶端 Curator 實現的全局作業注冊控制中心。用于注冊,控制和協調分布式作業執行。
  3. 作業分片:將一個任務分片成為多個小任務項在多服務器上同時執行。
  4. 彈性擴容縮容:運行中的作業服務器崩潰,或新增加n臺作業服務器,作業框架將在下次作業執行前重新分片,不影響當前作業執行。
  5. 支持多種作業執行模式:支持 OneOff(類似 Quartz 原生作業),Perpetual(類似 TbSchedule 作業)和 SequencePerpetual(類似 TbSchedule 和 kafka 的合并,但處理時維持分片順序)三種作業模式。
  6. 失效轉移:運行中的作業服務器崩潰不會導致重新分片,只會在下次作業啟動時分片。啟用失效轉移功能可以在本次作業執行過程中,監測其他作業服務器空閑,抓取未完成的孤兒分片項執行。
  7. 運行時狀態收集:監控作業運行時狀態,統計最近一段時間處理的數據成功和失敗數量,記錄作業上次運行開始時間,結束時間和下次運行時間。
  8. 作業停止,恢復和禁用:用于操作作業啟停,并可以禁止某作業運行(上線時常用)。
  9. 被錯過執行的作業重觸發:自動記錄錯過執行的作業,并在上次作業完成后自動觸發。可參考 Quartz 的 misfire。
  10. 多線程快速處理數據:使用多線程處理抓取到的數據,提升吞吐量。
  11. 冪等性:重復作業任務項判定,不重復執行已運行的作業任務項。由于開啟冪等性需要監聽作業運行狀態,對瞬時反復運行的作業對性能有較大影響。
  12. 容錯處理:作業服務器與 Zookeeper 服務器通信失敗則立即停止作業運行,防止作業注冊中心將失效的分片分項配給其他作業服務器,而當前作業服務器仍在執行任務,導致重復執行。
  13. Spring 支持:支持 spring 容器,自定義命名空間,支持占位符。
  14. 運維平臺:提供運維界面,可以管理作業和注冊中心。
  15. </ol>

    上面列出的功能已在當當內部穩定使用,現在開源,供大家參考和指正。也希望感興趣的朋友也來為 elastic-job 貢獻更多的改進。未來也將會開源更多的 ddframe 子模塊。

    注:elastic-job 嚴格遵循 Apache 2.0 許可證的要求。

    附:ddframe 簡介

    ddframe 是針對技術部 Java 體系提供的統一應用開發框架。目的:

    1. 分離技術和業務,封裝技術細節,將應用開發人員的精力集中在業務開發上;
    2. 可快速配置啟動,降低新項目搭建框架的成本;
    3. 統一框架,將項目分為業務+框架+云平臺+治理;
    4. 提供統一的編碼,配置,監控,日志的標準和規范;
    5. 組件可插拔,不強制業務開發人員使用框架的全部內容;
    6. 靈活的提供定制化功能,框架不限制引入其他技術組件;
    7. 模板代碼自動化生成,降低書寫難度;
    8. 提供獨立的工具箱和分布式技術組件產品;
    9. 推動 SOA 以及微服務進程。
    10. </ol>

      來自: InfoQ
       本文由用戶 xdld 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
       轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
       本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!