停滯數年後,ElasticJob 攜首個 Apache 版本 3.0.0-alpha 回歸

csdn 發佈 2020-08-10T23:14:30+00:00

作者 | 張亮,Apache ShardingSphere PMC Chair責編 | 夕顏頭圖 | CSDN出品 | CSDN(ID:CSDNnews)在成為 Apache ShardingSphere 的子項目的幾個月時間裡,ElasticJob 社區在修復與合併了535個

作者 | 張亮,Apache ShardingSphere PMC Chair

責編 | 夕顏

頭圖 | CSDN

出品 | CSDN(ID:CSDNnews)

在成為 Apache ShardingSphere 的子項目的幾個月時間裡,ElasticJob 社區在修復與合併了535個 issue 和 pull request 之後,發布了加入 Apache 軟體基金會後的第一個正式版本:3.0.0-alpha。


背景

ElasticJob(https://github.com/apache/shardingsphere-elasticjob)是面向網際網路生態和海量任務的分布式調度解決方案,由兩個相互獨立的子項目 ElasticJob-Lite 和 ElasticJob-Cloud 組成。它誕生於 2015年,當時業界雖然有 QuartZ 等出類拔萃的定時任務框架,但缺乏分布式方面的探索。分布式調度雲平台產品的缺失,使得 ElasticJob 從出現伊始便備受關注。它有效地彌補了作業在分布式領域的短板,並且提供了一站式的自動化運維管控端,各個產品使用統一的作業 API,開發者僅需一次開發,即可隨意部署。

ElasticJob 在技術選型時,選擇站在了巨人的肩膀上而不是重複製造輪子的理念,將定時任務事實標準的 QuartZ 與 分布式協調的利器 ZooKeeper 完美結合,快速而穩定的搭建了全新概念的分布式調度框架。


ElasticJob調度模型

ElasticJob 的調度模型劃分為支持線程級別調度的進程內調度 ElasticJob-Lite,和進程級別調度的ElasticJob-Cloud。


進程內調度

ElasticJob-Lite 是面向進程內的線程級調度框架。它能夠與 Spring 、Dubbo等 Java 框架配合使用,在作業中可自由使用 Spring 注入的 Bean,如數據源連接池、Dubbo 遠程服務等,更加方便地貼合業務開發。

ElasticJob-Lite與業務應用部署在一起,其生命周期與業務應用保持一致,是典型的嵌入式輕量級架構。ElasticJob-Lite 非常適合於資源使用穩定、部署架構簡單的普通 Java 應用,可以理解為 Java 開發框架。

ElasticJob-Lite 本身是無中心化架構,無需獨立的中心化調度節點,分布式下的每個任務節點均是以自調度的方式適時的調度作業。任務之間只需要一個註冊中心來對分布式場景下的任務狀態進行協調即可,目前支持 ZooKeeper 作為註冊中心。

架構圖如下:

通過圖中可看出,ElasticJob-Lite 的分布式作業節點通過選舉獲取主節點,並通過主節點進行分片。分片完畢後,主節點與從節點並無二致,均以自我調度的方式執行任務。

進程級調度

ElasticJob-Cloud 擁有進程內調度和進程級別調度兩種方式。由於 ElasticJob-Cloud 能夠對作業伺服器的資源進行控制,因此其作業類型可劃分為常駐任務和瞬時任務。常駐任務類似於ElasticJob-Lite,是進程內調度;瞬時任務則完全不同,它充分的利用了資源分配的削峰填谷能力,是進程級的調度,每次任務的會啟動全新的進程處理。

ElasticJob-Cloud 需要通過 Mesos 對資源進行控制,並且通過部署在 Mesos Master的調度器進行任務和資源的分配。Cloud採用中心化架構,將調度中心的高可用交由 Mesos管理。

它的架構圖如下:

通過圖中可看出,ElasticJob-Cloud 除了擁有 Lite 的全部能力之外,還擁有資源分配和任務分發的能力。它將作業的開發、打包、分發、調度、治理、分片等一些列的生命周期完全託管,是真正的作業雲調度系統。

相比於 ElasticJob-Lite 的簡單易用,ElasticJob-Cloud 對 Mesos 的強依賴增加了系統部署的複雜度,因此更加適合大規模的作業系統。


功能列表

ElasticJob 功能主要有彈性調度、資源分配、作業治理和可視化管控。

  • 彈性調度

彈性調度是 ElasticJob 最重要的功能,也是這款產品名稱的由來。它是一款能夠讓任務通過分片進行水平擴展的任務處理系統。

ElasticJob 中任務分片項的概念,使得任務可以在分布式的環境下運行,每台任務伺服器只運行分配給該伺服器的分片。隨著伺服器的增加或宕機,ElasticJob 會近乎實時的感知伺服器數量的變更,從而重新為分布式的任務伺服器分配更加合理的任務分片項,使得任務可以隨著資源的增加而提升效率。

  • 資源分配

調度是指在適合的時間將適合的資源分配給任務,並使其生效。ElasticJob 具備資源分配的能力,它能夠像分布式的作業系統一樣調度任務。資源分配是藉由 Mesos 實現的,由 Mesos 負責分配任務聲明的所需資源(CPU 和內存),並將分配出去的資源進行隔離。ElasticJob 在獲取到資源之後才會執行任務。

考慮到 Mesos 系統部署相對複雜,因此 ElasticJob 將這部分拆分至 ElasticJob cloud 部分,供高級用戶使用。隨著 Kubernetes 的強勁發展,ElasticJob 未來也會完成 Cloud 部分與它的對接。

  • 作業治理

作業在分布式場景下的高可用、失效轉移、錯過作業重新執行等行為的治理和協調。

  • 可視化管控端

主要包括作業聲明周期管控、執行歷史記錄查詢、配置中心管理等。


3.0.0-alpha 功能先睹為快


構建 & 依賴

1. 升級至 Java 8

2. 升級最低支持的 ZooKeeper 版本 至 3.6.x


API 變更

1. 將 Maven 坐標的 groupId 變更為org.apache.shardingsphere.elasticjob

2. 將包名稱變更為org.apache.shardingsphere.elasticjob

3. 將 Spring 命名空間名稱變更為 http://shardingsphere.apache.org/schema/elasticjob

4. 全新的作業 API,可使用 SPI 自定製作業類型

5. 使用 SPI 引用配置策略,如任務分片、線程池使用和錯誤處理等策略

6. 將控制台代碼從作業核心模塊中分離


新功能

1. 調度器多元化,增加一次性任務調度器

2. 提供ElasticJob-Lite 項目的 官方 Spring Boot Starter

3. 支持使用多種資料庫類型存儲作業歷史軌跡數據

4. 允許用戶通過環境變量指定適合的 IP 地址

5. 全新的控制台介面


3.x版本設計解讀

通過Release Notes能夠看出,ElasticJob 3.x 並非 2.x 的修補版本,而是通過革新的設計理念踐行的一套新產品。

ElasticJob 3.x 最直觀的變化是將原有的個位數的模塊數量拆分為數十個職責清理的微模塊。

新版本的關鍵詞是微內核、可擴展和生態對接。

  • 微內核

ElasticJob 3.x 抽象了 API 和基礎設施模塊,並且將註冊中心、歷史執行軌跡、控制台、作業執行器、Lite和Cloud等模塊全數分離。

內核模塊高度可擴展,但不依賴於可擴展模塊本身的實現。它繼承了 ElasticJob 之前的能力,在繼續為開發者提供分布式服務的工具包的同時,向開發者開放可自由定製化擴展的腳手架。

  • 可擴展

ElasticJob 3.x在微內核的基礎上定義了豐富的可擴展接口,包括作業類型、配置策略、歷史執行軌跡存儲端以及將要做的註冊中心存儲端等可擴展接口。

開發者可以在不修改 ElasticJob 源碼的情況下織入定製化功能,真正做到對修改關閉,對擴展開放。

  • 生態對接

ElasticJob 3.x 提供了官方的Spring Boot Starter,並已經著手開發基於 Apache SkyWalking 的自動探針,使其能更加便捷的融入現有的技術體系。

另外,從Release Notes中可以解讀到的是,ElasticJob 3.x 並未對 Cloud進行大幅更新,其主要改動均集中在內核以及Lite模塊。

對於部署複雜且逐漸不再流行的 Mesos,ElasticJob 的 3.x 將漸漸弱化對它的依賴,並計劃在未來提供更加泛化資源隔離 API,使 Cloud 產品線可對接Mesos,Kubernetes 甚至無依賴的獨立部署使用。


3.0.0-beta 功能預告

在調整完項目和包結構之後,ElasticJob 3.0.0-beta版本將工作重點放在新功能開發和操作 API 標準化這兩個方面。


新功能預告

  • 作業依賴

支持基於有向無環圖(DAG)的作業依賴。依賴包含基於作業整體維度的依賴,以及基於作業分片項的依賴,打造更加靈活的作業治理解決方案。

  • HTTP 作業類型

支持HTTP作業類型,在Script 之外提供另外的跨語言作業類型。


操作 API 標準化

  • 統一提供基於 RESTful 操作API接口
  • 簡化基於 SDK 操作API接口


未來規劃

未來,ElasticJob 將大刀闊斧的向前邁進,主要的規劃如下:

  • 調度執行分離

將調度器和執行器完全分離。調度器可以與執行器一起部署,即為 ElasticJob lite 的無中心化輕量級版本;調度器可以與執行器分離部署,即為 ElasticJob cloud 的資源管控的一站式分布式調度系統。

  • 更加易用的雲管產品

將目前僅支持 Mesos 的 ElasticJob cloud 打造為支持 Mesos 和 Kubernetes 的作業雲管平台,並提供無 Mesos 和 Kubernetes 也能夠獨立使用的不包含資源管控的純作業管控平台。

  • 可插拔生態

與 Apache ShardingSphere 一脈相承,ElasticJob 也將提供更加可插拔和模塊化架構,為開發者提供基礎設施。方便開發者基於 ElasticJob 二次開發,添加各種定製化功能,包括但不限於作業類型(如:大數據作業、HTTP作業等)、註冊中心類型(如:Eureka等)、執行軌跡存儲介質(如其他資料庫類型)等。

ElasticJob 最終會將 Lite 和 Cloud 以更貼近的方式供開發工程師和運維工程師使用,共享其調度、執行和作業庫。整體規劃如下:


關於 ElasticJob 社區

ElasticJob 社區在之前的幾年處於停滯狀況,主要原因是作者精力有限,分身乏術。在接收到了作為 Apache ShardingSphere 彈性遷移的調度基礎設施的需求之後,本就一脈相承的 ElasticJob 社區決定重啟,並且作為 Apache ShardingSphere 的子項目繼續發光發熱。目前的 ElasticJob 已正式將項目源碼遷入 Apache 的 GitHub 倉庫,並且在重啟的幾個月來十分活躍,在GitHub 周和月度趨勢排名中榜上有名。

ElasticJob 是Apache ShardingSphere(https://github.com/apache/shardingsphere)的子項目,目標是成為獨立的 Apache 頂級項目,以及為 Apache ShardingSphere 的彈性遷移提供數據調度的基石。

作者簡介:

張亮,京東數科數位技術中心架構專家,Apache ShardingSphere PMC Chair。

熱愛開源,擅長以 Java 為主分布式架構,推崇優雅代碼。

目前主要精力投入在將分布式資料庫中間件 Apache ShardingSphere 打造為業界一流的金融級數據解決方案之上。

Apache ShardingSphere(https://github.com/apache/shardingsphere)是京東主導的首個 Apache 軟體基金會頂級項目,也是 Apache 軟體基金會首個分布式資料庫中間件。

曾出版書籍《未來架構——從服務化到雲原生》。

GitHub: https://github.com/terrymanu,隨時歡迎技術交流和指正。

關鍵字: