國產最強分佈式調度,它回來了


導讀: 調度(Scheduling)在計算機領域是個龐大概念,CPU 調度、內存調度、進程調度等均可稱之爲調度。它是指在特定的時機分配合理的資源去處理預先肯定的任務,用於在適當的時機觸發一個包含業務邏輯的應用。調度不管在單機仍是分佈式環境中都是很重要的課題。在單機環境,調度與底層操做系統脫離不了干係;而在分佈式環境中,調度直接決定運行集羣的投入和產出。調度的兩個核心要素是資源治理和觸發時機。git

背景

ElasticJob 誕生於 2015 年,當時業界雖然有 QuartZ 等出類拔萃的定時任務框架,但缺少分佈式方面的探索。分佈式調度雲平臺產品的缺失,使得 ElasticJob 從出現伊始便備受關注。它有效的彌補了做業在分佈式領域的短板,而且提供了一站式的自動化運維管控端。github

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

ElasticJob 是什麼?

ElasticJob 是一個分佈式調度解決方案,由兩個相互獨立的子項目 ElasticJob Lite 和 ElasticJob Cloud 組成。ElasticJob Lite 定位爲輕量級無中心化解決方案,使用 jar 的形式提供分佈式任務的協調服務;ElasticJob Cloud 採用自研 Mesos Framework 的解決方案,額外提供資源治理、應用分發以及進程隔離等功能。它經過彈性調度、資源管控、以及做業治理的功能,打造一個適用於互聯網場景的分佈式調度解決方案,並經過開放的架構設計,提供多元化的做業生態。數據庫

使用 ElasticJob 可以讓開發工程師再也不擔憂任務的線性吞吐量提高等非功能需求,使開發工程師可以更加專一於面向業務編碼設計;同時,它可以解放運維工程師,使他們沒必要再擔憂任務的可用性和相關管理需求,只經過輕鬆的增長服務節點便可達到自動化運維的目的。apache

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 做爲註冊中心。架構

架構圖以下:app

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+ 行代碼的改動。

基石已經搭建完成,歡迎開源愛好者加入 ElasticJob 社區的建設:

GitHub 地址:https://github.com/apache/shardingsphere-elasticjob-lite

官方網站:http://shardingsphere.apache.org/elasticjob/

來源:blog.csdn.net/KimmKing/article/details/107226571


本文分享自微信公衆號 - 架構師智庫(beijing-tmt)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索