Elastic-Job是一個開源的分布式調度中間件,由兩個相互獨立的子項目Elastic-Job-Lite和Elastic-Job-Cloud組成。
Elastic-Job-Lite為輕量級無中心化解決方案,使用jar包提供分布式任務的調度和治理。 Elastic-Job-Cloud是一個Mesos Framework,依托于Mesos額外提供資源治理、應用分發(fā)以及進程隔離等服務。
項目已開源接近2年,目前為止已更新發(fā)布16次。Elastic-Job已在分布式作業(yè)領域占有一席之地,明確采納的公司已超過50家,未收錄的采納公司不計其數(shù),更有多個開源產(chǎn)品衍生自Elastic-Job。
項目的開源地址:
https://github.com/dangdangdotcom/elastic-job
Elastic-Job-Lite和Elastic-Job-Cloud的定位是什么?Elastic-Job-Lite定位為純粹的作業(yè)中間件,僅關注分布式調度、協(xié)調以及分片等核心功能,將作業(yè)部署、資源分配等功能交于Mesos或Kubernetes處理;而Elastic-Job-Cloud提供一體化私有云服務,將分布式調度、作業(yè)部署、資源分配、監(jiān)控、日志處理等提供完善的解決方案。
從功能上看Elastic-Job-Cloud更加完善,但依托于Mesos,使用復雜度較高,不易整合進公司現(xiàn)有系統(tǒng),因而更加輕量級的Elastic-Job-Lite在實際使用中更受青睞。
之前版本的Elastic-Job-Lite有什么缺失?主要缺失就是對Cloud Native的支持。原來的Elastic-Job-Lite是面向靜態(tài)場景的,簡單說就是每臺作業(yè)服務器只能部署一個作業(yè)名稱相同的作業(yè)實例,而當這個作業(yè)實例下線時,該作業(yè)服務器則顯示為下線狀態(tài)。這對于使用物理服務器的場景來說比較適合,而對于使用Docker的場景,則不太友好,原因是:
每次作業(yè)上線服務器IP可能產(chǎn)生變化,舊的服務器IP不會再使用,從而產(chǎn)生垃圾數(shù)據(jù)。Docker的治理系統(tǒng)可以在一臺物理服務器上啟動多實例,而僅支持單服務器單實例的Elastic-Job使用起來諸多不便,需要Docker的治理系統(tǒng)額外配置。Elastic-Job 2.1.0版本是如何做到Cloud Native的?新版本支持單服務器跑任意多的相同作業(yè)實例,原作業(yè)實例標識由IP地址替換為作業(yè)啟動瞬時產(chǎn)生的UUID。在新的Cloud Native架構下,作業(yè)物理服務器概念大幅弱化。為了向前兼容,作業(yè)物理服務器僅包含控制服務器是否可以禁用這一功能。為了更加純粹的實現(xiàn)作業(yè)核心,作業(yè)物理服務器統(tǒng)計和操作功能未來可能刪除,可下放至容器治理部署系統(tǒng)。
使用新增加的運行實例概念全面替換原服務器概念,Elastic-Job-Lite與容器治理系統(tǒng)的對接由原來的服務器維度轉變?yōu)檫\行實例維度,每個運行實例都是動態(tài)的,會隨著作業(yè)下線而消失。
習慣根據(jù)服務器靜態(tài)分配作業(yè)的使用者也不用太過擔心新版本帶來的變化,服務器信息以另外一個維度可選的存在于作業(yè)管理信息中,使用者仍然可以繼續(xù)使用服務器靜態(tài)部署的方式。
通過這次修改,Elastic-Job-Lite已經(jīng)可以非常容易的對接Mesos + Marathon以及Kubernetes,相信使用者可以非常輕松的搭建一個深度定制版的作業(yè)私有云。
Elastic-Job 2.1.0版本還有哪些關鍵更新?Elastic-Job 2.1.0版本是僅針對Elastic-Job-Lite進行全面提升。它主要包含以下4方面的提升:
單服務器可運行任意多的相同作業(yè)實例。Cloud Native,這里不再細說。自修復能力使穩(wěn)定性進一步提升。之前的Elastic-Job經(jīng)過一年多的洗禮,穩(wěn)定性已然不錯,但是分布式場景由于環(huán)境復雜,很難完全通過正向的方式保證每個節(jié)點間的狀態(tài)完全同步。而Elastic-Job原來的版本在網(wǎng)絡不穩(wěn)定的情況下,可能發(fā)生主節(jié)點選舉卡死,或某個分片不運行的情況,可以通過重啟應用修復。新版本的Elastic-Job-Lite使用異步線程,定期(可配置時間間隔)檢測集群中不正確的狀態(tài),以反向檢查的方式查找并自動修復分布式的不一致,為分布式穩(wěn)定性的完善增加了最后一塊拼圖。作業(yè)操作梳理。新版本將操作分為作業(yè)、實例、分片以及服務器4個維度,去除了容易混淆的暫停操作,對禁用功能進一步的增強,可以從各個維度控制整體作業(yè)或獨立分片。控制臺界面提升。完全重寫了控制臺界面并且增加了事件追蹤界面展示。新界面提供更加清新的用戶體驗,甚至包括主題皮膚切換,歡迎大家親自體會。Elastic-Job 2.1.0版本與舊版本兼容么?新里程碑版本做了如此大的修改和提升,那么從舊版本升級至新版本有哪些地方需要修改?相信很多老用戶有這樣的疑問。答案是:不需要做任何改動。
Elastic-Job 2.1.0雖然對數(shù)據(jù)的存儲結構進行了調整,但完全兼容原有數(shù)據(jù)結構,并且API和配置并未改變,使用者可以平滑升級。
Elastic-Job 下一步要做什么?當前的Elastic-Job已支持事件驅動,但并不完善。因此Elastic-Job下個功能將針對事件驅動進行提升,將其分布式“定時任務”中間件的定位徹底改變?yōu)榉植际?ldquo;任務”中間件。
另外還有很多功能需要繼續(xù)完善,如作業(yè)依賴的支持等。
對于新手來說使用Elastic-Job 很難么?Elastic-Job-Cloud對于新手來說使用起來并不太容易,需要對Mesos技術棧有一定了解。
Elastic-Job-Lite則非常簡單,只需在pom.xml中引入Elastic-Job的maven坐標,并且參照在github上的example編寫幾行代碼即可,唯一的外部依賴是Zookeeper。
最后,請允許我再重復一次,項目的開源地址:https://github.com/dangdangdotcom/elastic-job
歡迎使用、吐槽和提出建議。
其他相關資料