您好,登錄后才能下訂單哦!
這篇文章主要講解了“什么是elastic-job”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“什么是elastic-job”吧!
ElasticJob 誕生于 2015 年,當時業界雖然有 QuartZ 等出類拔萃的定時任務框架,但缺乏分布式方面的探索。
分布式調度云平臺產品的缺失,使得 ElasticJob 從出現伊始便備受關注。它有效的彌補了作業在分布式領域的短板,并且提供了一站式的自動化運維管控端。
ElasticJob 在技術選型時,選擇站在了巨人的肩膀上而不是重復制造輪子的理念,將定時任務事實標準的 QuartZ 與分布式協調的利器 ZooKeeper 完美結合,快速而穩定的搭建了全新概念的分布式調度框架。
ElasticJob 是什么?
ElasticJob 是一個分布式調度解決方案,由兩個相互獨立的子項目 ElasticJob Lite 和 ElasticJob Cloud 組成。
ElasticJob Lite 定位為輕量級無中心化解決方案,使用 jar 的形式提供分布式任務的協調服務。
ElasticJob Cloud 采用自研 Mesos Framework 的解決方案,額外提供資源治理、應用分發以及進程隔離等功能。
它通過彈性調度、資源管控、以及作業治理的功能,打造一個適用于互聯網場景的分布式調度解決方案,并通過開放的架構設計,提供多元化的作業生態。
使用 ElasticJob 能夠讓開發工程師不再擔心任務的線性吞吐量提升等非功能需求,使開發工程師能夠更加專注于面向業務編碼設計。
同時,它能夠解放運維工程師,使他們不必再擔心任務的可用性和相關管理需求,只通過輕松的增加服務節點即可達到自動化運維的目的。
ElasticJob 調度模型
與大部分的作業平臺不同,ElasticJob 的調度模型劃分為支持線程級別調度的進程內調度 ElasticJob Lite,和進程級別調度的 ElasticJob Cloud。
進程內調度
ElasticJob Lite 是面向進程內的線程級調度框架。通過 ElasticJob ,作業能夠透明化的與業務應用系統相結合。
它能夠方便的與 Spring 、Dubbo 等 Java 框架配合使用,在作業中可自由使用 Spring 注入的 Bean,如數據源連接池、Dubbo 遠程服務等,更加方便的貼合業務開發。
ElasticJob Lite 與業務應用部署在一起,其生命周期與業務應用保持一致,是典型的嵌入式輕量級架構。
ElasticJob Lite 非常適合于資源使用穩定、部署架構簡單的普通 Java 應用,可以理解為 Java 開發框架。
ElasticJob Lite 本身是無中心化架構,無需獨立的中心化調度節點,分布式下的每個任務節點均是以自調度的方式適時的調度作業。
任務之間只需要一個注冊中心來對分布式場景下的任務狀態進行協調即可,目前支持 ZooKeeper 和 ETCD 作為注冊中心。
架構圖如下:
ElasticJob 的產品定位與新版本設計理念
通過圖中可看出,ElasticJob Lite 的分布式作業節點通過選舉獲取主節點,并通過主節點進行分片。
分片完畢后,主節點與從節點并無二致,均以自我調度的方式執行任務。
進程級調度
ElasticJob Cloud 擁有進程內調度和進程級別調度兩種方式。由于 ElasticJob Cloud 能夠對作業服務器的資源進行控制,因此其作業類型可劃分為常駐任務和瞬時任務。
常駐任務類似于 ElasticJob Lite,是進程內調度;瞬時任務則完全不同,它充分的利用了資源分配的削峰填谷能力,是進程級的調度,每次任務的會啟動全新的進程處理。
ElasticJob Cloud 需要通過 Mesos 對資源進行控制,并且通過部署在 Mesos Master 的調度器進行任務和資源的分配。Cloud 采用中心化架構,將調度中心的高可用交由 Mesos 管理。
它的架構圖如下:
ElasticJob 的產品定位與新版本設計理念
通過圖中可看出,ElasticJob Cloud 除了擁有 Lite 的全部能力之外,還擁有資源分配和任務分發的能力。
它將作業的開發、打包、分發、調度、治理、分片等一些列的生命周期完全托管,是真正的作業云調度系統。
相比于 ElasticJob Lite 的簡單易用,ElasticJob Cloud 對 Mesos 的強依賴增加了系統部署的復雜度,因此更加適合大規模的作業系統。
ElasticJob 功能列表
ElasticJob 功能主要有彈性調度、資源分配、作業治理和可視化管控。
彈性調度
彈性調度是 ElasticJob 最重要的功能,也是這款產品名稱的由來。它是一款能夠讓任務通過分片進行水平擴展的任務處理系統。
ElasticJob 中任務分片項的概念,使得任務可以在分布式的環境下運行,每臺任務服務器只運行分配給該服務器的分片。
隨著服務器的增加或宕機,ElasticJob 會近乎實時的感知服務器數量的變更,從而重新為分布式的任務服務器分配更加合理的任務分片項,使得任務可以隨著資源的增加而提升效率。
舉例說明,如果作業分為 4 片,用兩臺服務器執行,則每個服務器分到 2 片,如下圖所示:
ElasticJob 的產品定位與新版本設計理念
當新增加作業服務器時,ElasticJob 會通過注冊中心的臨時節點的變化感知到新服務器的存在,并在下次任務調度的時候重新分片,新的服務器會承載一部分作業分片。
分片如下圖所示:
ElasticJob 的產品定位與新版本設計理念
當作業服務器在運行中宕機時,注冊中心同樣會通過臨時節點感知,并將在下次運行時將分片轉移至仍存活的服務器,以達到作業高可用的效果。
本次由于服務器宕機而未執行完的作業,則可以通過失效轉移的方式繼續執行。
作業高可用如下圖所示:
ElasticJob 的產品定位與新版本設計理念
資源分配
在導讀中提到過,調度是指在適合的時間將適合的資源分配給任務,并使其生效。
ElasticJob 具備資源分配的能力,它能夠像分布式的操作系統一樣調度任務。
資源分配是借由 Mesos 實現的,由 Mesos 負責分配任務聲明的所需資源(CPU 和內存),并將分配出去的資源進行隔離。ElasticJob 在獲取到資源之后才會執行任務。
考慮到 Mesos 系統部署相對復雜,因此 ElasticJob 將這部分拆分至 ElasticJob Cloud 部分,供高級用戶使用。
隨著 Kubernetes 的強勁發展,ElasticJob 未來也會完成 Cloud 部分與它的對接。
作業治理
作業在分布式場景下的高可用、失效轉移、錯過作業重新執行等行為的治理和協調。
可視化管控端
主要包括作業的增刪改查管控端、執行歷史記錄查詢、配置中心的管理等。
ElasticJob 典型應用場景
ElasticJob 著重解決與復雜任務、資源導向任務和業務應用任務這幾個方面的問題。
復雜任務
數據遷移:如果將百億的數據從一組數據庫集群遷移至另一組數據庫集群,單線程的作業可能需要幾天到幾周不等。
通過 ElasticJob 的彈性分片能力,可以大幅減少海量數據遷移所需要的時間。
資源導向任務
占用大量計算資源的報表作業。如果每天凌晨需要花費數小時計算 T+1 的業務報表,沒有資源的管控,則無論報表作業是否啟動,都要為其分配足夠的資源。
ElasticJob 將作業分為常駐作業和瞬時作業,對于報表類作業,瞬時作業是非常適合的。
它能否在作業啟動時獲取資源,在作業結束后歸還資源,做到真正的削峰填谷,更加合理的利用資源。
業務應用
訂單拉取作業:訂單系統大多采用消息中間件或作業的方式實現訂單拉取,用于將訂單生成系統和后端履約系統解耦,以便于前后端流量分離。
采用作業實現的訂單系統,可以通過 ElasticJob 實現訂單相關業務邏輯,可以方便的利用外圍系統所提供的依賴注入服務,無縫的融入業務端研發。
ElasticJob 新版本設計理念
經過了一個多月的開發,ElasticJob 社區近期計劃發布 3.0.0-alpha,以作為它進入 Apache 軟件基金會的第一個發布版本。
它的主要功能包括:
作業生態圈
靈活定制化作業是 3.x 版本的最重要設計變革。新版本基于 Apache ShardingSphere 可插拔架構的設計理念,打造了全新作業 API。
意在使開發者能夠更加便捷且相互隔離的方式拓展作業類型,打造 ElasticJob 作業的生態圈。
ElasticJob 提供靈活的作業 API,它將作業解耦為作業接口和執行器接口。用戶可以定制化全新的作業類型,諸如腳本執行、HTTP 服務執行、大數據類作業、文件類作業等。
目前 ElasticJob 內置了腳本執行作業,并且完全開放了擴展接口,開發者可以通過 SPI 的方式引入新的作業類型,并且可以便捷的回饋至社區。
多元化調度器
在保留原有的基于 Cron 的時間觸發調度器的基礎上,增加了一次性的調度 API,為 ElasticJob 增加了時間維度之外的全新調度維度。
微內核&生態分離
抽象作業內核模塊,將作業執行軌跡追蹤等輔助功能以及作業生態等可擴展模塊從內核模塊完全抽離。
作業執行軌跡追蹤模塊作為二級生態,修改了之前只支持 MySQL 作為存儲介質的限制,完全開放持久化的適配。
未來規劃
3.0.0 的版本作為一個快速給社區回饋的版本,并未進行顛覆性的革新,而是嘗試將項目內核一點一滴的解耦。
在未來的規劃中,ElasticJob 將大刀闊斧的向前邁進,主要的規劃如下:
作業依賴
支持基于有向無環圖(DAG)的作業依賴。依賴包含基于作業整體維度的依賴,以及基于作業分片項的依賴,打造更加靈活的作業治理解決方案。
調度執行分離
將調度器和執行器完全分離。調度器可以與執行器一起部署,即為 ElasticJob Lite 的無中心化輕量級版本;調度器可以與執行器分離部署,即為 ElasticJob Cloud 的資源管控的一站式分布式調度系統。
更加易用的云管產品
將目前僅支持 Mesos 的 ElasticJob cloud 打造為支持 Mesos 和 Kubernetes 的作業云管平臺,并提供無 Mesos 和 Kubernetes 也能夠獨立使用的不包含資源管控的純作業管控平臺。
可插拔生態
與 Apache ShardingSphere 一脈相承,ElasticJob 也將提供更加可插拔和模塊化架構,為開發者提供基礎設施。
開發者可以方便的基于 ElasticJob 二次開發,添加各種定制化功能,包括但不限于作業類型(如:大數據作業、HTTP 作業等)、注冊中心類型(如:Eureka 等)、執行軌跡存儲介質(如其他數據庫類型)等。
ElasticJob 的定位如下圖所示:
ElasticJob 的產品定位與新版本設計理念
關于 ElasticJob 社區
ElasticJob 社區的目標是成為和 Apache ShardingSphere 一樣的 Apache 軟件基金會的頂級項目,達成更廣泛的應用。
項目重啟的這段時間,ElasticJob 持續在 GitHub 的周和月度排行榜上有名:
最近一個月,ElasticJob 社區合并了 152 個 Pull Requests,關閉了 105 個 Issues;25個提交者總共 158 次提交,完成了4w+ 行代碼的改動。
感謝各位的閱讀,以上就是“什么是elastic-job”的內容了,經過本文的學習后,相信大家對什么是elastic-job這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。