1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        王者歸來:分布式調(diào)度解決方案 ElasticJob 重啟!

        共 5685字,需瀏覽 12分鐘

         ·

        2020-07-11 10:16


        點(diǎn)擊上方藍(lán)色“程序猿DD”,選擇“設(shè)為星標(biāo)”

        回復(fù)“資源”獲取獨(dú)家整理的學(xué)習(xí)資料!

        e4c8fbfd43a3bd95ac6a4d74ebf10a8a.webp

        你會(huì)誤認(rèn)為 ElasticJob 只是作業(yè)管控平臺(tái)么?創(chuàng)始人為你解讀產(chǎn)品定位與新版本設(shè)計(jì)理念。

        ——寫于 ElasticJob 3.x 版本發(fā)布前夕

        • 背景

        • ElasticJob 是什么?

        • ElasticJob 調(diào)度模型

        • ElasticJob 功能列表

        • ElasticJob 典型應(yīng)用場(chǎng)景

        • ElasticJob 新版本設(shè)計(jì)理念

        • 未來規(guī)劃

        • 關(guān)于 ElasticJob 社區(qū)


        導(dǎo)讀:?調(diào)度(Scheduling)在計(jì)算機(jī)領(lǐng)域是個(gè)龐大概念,CPU 調(diào)度、內(nèi)存調(diào)度、進(jìn)程調(diào)度等都可稱之為調(diào)度。它是指在特定的時(shí)機(jī)分配合理的資源去處理預(yù)先確定的任務(wù),用于在適當(dāng)?shù)臅r(shí)機(jī)觸發(fā)一個(gè)包含業(yè)務(wù)邏輯的應(yīng)用。調(diào)度無論在單機(jī)還是分布式環(huán)境中都是很重要的課題。在單機(jī)環(huán)境,調(diào)度與底層操作系統(tǒng)脫離不了干系;而在分布式環(huán)境中,調(diào)度直接決定運(yùn)行集群的投入和產(chǎn)出。調(diào)度的兩個(gè)核心要素是資源治理和觸發(fā)時(shí)機(jī)。

        背景

        ElasticJob 誕生于 2015 年,當(dāng)時(shí)業(yè)界雖然有 QuartZ 等出類拔萃的定時(shí)任務(wù)框架,但缺乏分布式方面的探索。分布式調(diào)度云平臺(tái)產(chǎn)品的缺失,使得 ElasticJob 從出現(xiàn)伊始便備受關(guān)注。它有效的彌補(bǔ)了作業(yè)在分布式領(lǐng)域的短板,并且提供了一站式的自動(dòng)化運(yùn)維管控端。

        ElasticJob 在技術(shù)選型時(shí),選擇站在了巨人的肩膀上而不是重復(fù)制造輪子的理念,將定時(shí)任務(wù)事實(shí)標(biāo)準(zhǔn)的 QuartZ 與 分布式協(xié)調(diào)的利器 ZooKeeper 完美結(jié)合,快速而穩(wěn)定的搭建了全新概念的分布式調(diào)度框架。

        ElasticJob 是什么?

        ElasticJob 是一個(gè)分布式調(diào)度解決方案,由兩個(gè)相互獨(dú)立的子項(xiàng)目 ElasticJob Lite 和 ElasticJob Cloud 組成。ElasticJob Lite 定位為輕量級(jí)無中心化解決方案,使用 jar 的形式提供分布式任務(wù)的協(xié)調(diào)服務(wù);ElasticJob Cloud 采用自研 Mesos Framework 的解決方案,額外提供資源治理、應(yīng)用分發(fā)以及進(jìn)程隔離等功能。它通過彈性調(diào)度、資源管控、以及作業(yè)治理的功能,打造一個(gè)適用于互聯(lián)網(wǎng)場(chǎng)景的分布式調(diào)度解決方案,并通過開放的架構(gòu)設(shè)計(jì),提供多元化的作業(yè)生態(tài)。

        使用 ElasticJob 能夠讓開發(fā)工程師不再擔(dān)心任務(wù)的線性吞吐量提升等非功能需求,使開發(fā)工程師能夠更加專注于面向業(yè)務(wù)編碼設(shè)計(jì);同時(shí),它能夠解放運(yùn)維工程師,使他們不必再擔(dān)心任務(wù)的可用性和相關(guān)管理需求,只通過輕松的增加服務(wù)節(jié)點(diǎn)即可達(dá)到自動(dòng)化運(yùn)維的目的。

        ElasticJob 調(diào)度模型

        與大部分的作業(yè)平臺(tái)不同,ElasticJob 的調(diào)度模型劃分為支持線程級(jí)別調(diào)度的進(jìn)程內(nèi)調(diào)度 ElasticJob Lite,和進(jìn)程級(jí)別調(diào)度的 ElasticJob Cloud。

        進(jìn)程內(nèi)調(diào)度

        ElasticJob Lite 是面向進(jìn)程內(nèi)的線程級(jí)調(diào)度框架。通過 ElasticJob ,作業(yè)能夠透明化的與業(yè)務(wù)應(yīng)用系統(tǒng)相結(jié)合。它能夠方便的與 Spring 、Dubbo 等 Java 框架配合使用,在作業(yè)中可自由使用 Spring 注入的 Bean,如數(shù)據(jù)源連接池、Dubbo 遠(yuǎn)程服務(wù)等,更加方便的貼合業(yè)務(wù)開發(fā)。

        ElasticJob Lite 與業(yè)務(wù)應(yīng)用部署在一起,其生命周期與業(yè)務(wù)應(yīng)用保持一致,是典型的嵌入式輕量級(jí)架構(gòu)。ElasticJob Lite 非常適合于資源使用穩(wěn)定、部署架構(gòu)簡(jiǎn)單的普通 Java 應(yīng)用,可以理解為 Java 開發(fā)框架。

        ElasticJob Lite 本身是無中心化架構(gòu),無需獨(dú)立的中心化調(diào)度節(jié)點(diǎn),分布式下的每個(gè)任務(wù)節(jié)點(diǎn)均是以自調(diào)度的方式適時(shí)的調(diào)度作業(yè)。任務(wù)之間只需要一個(gè)注冊(cè)中心來對(duì)分布式場(chǎng)景下的任務(wù)狀態(tài)進(jìn)行協(xié)調(diào)即可,目前支持 ZooKeeper 和 ETCD 作為注冊(cè)中心。

        架構(gòu)圖如下:

        e82431daaee8ac70a5624e650a00f7d0.webp

        通過圖中可看出,ElasticJob Lite 的分布式作業(yè)節(jié)點(diǎn)通過選舉獲取主節(jié)點(diǎn),并通過主節(jié)點(diǎn)進(jìn)行分片。分片完畢后,主節(jié)點(diǎn)與從節(jié)點(diǎn)并無二致,均以自我調(diào)度的方式執(zhí)行任務(wù)。

        進(jìn)程級(jí)調(diào)度

        ElasticJob Cloud 擁有進(jìn)程內(nèi)調(diào)度和進(jìn)程級(jí)別調(diào)度兩種方式。由于 ElasticJob Cloud 能夠?qū)ψ鳂I(yè)服務(wù)器的資源進(jìn)行控制,因此其作業(yè)類型可劃分為常駐任務(wù)和瞬時(shí)任務(wù)。常駐任務(wù)類似于 ElasticJob Lite,是進(jìn)程內(nèi)調(diào)度;瞬時(shí)任務(wù)則完全不同,它充分的利用了資源分配的削峰填谷能力,是進(jìn)程級(jí)的調(diào)度,每次任務(wù)的會(huì)啟動(dòng)全新的進(jìn)程處理。

        ElasticJob Cloud 需要通過 Mesos 對(duì)資源進(jìn)行控制,并且通過部署在 Mesos Master 的調(diào)度器進(jìn)行任務(wù)和資源的分配。Cloud 采用中心化架構(gòu),將調(diào)度中心的高可用交由 Mesos 管理。

        它的架構(gòu)圖如下:

        c57cf6f4ba9e3a2e411a274f648718dd.webp

        通過圖中可看出,ElasticJob Cloud 除了擁有 Lite 的全部能力之外,還擁有資源分配和任務(wù)分發(fā)的能力。它將作業(yè)的開發(fā)、打包、分發(fā)、調(diào)度、治理、分片等一些列的生命周期完全托管,是真正的作業(yè)云調(diào)度系統(tǒng)。

        相比于 ElasticJob Lite 的簡(jiǎn)單易用,ElasticJob Cloud 對(duì) Mesos 的強(qiáng)依賴增加了系統(tǒng)部署的復(fù)雜度,因此更加適合大規(guī)模的作業(yè)系統(tǒng)。

        ElasticJob 功能列表

        ElasticJob 功能主要有彈性調(diào)度、資源分配、作業(yè)治理和可視化管控。

        彈性調(diào)度

        彈性調(diào)度是 ElasticJob 最重要的功能,也是這款產(chǎn)品名稱的由來。它是一款能夠讓任務(wù)通過分片進(jìn)行水平擴(kuò)展的任務(wù)處理系統(tǒng)。

        ElasticJob 中任務(wù)分片項(xiàng)的概念,使得任務(wù)可以在分布式的環(huán)境下運(yùn)行,每臺(tái)任務(wù)服務(wù)器只運(yùn)行分配給該服務(wù)器的分片。隨著服務(wù)器的增加或宕機(jī),ElasticJob 會(huì)近乎實(shí)時(shí)的感知服務(wù)器數(shù)量的變更,從而重新為分布式的任務(wù)服務(wù)器分配更加合理的任務(wù)分片項(xiàng),使得任務(wù)可以隨著資源的增加而提升效率。

        舉例說明,如果作業(yè)分為 4 片,用兩臺(tái)服務(wù)器執(zhí)行,則每個(gè)服務(wù)器分到 2 片,如下圖所示。

        9d0dfb0897625bd97055f75de9213d2f.webp

        當(dāng)新增加作業(yè)服務(wù)器時(shí),ElasticJob 會(huì)通過注冊(cè)中心的臨時(shí)節(jié)點(diǎn)的變化感知到新服務(wù)器的存在,并在下次任務(wù)調(diào)度的時(shí)候重新分片,新的服務(wù)器會(huì)承載一部分作業(yè)分片,分片如下圖所示。

        e80fdf561bd87557cfd9ecafb16bb9e9.webp

        當(dāng)作業(yè)服務(wù)器在運(yùn)行中宕機(jī)時(shí),注冊(cè)中心同樣會(huì)通過臨時(shí)節(jié)點(diǎn)感知,并將在下次運(yùn)行時(shí)將分片轉(zhuǎn)移至仍存活的服務(wù)器,以達(dá)到作業(yè)高可用的效果。本次由于服務(wù)器宕機(jī)而未執(zhí)行完的作業(yè),則可以通過失效轉(zhuǎn)移的方式繼續(xù)執(zhí)行。作業(yè)高可用如下圖所示。

        66a2b63a25baca11ea0a9fc734d07d33.webp

        資源分配

        在導(dǎo)讀中提到過,調(diào)度是指在適合的時(shí)間將適合的資源分配給任務(wù),并使其生效。ElasticJob 具備資源分配的能力,它能夠像分布式的操作系統(tǒng)一樣調(diào)度任務(wù)。資源分配是借由 Mesos 實(shí)現(xiàn)的,由 Mesos 負(fù)責(zé)分配任務(wù)聲明的所需資源(CPU 和內(nèi)存),并將分配出去的資源進(jìn)行隔離。ElasticJob 在獲取到資源之后才會(huì)執(zhí)行任務(wù)。

        考慮到 Mesos 系統(tǒng)部署相對(duì)復(fù)雜,因此 ElasticJob 將這部分拆分至 ElasticJob cloud 部分,供高級(jí)用戶使用。隨著 Kubernetes 的強(qiáng)勁發(fā)展,ElasticJob 未來也會(huì)完成 cloud 部分與它的對(duì)接。

        作業(yè)治理

        作業(yè)在分布式場(chǎng)景下的高可用、失效轉(zhuǎn)移、錯(cuò)過作業(yè)重新執(zhí)行等行為的治理和協(xié)調(diào)。

        可視化管控端

        主要包括作業(yè)的增刪改查管控端、執(zhí)行歷史記錄查詢、配置中心的管理等。

        ElasticJob 典型應(yīng)用場(chǎng)景

        ElasticJob 著重解決與復(fù)雜任務(wù)、資源導(dǎo)向任務(wù)和業(yè)務(wù)應(yīng)用任務(wù)這幾個(gè)方面的問題。

        復(fù)雜任務(wù)

        數(shù)據(jù)遷移。如果將百億的數(shù)據(jù)從一組數(shù)據(jù)庫(kù)集群遷移至另一組數(shù)據(jù)庫(kù)集群,單線程的作業(yè)可能需要幾天到幾周不等。通過 ElasticJob 的彈性分片能力,可以大幅減少海量數(shù)據(jù)遷移所需要的時(shí)間。

        資源導(dǎo)向任務(wù)

        占用大量計(jì)算資源的報(bào)表作業(yè)。如果每天凌晨需要花費(fèi)數(shù)小時(shí)計(jì)算 T+1 的業(yè)務(wù)報(bào)表,沒有資源的管控,則無論報(bào)表作業(yè)是否啟動(dòng),都要為其分配足夠的資源。ElasticJob 將作業(yè)分為常駐作業(yè)和瞬時(shí)作業(yè),對(duì)于報(bào)表類作業(yè),瞬時(shí)作業(yè)是非常適合的。它能否在作業(yè)啟動(dòng)時(shí)獲取資源,在作業(yè)結(jié)束后歸還資源,做到真正的削峰填谷,更加合理的利用資源。

        業(yè)務(wù)應(yīng)用

        訂單拉取作業(yè)。訂單系統(tǒng)大多采用消息中間件或作業(yè)的方式實(shí)現(xiàn)訂單拉取,用于將訂單生成系統(tǒng)和后端履約系統(tǒng)解耦,以便于前后端流量分離。采用作業(yè)實(shí)現(xiàn)的訂單系統(tǒng),可以通過 ElasticJob 實(shí)現(xiàn)訂單相關(guān)業(yè)務(wù)邏輯,可以方便的利用外圍系統(tǒng)所提供的依賴注入服務(wù),無縫的融入業(yè)務(wù)端研發(fā)。

        ElasticJob 新版本設(shè)計(jì)理念

        經(jīng)過了一個(gè)多月的開發(fā),ElasticJob 社區(qū)近期計(jì)劃發(fā)布 3.0.0-alpha,以作為它進(jìn)入 Apache 軟件基金會(huì)的第一個(gè)發(fā)布版本。它的主要功能包括:

        作業(yè)生態(tài)圈

        靈活定制化作業(yè)是 3.x 版本的最重要設(shè)計(jì)變革。新版本基于 Apache ShardingSphere 可插拔架構(gòu)的設(shè)計(jì)理念,打造了全新作業(yè) API。意在使開發(fā)者能夠更加便捷且相互隔離的方式拓展作業(yè)類型,打造 ElasticJob 作業(yè)的生態(tài)圈。

        ElasticJob 提供靈活的作業(yè) API,它將作業(yè)解耦為作業(yè)接口和執(zhí)行器接口。用戶可以定制化全新的作業(yè)類型,諸如腳本執(zhí)行、HTTP 服務(wù)執(zhí)行、大數(shù)據(jù)類作業(yè)、文件類作業(yè)等。目前 ElasticJob 內(nèi)置了腳本執(zhí)行作業(yè),并且完全開放了擴(kuò)展接口,開發(fā)者可以通過 SPI 的方式引入新的作業(yè)類型,并且可以便捷的回饋至社區(qū)。

        多元化調(diào)度器

        在保留原有的基于 cron 的時(shí)間觸發(fā)調(diào)度器的基礎(chǔ)上,增加了一次性的調(diào)度 API,為 ElasticJob 增加了時(shí)間維度之外的全新調(diào)度維度。

        微內(nèi)核 & 生態(tài)分離

        抽象作業(yè)內(nèi)核模塊,將作業(yè)執(zhí)行軌跡追蹤等輔助功能以及作業(yè)生態(tài)等可擴(kuò)展模塊從內(nèi)核模塊完全抽離。作業(yè)執(zhí)行軌跡追蹤模塊作為二級(jí)生態(tài),修改了之前只支持 MySQL 作為存儲(chǔ)介質(zhì)的限制,完全開放持久化的適配。

        未來規(guī)劃

        3.0.0 的版本作為一個(gè)快速給社區(qū)回饋的版本,并未進(jìn)行顛覆性的革新,而是嘗試將項(xiàng)目?jī)?nèi)核一點(diǎn)一滴的解耦。在未來的規(guī)劃中,ElasticJob 將大刀闊斧的向前邁進(jìn),主要的規(guī)劃如下。

        作業(yè)依賴

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

        調(diào)度執(zhí)行分離

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

        更加易用的云管產(chǎn)品

        將目前僅支持 Mesos 的 ElasticJob cloud 打造為支持 Mesos 和 Kubernetes 的作業(yè)云管平臺(tái),并提供無 Mesos 和 Kubernetes 也能夠獨(dú)立使用的不包含資源管控的純作業(yè)管控平臺(tái)。

        可插拔生態(tài)

        與 Apache ShardingSphere 一脈相承,ElasticJob 也將提供更加可插拔和模塊化架構(gòu),為開發(fā)者提供基礎(chǔ)設(shè)施。開發(fā)者可以方便的基于 ElasticJob 二次開發(fā),添加各種定制化功能,包括但不限于作業(yè)類型(如:大數(shù)據(jù)作業(yè)、HTTP 作業(yè)等)、注冊(cè)中心類型(如:Eureka 等)、執(zhí)行軌跡存儲(chǔ)介質(zhì)(如其他數(shù)據(jù)庫(kù)類型)等。ElasticJob 的定位如下圖所示。

        ac4a8fd6a9b9934b0f2142d01119b5cc.webp

        關(guān)于 ElasticJob 社區(qū)

        ElasticJob 社區(qū)在之前的幾年處于停滯狀況,主要原因是作者精力有限,分身乏術(shù)。在接收到了作為 Apache ShardingSphere 彈性遷移的調(diào)度基礎(chǔ)設(shè)施的需求之后,本就一脈相承的 ElasticJob 社區(qū)決定重啟,并且作為 Apache ShardingSphere 的子項(xiàng)目繼續(xù)發(fā)光發(fā)熱。目前的 ElasticJob 已正式將項(xiàng)目源碼遷入 Apache 的 GitHub 倉(cāng)庫(kù),并且在重啟的一個(gè)多月以來十分活躍,已完成了上百個(gè) Pull Request 的開發(fā),在 GitHub 周和月度趨勢(shì)排名中榜上有名。

        ElasticJob 是 Apache ShardingSphere 的子項(xiàng)目,目標(biāo)是成為獨(dú)立的 Apache 頂級(jí)項(xiàng)目,以及為 Apache ShardingSphere 的彈性遷移提供數(shù)據(jù)調(diào)度的基石。

        歡迎開源愛好者加入 ElasticJob 社區(qū)的建設(shè)。

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

        官方網(wǎng)站:http://shardingsphere.apache.org/elasticjob/

        作者簡(jiǎn)介:

        張亮,京東數(shù)科數(shù)據(jù)研發(fā)負(fù)責(zé)人,Apache ShardingSphere 創(chuàng)始人 & 項(xiàng)目 VP、ElasticJob 創(chuàng)始人。

        熱愛開源,主導(dǎo)開源項(xiàng)目 ShardingSphere (原名 Sharding-JDBC) 和 Elastic-Job。擅長(zhǎng)以 Java 為主分布式架構(gòu),推崇優(yōu)雅代碼,對(duì)如何寫出具有展現(xiàn)力的代碼有較多研究。

        目前主要精力投入在將 Apache ShardingSphere 打造為業(yè)界一流的金融級(jí)數(shù)據(jù)解決方案之上。Apache ShardingSphere 是 Apache 軟件基金會(huì)旗下的頂級(jí)項(xiàng)目,也是 Apache 軟件基金會(huì)首個(gè)分布式數(shù)據(jù)庫(kù)中間件。


        往期推薦

        Spring Boot 2.x基礎(chǔ)教程:事務(wù)管理入門

        Java 語言中十大“坑爹”功能!

        搜索引擎是如何工作的?

        說實(shí)話,Intellij IDEA 自帶的 Vim 插件真心不錯(cuò)!

        快速提升頁面性能的必備利器


        「程序猿 DD」星球活動(dòng)第一期正式開啟!點(diǎn)擊了解!

        立省 ¥100 ,到手僅 ¥99,即將 漲價(jià)至 ¥299。

        支持 3 天無理由退款,機(jī)不可失時(shí)不再來,趕緊加入吧 ~


        瀏覽 51
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            大尺度做爰呻吟舌吻男男 | 国产精品28页 | 免费自拍偷拍 | 日本插槽x8是正规还是仿 | 国产探花福利福利私拍av在线 | 少妇双乳好大有奶水视频 | 逼操网站 | 成人自拍视频网 | 九哥艹逼网 | 大香蕉午夜|