開源分佈式調度框架xxl-job

背景:接收項目中有個自研的分佈式調度項目,因此進行調研及瞭解下開源的項目

1、 基礎概念

1. 什麼是定時任務

定時任務形式:每隔必定時間/特定某一時刻執行前端

場景git

  • 訂單審覈、出庫
  • 訂單超時自動取消、支付退款
  • 禮券同步、生成、發放做業
  • 物流信息推送、抓取做業、退換貨處理做業
  • 數據積壓監控、日誌監控、服務可用性探測做業
  • 定時備份數據
  • 金融系統天天的定時結算
  • 數據歸檔、清理做業
  • 報表、離線數據分析做業

2. 定時任務與消息隊列的區別

共同點

  • 異步處理:好比註冊、下單事件
  • 應用解耦: 無論定時任務做業仍是MQ均可以做爲兩個應用之間的齒輪實現應用解耦,這個齒輪能夠中轉數據,固然單體服務不須要考慮這些,服務拆分的時候每每都會考慮。
  • 流量削峯: 雙十一的時候,任務做業和MQ均可以用來扛流量,後端系統根據服務能⼒定時處理訂單或者從MQ抓取訂單抓取到一個訂單到來事件的話觸發處理,對於前端用戶來講看到的結果是已經下單成功了,下單是不受任何影響的。

本質區別

  • 定時任務做業是時間驅動,而MQ是事件驅動。
    時間驅動是不可代替的,好比金融系統每日的利息結算,不是說利息來一條(利息到來事件)就算一下,而每每是經過定時任務批量計算;
  • 定時任務做業更傾向於批處理,MQ傾向於逐條處理。

3. 分佈式和集羣的區別

  • 分佈式
    把一個系統拆分爲多個子系統,每一個子系統負責各自的那部分功能,獨立部署,各司其職。
  • 集羣
    多個實例共同工做,最簡單/最多見的集羣是把一個應用複製多份部署。
  • 區別
    分佈式必定是集羣:集羣就是多個實例一塊兒工做,分佈式將一個系統拆分後那就是多個實例。
    集羣不必定是分佈式:由於複製型集羣不是拆分而是複製。

4. 什麼是分佈式調度

兩層含義:

  • 運行在分佈式集羣環境下的調度任務
    同一個定時任務程序部署多份,只應該有一個定時任務在執行
  • 分佈式調度—>定時任務的分佈式—>定時任務的拆分
    即爲把一個大的做業任務拆分爲多個小的做業任務,同時執行

 

 

 

  • elastic-job:噹噹開發的彈性分佈式任務調度系統,功能豐富強大,採用zookeeper實現分佈式協調,實現任務高可用以及分片,目前是版本2.15,而且能夠支持雲開發
  • Saturn:是惟品會自主研發的分佈式的定時任務的調度平臺,基於噹噹的elastic-job 版本1開發,而且能夠很好的部署到docker容器上。
  • xxl-job: 是大衆點評員工徐雪裏於2015年發佈的分佈式任務調度平臺,是一個輕量級分佈式任務調度框架,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展

XXL-JOB

xxl-job有下面一些特色:github

  • 簡單:支持經過Web頁面對任務進行CRUD操做,操做簡單,一分鐘上手;
  • 動態:支持動態修改任務狀態、啓動/中止任務,以及終止運行中任務,即時生效;
  • 調度中心HA(中心式):調度採用中心式設計,「調度中心」自研調度組件並支持集羣部署,可保證調度中心HA;
  • 執行器HA(分佈式):任務分佈式執行,任務"執行器"支持集羣部署,可保證任務執行HA;
  • 註冊中心: 執行器會週期性自動註冊任務, 調度中心將會自動發現註冊的任務並觸發執行。同時,也支持手動錄入執行器地址;
  • 彈性擴容縮容:一旦有新執行器機器上線或者下線,下次調度時將會從新分配任務;
  • 路由策略:執行器集羣部署時提供豐富的路由策略,包括:第一個、最後一個、輪詢、隨機、一致性HASH、最不常常使用、最近最久未使用、故障轉移、忙碌轉移等;
  • 故障轉移:任務路由策略選擇"故障轉移"狀況下,若是執行器集羣中某一臺機器故障,將會自動Failover切換到一臺正常的執行器發送調度請求。
  • 阻塞處理策略:調度過於密集執行器來不及處理時的處理策略,策略包括:單機串行(默認)、丟棄後續調度、覆蓋以前調度;
  • 事件觸發:除了"Cron方式"和"任務依賴方式"觸發任務執行以外,支持基於事件的觸發任務方式。調度中心提供觸發任務單次執行的API服務,可根據業務事件靈活觸發。
  • 任務進度監控:支持實時監控任務進度;
  • Rolling實時日誌:支持在線查看調度結果,而且支持以Rolling方式實時查看執行器輸出的完整的執行日誌

 

開源地址

https://github.com/xuxueli/xxl-jobdocker

 

我的感受:不管是自研仍是開源,項目總體庫表簡單清晰。系統複雜度在於調用邏輯編排及資源搶佔方式等後端

相關文章
相關標籤/搜索